mirror of
https://git.v0id.ovh/n3wt-innov/n3wt-school.git
synced 2026-01-28 23:43:22 +00:00
feat: Utilisation d'une clef API Docuseal par établissement
This commit is contained in:
@ -1,5 +1,5 @@
|
||||
import React, { useState, useEffect } from 'react';
|
||||
import { Download, Edit3, Trash2, FolderPlus, Signature } from 'lucide-react';
|
||||
import { Download, Edit3, Trash2, FolderPlus, Signature, AlertTriangle } from 'lucide-react';
|
||||
import Modal from '@/components/Modal';
|
||||
import Table from '@/components/Table';
|
||||
import FileUploadDocuSeal from '@/components/Structure/Files/FileUploadDocuSeal';
|
||||
@ -22,6 +22,8 @@ import {
|
||||
deleteRegistrationFileGroup,
|
||||
deleteRegistrationSchoolFileMaster,
|
||||
deleteRegistrationParentFileMaster,
|
||||
|
||||
removeTemplate
|
||||
} from '@/app/actions/registerFileGroupAction';
|
||||
import RegistrationFileGroupForm from '@/components/Structure/Files/RegistrationFileGroupForm';
|
||||
import logger from '@/utils/logger';
|
||||
@ -35,6 +37,7 @@ import AlertMessage from '@/components/AlertMessage';
|
||||
export default function FilesGroupsManagement({
|
||||
csrfToken,
|
||||
selectedEstablishmentId,
|
||||
apiDocuseal
|
||||
}) {
|
||||
const [schoolFileMasters, setSchoolFileMasters] = useState([]);
|
||||
const [schoolFileTemplates, setSchoolFileTemplates] = useState([]);
|
||||
@ -114,17 +117,19 @@ export default function FilesGroupsManagement({
|
||||
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));
|
||||
const removeClonesPromises = [
|
||||
...schoolFileTemplates
|
||||
.filter((template) => template.master === templateMaster.id)
|
||||
.map((template) =>
|
||||
removeTemplate(template.id, selectedEstablishmentId, apiDocuseal)
|
||||
),
|
||||
removeTemplate(templateMaster.id, selectedEstablishmentId, apiDocuseal),
|
||||
];
|
||||
|
||||
// Attendre que toutes les suppressions dans DocuSeal soient terminées
|
||||
Promise.all(removeClonesPromises)
|
||||
.then((responses) => {
|
||||
const allSuccessful = responses.every((response) => response.ok);
|
||||
const allSuccessful = responses.every((response) => response && response.id);
|
||||
if (allSuccessful) {
|
||||
logger.debug('Master et clones supprimés avec succès de DocuSeal.');
|
||||
|
||||
@ -188,31 +193,6 @@ export default function FilesGroupsManagement({
|
||||
});
|
||||
};
|
||||
|
||||
const removeTemplate = (templateId) => {
|
||||
return fetch('/api/docuseal/removeTemplate/', {
|
||||
method: 'DELETE',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'X-CSRFToken': csrfToken,
|
||||
},
|
||||
body: JSON.stringify({
|
||||
templateId,
|
||||
}),
|
||||
})
|
||||
.then((response) => {
|
||||
if (!response.ok) {
|
||||
return response.json().then((err) => {
|
||||
throw new Error(err.message);
|
||||
});
|
||||
}
|
||||
return response;
|
||||
})
|
||||
.catch((error) => {
|
||||
logger.error('Error removing template:', error);
|
||||
throw error;
|
||||
});
|
||||
};
|
||||
|
||||
const editTemplateMaster = (file) => {
|
||||
setIsEditing(true);
|
||||
setFileToEdit(file);
|
||||
@ -562,13 +542,25 @@ export default function FilesGroupsManagement({
|
||||
icon={Signature}
|
||||
title="Formulaires à remplir"
|
||||
description="Gérez les formulaires nécessitant une signature électronique."
|
||||
button={true}
|
||||
button={apiDocuseal}
|
||||
buttonOpeningModal={true}
|
||||
onClick={() => {
|
||||
setIsModalOpen(true);
|
||||
setIsEditing(false);
|
||||
}}
|
||||
/>
|
||||
<div className="mb-4">
|
||||
<span
|
||||
className={`inline-flex items-center px-3 py-1 rounded-full text-sm font-semibold ${
|
||||
!apiDocuseal && 'bg-red-100 text-red-700 border border-red-300'
|
||||
}`}
|
||||
>
|
||||
{!apiDocuseal && (
|
||||
<AlertTriangle className="w-4 h-4 mr-2 text-red-500" />
|
||||
)}
|
||||
{!apiDocuseal && 'Clé API Docuseal manquante'}
|
||||
</span>
|
||||
</div>
|
||||
<Table
|
||||
data={filteredFiles}
|
||||
columns={columnsFiles}
|
||||
|
||||
Reference in New Issue
Block a user