From 92484804f6483eab401612315b5513cc78e6a726 Mon Sep 17 00:00:00 2001 From: N3WT DE COMPET Date: Sun, 27 Apr 2025 18:33:08 +0200 Subject: [PATCH] fix: Ajout d'un message de confirmation lors de la suppression d'un master template docuseal --- .../Structure/Files/FilesGroupsManagement.js | 141 ++++++++++++------ 1 file changed, 94 insertions(+), 47 deletions(-) diff --git a/Front-End/src/components/Structure/Files/FilesGroupsManagement.js b/Front-End/src/components/Structure/Files/FilesGroupsManagement.js index 708aabb..ca10c02 100644 --- a/Front-End/src/components/Structure/Files/FilesGroupsManagement.js +++ b/Front-End/src/components/Structure/Files/FilesGroupsManagement.js @@ -27,6 +27,8 @@ import RegistrationFileGroupForm from '@/components/Structure/Files/Registration import logger from '@/utils/logger'; import ParentFilesSection from '@/components/Structure/Files/ParentFilesSection'; import SectionHeader from '@/components/SectionHeader'; +import Popup from '@/components/Popup'; +import Loader from '@/components/Loader'; export default function FilesGroupsManagement({ csrfToken, @@ -43,10 +45,13 @@ export default function FilesGroupsManagement({ const [isGroupModalOpen, setIsGroupModalOpen] = useState(false); const [groupToEdit, setGroupToEdit] = useState(null); const [reloadTemplates, setReloadTemplates] = useState(false); - const [editingDocumentId, setEditingDocumentId] = useState(null); - const [formData, setFormData] = useState({}); - const [uploadedFileName, setUploadedFileName] = useState(''); + const [popupVisible, setPopupVisible] = useState(false); + const [popupMessage, setPopupMessage] = useState(''); + const [removePopupVisible, setRemovePopupVisible] = useState(false); + const [removePopupMessage, setRemovePopupMessage] = useState(''); + const [removePopupOnConfirm, setRemovePopupOnConfirm] = useState(() => {}); + const [isLoading, setIsLoading] = useState(false); const handleReloadTemplates = () => { setReloadTemplates(true); @@ -101,55 +106,79 @@ export default function FilesGroupsManagement({ }, [reloadTemplates, selectedEstablishmentId]); const deleteTemplateMaster = (templateMaster) => { - // Supprimer les clones associés via l'API DocuSeal - const removeClonesPromises = schoolFileTemplates - .filter((template) => template.master === templateMaster.id) - .map((template) => removeTemplate(template.id)); + setRemovePopupVisible(true); + setRemovePopupMessage( + `Attentions ! \nVous êtes sur le point de supprimer le document "${templateMaster.name}".\nÊtes-vous sûr(e) de vouloir poursuivre l'opération ?` + ); + setRemovePopupOnConfirm(() => () => { + setIsLoading(true); + // Supprimer les clones associés via l'API DocuSeal + const removeClonesPromises = schoolFileTemplates + .filter((template) => template.master === templateMaster.id) + .map((template) => removeTemplate(template.id)); - // Ajouter la suppression du master à la liste des promesses - removeClonesPromises.push(removeTemplate(templateMaster.id)); + // Ajouter la suppression du master à la liste des promesses + removeClonesPromises.push(removeTemplate(templateMaster.id)); - // Attendre que toutes les suppressions dans DocuSeal soient terminées - Promise.all(removeClonesPromises) - .then((responses) => { - const allSuccessful = responses.every((response) => response.ok); - if (allSuccessful) { - logger.debug('Master et clones supprimés avec succès de DocuSeal.'); + // Attendre que toutes les suppressions dans DocuSeal soient terminées + Promise.all(removeClonesPromises) + .then((responses) => { + const allSuccessful = responses.every((response) => response.ok); + if (allSuccessful) { + logger.debug('Master et clones supprimés avec succès de DocuSeal.'); - // Supprimer le template master de la base de données - deleteRegistrationSchoolFileMaster(templateMaster.id, csrfToken) - .then((response) => { - if (response.ok) { - setSchoolFileMasters( - schoolFileMasters.filter( - (fichier) => fichier.id !== templateMaster.id - ) + // Supprimer le template master de la base de données + deleteRegistrationSchoolFileMaster(templateMaster.id, csrfToken) + .then((response) => { + if (response.ok) { + setSchoolFileMasters( + schoolFileMasters.filter( + (fichier) => fichier.id !== templateMaster.id + ) + ); + setPopupMessage( + `Le document "${templateMaster.name}" a été correctement supprimé.` + ); + setPopupVisible(true); + setRemovePopupVisible(false); + setIsLoading(false); + } else { + setPopupMessage( + `Erreur lors de la suppression du document "${templateMaster.name}".` + ); + setPopupVisible(true); + setRemovePopupVisible(false); + setIsLoading(false); + } + }) + .catch((error) => { + console.error('Error deleting file from database:', error); + setPopupMessage( + `Erreur lors de la suppression du document "${templateMaster.name}".` ); - alert('Fichier supprimé avec succès.'); - } else { - alert( - 'Erreur lors de la suppression du fichier dans la base de données.' - ); - } - }) - .catch((error) => { - console.error('Error deleting file from database:', error); - alert( - 'Erreur lors de la suppression du fichier dans la base de données.' - ); - }); - } else { - alert( - 'Erreur lors de la suppression du master ou des clones dans DocuSeal.' + setPopupVisible(true); + setRemovePopupVisible(false); + setIsLoading(false); + }); + } else { + setPopupMessage( + `Erreur lors de la suppression du document "${templateMaster.name}".` + ); + setPopupVisible(true); + setRemovePopupVisible(false); + setIsLoading(false); + } + }) + .catch((error) => { + console.error('Error removing template from DocuSeal:', error); + setPopupMessage( + `Erreur lors de la suppression du document "${templateMaster.name}".` ); - } - }) - .catch((error) => { - console.error('Error removing template from DocuSeal:', error); - alert( - 'Erreur lors de la suppression du master ou des clones dans DocuSeal.' - ); - }); + setPopupVisible(true); + setRemovePopupVisible(false); + setIsLoading(false); + }); + }); }; const removeTemplate = (templateId) => { @@ -428,6 +457,10 @@ export default function FilesGroupsManagement({ }, ]; + if (isLoading) { + return ; + } + return (
{/* Modal pour les fichiers */} @@ -506,6 +539,20 @@ export default function FilesGroupsManagement({ handleEdit={handleEdit} handleDelete={handleDelete} /> + + setPopupVisible(false)} + onCancel={() => setPopupVisible(false)} + uniqueConfirmButton={true} + /> + setRemovePopupVisible(false)} + />
); }