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 (
{totalCompetencies} compétence{totalCompetencies > 1 ? 's' : ''} au total
{data.map((domaine) => (
toggleDomain(domaine.domaine_id)} >
{domaine.domaine_nom}
{openDomains[domaine.domaine_id] ? '▼' : '►'}
{openDomains[domaine.domaine_id] && (
{domaine.categories.map((categorie) => (
{openCategories[categorie.categorie_id] && (
{categorie.competences.map((competence) => { const grade = grades[competence.competence_id]; return (
{competence.nom}
({ id: value, label, }))} formData={{ [`grade-${competence.competence_id}`]: grades[competence.competence_id] !== undefined ? grades[competence.competence_id] : 0, }} handleChange={(e) => onGradeChange( competence.competence_id, parseInt(e.target.value, 10) ) } fieldName={`grade-${competence.competence_id}`} disabled={competence.state === 'required'} className="mt-2" />
); })}
)}
))}
)}
))}
); }