'use client'; import React, { useEffect, useState } from 'react'; import { useRouter } from 'next/navigation'; import Table from '@/components/Table'; import { Edit3, Users, Download, Eye, Upload } from 'lucide-react'; import StatusLabel from '@/components/StatusLabel'; import FileUpload from '@/components/FileUpload'; import { FE_PARENTS_EDIT_SUBSCRIPTION_URL } from '@/utils/Url'; import { fetchChildren, editRegisterForm, } from '@/app/actions/subscriptionAction'; import logger from '@/utils/logger'; import { BASE_URL } from '@/utils/Url'; import { useEstablishment } from '@/context/EstablishmentContext'; import { useCsrfToken } from '@/context/CsrfContext'; import { useClasses } from '@/context/ClassesContext'; export default function ParentHomePage() { const [children, setChildren] = useState([]); const { user, selectedEstablishmentId } = useEstablishment(); const [uploadingStudentId, setUploadingStudentId] = useState(null); // ID de l'étudiant pour l'upload const [uploadedFile, setUploadedFile] = useState(null); // Fichier uploadé const [uploadState, setUploadState] = useState('off'); // État "on" ou "off" pour l'affichage du composant const router = useRouter(); const csrfToken = useCsrfToken(); const [reloadFetch, setReloadFetch] = useState(false); const { getNiveauLabel } = useClasses(); useEffect(() => { if (user !== null) { const userIdFromSession = user.user_id; fetchChildren(userIdFromSession, selectedEstablishmentId).then((data) => { setChildren(data); }); setReloadFetch(false); } }, [selectedEstablishmentId, reloadFetch]); function handleView(eleveId) { logger.debug(`View dossier for student id: ${eleveId}`); router.push( `${FE_PARENTS_EDIT_SUBSCRIPTION_URL}?studentId=${eleveId}&enabled=false` ); } function handleEdit(eleveId) { logger.debug(`Edit dossier for student id: ${eleveId}`); router.push( `${FE_PARENTS_EDIT_SUBSCRIPTION_URL}?studentId=${eleveId}&enabled=true` ); } const handleFileUpload = (file) => { if (!file) { logger.error("Aucun fichier sélectionné pour l'upload."); return; } setUploadedFile(file); // Conserve le fichier en mémoire logger.debug('Fichier sélectionné :', file.name); }; const handleSubmit = () => { if (!uploadedFile || !uploadingStudentId) { logger.error('Aucun fichier ou étudiant sélectionné.'); return; } const jsonData = { status: 3, }; const formData = new FormData(); formData.append('data', JSON.stringify(jsonData)); formData.append('sepa_file', uploadedFile); // Ajoute le fichier SEPA editRegisterForm(uploadingStudentId, formData, csrfToken) .then((response) => { logger.debug('RF mis à jour avec succès:', response); setReloadFetch(true); setUploadState('off'); }) .catch((error) => { logger.error('Erreur lors de la mise à jour du RF:', error); }); }; const toggleUpload = (studentId) => { if (uploadingStudentId === studentId && uploadState === 'on') { // Si le composant est déjà affiché pour cet étudiant, on le masque setUploadState('off'); setUploadingStudentId(null); setUploadedFile(null); // Réinitialise le fichier } else { // Sinon, on l'affiche pour cet étudiant setUploadState('on'); setUploadingStudentId(studentId); } }; const childrenColumns = [ { name: 'photo', transform: (row) => (
), }, { name: 'Nom', transform: (row) => `${row.student.last_name}` }, { name: 'Prénom', transform: (row) => `${row.student.first_name}` }, { name: 'Niveau', transform: (row) => (