import { useState } from "react"; import DashboardLayout from "@/components/DashboardLayout"; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table"; import { Badge } from "@/components/ui/badge"; import { trpc } from "@/lib/trpc"; import { History, Search, Filter, ChevronLeft, ChevronRight } from "lucide-react"; import { format } from "date-fns"; import { fr } from "date-fns/locale"; export default function AdminRappelsHistorique() { const [filtres, setFiltres] = useState({ dateDebut: "", dateFin: "", sequenceId: undefined as number | undefined, statut: undefined as "success" | "failed" | undefined, email: "", limit: 50, offset: 0, }); const { data: logs, isLoading } = trpc.rappels.historique.useQuery(filtres); const { data: sequences } = trpc.sequences.list.useQuery(); const handleFilterChange = (key: string, value: any) => { setFiltres(prev => ({ ...prev, [key]: value, offset: 0, // Reset pagination })); }; const handlePageChange = (direction: "prev" | "next") => { setFiltres(prev => ({ ...prev, offset: direction === "next" ? prev.offset + prev.limit : Math.max(0, prev.offset - prev.limit), })); }; const resetFilters = () => { setFiltres({ dateDebut: "", dateFin: "", sequenceId: undefined, statut: undefined, email: "", limit: 50, offset: 0, }); }; return (

Historique des Rappels

Consultez tous les rappels envoyés avec filtres avancés

{/* Filtres */} Filtres Affinez votre recherche dans l'historique
handleFilterChange("dateDebut", e.target.value)} />
handleFilterChange("dateFin", e.target.value)} />
handleFilterChange("email", e.target.value)} />
{/* Tableau des logs */} Logs des rappels {logs?.length || 0} résultat(s) trouvé(s) {isLoading ? (
Chargement...
) : !logs || logs.length === 0 ? (
Aucun log trouvé avec ces filtres
) : ( <>
Date envoi Email Type Statut Tentatives Erreur {logs.map((log) => ( {format(new Date(log.dateEnvoi), "dd/MM/yyyy HH:mm", { locale: fr })} {log.emailDestinataire} {log.typeRappel === "rappel" ? "J-7" : "J-1"} {log.statut === "success" ? "Succès" : "Échec"} 1 ? "text-orange-600 font-medium" : ""}> {log.nbTentatives} {log.messageErreur || "-"} ))}
{/* Pagination */}
Affichage de {filtres.offset + 1} à {Math.min(filtres.offset + filtres.limit, filtres.offset + (logs?.length || 0))}
)}
); }