From 1c75927bbab497cfc86fc3a9aea11d436318be69 Mon Sep 17 00:00:00 2001 From: N3WT DE COMPET Date: Sat, 3 May 2025 22:01:38 +0200 Subject: [PATCH] =?UTF-8?q?feat:=20Pr=C3=A9paration=20de=20la=20gestion=20?= =?UTF-8?q?des=20comp=C3=A9tences=20en=20=C3=A9num=C3=A9rant=20les=20?= =?UTF-8?q?=C3=A9l=C3=A8ves=20par=20classe=20[#16]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../structure/SchoolClassManagement/page.js | 190 +++++++++--------- 1 file changed, 91 insertions(+), 99 deletions(-) diff --git a/Front-End/src/app/[locale]/admin/structure/SchoolClassManagement/page.js b/Front-End/src/app/[locale]/admin/structure/SchoolClassManagement/page.js index 7d1f4d1..1c3d26a 100644 --- a/Front-End/src/app/[locale]/admin/structure/SchoolClassManagement/page.js +++ b/Front-End/src/app/[locale]/admin/structure/SchoolClassManagement/page.js @@ -1,7 +1,7 @@ 'use client'; import React, { useState, useEffect } from 'react'; -import { Plus, Users, Layers } from 'lucide-react'; +import { Plus, Users, Layers, CheckCircle } from 'lucide-react'; import Table from '@/components/Table'; import MultiSelect from '@/components/MultiSelect'; import InputText from '@/components/InputText'; @@ -27,9 +27,31 @@ export default function Page() { }); const [popupVisible, setPopupVisible] = useState(false); const [popupMessage, setPopupMessage] = useState(''); + const [selectedLevels, setSelectedLevels] = useState([]); // Par défaut, tous les niveaux sont sélectionnés + const [filteredStudents, setFilteredStudents] = useState([]); + + useEffect(() => { + // Initialiser les niveaux sélectionnés avec tous les niveaux disponibles + if (classe?.levels?.length > 0) { + const initialLevels = getNiveauxLabels(classe.levels); + setSelectedLevels(initialLevels); + } + }, [classe]); + + useEffect(() => { + // Filtrer les élèves en fonction des niveaux sélectionnés + if (selectedLevels.length > 0) { + const filtered = classe.students.filter((student) => + selectedLevels.includes(getNiveauLabel(student.level)) + ); + setFilteredStudents(filtered); + } else { + setFilteredStudents([]); // Aucun élève si aucun niveau n'est sélectionné + } + }, [selectedLevels, classe]); const handleCreateGroup = () => { - if (!newGroup.name || !newGroup.level || newGroup.students.length === 0) { + if (!newGroup.name || !newGroup.level || !newGroup.students.length) { setPopupMessage( 'Tous les champs doivent être remplis pour créer un groupe.' ); @@ -42,6 +64,15 @@ export default function Page() { setNewGroup({ name: '', level: null, students: [] }); }; + const handleLevelClick = (label) => { + setSelectedLevels( + (prev) => + prev.includes(label) + ? prev.filter((level) => level !== label) // Retirer le niveau si déjà sélectionné + : [...prev, label] // Ajouter le niveau si non sélectionné + ); + }; + const requestErrorHandler = (err) => { logger.error('Error fetching data:', err); }; @@ -51,6 +82,7 @@ export default function Page() { .then((classeData) => { logger.debug('Classes récupérées :', classeData); setClasse(classeData); + setFilteredStudents(classeData.students); }) .catch(requestErrorHandler); }, []); @@ -59,43 +91,62 @@ export default function Page() {

{classe?.atmosphere_name}

- {/* Section Niveaux */} -
-

- - Niveaux -

-
- {classe?.levels?.length > 0 ? ( - getNiveauxLabels(classe.levels).map((label, index) => ( - - {label} - - )) - ) : ( - Aucun niveau associé - )} + {/* Section Niveaux et Enseignants */} +
+ {/* Section Niveaux */} +
+

+ + Niveaux +

+

+ Filtrer les élèves par niveau +

+
+ {classe?.levels?.length > 0 ? ( + getNiveauxLabels(classe.levels).map((label, index) => ( + handleLevelClick(label)} // Gérer le clic sur un niveau + className={`px-4 py-2 rounded-full cursor-pointer border transition-all duration-200 ${ + selectedLevels.includes(label) + ? 'bg-emerald-200 text-emerald-800 border-emerald-300 shadow-md' + : 'bg-gray-200 text-gray-800 border-gray-300 hover:bg-gray-300' + }`} + > + {selectedLevels.includes(label) ? ( + + + {label} + + ) : ( + label + )} + + )) + ) : ( + Aucun niveau associé + )} +
-
- {/* Section Enseignants */} -
-

- - Enseignants -

-
- {classe?.teachers_details?.map((teacher) => ( - - {teacher.last_name} {teacher.first_name} - - ))} + {/* Section Enseignants */} +
+

+ + Enseignants +

+

Liste des enseignants

+
+ {classe?.teachers_details?.map((teacher) => ( + + {teacher.last_name} {teacher.first_name} + + ))} +
@@ -103,7 +154,7 @@ export default function Page() {

- Eleves + Élèves

{row.photo ? ( @@ -138,69 +189,10 @@ export default function Page() { { name: 'Prénom', transform: (row) => row.first_name }, { name: 'Niveau', transform: (row) => getNiveauLabel(row.level) }, ]} - data={classe.students} + data={filteredStudents} // Utiliser les élèves filtrés /> - {/* Section Groupes */} - {/*
-

- - groups -

-
- {groups.map((group, index) => ( -
-

{group.name}

-

level: {group.level.name}

-
- {group.students.map((student) => ( - - {student.last_name} {student.first_name} - - ))} -
-
- ))} -
*/} - - {/* Formulaire de création de groupe */} - {/*
-

createGroup

-
- setNewGroup({ ...newGroup, name: e.target.value })} - placeholder='groupName' - /> - setNewGroup({ ...newGroup, level: selected[0] })} - /> - setNewGroup({ ...newGroup, students: selected })} - /> - -
-
-
*/} - {/* Popup */}