"use client"; import { useState, useEffect, useMemo } from "react"; import { useParams, useRouter } from "next/navigation"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Button } from "@/components/ui/button"; import { Badge } from "@/components/ui/badge"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "@/components/ui/table"; import { ArrowLeft, Mail } from "lucide-react"; import { formatDate } from "@/lib/utils"; import { LibreChatUser, LibreChatBalance } from "@/lib/types"; import { useCollection } from "@/hooks/useCollection"; // Couleurs prédéfinies pour les référents const REFERENT_COLORS: Record = { "Emmanuel WATHELE": "#3B82F6", "IHECS": "#10B981", }; export default function CoursDetailPage() { const params = useParams(); const router = useRouter(); const referent = decodeURIComponent(params.referent as string); const cours = decodeURIComponent(params.cours as string); const [students, setStudents] = useState([]); const [loading, setLoading] = useState(true); // Charger tous les balances const { data: balances = [] } = useCollection("balances", { limit: 1000, }); // Créer une map des crédits par utilisateur const creditsMap = useMemo(() => { const map = new Map(); balances.forEach((balance) => { map.set(balance.user, balance.tokenCredits || 0); }); return map; }, [balances]); useEffect(() => { const fetchStudents = async () => { try { const response = await fetch( "/api/collections/users?page=1&limit=1000&filter={}" ); const result = await response.json(); if (result.data) { // Filtrer les étudiants pour ce référent et ce cours const filtered = result.data.filter( (user: { referent?: string; cours?: string }) => user.referent === referent && user.cours === cours ); setStudents(filtered); } } catch (error) { console.error("Erreur lors du chargement des étudiants:", error); } finally { setLoading(false); } }; fetchStudents(); }, [referent, cours]); const couleur = REFERENT_COLORS[referent] || "#6B7280"; if (loading) { return (
{Array.from({ length: 5 }).map((_, i) => (
))}
); } return (

{referent}

{cours}

Étudiants ({students.length})
{students.length === 0 ? (

Aucun étudiant dans ce cours

) : (
Nom Email Rôle Crédits Créé le {students.map((student) => (
{student.prenom} {student.nom}
{student.email}
{student.role} {(creditsMap.get(student._id) || 0).toLocaleString()} tokens {formatDate(student.createdAt)} ))}
)}
); }