import { useState } from "react"; import { useLocation, useParams } from "wouter"; import DashboardLayout from "@/components/DashboardLayout"; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table"; import { Badge } from "@/components/ui/badge"; import { trpc } from "@/lib/trpc"; import { ArrowLeft, Calendar, MapPin, User } from "lucide-react"; import { format } from "date-fns"; import { fr } from "date-fns/locale"; export default function AdminApprenantDetail() { const params = useParams(); const apprenantId = params.id ? parseInt(params.id) : 0; const [, setLocation] = useLocation(); const { data: apprenant, isLoading: loadingApprenant } = trpc.apprenants.getById.useQuery({ id: apprenantId }); const { data: inscriptions, isLoading: loadingInscriptions } = trpc.apprenants.getInscriptions.useQuery({ id: apprenantId }); if (loadingApprenant || loadingInscriptions) { return (
Chargement...
); } if (!apprenant) { return (
Apprenant introuvable
); } const getStatutBadge = (statut: string) => { switch (statut) { case 'confirmee': return Confirmée; case 'en_attente': return En attente; case 'annulee': return Annulée; default: return {statut}; } }; const getFonctionLabel = (fonction: string) => { switch (fonction) { case 'directeur': return 'Directeur'; case 'chef_service': return 'Chef de service'; default: return 'Autre'; } }; const getPublicCibleLabel = (publicCible: string) => { switch (publicCible) { case 'directeur': return 'Directeurs'; case 'chef_service': return 'Chefs de service'; case 'tous': return 'Tous'; default: return 'Autre'; } }; return (
{/* Header */}

Détail de l'apprenant

Consultez toutes les inscriptions de cet apprenant

{/* Informations de l'apprenant */} Informations personnelles
Nom complet
{apprenant.nom} {apprenant.prenom}
Email
{apprenant.email}
Code établissement
{apprenant.codeEtablissement}
Fonction
{getFonctionLabel(apprenant.fonction)}
{/* Liste des inscriptions */} Inscriptions aux formations {inscriptions?.length || 0} inscription(s) au total {!inscriptions || inscriptions.length === 0 ? (
Aucune inscription trouvée pour cet apprenant
) : ( Formation Séquence Dates Lieu Public cible Date d'inscription Statut {inscriptions.map((insc: any) => ( {insc.formation?.nom || 'N/A'} {insc.sequence?.nom || 'N/A'}
{insc.sequence?.dates?.map((date: any, idx: number) => (
{format(new Date(date.dateDebut), 'dd/MM/yyyy HH:mm', { locale: fr })}
))}
{insc.sequence?.lieu || 'N/A'}
{getPublicCibleLabel(insc.sequence?.publicCible || '')} {format(new Date(insc.dateInscription), 'dd/MM/yyyy HH:mm', { locale: fr })} {getStatutBadge(insc.statut)}
))}
)}
); }