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 }} + /> + )}
))}