import { useState } from "react"; import { trpc } from "@/lib/trpc"; import DashboardLayout from "@/components/DashboardLayout"; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; import { BarChart, Bar, LineChart, Line, PieChart, Pie, Cell, XAxis, YAxis, CartesianGrid, Tooltip, Legend, ResponsiveContainer } from "recharts"; import { Loader2, TrendingUp, Users, FileText, Target } from "lucide-react"; const COLORS = ['#0088FE', '#00C49F', '#FFBB28', '#FF8042', '#8884D8', '#82CA9D', '#FFC658', '#FF6B6B']; export default function AdminQuestionnaireSuivi() { const { data: statsGlobales, isLoading: loadingGlobales } = trpc.questionnaireSuivi.statsGlobales.useQuery(); const { data: statsByFormation, isLoading: loadingFormation } = trpc.questionnaireSuivi.statsByFormation.useQuery(); const { data: evolutionTemporelle, isLoading: loadingEvolution } = trpc.questionnaireSuivi.evolutionTemporelle.useQuery({}); const { data: statsByFormateur, isLoading: loadingFormateur } = trpc.questionnaireSuivi.statsByFormateur.useQuery(); const isLoading = loadingGlobales || loadingFormation || loadingEvolution || loadingFormateur; if (isLoading) { return (
); } return (

Suivi des Questionnaires

Tableau de bord de suivi des questionnaires avec taux de réponse et statistiques

{/* Statistiques globales */}
Questionnaires
{statsGlobales?.totalQuestionnaires || 0}

Total créés

Envois
{statsGlobales?.totalEnvois || 0}

Total envoyés

Réponses
{statsGlobales?.totalReponses || 0}

Total reçues

Taux de réponse
{statsGlobales?.tauxReponseGlobal?.toFixed(1) || 0}%

Global

{/* Taux de réponse par formation */} Taux de réponse par formation Comparaison des taux de réponse entre les différentes formations {statsByFormation && statsByFormation.length > 0 ? ( ) : (

Aucune donnée disponible

)}
{/* Évolution temporelle */} Évolution dans le temps Évolution mensuelle des envois et réponses {evolutionTemporelle && evolutionTemporelle.length > 0 ? ( ) : (

Aucune donnée disponible

)}
{/* Taux de réponse par formation (camembert) */} Répartition des réponses Distribution des réponses par formation {statsByFormation && statsByFormation.length > 0 ? ( `${entry.formationNom}: ${entry.tauxReponse}%`} > {statsByFormation && Array.isArray(statsByFormation) && statsByFormation.map((entry, index) => ( ))} ) : (

Aucune donnée disponible

)}
{/* Comparaison par formateur */} Comparaison par formateur Taux de réponse et satisfaction moyenne par formateur {statsByFormateur && statsByFormateur.length > 0 ? (
{/* Tableau détaillé */}
{statsByFormateur && Array.isArray(statsByFormateur) && statsByFormateur.map((formateur) => ( ))}
Formateur Envois Réponses Taux Satisfaction
{formateur.formateurNom} {formateur.totalEnvois} {formateur.totalReponses} = 70 ? 'text-green-600' : formateur.tauxReponse >= 50 ? 'text-orange-600' : 'text-red-600' }`}> {formateur.tauxReponse}% {formateur.moyenneSatisfaction ? ( {formateur.moyenneSatisfaction}/10 ) : ( - )}
) : (

Aucune donnée disponible

)}
); }