feat: Mise à jour des Teacher

This commit is contained in:
N3WT DE COMPET
2025-03-16 19:33:07 +01:00
parent a3182c0ba7
commit 173ac47fb2
3 changed files with 101 additions and 107 deletions

View File

@ -111,22 +111,6 @@ const TeachersSection = ({ teachers, setTeachers, specialities, handleCreate, ha
const { selectedEstablishmentId } = useEstablishment();
const handleSelectProfile = (profile) => {
setNewTeacher((prevData) => ({
...prevData,
selectedProfile: profile,
}));
setFormData((prevData) => ({
...prevData,
selectedProfile: profile
}));
setConfirmPopupMessage(`Vous êtes sur le point de rattacher l'enseignant ${newTeacher?.first_name} ${newTeacher?.last_name} au profil ${profile.email} ID = ${profile.id}.`);
setConfirmPopupOnConfirm(() => () => {
setConfirmPopupVisible(false);
});
setConfirmPopupVisible(true);
};
const handleCancelConfirmation = () => {
setConfirmPopupVisible(false);
};
@ -137,8 +121,8 @@ const TeachersSection = ({ teachers, setTeachers, specialities, handleCreate, ha
};
const handleAddTeacher = () => {
setNewTeacher({ id: Date.now(), last_name: '', first_name: '', selectedProfile: null, specialities: [], droit: 0 });
setFormData({ last_name: '', first_name: '', selectedProfile: null, specialities: [], droit: 0});
setNewTeacher({ id: Date.now(), last_name: '', first_name: '', associated_profile_email: '', specialities: [], role_type: 0 });
setFormData({ last_name: '', first_name: '', associated_profile_email: '', specialities: [], role_type: 0});
};
const handleRemoveTeacher = (id) => {
@ -152,16 +136,13 @@ const TeachersSection = ({ teachers, setTeachers, specialities, handleCreate, ha
};
const handleSaveNewTeacher = () => {
if (formData.last_name && formData.first_name && formData.selectedProfile) {
if (formData.last_name && formData.first_name && formData.associated_profile_email) {
const data = {
last_name: formData.last_name,
first_name: formData.first_name,
profile_role_data: {
role_type: formData.droit,
establishment: selectedEstablishmentId,
is_active: true,
profile: formData.selectedProfile.id
},
associated_profile_email: formData.associated_profile_email,
establishment: selectedEstablishmentId,
role_type: formData.role_type,
specialities: formData.specialities
};
@ -185,28 +166,20 @@ const TeachersSection = ({ teachers, setTeachers, specialities, handleCreate, ha
};
const handleUpdateTeacher = (id, updatedData) => {
if (updatedData.last_name && updatedData.first_name && updatedData.email) {
if (updatedData.last_name && updatedData.first_name && updatedData.associated_profile_email_display) {
const data = {
email: updatedData.email,
username: updatedData.email,
droit: updatedData.droit,
last_name: formData.last_name,
first_name: formData.first_name,
associated_profile_email: formData.associated_profile_email || formData.associated_profile_email_display,
establishment: selectedEstablishmentId,
role_type: formData.role_type,
specialities: formData.specialities
};
updateProfile(updatedData.associated_profile, data, csrfToken)
.then(response => {
logger.debug('Success:', response);
handleEdit(id, updatedData)
.then((updatedTeacher) => {
setTeachers(prevTeachers => prevTeachers.map(teacher => teacher.id === id ? { ...teacher, ...updatedTeacher } : teacher));
setEditingTeacher(null);
setFormData({});
})
.catch((error) => {
logger.error('Error:', error.message);
if (error.details) {
logger.error('Form errors:', error.details);
setLocalErrors(error.details);
}
});
handleEdit(id, data)
.then((updatedTeacher) => {
setTeachers(prevTeachers => prevTeachers.map(teacher => teacher.id === id ? { ...teacher, ...updatedTeacher } : teacher));
setEditingTeacher(null);
setFormData({});
})
.catch((error) => {
logger.error('Error:', error.message);
@ -265,6 +238,15 @@ const TeachersSection = ({ teachers, setTeachers, specialities, handleCreate, ha
}
};
const handleEditTeacher = (teacher) => {
setEditingTeacher(teacher.id);
setFormData({
...teacher,
associated_profile_email: teacher.associated_profile_email_display,
role_type: teacher.role_type_display,
});
};
const renderTeacherCell = (teacher, column) => {
const isEditing = editingTeacher === teacher.id;
const isCreating = newTeacher && newTeacher.id === teacher.id;
@ -291,26 +273,17 @@ const TeachersSection = ({ teachers, setTeachers, specialities, handleCreate, ha
/>
</div>
);
case 'EMAIL':
return (
<div className="flex items-center space-x-2">
{currentData.selectedProfile ? (
<span className="text-gray-900">
{currentData.selectedProfile.email}
</span>
) : (
<span className="text-gray-500 italic">
Rechercher un profil existant
</span>
)}
<button
type="button"
onClick={() => setDirectoryPopupVisible(true)}
>
<Search className="w-5 h-5 text-emerald-500 hover:text-emerald-700"/>
</button>
</div>
);
case 'EMAIL':
return (
<InputText
name="associated_profile_email"
type="email"
value={currentData.associated_profile_email || teacher.associated_profile_email_display || ''}
onChange={handleChange}
placeholder="Adresse email de l'enseignant"
errorMsg={getError('email')}
/>
);
case 'SPECIALITES':
return (
<SpecialitiesDropZone teacher={currentData} handleSpecialitiesChange={handleSpecialitiesChange} specialities={specialities} isEditing={isEditing || isCreating} />
@ -319,8 +292,8 @@ const TeachersSection = ({ teachers, setTeachers, specialities, handleCreate, ha
return (
<div className="flex justify-center">
<ToggleSwitch
name="droit"
checked={currentData.droit === 1}
name="role_type"
checked={currentData.role_type === 1}
onChange={handleChange}
/>
</div>
@ -354,7 +327,7 @@ const TeachersSection = ({ teachers, setTeachers, specialities, handleCreate, ha
<TeacherItem key={teacher.id} teacher={teacher} />
);
case 'EMAIL':
return teacher.associated_profile_email;
return teacher.associated_profile_email_display;
case 'SPECIALITES':
return (
<div className="flex justify-center space-x-2 flex-wrap">
@ -364,9 +337,9 @@ const TeachersSection = ({ teachers, setTeachers, specialities, handleCreate, ha
</div>
);
case 'ADMINISTRATEUR':
if (teacher.associated_profile_email) {
const badgeClass = teacher.role_type.role_type === 1 ? 'bg-red-100 text-red-600' : 'bg-blue-100 text-blue-600';
const label = teacher.role_type.role_type === 1 ? 'OUI' : 'NON';
if (teacher.associated_profile_email_display) {
const badgeClass = teacher.role_type_display === 1 ? 'bg-red-100 text-red-600' : 'bg-blue-100 text-blue-600';
const label = teacher.role_type_display === 1 ? 'OUI' : 'NON';
return (
<div key={teacher.id} className="flex justify-center items-center space-x-2">
<span className={`px-3 py-1 rounded-full font-bold ${badgeClass}`}>
@ -384,7 +357,7 @@ const TeachersSection = ({ teachers, setTeachers, specialities, handleCreate, ha
<div className="flex justify-center space-x-2">
<button
type="button"
onClick={() => setEditingTeacher(teacher.id) || setFormData(teacher)}
onClick={() => handleEditTeacher(teacher)}
className="text-blue-500 hover:text-blue-700"
>
<Edit3 className="w-5 h-5" />