import React, { useState, useMemo, useEffect } from 'react'; import { BookOpen, CheckCircle, AlertCircle, Clock } from 'lucide-react'; import RadioList from '@/components/Form/RadioList'; const LEVELS = [ { value: 0, label: 'Non évalué' }, { value: 1, label: '1 - Non acquis' }, { value: 2, label: "2 - En cours d'acquisition" }, { value: 3, label: '3 - Acquis' }, ]; const getGradeStyle = (grade) => { switch (grade) { case 1: return 'bg-red-50 border-red-200'; case 2: return 'bg-yellow-50 border-yellow-200'; case 3: return 'bg-emerald-50 border-emerald-200'; default: return 'bg-gray-50 border-gray-200'; } }; export default function GradeView({ data, grades, onGradeChange }) { const [openDomains, setOpenDomains] = useState({}); const [openCategories, setOpenCategories] = useState({}); // Initialiser tout ouvert au premier rendu ou quand data change useEffect(() => { if (data && data.length > 0) { // Initialisation des domaines et catégories (collapsed) const domains = {}; const categories = {}; data.forEach((domaine) => { domains[domaine.domaine_id] = false; domaine.categories.forEach((cat) => { categories[cat.categorie_id] = false; }); }); setOpenDomains(domains); setOpenCategories(categories); } }, [data]); // Calcul du nombre total de compétences const totalCompetencies = useMemo( () => (data || []).reduce( (sum, domaine) => sum + domaine.categories.reduce( (catSum, cat) => catSum + cat.competences.length, 0 ), 0 ), [data] ); if (!data) return null; const toggleDomain = (id) => setOpenDomains((prev) => ({ ...prev, [id]: !prev[id] })); const toggleCategory = (id) => setOpenCategories((prev) => ({ ...prev, [id]: !prev[id] })); return (