From cf68434ff5a9369302699054cd74fe7a0760b45a Mon Sep 17 00:00:00 2001 From: UltraLionFr Date: Wed, 30 Jul 2025 03:27:54 +0200 Subject: [PATCH] update ads --- components/AdsGalleryClient.tsx | 100 ++++++++++++++++++++++++++------ 1 file changed, 83 insertions(+), 17 deletions(-) diff --git a/components/AdsGalleryClient.tsx b/components/AdsGalleryClient.tsx index be0d771..73c3dc3 100644 --- a/components/AdsGalleryClient.tsx +++ b/components/AdsGalleryClient.tsx @@ -1,8 +1,10 @@ "use client"; -import { motion } from "framer-motion"; +import { AnimatePresence, motion } from "framer-motion"; import Image from "next/image"; +import { useCallback, useEffect, useState } from "react"; +// Mapping des textes associés à chaque visuel const ADS_COPY: Record = { "riseofkinkdom.jpeg": { title: "Atteignez 50 Millions d’Impuissance !", @@ -15,9 +17,35 @@ const ADS_COPY: Record = { }; export default function AdsGalleryClient({ files }: { files: string[] }) { + // \u2714️ État qui détermine l'image agrandie actuellement affichée + const [selected, setSelected] = useState(null); + + /** + * Gestion du clavier : ␛ pour fermer la light-box + * On utilise le « KeyboardEvent » natif du DOM, plus compatible + */ + const handleKey = useCallback((e: KeyboardEvent) => { + if (e.key === "Escape") setSelected(null); + }, []); + + useEffect(() => { + if (!selected) return; // rien à faire si aucune image n'est ouverte + + // ➜ attache l'écouteur + window.addEventListener("keydown", handleKey); + document.body.style.overflow = "hidden"; // bloque le scroll arrière-plan + + // ➜ cleanup à la fermeture / unmount + return () => { + window.removeEventListener("keydown", handleKey); + document.body.style.overflow = ""; + }; + }, [selected, handleKey]); + return (
+ {/* Titre */} + {/* Message si aucun fichier */} {files.length === 0 ? ( - Aucune bannière trouvée dans{" "} - /public/ads. + Aucune bannière trouvée dans /public/ads. ) : ( @@ -56,23 +80,23 @@ export default function AdsGalleryClient({ files }: { files: string[] }) { return ( setSelected(file)} > + {/* Vignette */}
{file}
+ {/* Texte associé */} {copy && (

@@ -86,11 +110,11 @@ export default function AdsGalleryClient({ files }: { files: string[] }) { ) )}

-

- {copy.subtitle} -

+

{copy.subtitle}

)} + + {/* Nom de fichier */}

{file}

@@ -100,6 +124,48 @@ export default function AdsGalleryClient({ files }: { files: string[] }) {
)}
+ + {/* ---- Light-box plein écran ---- */} + + {selected && ( + { + // Ferme si on clique en dehors de l'image + if (e.target === e.currentTarget) setSelected(null); + }} + > + + {selected} + {/* Bouton de fermeture */} + + + + )} +
); }