mirror of
https://git.v0id.ovh/n3wt-innov/n3wt-school.git
synced 2026-01-29 07:53:23 +00:00
feat: Mise à jour des Teacher
This commit is contained in:
@ -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" />
|
||||
|
||||
Reference in New Issue
Block a user