import React, { useState } from 'react'; import { Trash2, Eye, EyeOff, ToggleLeft, ToggleRight, Info, XCircle, } from 'lucide-react'; import Table from '@/components/Table'; import Popup from '@/components/Popup'; import StatusLabel from '@/components/StatusLabel'; import SpecialityItem from '@/components/Structure/Configuration/SpecialityItem'; import Tooltip from '@/components/Tooltip'; const roleTypeToLabel = (roleType) => { switch (roleType) { case 0: return 'ECOLE'; case 1: return 'ADMIN'; case 2: return 'PARENT'; default: return 'UNKNOWN'; } }; const roleTypeToBadgeClass = (roleType) => { switch (roleType) { case 0: return 'bg-blue-100 text-blue-600'; case 1: return 'bg-red-100 text-red-600'; case 2: return 'bg-green-100 text-green-600'; default: return 'bg-gray-100 text-gray-600'; } }; const ProfileDirectory = ({ profileRoles, handleActivateProfile, handleDeleteProfile, handleDissociateGuardian, }) => { const parentProfiles = profileRoles.filter( (profileRole) => profileRole.role_type === 2 ); const schoolAdminProfiles = profileRoles.filter( (profileRole) => profileRole.role_type !== 2 ); const [popupVisible, setPopupVisible] = useState(false); const [popupMessage, setPopupMessage] = useState(''); const [confirmPopupVisible, setConfirmPopupVisible] = useState(false); const [confirmPopupMessage, setConfirmPopupMessage] = useState(''); const [confirmPopupOnConfirm, setConfirmPopupOnConfirm] = useState(() => {}); const [visibleTooltipId, setVisibleTooltipId] = useState(null); const handleTooltipVisibility = (id) => { setVisibleTooltipId(id); // Définir l'ID de la ligne pour laquelle la tooltip est visible }; const handleTooltipHide = () => { setVisibleTooltipId(null); // Cacher toutes les tooltips }; const handleConfirmActivateProfile = (profileRole) => { setConfirmPopupMessage( `Êtes-vous sûr de vouloir ${profileRole.is_active ? 'désactiver' : 'activer'} ce profil ?` ); setConfirmPopupOnConfirm(() => () => { handleActivateProfile(profileRole) .then(() => { setPopupMessage( `Le profil a été ${profileRole.is_active ? 'désactivé' : 'activé'} avec succès.` ); setPopupVisible(true); }) .catch((error) => { setPopupMessage( `Erreur lors de la ${profileRole.is_active ? 'désactivation' : 'activation'} du profil.` ); setPopupVisible(true); }); setConfirmPopupVisible(false); }); setConfirmPopupVisible(true); }; const handleConfirmDeleteProfile = (id) => { setConfirmPopupMessage('Êtes-vous sûr de vouloir supprimer ce profil ?'); setConfirmPopupOnConfirm(() => () => { handleDeleteProfile(id) .then(() => { setPopupMessage('Le profil a été supprimé avec succès.'); setPopupVisible(true); }) .catch((error) => { setPopupMessage('Erreur lors de la suppression du profil.'); setPopupVisible(true); }); setConfirmPopupVisible(false); }); setConfirmPopupVisible(true); }; const handleConfirmDissociateGuardian = (profileRole, student) => { setVisibleTooltipId(null); setConfirmPopupMessage( `Vous êtes sur le point de dissocier le responsable ${profileRole.associated_person?.guardian_name} de l'élève ${student.student_name}. Êtes-vous sûr de vouloir poursuivre cette opération ?` ); setConfirmPopupOnConfirm(() => () => { handleDissociateGuardian(student.id, profileRole.associated_person?.id) .then(() => { setPopupMessage('Le responsable a été dissocié avec succès.'); setPopupVisible(true); }) .catch((error) => { setPopupMessage('Erreur lors de la dissociation du responsable.'); setPopupVisible(true); }); setConfirmPopupVisible(false); }); setConfirmPopupVisible(true); }; const parentColumns = [ { name: 'Identifiant', transform: (row) => row.associated_profile_email }, { name: 'Mise à jour', transform: (row) => row.updated_date_formatted }, { name: 'Rôle', transform: (row) => ( {roleTypeToLabel(row.role_type)} ), }, { name: 'Utilisateur', transform: (row) => (
{row.associated_person?.guardian_name} {row.associated_person && (
handleTooltipVisibility(row.id)} // Afficher la tooltip pour cette ligne onMouseLeave={handleTooltipHide} // Cacher la tooltip > {visibleTooltipId === row.id && ( // Afficher uniquement si l'ID correspond
Elève(s) associé(s):
{row.associated_person?.students?.map((student) => (
{student.student_name}
))}
)}
)}
), }, { name: 'Actions', transform: (row) => (
), }, ]; const schoolAdminColumns = [ { name: 'Identifiant', transform: (row) => row.associated_profile_email }, { name: 'Mise à jour', transform: (row) => row.updated_date_formatted }, { name: 'Rôle', transform: (row) => ( {roleTypeToLabel(row.role_type)} ), }, { name: 'Utilisateur', transform: (row) => (
{row.associated_person?.teacher_name} {row.associated_person && (
handleTooltipVisibility(row.id)} // Afficher la tooltip pour cette ligne onMouseLeave={handleTooltipHide} // Cacher la tooltip > {visibleTooltipId === row.id && ( // Afficher uniquement si l'ID correspond
Classes associées:
{row.associated_person?.classes?.map((classe) => ( {classe.name} ))}
Spécialités:
{row.associated_person?.specialities?.map( (speciality) => ( ) )}
)}
)}
), }, { name: 'Actions', transform: (row) => (
), }, ]; return (
{parentProfiles.length === 0 ? (
Aucun profil trouvé
) : ( )}
{schoolAdminProfiles.length === 0 ? (
Aucun profil trouvé
) : (
)} setPopupVisible(false)} uniqueConfirmButton={true} /> setConfirmPopupVisible(false)} /> ); }; export default ProfileDirectory;