feat: Sauvegarde des formulaires d'école dans les bons dossiers /

utilisation des bons composants dans les modales [N3WTS-17]
This commit is contained in:
N3WT DE COMPET
2026-01-18 18:44:13 +01:00
parent 8549699dec
commit b4f70e6bad
7 changed files with 867 additions and 412 deletions

View File

@ -106,7 +106,6 @@ export const createRegistrationSchoolFileMaster = (data, csrfToken) => {
body: data,
headers: {
'X-CSRFToken': csrfToken,
// Pas de Content-Type, le navigateur gère pour FormData
},
credentials: 'include',
})
@ -187,10 +186,9 @@ export const editRegistrationSchoolFileMaster = (fileId, data, csrfToken) => {
`${BE_SUBSCRIPTION_REGISTRATION_SCHOOL_FILE_MASTERS_URL}/${fileId}`,
{
method: 'PUT',
body: JSON.stringify(data),
body: data,
headers: {
'X-CSRFToken': csrfToken,
'Content-Type': 'application/json',
},
credentials: 'include',
}

View File

@ -37,6 +37,7 @@ import {
FileUp,
PenTool,
} from 'lucide-react';
import CheckBox from '@/components/Form/CheckBox';
const FIELD_TYPES_ICON = {
text: { icon: TextCursorInput },
@ -520,29 +521,27 @@ export default function FormTemplateBuilder({
Groupes d'inscription{' '}
<span className="text-red-500">*</span>
</label>
<div className="space-y-2 max-h-32 overflow-y-auto border rounded-md p-2">
<div className="flex flex-wrap gap-4 max-h-32 overflow-y-auto border rounded-md p-2">
{groups && groups.length > 0 ? (
groups.map((group) => (
<label key={group.id} className="flex items-center">
<input
type="checkbox"
checked={selectedGroups.includes(group.id)}
onChange={(e) => {
if (e.target.checked) {
setSelectedGroups([
...selectedGroups,
group.id,
]);
} else {
setSelectedGroups(
selectedGroups.filter((id) => id !== group.id)
);
}
}}
className="mr-2 text-blue-600"
/>
<span className="text-sm">{group.name}</span>
</label>
<CheckBox
key={group.id}
item={{ id: group.id }}
formData={{
groups: selectedGroups
}}
handleChange={() => {
let group_ids = selectedGroups;
if (group_ids.includes(group.id)) {
group_ids = group_ids.filter((id) => id !== group.id);
} else {
group_ids = [...group_ids, group.id];
}
setSelectedGroups(group_ids);
}}
fieldName="groups"
itemLabelFunc={() => group.name}
/>
))
) : (
<p className="text-gray-500 text-sm">

View File

@ -1,4 +1,6 @@
import React, { useState, useEffect } from 'react';
import InputText from '@/components/Form/InputText';
import Button from '@/components/Form/Button';
export default function RegistrationFileGroupForm({ onSubmit, initialData }) {
const [name, setName] = useState('');
@ -18,38 +20,28 @@ export default function RegistrationFileGroupForm({ onSubmit, initialData }) {
return (
<form onSubmit={handleSubmit} className="space-y-4">
<div>
<label className="block text-sm font-medium text-gray-700 mb-1">
Nom du groupe
</label>
<input
type="text"
value={name}
onChange={(e) => setName(e.target.value)}
className="w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-1 focus:ring-blue-500 focus:border-blue-500"
required
/>
</div>
<div>
<label className="block text-sm font-medium text-gray-700 mb-1">
Description
</label>
<textarea
value={description}
onChange={(e) => setDescription(e.target.value)}
rows={3}
className="w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-1 focus:ring-blue-500 focus:border-blue-500"
/>
</div>
{/* Utilisation de InputText pour le nom du groupe */}
<InputText
label="Nom du groupe"
name="name"
value={name}
onChange={(e) => setName(e.target.value)}
required
/>
<InputText
label="Description"
name="description"
value={description}
onChange={(e) => setDescription(e.target.value)}
required
/>
<div className="flex justify-end">
<button
<Button
primary
type="submit"
className="bg-blue-600 text-white px-4 py-2 rounded-md hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2"
>
{initialData ? 'Modifier le groupe' : 'Créer le groupe'}
</button>
text="Enregistrer"
/>
</div>
</form>
);