diff --git a/app/components/ModalGlossaire.tsx b/app/components/ModalGlossaire.tsx new file mode 100644 index 0000000..bec9f9d --- /dev/null +++ b/app/components/ModalGlossaire.tsx @@ -0,0 +1,62 @@ +import { useState, useEffect } from "react"; +import CarouselCompetences from "./CarouselCompetences"; + +interface ModalGlossaireProps { + glossaire: any[]; // Liste complète des mots-clés +} + +export default function ModalGlossaire({ glossaire }: ModalGlossaireProps) { + const [selectedMot, setSelectedMot] = useState(null); + + useEffect(() => { + // 🔥 Détecter si un mot-clé est dans l'URL (#glossaire-mot) + function checkHash() { + const hash = window.location.hash.replace("#glossaire-", ""); + const mot = glossaire.find((g) => g.mot_clef.toLowerCase() === hash.toLowerCase()); + setSelectedMot(mot || null); + } + + window.addEventListener("hashchange", checkHash); + checkHash(); // Vérifier au chargement + + return () => { + window.removeEventListener("hashchange", checkHash); + }; + }, [glossaire]); + + if (!selectedMot) return null; + + return ( +
+
+ {/* Bouton de fermeture */} + + + {/* Titre */} +

{selectedMot.mot_clef}

+ + {/* Description */} +

{selectedMot.description}

+ + {/* Carrousel d'images si disponible */} + {selectedMot.images && selectedMot.images.length > 0 && ( + ({ + url: `http://localhost:1337${img?.formats?.large?.url || img?.url}`, + alt: img.name || "Illustration", + }))} + className="w-full h-64" + /> + )} +
+
+ ); +} diff --git a/app/utils/fetchDataCompetences.ts b/app/utils/fetchDataCompetences.ts index d29446d..ae93a67 100644 --- a/app/utils/fetchDataCompetences.ts +++ b/app/utils/fetchDataCompetences.ts @@ -1,17 +1,15 @@ import qs from "qs"; - +// ✅ Fonction pour récupérer une compétence spécifique export async function fetchDataCompetences(collection: string, slug: string) { const query = qs.stringify({ filters: { - slug: { - $eq: slug, - }, + slug: { $eq: slug }, }, - populate: "picture", + populate: "picture", // On garde les images des compétences }); - console.log(`🛠️ Requête API : http://localhost:1337/api/${collection}?${query}`); + console.log(`🛠️ Requête API Compétence : http://localhost:1337/api/${collection}?${query}`); try { const response = await fetch(`http://localhost:1337/api/${collection}?${query}`, { @@ -23,11 +21,34 @@ export async function fetchDataCompetences(collection: string, slug: string) { } const data = await response.json(); - console.log("✅ Données reçues :", data); - + console.log("✅ Données reçues (Compétence) :", data); + return data.data[0] || null; } catch (error) { console.error("❌ Erreur lors de la récupération des compétences :", error); return null; } } + +// ✅ Fonction pour récupérer tous les mots-clés du glossaire +export async function fetchDataGlossaire() { + try { + console.log("🛠️ Requête API Glossaire : http://localhost:1337/api/glossaires"); + + const response = await fetch("http://localhost:1337/api/glossaires", { + cache: "no-store", + }); + + if (!response.ok) { + throw new Error(`Failed to fetch glossaire data: ${response.status}`); + } + + const data = await response.json(); + console.log("✅ Données reçues (Glossaire) :", data); + + return data.data || []; + } catch (error) { + console.error("❌ Erreur lors de la récupération du glossaire :", error); + return []; + } +}