"use client"; import React, { useEffect, useState } from "react"; import ReactMarkdown from "react-markdown"; import "./assets/main.css"; import { getApiUrl } from "./utils/getApiUrl"; async function getHomepageData() { const apiUrl = getApiUrl(); // Configuration avec timeout et retry const fetchWithTimeout = async (url: string, options: RequestInit = {}) => { const controller = new AbortController(); const timeoutId = setTimeout(() => controller.abort(), 10000); // 10 secondes timeout try { const response = await fetch(url, { ...options, signal: controller.signal, headers: { 'Content-Type': 'application/json', 'Accept': 'application/json', ...options.headers, }, }); clearTimeout(timeoutId); return response; } catch (error) { clearTimeout(timeoutId); throw error; } }; // Tentative avec retry for (let attempt = 1; attempt <= 3; attempt++) { try { console.log(`🔄 [getHomepageData] Tentative ${attempt}/3 - URL: ${apiUrl}/api/homepages?populate=*`); const response = await fetchWithTimeout(`${apiUrl}/api/homepages?populate=*`); if (!response.ok) { throw new Error(`HTTP ${response.status}: ${response.statusText}`); } const data = await response.json(); console.log("✅ [getHomepageData] Données récupérées avec succès"); return data.data?.[0] ?? null; } catch (error) { console.error(`❌ [getHomepageData] Erreur tentative ${attempt}:`, error); if (attempt === 3) { // Dernière tentative échouée console.error("🚨 [getHomepageData] Toutes les tentatives ont échoué"); return null; } // Attendre avant la prochaine tentative await new Promise(resolve => setTimeout(resolve, 1000 * attempt)); } } return null; } export default function HomePage() { const [homepage, setHomepage] = useState(null); const apiUrl = getApiUrl(); useEffect(() => { getHomepageData().then((data) => setHomepage(data)); }, []); if (!homepage) return

Chargement de la page...

; const title = homepage.title ?? "Titre par défaut"; const cv = homepage.cv ?? ""; const imageUrl = homepage.photo?.url ? `${apiUrl}${homepage.photo.url}` : null; return (

{title}

{imageUrl ? (
Photo de profil
) : (
Image indisponible
)}
{cv}
); }