Correction bug modale esignature
This commit is contained in:
parent
0362bc0738
commit
2257203831
1 changed files with 33 additions and 34 deletions
|
|
@ -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>
|
||||
)}
|
||||
|
|
|
|||
Loading…
Reference in a new issue