import React, { createContext, useContext, useState, useEffect } from 'react'; import logger from '@/utils/logger'; const EstablishmentContext = createContext(); export const EstablishmentProvider = ({ children }) => { const [selectedEstablishmentId, setSelectedEstablishmentIdState] = useState( () => { const storedEstablishmentId = +sessionStorage.getItem( 'selectedEstablishmentId' ); return storedEstablishmentId; } ); const [ selectedEstablishmentEvaluationFrequency, setSelectedEstablishmentEvaluationFrequencyState, ] = useState(() => { const storedEstablishmentEvaluationFrequency = +sessionStorage.getItem( 'selectedEstablishmentEvaluationFrequency' ); return storedEstablishmentEvaluationFrequency; }); const [ selectedEstablishmentTotalCapacity, setSelectedEstablishmentTotalCapacityState, ] = useState(() => { const storedEstablishmentTotalCapacity = +sessionStorage.getItem( 'selectedEstablishmentTotalCapacity' ); return storedEstablishmentTotalCapacity; }); const [selectedRoleId, setSelectedRoleIdState] = useState(() => { const storedRoleId = +sessionStorage.getItem('selectedRoleId'); return storedRoleId; }); const [profileRole, setProfileRoleState] = useState(() => { const storedProfileRole = +sessionStorage.getItem('profileRole'); return storedProfileRole; }); const [establishments, setEstablishmentsState] = useState(() => { const storedEstablishments = sessionStorage.getItem('establishments'); return storedEstablishments ? JSON.parse(storedEstablishments) : []; }); const [user, setUserState] = useState(() => { const storedUser = sessionStorage.getItem('user'); return storedUser ? JSON.parse(storedUser) : null; }); const [apiDocuseal, setApiDocusealState] = useState(() => { const storedApiDocuseal = sessionStorage.getItem('apiDocuseal'); return storedApiDocuseal ? JSON.parse(storedApiDocuseal) : null; }); const [selectedEstablishmentLogo, setSelectedEstablishmentLogoState] = useState(() => { const storedLogo = sessionStorage.getItem('selectedEstablishmentLogo'); return storedLogo ? JSON.parse(storedLogo) : null; }); // Sauvegarder dans sessionStorage à chaque mise à jour const setSelectedEstablishmentId = (id) => { setSelectedEstablishmentIdState(id); logger.debug('setSelectedEstablishmentId', id); sessionStorage.setItem('selectedEstablishmentId', id); }; const setSelectedEstablishmentEvaluationFrequency = (id) => { setSelectedEstablishmentEvaluationFrequencyState(id); logger.debug('setSelectedEstablishmentEvaluationFrequency', id); sessionStorage.setItem('selectedEstablishmentEvaluationFrequency', id); }; const setSelectedEstablishmentTotalCapacity = (id) => { setSelectedEstablishmentTotalCapacityState(id); logger.debug('setSelectedEstablishmentTotalCapacity', id); sessionStorage.setItem('selectedEstablishmentTotalCapacity', id); }; const setSelectedRoleId = (id) => { setSelectedRoleIdState(id); sessionStorage.setItem('selectedRoleId', id); }; const setProfileRole = (role) => { setProfileRoleState(role); sessionStorage.setItem('profileRole', role); }; const setEstablishments = (establishments) => { setEstablishmentsState(establishments); sessionStorage.setItem('establishments', JSON.stringify(establishments)); }; const setUser = (user) => { setUserState(user); sessionStorage.setItem('user', JSON.stringify(user)); }; const setApiDocuseal = (api) => { setApiDocusealState(api); sessionStorage.setItem('apiDocuseal', JSON.stringify(api)); }; const setSelectedEstablishmentLogo = (logo) => { setSelectedEstablishmentLogoState(logo); sessionStorage.setItem('selectedEstablishmentLogo', JSON.stringify(logo)); }; /** * Fonction d'initialisation du contexte avec la session (appelée lors du login) * @param {*} session * @param {*} endInitFunctionHandler */ const initializeContextWithSession = (session, endInitFunctionHandler) => { if (!session || !session.user) { throw new Error('Session not found'); } const user = session.user; logger.debug('User Session:', user); setUser(user); logger.debug('Establishments User= ', user); const userEstablishments = user.roles.map((role, i) => ({ id: role.establishment__id, name: role.establishment__name, evaluation_frequency: role.establishment__evaluation_frequency, total_capacity: role.establishment__total_capacity, api_docuseal: role.establishment__api_docuseal, logo: role.establishment__logo, role_id: i, role_type: role.role_type, })); setEstablishments(userEstablishments); logger.debug('Establishments', user.roleIndexLoginDefault); if (user.roles && user.roles.length > 0) { let roleIndexDefault = 0; if (userEstablishments.length > user.roleIndexLoginDefault) { roleIndexDefault = user.roleIndexLoginDefault; } setSelectedRoleId(roleIndexDefault); if (userEstablishments.length > 0) { setSelectedEstablishmentId(userEstablishments[roleIndexDefault].id); setSelectedEstablishmentEvaluationFrequency( userEstablishments[roleIndexDefault].evaluation_frequency ); setSelectedEstablishmentTotalCapacity( userEstablishments[roleIndexDefault].total_capacity ); setApiDocuseal( userEstablishments[roleIndexDefault].api_docuseal ); setSelectedEstablishmentLogo( userEstablishments[roleIndexDefault].logo ); setProfileRole(userEstablishments[roleIndexDefault].role_type); } if (endInitFunctionHandler) { const role = session.user.roles[roleIndexDefault].role_type; endInitFunctionHandler(role); } } else { setErrorMessage('Aucun rôle trouvé pour le profil sélectionné.'); } }; const clearContext = () => { setSelectedEstablishmentIdState(null); setSelectedRoleIdState(null); setProfileRoleState(null); setEstablishmentsState([]); setUserState(null); setSelectedEstablishmentEvaluationFrequencyState(null); setSelectedEstablishmentTotalCapacityState(null); setApiDocusealState(null); setSelectedEstablishmentLogoState(null); sessionStorage.clear(); }; return ( {children} ); }; export const useEstablishment = () => { return useContext(EstablishmentContext); };