mirror of
https://git.v0id.ovh/n3wt-innov/n3wt-school.git
synced 2026-01-28 23:43:22 +00:00
feat: Gestion des inscriptions [#1] feat(frontend): Création des vues pour le paramétrage de l'école [#2] feat: Gestion du login [#6] fix: Correction lors de la migration des modèle [#8] feat: Révision du menu principal [#9] feat: Ajout d'un footer [#10] feat: Création des dockers compose pour les environnements de développement et de production [#12] doc(ci): Mise en place de Husky et d'un suivi de version automatique [#14]
112 lines
4.3 KiB
JavaScript
112 lines
4.3 KiB
JavaScript
import { School, Trash2, MoreVertical, Edit3, Plus, ZoomIn } from 'lucide-react';
|
|
import { useState } from 'react';
|
|
import Table from '@/components/Table';
|
|
import DropdownMenu from '@/components/DropdownMenu';
|
|
import Modal from '@/components/Modal';
|
|
import ClassForm from '@/components/ClassForm';
|
|
|
|
const ClassesSection = ({ classes, specialities, teachers, handleCreate, handleEdit, handleDelete }) => {
|
|
|
|
const [isOpen, setIsOpen] = useState(false);
|
|
const [editingClass, setEditingClass] = useState(null);
|
|
|
|
const openEditModal = (classe) => {
|
|
setIsOpen(true);
|
|
setEditingClass(classe);
|
|
}
|
|
|
|
const closeEditModal = () => {
|
|
setIsOpen(false);
|
|
setEditingClass(null);
|
|
};
|
|
|
|
const handleModalSubmit = (updatedData) => {
|
|
if (editingClass) {
|
|
handleEdit(editingClass.id, updatedData);
|
|
} else {
|
|
handleCreate(updatedData);
|
|
}
|
|
closeEditModal();
|
|
};
|
|
|
|
const handleInspect = (data) => {
|
|
console.log('inspect classe : ', data)
|
|
}
|
|
|
|
return (
|
|
<div className="mb-8">
|
|
<div className="flex justify-between items-center mb-4 max-w-8xl ml-0">
|
|
<h2 className="text-3xl text-gray-800 flex items-center">
|
|
<School className="w-8 h-8 mr-2" />
|
|
Classes
|
|
</h2>
|
|
<button
|
|
onClick={() => openEditModal(null)} // ouvrir le modal pour créer une nouvelle spécialité
|
|
className="flex items-center bg-emerald-600 text-white p-2 rounded-full shadow hover:bg-emerald-900 transition duration-200"
|
|
>
|
|
<Plus className="w-5 h-5" />
|
|
</button>
|
|
</div>
|
|
<div className="bg-white rounded-lg border border-gray-200 max-w-8xl ml-0">
|
|
<Table
|
|
columns={[
|
|
{ name: 'AMBIANCE', transform: (row) => row.nom_ambiance },
|
|
{ name: 'AGE', transform: (row) => `${row.tranche_age[0]} - ${row.tranche_age[1]} ans` },
|
|
{ name: 'NOMBRE D\'ELEVES', transform: (row) => row.nombre_eleves },
|
|
{ name: 'LANGUE D\'ENSEIGNEMENT', transform: (row) => row.langue_enseignement },
|
|
{ name: 'ANNEE SCOLAIRE', transform: (row) => row.annee_scolaire },
|
|
{
|
|
name: 'SPECIALITES',
|
|
transform: (row) => (
|
|
<div key={row.id} className="flex justify-center items-center space-x-2">
|
|
{row.specialites.map(specialite => (
|
|
<span
|
|
key={specialite.id}
|
|
className="w-4 h-4 rounded-full"
|
|
style={{ backgroundColor: specialite.codeCouleur }}
|
|
title={specialite.nom}
|
|
></span>
|
|
))}
|
|
</div>
|
|
)
|
|
},
|
|
{
|
|
name: 'ENSEIGNANT PRINCIPAL',
|
|
transform: (row) => {
|
|
return row.enseignant_principal
|
|
? `${row.enseignant_principal.nom || ''} ${row.enseignant_principal.prenom || ''}`
|
|
: <i>Non assigné</i>;
|
|
}
|
|
},
|
|
{ name: 'ACTIONS', transform: (row) => (
|
|
<DropdownMenu
|
|
buttonContent={<MoreVertical size={20} className="text-gray-400 hover:text-gray-600" />}
|
|
items={[
|
|
{ label: 'Inspecter', icon: ZoomIn, onClick: () => handleInspect(row) },
|
|
{ label: 'Modifier', icon:Edit3, onClick: () => openEditModal(row) },
|
|
{ label: 'Supprimer', icon: Trash2, onClick: () => handleDelete(row.id) }
|
|
]
|
|
}
|
|
buttonClassName="text-gray-400 hover:text-gray-600"
|
|
menuClassName="absolute right-0 mt-2 w-48 bg-white border border-gray-200 rounded-md shadow-lg z-10 flex flex-col items-center"
|
|
/>
|
|
)}
|
|
]}
|
|
data={classes}
|
|
/>
|
|
</div>
|
|
{isOpen && (
|
|
<Modal
|
|
isOpen={isOpen}
|
|
setIsOpen={setIsOpen}
|
|
title={editingClass ? "Modification de la classe" : "Création d'une nouvelle classe"} ContentComponent={() => (
|
|
<ClassForm classe={editingClass || {}} onSubmit={handleModalSubmit} isNew={!editingClass} specialities={specialities} teachers={teachers} />
|
|
)}
|
|
/>
|
|
)}
|
|
</div>
|
|
);
|
|
};
|
|
|
|
export default ClassesSection;
|