import { BE_SUBSCRIPTION_REGISTRATIONFILE_GROUPS_URL, BE_SUBSCRIPTION_REGISTRATION_SCHOOL_FILE_TEMPLATES_URL, BE_SUBSCRIPTION_REGISTRATION_SCHOOL_FILE_MASTERS_URL, BE_SUBSCRIPTION_REGISTRATION_PARENT_FILE_MASTERS_URL, BE_SUBSCRIPTION_REGISTRATION_PARENT_FILE_TEMPLATES_URL, FE_API_DOCUSEAL_CLONE_URL, FE_API_DOCUSEAL_DOWNLOAD_URL, FE_API_DOCUSEAL_GENERATE_TOKEN } from '@/utils/Url'; const requestResponseHandler = async (response) => { const body = await response.json(); if (response.ok) { return body; } // Throw an error with the JSON body containing the form errors const error = new Error(body?.errorMessage || "Une erreur est survenue"); error.details = body; throw error; }; // FETCH requests export async function fetchRegistrationFileGroups(establishment) { const response = await fetch(`${BE_SUBSCRIPTION_REGISTRATIONFILE_GROUPS_URL}?establishment_id=${establishment}`, { credentials: 'include', headers: { 'Accept': 'application/json', } }); if (!response.ok) { throw new Error('Failed to fetch file groups'); } return response.json(); }; export const fetchRegistrationFileFromGroup = async (groupId) => { const response = await fetch(`${BE_SUBSCRIPTION_REGISTRATIONFILE_GROUPS_URL}/${groupId}/school_file_templates`, { credentials: 'include', headers: { 'Accept': 'application/json', } }); if (!response.ok) { throw new Error('Erreur lors de la récupération des fichiers associés au groupe'); } return response.json(); }; export const fetchRegistrationSchoolFileMasters = (id = null) => { let url = `${BE_SUBSCRIPTION_REGISTRATION_SCHOOL_FILE_MASTERS_URL}`; if(id){ url = `${BE_SUBSCRIPTION_REGISTRATION_SCHOOL_FILE_MASTERS_URL}/${id}`; } const request = new Request( `${url}`, { method:'GET', headers: { 'Content-Type':'application/json' }, } ); return fetch(request).then(requestResponseHandler) }; export const fetchRegistrationParentFileMasters = (id = null) => { let url = `${BE_SUBSCRIPTION_REGISTRATION_PARENT_FILE_MASTERS_URL}` if (id) { url = `${BE_SUBSCRIPTION_REGISTRATION_PARENT_FILE_MASTERS_URL}/${id}`; } const request = new Request( `${url}`, { method:'GET', headers: { 'Content-Type':'application/json' }, } ); return fetch(request).then(requestResponseHandler) }; export const fetchRegistrationSchoolFileTemplates = (id = null) => { let url = `${BE_SUBSCRIPTION_REGISTRATION_SCHOOL_FILE_TEMPLATES_URL}` if (id) { url = `${BE_SUBSCRIPTION_REGISTRATION_SCHOOL_FILE_TEMPLATES_URL}/${id}`; } const request = new Request( `${url}`, { method:'GET', headers: { 'Content-Type':'application/json' }, } ); return fetch(request).then(requestResponseHandler) }; // CREATE requests export async function createRegistrationFileGroup(groupData, csrfToken) { const response = await fetch(`${BE_SUBSCRIPTION_REGISTRATIONFILE_GROUPS_URL}`, { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-CSRFToken': csrfToken, }, body: JSON.stringify(groupData), credentials: 'include' }); if (!response.ok) { throw new Error('Failed to create file group'); } return response.json(); }; export const createRegistrationSchoolFileMaster = (data,csrfToken) => { return fetch(`${BE_SUBSCRIPTION_REGISTRATION_SCHOOL_FILE_MASTERS_URL}`, { method: 'POST', body: JSON.stringify(data), headers: { 'X-CSRFToken': csrfToken, 'Content-Type':'application/json' }, credentials: 'include', }) .then(requestResponseHandler) }; export const createRegistrationParentFileMaster = (data,csrfToken) => { return fetch(`${BE_SUBSCRIPTION_REGISTRATION_PARENT_FILE_MASTERS_URL}`, { method: 'POST', body: JSON.stringify(data), headers: { 'X-CSRFToken': csrfToken, 'Content-Type': 'application/json', }, credentials: 'include', }) .then(requestResponseHandler) }; export const createRegistrationSchoolFileTemplate = (data,csrfToken) => { return fetch(`${BE_SUBSCRIPTION_REGISTRATION_SCHOOL_FILE_TEMPLATES_URL}`, { method: 'POST', body: JSON.stringify(data), headers: { 'X-CSRFToken': csrfToken, 'Content-Type': 'application/json', }, credentials: 'include', }) .then(requestResponseHandler) }; export const createRegistrationParentFileTemplate = (data,csrfToken) => { return fetch(`${BE_SUBSCRIPTION_REGISTRATION_PARENT_FILE_TEMPLATES_URL}`, { method: 'POST', body: JSON.stringify(data), headers: { 'X-CSRFToken': csrfToken, 'Content-Type': 'application/json', }, credentials: 'include', }) .then(requestResponseHandler) }; // EDIT requests export const editRegistrationFileGroup = async (groupId, groupData, csrfToken) => { const response = await fetch(`${BE_SUBSCRIPTION_REGISTRATIONFILE_GROUPS_URL}/${groupId}`, { method: 'PUT', headers: { 'Content-Type': 'application/json', 'X-CSRFToken': csrfToken, }, body: JSON.stringify(groupData), }); if (!response.ok) { throw new Error('Erreur lors de la modification du groupe'); } return response.json(); }; export const editRegistrationSchoolFileMaster = (fileId, data, csrfToken) => { return fetch(`${BE_SUBSCRIPTION_REGISTRATION_SCHOOL_FILE_MASTERS_URL}/${fileId}`, { method: 'PUT', body: JSON.stringify(data), headers: { 'X-CSRFToken': csrfToken, 'Content-Type':'application/json' }, credentials: 'include', }) .then(requestResponseHandler) }; export const editRegistrationParentFileMaster = (id, data, csrfToken) => { return fetch(`${BE_SUBSCRIPTION_REGISTRATION_PARENT_FILE_MASTERS_URL}/${id}`, { method: 'PUT', body: JSON.stringify(data), headers: { 'X-CSRFToken': csrfToken, 'Content-Type': 'application/json', }, credentials: 'include', }) .then(requestResponseHandler) }; export const editRegistrationSchoolFileTemplates = (fileId, data, csrfToken) => { return fetch(`${BE_SUBSCRIPTION_REGISTRATION_SCHOOL_FILE_TEMPLATES_URL}/${fileId}`, { method: 'PUT', body: data, headers: { 'X-CSRFToken': csrfToken, }, credentials: 'include', }) .then(requestResponseHandler) }; // DELETE requests export async function deleteRegistrationFileGroup(groupId, csrfToken) { const response = await fetch(`${BE_SUBSCRIPTION_REGISTRATIONFILE_GROUPS_URL}/${groupId}`, { method: 'DELETE', headers: { 'X-CSRFToken': csrfToken, }, credentials: 'include' }); return response; }; export const deleteRegistrationSchoolFileMaster = (fileId,csrfToken) => { return fetch(`${BE_SUBSCRIPTION_REGISTRATION_SCHOOL_FILE_MASTERS_URL}/${fileId}`, { method: 'DELETE', headers: { 'X-CSRFToken': csrfToken, }, credentials: 'include', }) }; export const deleteRegistrationParentFileMaster = (id, csrfToken) => { return fetch(`${BE_SUBSCRIPTION_REGISTRATION_PARENT_FILE_MASTERS_URL}/${id}`, { method: 'DELETE', headers: { 'X-CSRFToken': csrfToken, }, credentials: 'include', }) }; export const deleteRegistrationSchoolFileTemplates = (fileId,csrfToken) => { return fetch(`${BE_SUBSCRIPTION_REGISTRATION_SCHOOL_FILE_TEMPLATES_URL}/${fileId}`, { method: 'DELETE', headers: { 'X-CSRFToken': csrfToken, }, credentials: 'include', }) }; // API requests export const cloneTemplate = (templateId, email, is_required) => { return fetch(`${FE_API_DOCUSEAL_CLONE_URL}`, { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ templateId, email, is_required }) }) .then(requestResponseHandler) }; export const downloadTemplate = (slug) => { return fetch(`${FE_API_DOCUSEAL_DOWNLOAD_URL}/${slug}`, { method: 'GET', headers: { 'Content-Type': 'application/json', } }) .then(requestResponseHandler) }; export const generateToken = (email, id = null) => { return fetch(`${FE_API_DOCUSEAL_GENERATE_TOKEN}`, { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ user_email: email, id }), }).then(requestResponseHandler); };