From 762dede0af37c41b2c1616216bd9f986d1e0c57f Mon Sep 17 00:00:00 2001 From: N3WT DE COMPET Date: Sun, 5 Apr 2026 10:36:15 +0200 Subject: [PATCH] =?UTF-8?q?fix:=20Boutons=20de=20navigation=20+=20mise=20e?= =?UTF-8?q?n=20page=20de=20l'aper=C3=A7u=20du=20formulaire=20dynamique?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Front-End/src/components/Form/FormRenderer.js | 81 +++++++- .../Inscription/DynamicFormsList.js | 8 +- .../Inscription/InscriptionFormShared.js | 173 +++++++++++------- 3 files changed, 181 insertions(+), 81 deletions(-) diff --git a/Front-End/src/components/Form/FormRenderer.js b/Front-End/src/components/Form/FormRenderer.js index cfe06ec..898e1fc 100644 --- a/Front-End/src/components/Form/FormRenderer.js +++ b/Front-End/src/components/Form/FormRenderer.js @@ -36,6 +36,8 @@ export default function FormRenderer({ }, // Callback de soumission personnalisé (optionnel) masterFile = null, }) { + const formFields = formConfig?.fields || []; + const resolveMasterFileUrl = (fileValue) => { if (!fileValue) return null; if (typeof fileValue !== 'string') return null; @@ -50,6 +52,52 @@ export default function FormRenderer({ const masterFileUrl = resolveMasterFileUrl(masterFile); + const detectMasterFileType = (fileUrl) => { + if (!fileUrl || typeof fileUrl !== 'string') return 'unknown'; + + let candidate = fileUrl; + + if (fileUrl.startsWith('/api/download?')) { + const queryPart = fileUrl.split('?')[1] || ''; + const params = new URLSearchParams(queryPart); + const pathFromQuery = params.get('path') || params.get('file'); + if (pathFromQuery) { + candidate = pathFromQuery; + } + } + + const cleanUrl = candidate.split('?')[0]; + + let lowerUrl = cleanUrl.toLowerCase(); + try { + lowerUrl = decodeURIComponent(cleanUrl).toLowerCase(); + } catch { + lowerUrl = cleanUrl.toLowerCase(); + } + + if (lowerUrl.endsWith('.pdf')) return 'pdf'; + if ( + lowerUrl.endsWith('.png') || + lowerUrl.endsWith('.jpg') || + lowerUrl.endsWith('.jpeg') || + lowerUrl.endsWith('.gif') || + lowerUrl.endsWith('.webp') || + lowerUrl.endsWith('.bmp') || + lowerUrl.endsWith('.svg') + ) { + return 'image'; + } + + return 'other'; + }; + + const masterFileType = detectMasterFileType(masterFileUrl); + const hasFileField = formFields.some((field) => field.type === 'file'); + + const formContainerClass = hasFileField + ? 'w-full max-w-4xl mx-auto' + : 'w-full max-w-md mx-auto'; + const { handleSubmit, control, @@ -149,14 +197,14 @@ export default function FormRenderer({ return (
{csrfToken ? : null}

{formConfig?.title || 'Formulaire'}

- {(formConfig?.fields || []).map((field) => ( + {formFields.map((field) => (
)} -