import { useEffect, useState } from "react"; import { Mail, ArrowRight, X } from "lucide-react"; import { api } from "@/lib/api"; import { cn } from "@/lib/utils"; import type { DemoCapturedEmail, FiredEvent } from "@/lib/demo"; import { Button } from "@/components/ui/Button"; /** * Slide-over droite affichant l'email qui vient d'être déclenché. * Tant que l'utilisateur n'a pas cliqué "Continuer la démo", l'horloge * reste en pause — c'est l'effet "le temps s'est arrêté pour montrer". */ const FR_DATETIME = new Intl.DateTimeFormat("fr-FR", { weekday: "long", day: "numeric", month: "long", hour: "2-digit", minute: "2-digit", }); export function DemoEmailSlide({ event, remaining, virtualNow, onContinue, }: { event: FiredEvent; remaining: number; virtualNow: Date; onContinue: () => void; }) { const [email, setEmail] = useState(null); useEffect(() => { if (!event.capturedEmailId) { setEmail(null); return; } let cancelled = false; void api .get("/api/v1/demo/inbox") .then((list) => { if (cancelled) return; const found = list.find((e) => e.id === event.capturedEmailId); setEmail(found ?? null); }) .catch(() => setEmail(null)); return () => { cancelled = true; }; }, [event.capturedEmailId]); // Petit slide-in subtil — pas une animation tape-à-l'œil, on tient la DA. return ( <> {/* Backdrop discret — on ne ferme pas au clic dehors (volontaire : l'utilisateur DOIT acquitter pour reprendre la démo). */}