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 (