import { trpc } from "@/lib/trpc"; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; import { Badge } from "@/components/ui/badge"; import { Progress } from "@/components/ui/progress"; import { Calendar, Users, GraduationCap, Clock, MapPin, AlertCircle } from "lucide-react"; import { format } from "date-fns"; import { fr } from "date-fns/locale"; import { Skeleton } from "@/components/ui/skeleton"; import DashboardLayout from "@/components/DashboardLayout"; export default function FormateurDashboard() { const { data: stats, isLoading: statsLoading } = trpc.formateurs.dashboardStats.useQuery(); const { data: prochainesSequences, isLoading: sequencesLoading } = trpc.formateurs.prochainesSequences.useQuery({ limit: 10 }); if (statsLoading) { return (
); } return (
{/* En-tête */}

Tableau de bord formateur

Vue d'ensemble de vos formations et prochaines interventions

{/* Cartes de statistiques */}
Total séquences
{stats?.totalSequences || 0}

Toutes vos séquences de formation

Séquences à venir
{stats?.sequencesAvenir || 0}

Avec au moins une date future

Total apprenants
{stats?.totalInscrits || 0}

Inscrits confirmés à vos séquences

{/* Liste des prochaines séquences */} Prochaines séquences Vos interventions à venir triées par date {sequencesLoading ? (
{[1, 2, 3].map((i) => ( ))}
) : prochainesSequences && prochainesSequences.length > 0 ? (
{prochainesSequences.map((seq: any) => { const pourcentageRemplissage = seq.capaciteMax > 0 ? Math.round((seq.nbInscrits / seq.capaciteMax) * 100) : 0; const estComplete = pourcentageRemplissage >= 100; const estPresqueComplete = pourcentageRemplissage >= 80 && pourcentageRemplissage < 100; return (
{seq.nom} {seq.formation?.nom || "Formation inconnue"}
{seq.statut === 'ouverte' ? 'Ouverte' : seq.statut === 'bloquee' ? 'Bloquée' : 'Terminée'}
{/* Lieu */}
{seq.lieu}
{/* Dates */}
Dates de formation
{seq.dates.map((date: any) => { const dateDebut = new Date(date.dateDebut); const dateFin = new Date(date.dateFin); const estFuture = dateDebut >= new Date(); return ( {format(dateDebut, "dd MMM", { locale: fr })} {dateDebut.toDateString() !== dateFin.toDateString() && ` - ${format(dateFin, "dd MMM", { locale: fr })}` } ); })}
{/* Capacité */}
Inscriptions
{seq.nbInscrits} / {seq.capaciteMax}
{estComplete && (
Capacité maximale atteinte
)} {estPresqueComplete && (
Presque complète ({pourcentageRemplissage}%)
)}
); })}
) : (

Aucune séquence à venir pour le moment

)}
); }