mirror of
https://git.v0id.ovh/n3wt-innov/n3wt-school.git
synced 2026-04-06 13:11:25 +00:00
feat: Finalisation formulaire dynamique
This commit is contained in:
@ -1,7 +1,7 @@
|
||||
import React, { useState, useEffect } from 'react';
|
||||
import { useRouter } from 'next/navigation';
|
||||
import { Edit, Trash2, FileText, Star, ChevronDown, Plus } from 'lucide-react';
|
||||
import Modal from '@/components/Modal';
|
||||
import FormTemplateBuilder from '@/components/Form/FormTemplateBuilder';
|
||||
import {
|
||||
// GET
|
||||
fetchRegistrationFileGroups,
|
||||
@ -32,6 +32,7 @@ import CheckBox from '@/components/Form/CheckBox';
|
||||
import Button from '@/components/Form/Button';
|
||||
import InputText from '@/components/Form/InputText';
|
||||
import { getSecureFileUrl } from '@/utils/fileUrl';
|
||||
import { FE_ADMIN_STRUCTURE_FORM_BUILDER_URL } from '@/utils/Url';
|
||||
|
||||
function getItemBgColor(type, selected, forceTheme = false) {
|
||||
// Colonne gauche : blanc si rien n'est sélectionné, emerald si sélectionné
|
||||
@ -200,7 +201,7 @@ export default function FilesGroupsManagement({
|
||||
const [parentFiles, setParentFileMasters] = useState([]);
|
||||
const [groups, setGroups] = useState([]);
|
||||
|
||||
const [isModalOpen, setIsModalOpen] = useState(false);
|
||||
const router = useRouter();
|
||||
const [isEditing, setIsEditing] = useState(false);
|
||||
const [fileToEdit, setFileToEdit] = useState(null);
|
||||
const [isGroupModalOpen, setIsGroupModalOpen] = useState(false);
|
||||
@ -226,10 +227,8 @@ export default function FilesGroupsManagement({
|
||||
const handleDocDropdownSelect = (type) => {
|
||||
setIsDocDropdownOpen(false);
|
||||
if (type === 'formulaire') {
|
||||
// Ouvre la modale unique en mode création
|
||||
setIsEditing(false);
|
||||
setFileToEdit(null);
|
||||
setIsModalOpen(true);
|
||||
const groupParam = selectedGroupId ? `?groupId=${selectedGroupId}` : '';
|
||||
router.push(`${FE_ADMIN_STRUCTURE_FORM_BUILDER_URL}${groupParam}`);
|
||||
} else if (type === 'formulaire_existant') {
|
||||
setIsFileUploadPopupOpen(true);
|
||||
setFileToEdit({});
|
||||
@ -329,28 +328,29 @@ export default function FilesGroupsManagement({
|
||||
};
|
||||
|
||||
const editTemplateMaster = (file) => {
|
||||
// Si le formulaire n'est pas personnalisé, ouvrir la popup de téléchargement
|
||||
if (
|
||||
!file.formMasterData ||
|
||||
!Array.isArray(file.formMasterData.fields) ||
|
||||
file.formMasterData.fields.length === 0
|
||||
) {
|
||||
setFileToEdit(file);
|
||||
setIsFileUploadPopupOpen(true);
|
||||
setIsEditing(true);
|
||||
const isDynamic =
|
||||
file.formMasterData &&
|
||||
Array.isArray(file.formMasterData.fields) &&
|
||||
file.formMasterData.fields.length > 0;
|
||||
|
||||
if (isDynamic) {
|
||||
router.push(`${FE_ADMIN_STRUCTURE_FORM_BUILDER_URL}?id=${file.id}`);
|
||||
} else {
|
||||
setIsEditing(true);
|
||||
setFileToEdit(file);
|
||||
setIsModalOpen(true);
|
||||
setIsEditing(true);
|
||||
setIsFileUploadPopupOpen(true);
|
||||
}
|
||||
};
|
||||
|
||||
const handleCreateSchoolFileMaster = ({
|
||||
name,
|
||||
group_ids,
|
||||
formMasterData,
|
||||
file,
|
||||
}) => {
|
||||
const handleCreateSchoolFileMaster = (
|
||||
{
|
||||
name,
|
||||
group_ids,
|
||||
formMasterData,
|
||||
file,
|
||||
},
|
||||
onCreated
|
||||
) => {
|
||||
// Toujours envoyer en FormData, même sans fichier
|
||||
const dataToSend = new FormData();
|
||||
const jsonData = {
|
||||
@ -379,12 +379,12 @@ export default function FilesGroupsManagement({
|
||||
createRegistrationSchoolFileMaster(dataToSend, csrfToken)
|
||||
.then((data) => {
|
||||
setSchoolFileMasters((prevFiles) => [...prevFiles, data]);
|
||||
setIsModalOpen(false);
|
||||
showNotification(
|
||||
`Le formulaire "${name}" a été créé avec succès.`,
|
||||
'success',
|
||||
'Succès'
|
||||
);
|
||||
if (onCreated) onCreated(data);
|
||||
})
|
||||
.catch((error) => {
|
||||
logger.error('Error creating form:', error);
|
||||
@ -460,7 +460,6 @@ export default function FilesGroupsManagement({
|
||||
setSchoolFileMasters((prevFichiers) =>
|
||||
prevFichiers.map((f) => (f.id === id ? data : f))
|
||||
);
|
||||
setIsModalOpen(false);
|
||||
showNotification(
|
||||
`Le formulaire "${name}" a été modifié avec succès.`,
|
||||
'success',
|
||||
@ -495,7 +494,6 @@ export default function FilesGroupsManagement({
|
||||
setSchoolFileMasters((prevFichiers) =>
|
||||
prevFichiers.map((f) => (f.id === id ? data : f))
|
||||
);
|
||||
setIsModalOpen(false);
|
||||
showNotification(
|
||||
`Le formulaire "${name}" a été modifié avec succès.`,
|
||||
'success',
|
||||
@ -888,13 +886,6 @@ export default function FilesGroupsManagement({
|
||||
return count;
|
||||
};
|
||||
|
||||
// Utilitaire pour ouvrir la modale FormTemplateBuilder (création ou édition)
|
||||
const openFormBuilderModal = (editing = false, initialData = null) => {
|
||||
setIsEditing(editing);
|
||||
setFileToEdit(initialData);
|
||||
setIsModalOpen(true);
|
||||
};
|
||||
|
||||
return (
|
||||
<div className="w-full">
|
||||
{/* Aide optionnelle */}
|
||||
@ -1094,37 +1085,6 @@ export default function FilesGroupsManagement({
|
||||
</div>
|
||||
</Modal>
|
||||
|
||||
{/* Modals pour création/édition d'un formulaire dynamique */}
|
||||
<Modal
|
||||
isOpen={isModalOpen}
|
||||
setIsOpen={(isOpen) => {
|
||||
setIsModalOpen(isOpen);
|
||||
if (!isOpen) {
|
||||
setFileToEdit(null);
|
||||
setIsEditing(false);
|
||||
}
|
||||
}}
|
||||
title={
|
||||
isEditing
|
||||
? 'Modification du formulaire'
|
||||
: 'Créer un formulaire personnalisé'
|
||||
}
|
||||
>
|
||||
<div className="w-11/12 h-5/6 max-w-5xl max-h-[90vh] overflow-y-auto">
|
||||
<FormTemplateBuilder
|
||||
onSave={(data) => {
|
||||
(isEditing
|
||||
? handleEditSchoolFileMaster
|
||||
: handleCreateSchoolFileMaster)(data);
|
||||
setIsModalOpen(false);
|
||||
}}
|
||||
initialData={isEditing ? fileToEdit : undefined}
|
||||
groups={groups}
|
||||
isEditing={isEditing}
|
||||
/>
|
||||
</div>
|
||||
</Modal>
|
||||
|
||||
{/* Popup pour création/édition d'un formulaire d'école déjà existant */}
|
||||
<Modal
|
||||
isOpen={isFileUploadPopupOpen}
|
||||
@ -1262,11 +1222,13 @@ export default function FilesGroupsManagement({
|
||||
!fileToEdit?.file
|
||||
)
|
||||
return;
|
||||
handleCreateSchoolFileMaster({
|
||||
name: fileToEdit.name,
|
||||
group_ids: fileToEdit.groups,
|
||||
file: fileToEdit.file,
|
||||
});
|
||||
handleCreateSchoolFileMaster(
|
||||
{
|
||||
name: fileToEdit.name,
|
||||
group_ids: fileToEdit.groups,
|
||||
file: fileToEdit.file,
|
||||
}
|
||||
);
|
||||
setIsFileUploadPopupOpen(false);
|
||||
setFileToEdit(null);
|
||||
}}
|
||||
|
||||
Reference in New Issue
Block a user