mirror of
https://git.v0id.ovh/n3wt-innov/n3wt-school.git
synced 2026-01-29 16:03:21 +00:00
feat: Précablage du formulaire dynamique [N3WTS-17]
This commit is contained in:
@ -15,7 +15,6 @@ export default function Home() {
|
||||
<h1 className="text-4xl font-bold mb-4">{t('welcomeParents')}</h1>
|
||||
<p className="text-lg mb-8">{t('pleaseLogin')}</p>
|
||||
<Button text={t('loginButton')} primary href="/users/login" />
|
||||
<FormTemplateBuilder />
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
@ -6,10 +6,13 @@ import {
|
||||
BE_SUBSCRIPTION_ABSENCES_URL,
|
||||
BE_SUBSCRIPTION_STUDENT_COMPETENCIES_URL,
|
||||
BE_SUBSCRIPTION_SEARCH_STUDENTS_URL,
|
||||
BE_SUBSCRIPTION_REGISTRATION_SCHOOL_FILE_MASTERS_URL,
|
||||
BE_SUBSCRIPTION_REGISTRATION_SCHOOL_FILE_TEMPLATES_URL,
|
||||
} from '@/utils/Url';
|
||||
|
||||
import { CURRENT_YEAR_FILTER } from '@/utils/constants';
|
||||
import { errorHandler, requestResponseHandler } from './actionsHandlers';
|
||||
import logger from '@/utils/logger';
|
||||
|
||||
export const editStudentCompetencies = (data, csrfToken) => {
|
||||
const request = new Request(`${BE_SUBSCRIPTION_STUDENT_COMPETENCIES_URL}`, {
|
||||
@ -83,6 +86,45 @@ export const editRegisterForm = (id, data, csrfToken) => {
|
||||
.catch(errorHandler);
|
||||
};
|
||||
|
||||
export const autoSaveRegisterForm = async (id, data, csrfToken) => {
|
||||
try {
|
||||
// Version allégée pour auto-save - ne pas envoyer tous les fichiers
|
||||
const autoSaveData = new FormData();
|
||||
|
||||
// Ajouter seulement les données textuelles pour l'auto-save
|
||||
if (data.student) {
|
||||
autoSaveData.append('student_data', JSON.stringify(data.student));
|
||||
}
|
||||
if (data.guardians) {
|
||||
autoSaveData.append('guardians_data', JSON.stringify(data.guardians));
|
||||
}
|
||||
if (data.siblings) {
|
||||
autoSaveData.append('siblings_data', JSON.stringify(data.siblings));
|
||||
}
|
||||
if (data.currentPage) {
|
||||
autoSaveData.append('current_page', data.currentPage);
|
||||
}
|
||||
autoSaveData.append('auto_save', 'true');
|
||||
|
||||
return fetch(`${BE_SUBSCRIPTION_REGISTERFORMS_URL}/${id}`, {
|
||||
method: 'PATCH', // Utiliser PATCH pour les mises à jour partielles
|
||||
headers: {
|
||||
'X-CSRFToken': csrfToken,
|
||||
},
|
||||
body: autoSaveData,
|
||||
credentials: 'include',
|
||||
})
|
||||
.then(requestResponseHandler)
|
||||
.catch(() => {
|
||||
// Silent fail pour l'auto-save
|
||||
logger.debug('Auto-save failed silently');
|
||||
});
|
||||
} catch (error) {
|
||||
// Silent fail pour l'auto-save
|
||||
logger.debug('Auto-save error:', error);
|
||||
}
|
||||
};
|
||||
|
||||
export const createRegisterForm = (data, csrfToken) => {
|
||||
const url = `${BE_SUBSCRIPTION_REGISTERFORMS_URL}`;
|
||||
return fetch(url, {
|
||||
@ -302,3 +344,68 @@ export const deleteAbsences = (id, csrfToken) => {
|
||||
credentials: 'include',
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Récupère les formulaires maîtres d'inscription pour un établissement
|
||||
* @param {number} establishmentId - ID de l'établissement
|
||||
* @returns {Promise<Array>} Liste des formulaires
|
||||
*/
|
||||
export const fetchRegistrationSchoolFileMasters = (establishmentId) => {
|
||||
const url = `${BE_SUBSCRIPTION_REGISTRATION_SCHOOL_FILE_MASTERS_URL}?establishment_id=${establishmentId}`;
|
||||
|
||||
return fetch(url, {
|
||||
method: 'GET',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
credentials: 'include',
|
||||
})
|
||||
.then(requestResponseHandler)
|
||||
.catch(errorHandler);
|
||||
};
|
||||
|
||||
/**
|
||||
* Sauvegarde les réponses d'un formulaire dans RegistrationSchoolFileTemplate
|
||||
* @param {number} templateId - ID du RegistrationSchoolFileTemplate
|
||||
* @param {Object} formTemplateData - Données du formulaire à sauvegarder
|
||||
* @param {string} csrfToken - Token CSRF
|
||||
* @returns {Promise} Résultat de la sauvegarde
|
||||
*/
|
||||
export const saveFormResponses = (templateId, formTemplateData, csrfToken) => {
|
||||
const url = `${BE_SUBSCRIPTION_REGISTRATION_SCHOOL_FILE_TEMPLATES_URL}/${templateId}`;
|
||||
|
||||
const payload = {
|
||||
formTemplateData: formTemplateData,
|
||||
};
|
||||
|
||||
return fetch(url, {
|
||||
method: 'PUT',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'X-CSRFToken': csrfToken,
|
||||
},
|
||||
body: JSON.stringify(payload),
|
||||
credentials: 'include',
|
||||
})
|
||||
.then(requestResponseHandler)
|
||||
.catch(errorHandler);
|
||||
};
|
||||
|
||||
/**
|
||||
* Récupère les données sauvegardées d'un RegistrationSchoolFileTemplate
|
||||
* @param {number} templateId - ID du RegistrationSchoolFileTemplate
|
||||
* @returns {Promise<Object>} Template avec formTemplateData
|
||||
*/
|
||||
export const fetchFormResponses = (templateId) => {
|
||||
const url = `${BE_SUBSCRIPTION_REGISTRATION_SCHOOL_FILE_TEMPLATES_URL}/${templateId}`;
|
||||
|
||||
return fetch(url, {
|
||||
method: 'GET',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
credentials: 'include',
|
||||
})
|
||||
.then(requestResponseHandler)
|
||||
.catch(errorHandler);
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user