From fba47c6e7747bb51e927fe6b3a7c1623413f22f0 Mon Sep 17 00:00:00 2001 From: ECO Date: Wed, 6 May 2026 14:36:09 +0200 Subject: [PATCH] fix(ar1): upload file sostituibile in Quadro F + Signature Quadro F (Ar1Wizard.js): se uno slot ha gia un file selezionato si mostra preview con pulsante Rimuovi che azzera lo state, invece di FileUpload basic+auto+customUpload che dopo la prima selezione non riapre il picker. Signature (Ar1Signature.js): aggiunti useRef + key={uploadAttempt} dinamica sul FileUpload + helper resetUploadInput() chiamato in success/error/guard ext, per forzare il remount e permettere di ricaricare un nuovo file senza dover navigare via Torna alla Home. Bug segnalati da test sandbox 2026-05-06. --- src/modules/ar1/pages/Ar1Signature.js | 12 +++++++ src/modules/ar1/pages/Ar1Wizard.js | 48 ++++++++++++++++++--------- 2 files changed, 44 insertions(+), 16 deletions(-) diff --git a/src/modules/ar1/pages/Ar1Signature.js b/src/modules/ar1/pages/Ar1Signature.js index f79bdfb..6613545 100644 --- a/src/modules/ar1/pages/Ar1Signature.js +++ b/src/modules/ar1/pages/Ar1Signature.js @@ -27,6 +27,13 @@ const Ar1Signature = () => { const [loading, setLoading] = useState(true); const [generating, setGenerating] = useState(false); const [uploading, setUploading] = useState(false); + const [uploadAttempt, setUploadAttempt] = useState(0); + const fileUploadRef = useRef(null); + + const resetUploadInput = () => { + try { fileUploadRef.current?.clear?.(); } catch (_) {} + setUploadAttempt(n => n + 1); + }; const refreshForm = () => { Ar1Service.getForm(formId, @@ -76,6 +83,7 @@ const Ar1Signature = () => { const ext = file.name.toLowerCase().slice(file.name.lastIndexOf('.')); if (ext !== '.pdf' && ext !== '.p7m') { if (toast.current) toast.current.show({ severity: 'warn', summary: 'Formato non valido', detail: 'Accettati: .pdf (PAdES) o .p7m (CAdES)' }); + resetUploadInput(); return; } @@ -85,6 +93,7 @@ const Ar1Signature = () => { Ar1Service.uploadSignature(formId, file, (resp) => { setUploading(false); + resetUploadInput(); refreshForm(); const outcome = resp?.outcome; if (outcome === 'VERIFIED') { @@ -98,6 +107,7 @@ const Ar1Signature = () => { }, (err) => { setUploading(false); + resetUploadInput(); if (err?.detail?.code === 'NO_SIGNATURE_DETECTED') { if (toast.current) toast.current.show({ severity: 'error', @@ -152,6 +162,8 @@ const Ar1Signature = () => {

{__('Formati accettati: PDF con firma PAdES oppure file .p7m (CAdES). Dimensione massima 50 MB.', 'gepafin')}

{ {quadro.upload_slots.map(slot => (
- { - const file = e.files[0]; - handleFieldChange(quadro.id, slot.id, { filename: file.name, size: file.size }); - if (toast.current) toast.current.show({ severity: 'info', summary: 'File selezionato', detail: file.name }); - }} - auto - chooseLabel={q[slot.id]?.filename || __('Scegli file', 'gepafin')} - style={{ marginTop: 6 }} - /> + {q[slot.id]?.filename ? ( +
+ + {q[slot.id].filename} +
+ ) : ( + { + const file = e.files[0]; + handleFieldChange(quadro.id, slot.id, { filename: file.name, size: file.size }); + if (toast.current) toast.current.show({ severity: 'info', summary: 'File selezionato', detail: file.name }); + }} + auto + chooseLabel={__('Scegli file', 'gepafin')} + style={{ marginTop: 6 }} + /> + )}
))}