mirror of
https://git.v0id.ovh/n3wt-innov/n3wt-school.git
synced 2026-01-29 16:03:21 +00:00
fix: Correction du Establishment context au refresh
This commit is contained in:
@ -4,42 +4,112 @@ import logger from '@/utils/logger';
|
||||
const EstablishmentContext = createContext();
|
||||
|
||||
export const EstablishmentProvider = ({ children }) => {
|
||||
const [selectedEstablishmentId, setSelectedEstablishmentId] = useState(null);
|
||||
const [selectedRoleId, setSelectedRoleId] = useState(null);
|
||||
const [profileRole, setProfileRole] = useState(null);
|
||||
const [establishments, setEstablishments] = useState([]);
|
||||
const [user, setUser] = useState(null);
|
||||
const [selectedEstablishmentId, setSelectedEstablishmentIdState] = useState(
|
||||
() => {
|
||||
const storedEstablishmentId = +sessionStorage.getItem(
|
||||
'selectedEstablishmentId'
|
||||
);
|
||||
return storedEstablishmentId;
|
||||
}
|
||||
);
|
||||
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;
|
||||
});
|
||||
|
||||
useEffect(() => {
|
||||
if (user) {
|
||||
logger.debug('Establishments User= ', user);
|
||||
// Au changement de l'utilisateur on sette par défaut le premier établissement
|
||||
// et le premier rôle
|
||||
const userEstablishments = user.roles.map((role, i) => ({
|
||||
id: role.establishment__id,
|
||||
name: role.establishment__name,
|
||||
role_id: i,
|
||||
role_type: role.role_type,
|
||||
}));
|
||||
setEstablishments(userEstablishments);
|
||||
logger.debug('Establishments', user.roleIndexLoginDefault);
|
||||
// Sauvegarder dans sessionStorage à chaque mise à jour
|
||||
const setSelectedEstablishmentId = (id) => {
|
||||
setSelectedEstablishmentIdState(id);
|
||||
logger.debug('setSelectedEstablishmentId', id);
|
||||
sessionStorage.setItem('selectedEstablishmentId', 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));
|
||||
};
|
||||
|
||||
/**
|
||||
* 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,
|
||||
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;
|
||||
user.roleIndexLoginDefault;
|
||||
// Sélectionner l'établissement au login par défaut
|
||||
if (userEstablishments.length > user.roleIndexLoginDefault) {
|
||||
roleIndexDefault = user.roleIndexLoginDefault;
|
||||
}
|
||||
setSelectedRoleId(roleIndexDefault);
|
||||
if (userEstablishments.length > 0) {
|
||||
setSelectedEstablishmentId(userEstablishments[roleIndexDefault].id);
|
||||
setProfileRole(userEstablishments[roleIndexDefault].role_type);
|
||||
}
|
||||
setSelectedRoleId(roleIndexDefault);
|
||||
if (endInitFunctionHandler) {
|
||||
const role = session.user.roles[roleIndexDefault].role_type;
|
||||
endInitFunctionHandler(role);
|
||||
}
|
||||
} else {
|
||||
setErrorMessage('Aucun rôle trouvé pour le profil sélectionné.');
|
||||
}
|
||||
}, [user]);
|
||||
};
|
||||
|
||||
const clearContext = () => {
|
||||
setSelectedEstablishmentIdState(null);
|
||||
setSelectedRoleIdState(null);
|
||||
setProfileRoleState(null);
|
||||
setEstablishmentsState([]);
|
||||
setUserState(null);
|
||||
sessionStorage.clear();
|
||||
};
|
||||
|
||||
return (
|
||||
<EstablishmentContext.Provider
|
||||
value={{
|
||||
initializeContextWithSession,
|
||||
clearContext,
|
||||
selectedEstablishmentId,
|
||||
setSelectedEstablishmentId,
|
||||
selectedRoleId,
|
||||
@ -47,8 +117,9 @@ export const EstablishmentProvider = ({ children }) => {
|
||||
profileRole,
|
||||
setProfileRole,
|
||||
establishments,
|
||||
setUser,
|
||||
setEstablishments,
|
||||
user,
|
||||
setUser,
|
||||
}}
|
||||
>
|
||||
{children}
|
||||
|
||||
Reference in New Issue
Block a user