fix: Ajout d'un message de confirmation lors de la suppression d'un

master template docuseal
This commit is contained in:
N3WT DE COMPET
2025-04-27 18:33:08 +02:00
parent be013f0786
commit 92484804f6

View File

@ -27,6 +27,8 @@ import RegistrationFileGroupForm from '@/components/Structure/Files/Registration
import logger from '@/utils/logger'; import logger from '@/utils/logger';
import ParentFilesSection from '@/components/Structure/Files/ParentFilesSection'; import ParentFilesSection from '@/components/Structure/Files/ParentFilesSection';
import SectionHeader from '@/components/SectionHeader'; import SectionHeader from '@/components/SectionHeader';
import Popup from '@/components/Popup';
import Loader from '@/components/Loader';
export default function FilesGroupsManagement({ export default function FilesGroupsManagement({
csrfToken, csrfToken,
@ -43,10 +45,13 @@ export default function FilesGroupsManagement({
const [isGroupModalOpen, setIsGroupModalOpen] = useState(false); const [isGroupModalOpen, setIsGroupModalOpen] = useState(false);
const [groupToEdit, setGroupToEdit] = useState(null); const [groupToEdit, setGroupToEdit] = useState(null);
const [reloadTemplates, setReloadTemplates] = useState(false); 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 = () => { const handleReloadTemplates = () => {
setReloadTemplates(true); setReloadTemplates(true);
@ -101,55 +106,79 @@ export default function FilesGroupsManagement({
}, [reloadTemplates, selectedEstablishmentId]); }, [reloadTemplates, selectedEstablishmentId]);
const deleteTemplateMaster = (templateMaster) => { const deleteTemplateMaster = (templateMaster) => {
// Supprimer les clones associés via l'API DocuSeal setRemovePopupVisible(true);
const removeClonesPromises = schoolFileTemplates setRemovePopupMessage(
.filter((template) => template.master === templateMaster.id) `Attentions ! \nVous êtes sur le point de supprimer le document "${templateMaster.name}".\nÊtes-vous sûr(e) de vouloir poursuivre l'opération ?`
.map((template) => removeTemplate(template.id)); );
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 // Ajouter la suppression du master à la liste des promesses
removeClonesPromises.push(removeTemplate(templateMaster.id)); removeClonesPromises.push(removeTemplate(templateMaster.id));
// Attendre que toutes les suppressions dans DocuSeal soient terminées // Attendre que toutes les suppressions dans DocuSeal soient terminées
Promise.all(removeClonesPromises) Promise.all(removeClonesPromises)
.then((responses) => { .then((responses) => {
const allSuccessful = responses.every((response) => response.ok); const allSuccessful = responses.every((response) => response.ok);
if (allSuccessful) { if (allSuccessful) {
logger.debug('Master et clones supprimés avec succès de DocuSeal.'); logger.debug('Master et clones supprimés avec succès de DocuSeal.');
// Supprimer le template master de la base de données // Supprimer le template master de la base de données
deleteRegistrationSchoolFileMaster(templateMaster.id, csrfToken) deleteRegistrationSchoolFileMaster(templateMaster.id, csrfToken)
.then((response) => { .then((response) => {
if (response.ok) { if (response.ok) {
setSchoolFileMasters( setSchoolFileMasters(
schoolFileMasters.filter( schoolFileMasters.filter(
(fichier) => fichier.id !== templateMaster.id (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.'); setPopupVisible(true);
} else { setRemovePopupVisible(false);
alert( setIsLoading(false);
'Erreur lors de la suppression du fichier dans la base de données.' });
); } else {
} setPopupMessage(
}) `Erreur lors de la suppression du document "${templateMaster.name}".`
.catch((error) => { );
console.error('Error deleting file from database:', error); setPopupVisible(true);
alert( setRemovePopupVisible(false);
'Erreur lors de la suppression du fichier dans la base de données.' setIsLoading(false);
); }
}); })
} else { .catch((error) => {
alert( console.error('Error removing template from DocuSeal:', error);
'Erreur lors de la suppression du master ou des clones dans DocuSeal.' setPopupMessage(
`Erreur lors de la suppression du document "${templateMaster.name}".`
); );
} setPopupVisible(true);
}) setRemovePopupVisible(false);
.catch((error) => { setIsLoading(false);
console.error('Error removing template from DocuSeal:', error); });
alert( });
'Erreur lors de la suppression du master ou des clones dans DocuSeal.'
);
});
}; };
const removeTemplate = (templateId) => { const removeTemplate = (templateId) => {
@ -428,6 +457,10 @@ export default function FilesGroupsManagement({
}, },
]; ];
if (isLoading) {
return <Loader />;
}
return ( return (
<div className="w-full mx-auto mt-6"> <div className="w-full mx-auto mt-6">
{/* Modal pour les fichiers */} {/* Modal pour les fichiers */}
@ -506,6 +539,20 @@ export default function FilesGroupsManagement({
handleEdit={handleEdit} handleEdit={handleEdit}
handleDelete={handleDelete} handleDelete={handleDelete}
/> />
<Popup
visible={popupVisible}
message={popupMessage}
onConfirm={() => setPopupVisible(false)}
onCancel={() => setPopupVisible(false)}
uniqueConfirmButton={true}
/>
<Popup
visible={removePopupVisible}
message={removePopupMessage}
onConfirm={removePopupOnConfirm}
onCancel={() => setRemovePopupVisible(false)}
/>
</div> </div>
); );
} }