import { useState } from "react"; import { trpc } from "@/lib/trpc"; import DashboardLayout from "@/components/DashboardLayout"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "@/components/ui/table"; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from "@/components/ui/dialog"; import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, } from "@/components/ui/alert-dialog"; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; import { Badge } from "@/components/ui/badge"; import { toast } from "sonner"; import { Pencil, Trash2, Mail, User, AlertCircle, CheckCircle2 } from "lucide-react"; export default function AdminFormateurs() { const [isEditDialogOpen, setIsEditDialogOpen] = useState(false); const [isDeleteDialogOpen, setIsDeleteDialogOpen] = useState(false); const [selectedFormateur, setSelectedFormateur] = useState<{ id: number; nom: string; email: string | null; } | null>(null); const [formData, setFormData] = useState({ nom: "", email: "", }); const { data: formateurs, isLoading, refetch } = trpc.formateurs.list.useQuery(); const updateMutation = trpc.formateurs.update.useMutation({ onSuccess: () => { toast.success("Formateur mis à jour avec succès"); setIsEditDialogOpen(false); setSelectedFormateur(null); refetch(); }, onError: (error) => { toast.error(`Erreur: ${error.message}`); }, }); const deleteMutation = trpc.formateurs.delete.useMutation({ onSuccess: () => { toast.success("Formateur supprimé avec succès"); setIsDeleteDialogOpen(false); setSelectedFormateur(null); refetch(); }, onError: (error) => { toast.error(`Erreur: ${error.message}`); }, }); const handleEdit = () => { if (!selectedFormateur) return; if (!formData.nom.trim()) { toast.error("Le nom est obligatoire"); return; } updateMutation.mutate({ id: selectedFormateur.id, nom: formData.nom.trim(), email: formData.email.trim() || null, }); }; const handleDelete = () => { if (!selectedFormateur) return; deleteMutation.mutate({ id: selectedFormateur.id }); }; const openEditDialog = (formateur: { id: number; nom: string; email: string | null }) => { setSelectedFormateur(formateur); setFormData({ nom: formateur.nom, email: formateur.email || "", }); setIsEditDialogOpen(true); }; const openDeleteDialog = (formateur: { id: number; nom: string; email: string | null }) => { setSelectedFormateur(formateur); setIsDeleteDialogOpen(true); }; const formateursSansEmail = formateurs?.filter((f) => !f.email) || []; const formateursAvecEmail = formateurs?.filter((f) => f.email) || []; return (

Gestion des Formateurs

Gérez les formateurs et leurs adresses email pour les notifications

Note : Pour créer un nouveau formateur, rendez-vous dans Configuration > Utilisateurs et créez un compte avec le rôle "Formateur". Les formateurs créés apparaîtront automatiquement ici.

{/* Alerte si des formateurs n'ont pas d'email */} {formateursSansEmail.length > 0 && ( Formateurs sans email ({formateursSansEmail.length}) Ces formateurs ne recevront pas les notifications d'inscription et d'annulation. Ajoutez leur adresse email pour activer les notifications.
{formateursSansEmail.map((f) => ( openEditDialog(f)} > {f.nom} ))}
)} {/* Statistiques */}
Total formateurs
{formateurs?.length || 0}
Avec email configuré
{formateursAvecEmail.length}
Sans email (pas de notifications)
{formateursSansEmail.length}
{/* Tableau des formateurs */} Liste des formateurs Cliquez sur un formateur pour modifier ses informations {isLoading ? (
Chargement...
) : formateurs?.length === 0 ? (
Aucun formateur enregistré
) : ( Nom Email Notifications Actions {formateurs?.map((formateur, index) => ( {formateur.nom} {formateur.email ? (
{formateur.email}
) : ( Non renseigné )}
{formateur.email ? ( Activées ) : ( Désactivées )}
))}
)}
{/* Dialog de modification */} Modifier le formateur Modifiez les informations du formateur. L'email est nécessaire pour recevoir les notifications.
setFormData({ ...formData, nom: e.target.value })} placeholder="Jean Dupont" />
setFormData({ ...formData, email: e.target.value })} placeholder="jean.dupont@exemple.fr" />

Sans email, le formateur ne recevra pas les notifications d'inscription et d'annulation.

{/* Dialog de suppression */} Supprimer le formateur ? Êtes-vous sûr de vouloir supprimer le formateur "{selectedFormateur?.nom}" ? Cette action est irréversible. Annuler Supprimer
); }