feat: Ajout de la possibilité de supprimer une association

guardian/student + ajout de la possibilité de créer un guardian pour un
student + tri chrologique
This commit is contained in:
N3WT DE COMPET
2025-03-22 12:28:12 +01:00
parent 43ed495a9a
commit c9350a796b
12 changed files with 326 additions and 93 deletions

View File

@ -10,6 +10,7 @@ import ProfileDirectory from '@/components/ProfileDirectory';
export default function Page() {
const [profileRoles, setProfileRoles] = useState([]);
const [reloadFetch, setReloadFetch] = useState(false);
const csrfToken = useCsrfToken();
const { selectedEstablishmentId } = useEstablishment();
@ -19,7 +20,7 @@ export default function Page() {
// Fetch data for profileRoles
handleProfiles();
}
}, [selectedEstablishmentId]);
}, [selectedEstablishmentId, reloadFetch]);
const handleProfiles = () => {
fetchProfileRoles(selectedEstablishmentId)
@ -27,6 +28,7 @@ export default function Page() {
setProfileRoles(data);
})
.catch(error => logger.error('Error fetching profileRoles:', error));
setReloadFetch(false);
};
const handleEdit = (profileRole) => {
@ -56,8 +58,37 @@ export default function Page() {
const handleDissociate = (studentId, guardianId) => {
return dissociateGuardian(studentId, guardianId)
.then(() => {
.then((response) => {
logger.debug("Guardian dissociated successfully:", guardianId);
// Vérifier si le Guardian a été supprimé
const isGuardianDeleted = response?.isGuardianDeleted;
// Mettre à jour le modèle profileRoles
setProfileRoles(prevState =>
prevState.map(profileRole => {
if (profileRole.associated_person?.id === guardianId) {
if (isGuardianDeleted) {
// Si le Guardian est supprimé, retirer le profileRole
return null;
} else {
// Si le Guardian n'est pas supprimé, mettre à jour les élèves associés
const updatedStudents = profileRole.associated_person.students.filter(
student => student.id !== studentId
);
return {
...profileRole,
associated_person: {
...profileRole.associated_person,
students: updatedStudents, // Mettre à jour les élèves associés
},
};
}
}
setReloadFetch(true);
return profileRole; // Conserver les autres profileRoles
}).filter(Boolean) // Supprimer les entrées nulles
);
})
.catch(error => {
logger.error('Error dissociating guardian:', error);