'use client'; import React, { useEffect, useState } from 'react'; import { useRouter } from 'next/navigation'; import Table from '@/components/Table'; import { Edit3, Users, Download, Eye, Upload, CalendarDays, } from 'lucide-react'; import StatusLabel from '@/components/StatusLabel'; import FileUpload from '@/components/Form/FileUpload'; import { FE_PARENTS_EDIT_SUBSCRIPTION_URL } from '@/utils/Url'; import { fetchChildren, editRegisterForm, } from '@/app/actions/subscriptionAction'; import { fetchUpcomingEvents } from '@/app/actions/planningAction'; 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'; import { PlanningProvider, PlanningModes } from '@/context/PlanningContext'; import SectionHeader from '@/components/SectionHeader'; import ParentPlanningSection from '@/components/ParentPlanningSection'; import EventCard from '@/components/EventCard'; 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 [showPlanning, setShowPlanning] = useState(false); const [planningClassName, setPlanningClassName] = useState(null); const [upcomingEvents, setUpcomingEvents] = useState([]); 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, user]); useEffect(() => { if (selectedEstablishmentId) { // Fetch des événements à venir fetchUpcomingEvents(selectedEstablishmentId) .then((data) => { setUpcomingEvents(data); }) .catch((error) => { logger.error('Error fetching upcoming events:', error); }); } }, [selectedEstablishmentId]); 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 showClassPlanning = (student) => { setPlanningClassName( `${student.associated_class_name} - ${getNiveauLabel(student.level)}` ); setShowPlanning(true); }; const childrenColumns = [ { name: 'photo', transform: (row) => (
{row.student.photo ? ( {`${row.student.first_name} ) : (
{row.student.first_name[0]} {row.student.last_name[0]}
)}
), }, { name: 'Nom', transform: (row) => `${row.student.last_name}` }, { name: 'Prénom', transform: (row) => `${row.student.first_name}` }, { name: 'Classe', transform: (row) => (
{row.student.associated_class_name}
), }, { name: 'Niveau', transform: (row) => (
{getNiveauLabel(row.student.level)}
), }, { name: 'Statut', transform: (row) => (
), }, { name: 'Actions', transform: (row) => (
{row.status === 2 && ( )} {(row.status === 3 || row.status === 8) && ( )} {row.status === 7 && ( <> )} {row.status === 5 && ( <> )}
), }, ]; return (
{showPlanning && planningClassName ? ( // Affichage grand format mais respectant la sidebar <>
) : ( // Affichage classique avec le tableau des enfants
{/* Section des événements à venir */} {upcomingEvents.length > 0 && (
{upcomingEvents.slice(0, 3).map((event, index) => ( ))}
)}
{/* Composant FileUpload et bouton Valider en dessous du tableau */} {uploadState === 'on' && uploadingStudentId && (
)} )} ); }