Checkpoint: Ajout d'un bouton pour vider la table des logs d'historique des rappels avec boîte de dialogue de confirmation
**Fonctionnalités ajoutées :** 1. **Procédure tRPC `viderHistoriqueRappels`** (server/routers.ts) : - Mutation admin protégée pour supprimer tous les logs de la table logsRappels - Retourne le nombre de logs supprimés - Utilise une requête SQL directe pour optimiser les performances 2. **Bouton de vidage dans l'interface** (client/src/pages/admin/AdminRappelsHistorique.tsx) : - Bouton rouge "Vider l'historique" avec icône de corbeille - Dialogue de confirmation AlertDialog avec message d'avertissement - Invalidation automatique de la requête historique après suppression - Toast de succès avec le nombre de logs supprimés 3. **Correction d'une erreur TypeScript** : - Ajout d'une parenthèse fermante manquante dans le router gestionAttestations - Correction de l'erreur TS1135: Argument expression expected **Fichiers modifiés :** - server/routers.ts : Ajout de la procédure viderHistoriqueRappels - client/src/pages/admin/AdminRappelsHistorique.tsx : Ajout du bouton avec dialogue Déployé sur le VPS de production (https://formations.itinova.org)
This commit is contained in:
@@ -13,8 +13,20 @@ import {
|
||||
} from "@/components/ui/select";
|
||||
import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table";
|
||||
import { Badge } from "@/components/ui/badge";
|
||||
import {
|
||||
AlertDialog,
|
||||
AlertDialogAction,
|
||||
AlertDialogCancel,
|
||||
AlertDialogContent,
|
||||
AlertDialogDescription,
|
||||
AlertDialogFooter,
|
||||
AlertDialogHeader,
|
||||
AlertDialogTitle,
|
||||
AlertDialogTrigger,
|
||||
} from "@/components/ui/alert-dialog";
|
||||
import { trpc } from "@/lib/trpc";
|
||||
import { History, Search, Filter, ChevronLeft, ChevronRight } from "lucide-react";
|
||||
import { History, Search, Filter, ChevronLeft, ChevronRight, Trash2 } from "lucide-react";
|
||||
import { toast } from "sonner";
|
||||
import { format } from "date-fns";
|
||||
import { fr } from "date-fns/locale";
|
||||
|
||||
@@ -31,6 +43,17 @@ export default function AdminRappelsHistorique() {
|
||||
|
||||
const { data: logs, isLoading } = trpc.rappels.historique.useQuery(filtres);
|
||||
const { data: sequences } = trpc.sequences.list.useQuery();
|
||||
const utils = trpc.useUtils();
|
||||
|
||||
const viderHistorique = trpc.rappels.viderHistoriqueRappels.useMutation({
|
||||
onSuccess: (data) => {
|
||||
toast.success(data.message);
|
||||
utils.rappels.historique.invalidate();
|
||||
},
|
||||
onError: (error) => {
|
||||
toast.error(`Erreur: ${error.message}`);
|
||||
},
|
||||
});
|
||||
|
||||
const handleFilterChange = (key: string, value: any) => {
|
||||
setFiltres(prev => ({
|
||||
@@ -69,7 +92,34 @@ export default function AdminRappelsHistorique() {
|
||||
Consultez tous les rappels envoyés avec filtres avancés
|
||||
</p>
|
||||
</div>
|
||||
<History className="h-8 w-8 text-muted-foreground" />
|
||||
<div className="flex items-center gap-3">
|
||||
<AlertDialog>
|
||||
<AlertDialogTrigger asChild>
|
||||
<Button variant="destructive" size="sm">
|
||||
<Trash2 className="h-4 w-4 mr-2" />
|
||||
Vider l'historique
|
||||
</Button>
|
||||
</AlertDialogTrigger>
|
||||
<AlertDialogContent>
|
||||
<AlertDialogHeader>
|
||||
<AlertDialogTitle>Êtes-vous absolument sûr ?</AlertDialogTitle>
|
||||
<AlertDialogDescription>
|
||||
Cette action est irréversible. Tous les logs d'historique des rappels seront définitivement supprimés de la base de données.
|
||||
</AlertDialogDescription>
|
||||
</AlertDialogHeader>
|
||||
<AlertDialogFooter>
|
||||
<AlertDialogCancel>Annuler</AlertDialogCancel>
|
||||
<AlertDialogAction
|
||||
onClick={() => viderHistorique.mutate()}
|
||||
className="bg-destructive text-destructive-foreground hover:bg-destructive/90"
|
||||
>
|
||||
Oui, vider l'historique
|
||||
</AlertDialogAction>
|
||||
</AlertDialogFooter>
|
||||
</AlertDialogContent>
|
||||
</AlertDialog>
|
||||
<History className="h-8 w-8 text-muted-foreground" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Filtres */}
|
||||
|
||||
Reference in New Issue
Block a user