diff --git a/client/src/pages/AdminSequenceInscrits.tsx b/client/src/pages/AdminSequenceInscrits.tsx index 411db6e..e5de46b 100644 --- a/client/src/pages/AdminSequenceInscrits.tsx +++ b/client/src/pages/AdminSequenceInscrits.tsx @@ -4,13 +4,20 @@ import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/com import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"; import { trpc } from "@/lib/trpc"; -import { ArrowLeft, Download, Mail, Search } from "lucide-react"; +import { ArrowLeft, Download, Mail, Search, Eye } from "lucide-react"; import { useLocation, useRoute } from "wouter"; import { useState, useMemo } from "react"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { Skeleton } from "@/components/ui/skeleton"; import { toast } from "sonner"; +import { + Dialog, + DialogContent, + DialogDescription, + DialogHeader, + DialogTitle, +} from "@/components/ui/dialog"; export default function AdminSequenceInscrits() { const [, setLocation] = useLocation(); @@ -41,11 +48,17 @@ export default function AdminSequenceInscrits() { const [filterEtablissement, setFilterEtablissement] = useState("all"); const [filterFonction, setFilterFonction] = useState("all"); const [sortBy, setSortBy] = useState<"date" | "nom">("date"); + const [showPreviewModal, setShowPreviewModal] = useState(false); + const [previewType, setPreviewType] = useState<"teaser" | "rappel">("teaser"); const utils = trpc.useUtils(); const { data: sequence, isLoading: loadingSequence } = trpc.sequences.getById.useQuery({ id: sequenceId }); const { data: inscriptions, isLoading: loadingInscriptions } = trpc.inscriptions.listBySequence.useQuery({ sequenceId }); const { data: formations } = trpc.formations.list.useQuery(); + const { data: emailPreview, isLoading: loadingPreview } = trpc.inscriptions.emailPreview.useQuery( + { sequenceId, type: previewType }, + { enabled: showPreviewModal } + ); const updateStatutMutation = trpc.inscriptions.updateStatut.useMutation({ onSuccess: () => { @@ -143,8 +156,9 @@ export default function AdminSequenceInscrits() { exportFeuilleMutation.mutate({ sequenceId }); }; - const handleSendEmails = (type: "teaser" | "rappel") => { - if (confirm(`Êtes-vous sûr de vouloir envoyer les emails ${type === "teaser" ? "teaser" : "de rappel J-7"} à tous les inscrits confirmés ?`)) { + const handleSendEmails = (type: "teaser" | "rappel" | "rappel_j1") => { + const typeLabel = type === "teaser" ? "teaser" : type === "rappel" ? "de rappel J-7" : "de rappel J-1"; + if (confirm(`Êtes-vous sûr de vouloir envoyer les emails ${typeLabel} à tous les inscrits confirmés ?`)) { sendEmailsMutation.mutate({ sequenceId, type }); } }; @@ -354,6 +368,17 @@ export default function AdminSequenceInscrits() {
+ + + +
+ + {/* Modal d'aperçu d'email */} + + + + + Aperçu de l'email {previewType === "teaser" ? "teaser" : previewType === "rappel" ? "de rappel J-7" : "de rappel J-1"} + + + {loadingPreview ? ( + "Chargement de l'aperçu..." + ) : emailPreview ? ( + `Destinataire : ${emailPreview.recipient.prenom} ${emailPreview.recipient.nom} (${emailPreview.recipient.email})` + ) : ( + "Erreur lors du chargement de l'aperçu" + )} + + + {loadingPreview ? ( +
+
+
+ ) : emailPreview ? ( +
+
+

Sujet :

+

{emailPreview.subject}

+
+
+