Correction bug modale esignature

This commit is contained in:
odentas 2025-10-14 19:27:45 +02:00
parent 0362bc0738
commit 2257203831

View file

@ -106,6 +106,9 @@ export default function SignaturesElectroniques() {
// État pour le sélecteur d'organisation (staff uniquement)
const [selectedOrgId, setSelectedOrgId] = useState<string>("");
// Référence pour le conteneur DocuSeal
const docusealContainerRef = useRef<HTMLDivElement>(null);
// Charger les infos utilisateur et organisations
const { data: userInfo } = useUserInfo();
const { data: organizations } = useOrganizations();
@ -142,6 +145,35 @@ export default function SignaturesElectroniques() {
load();
}, [selectedOrgId]); // Recharger quand l'organisation change
// useEffect pour injecter le composant DocuSeal uniquement quand embedSrc change
useEffect(() => {
if (!embedSrc || !docusealContainerRef.current) return;
const container = docusealContainerRef.current;
// Récupérer la signature depuis sessionStorage
const signature = sessionStorage.getItem('docuseal_signature_b64');
// Construire les attributs
let dataSignatureAttr = '';
if (signature) {
console.log('✅ [SIGNATURES] Injection de la signature dans DocuSeal form');
dataSignatureAttr = `data-signature="${signature}"`;
} else {
console.log('⚠️ [SIGNATURES] Pas de signature à injecter');
}
// Injecter le HTML une seule fois
container.innerHTML = `<docuseal-form
data-src="${embedSrc}"
data-language="fr"
data-with-title="false"
data-background-color="#fff"
data-allow-typed-signature="false"
${dataSignatureAttr}>
</docuseal-form>`;
}, [embedSrc]); // Ne se ré-exécute que quand embedSrc change
// Ajouter des écouteurs pour recharger les données quand un modal se ferme
useEffect(() => {
const dlgSignature = document.getElementById('dlg-signature') as HTMLDialogElement | null;
@ -274,13 +306,6 @@ export default function SignaturesElectroniques() {
// show modal
const dlg = document.getElementById('dlg-signature') as HTMLDialogElement | null;
if (dlg) {
// Ajouter un listener pour rafraîchir les données quand le modal se ferme
const handleClose = () => {
load(); // Recharger les données
dlg.removeEventListener('close', handleClose);
};
dlg.addEventListener('close', handleClose);
if (typeof dlg.showModal === 'function') dlg.showModal();
else dlg.setAttribute('open', '');
}
@ -570,33 +595,7 @@ export default function SignaturesElectroniques() {
</div>
<div className="overflow-auto" style={{ height: 'calc(90vh - 60px)', minHeight: 480 }}>
{embedSrc ? (
<div
ref={(el) => {
if (el && embedSrc) {
// Récupérer la signature depuis sessionStorage
const signature = sessionStorage.getItem('docuseal_signature_b64');
// Construire les attributs
let dataSignatureAttr = '';
if (signature) {
console.log('✅ [SIGNATURES] Injection de la signature dans DocuSeal form');
dataSignatureAttr = `data-signature="${signature}"`;
} else {
console.log('⚠️ [SIGNATURES] Pas de signature à injecter');
}
// Injecter le HTML avec ou sans signature
el.innerHTML = `<docuseal-form
data-src="${embedSrc}"
data-language="fr"
data-with-title="false"
data-background-color="#fff"
data-allow-typed-signature="false"
${dataSignatureAttr}>
</docuseal-form>`;
}
}}
/>
<div ref={docusealContainerRef} />
) : (
<div className="p-4 text-slate-500">Préparation du formulaire</div>
)}