'use client'; import React, { useState, useEffect } from 'react'; import { useSearchParams, useRouter } from 'next/navigation'; import Button from '@/components/Form/Button'; import GradeView from '@/components/Grades/GradeView'; import { fetchStudentCompetencies, editStudentCompetencies, } from '@/app/actions/subscriptionAction'; import SectionHeader from '@/components/SectionHeader'; import { Award } from 'lucide-react'; import { useCsrfToken } from '@/context/CsrfContext'; import { useNotification } from '@/context/NotificationContext'; export default function StudentCompetenciesPage() { const searchParams = useSearchParams(); const router = useRouter(); const csrfToken = useCsrfToken(); const { showNotification } = useNotification(); const [studentCompetencies, setStudentCompetencies] = useState([]); const [grades, setGrades] = useState({}); const studentId = searchParams.get('studentId'); const period = searchParams.get('period'); useEffect(() => { fetchStudentCompetencies(studentId, period) .then((data) => { setStudentCompetencies(data); }) .catch((error) => logger.error('Error fetching studentCompetencies:', error) ); }, []); useEffect(() => { if (studentCompetencies.data) { const initialGrades = {}; studentCompetencies.data.forEach((domaine) => { domaine.categories.forEach((cat) => { cat.competences.forEach((comp) => { initialGrades[comp.competence_id] = comp.score ?? 0; }); }); }); setGrades(initialGrades); } }, [studentCompetencies.data]); const handleGradeChange = (competenceId, level) => { setGrades((prev) => ({ ...prev, [competenceId]: level, })); }; const handleSubmit = () => { const data = Object.entries(grades) .filter(([_, score]) => [1, 2, 3].includes(score)) .map(([competenceId, score]) => ({ studentId, competenceId, grade: score, period: period, })); editStudentCompetencies(data, csrfToken) .then(() => { showNotification( 'Bilan de compétence sauvegardé avec succès', 'success', 'Succès' ); router.back(); }) .catch((error) => { showNotification( "Erreur lors de l'enregistrement du bilan de compétence", 'error', 'Erreur' ); }); }; return (