"use client"; import { useEffect, useState } from "react"; import { fetchData } from "../utils/fetchData"; // Importation de la fonction fetchData import { getApiUrl } from "../utils/getApiUrl"; // Importation de l'URL dynamique import Carousel from "./Carousel"; // Importation du composant Carrousel import ReactMarkdown from "react-markdown"; // Importation pour gérer le Markdown // Définition du type pour une image interface ImageData { url: string; formats?: { large?: { url: string; }; }; name?: string; } // Définition du type pour les données récupérées interface ContentData { name: string; Resum: string; // Texte en Markdown picture?: ImageData[]; link?: string; linkText?: string; } // Définition des propriétés du composant ContentSection interface ContentSectionProps { collection: string; // Nom de la collection (projects, events, blog, etc.) slug: string; // Identifiant unique pour récupérer les données spécifiques titleClass?: string; // Permet de modifier le style du titre contentClass?: string; // Permet de modifier le style du contenu } // Composant principal ContentSection export default function ContentSection({ collection, slug, titleClass, contentClass }: ContentSectionProps) { const [data, setData] = useState(null); const apiUrl = getApiUrl(); // Détection automatique de l'URL de l'API useEffect(() => { async function fetchContent() { console.log("🔍 API utilisée pour ContentSection :", apiUrl); const result = await fetchData(collection, slug); setData(result); } fetchContent(); }, [collection, slug, apiUrl]); // Affichage d'un message si les données ne sont pas disponibles if (!data) { return
Contenu introuvable.
; } // Déstructuration des données récupérées const { name, Resum: richText, picture, link, linkText } = data; // Transformation des images de Strapi en format attendu par le carrousel const images = picture?.map((img: ImageData) => ({ url: `${apiUrl}${img.formats?.large?.url || img.url}`, // 🔥 URL dynamique alt: img.name || "Image", // Texte alternatif pour l'image })) || []; return (
{/* Titre de la section */}

{name}

{/* Carrousel réutilisable pour afficher les images */} {/* Contenu en Markdown */}
{richText}
{/* Lien externe */} {link && (
{linkText || "Voir plus/lien externe"}
)}
); }