fix: Correction du Establishment context au refresh

This commit is contained in:
Luc SORIGNET
2025-05-01 12:19:07 +02:00
parent 31fdc612b1
commit 43e301ed64
9 changed files with 136 additions and 86 deletions

View File

@ -17,11 +17,11 @@ const ProfileSelector = ({ onRoleChange, className = '' }) => {
const handleRoleChange = (roleId) => {
// Pas bon quand on a plusieur role pour le même établissement
setSelectedRoleId(roleId);
const role = user.roles[roleId].role_type;
setProfileRole(role);
const establishmentId = user.roles[roleId].establishment__id;
setProfileRole(role);
setSelectedEstablishmentId(establishmentId);
setSelectedRoleId(roleId);
if (onRoleChange) {
onRoleChange(roleId);
}

View File

@ -1,33 +1,47 @@
import { useEffect } from 'react';
import { useEffect, useState } from 'react';
import { useRouter } from 'next/navigation';
import { useEstablishment } from '@/context/EstablishmentContext';
import { FE_USERS_LOGIN_URL, getRedirectUrlFromRole } from '@/utils/Url';
import logger from '@/utils/logger';
const ProtectedRoute = ({ children, requiredRight }) => {
const { user, profileRole } = useEstablishment();
const router = useRouter();
let hasRequiredRight = false;
if (requiredRight && Array.isArray(requiredRight)) {
// Vérifier si l'utilisateur a le droit requis
hasRequiredRight = requiredRight.some((right) => profileRole === right);
} else {
hasRequiredRight = profileRole === requiredRight;
}
const [hasRequiredRight, setHasRequiredRight] = useState(false);
// Vérifier si l'utilisateur a au moins un rôle correspondant au requiredRight
useEffect(() => {
if (user) {
logger.debug({
user,
profileRole,
requiredRight,
hasRequiredRight,
});
if (user && profileRole) {
let requiredRightChecked = false;
if (requiredRight && Array.isArray(requiredRight)) {
// Vérifier si l'utilisateur a le droit requis
requiredRightChecked = requiredRight.some(
(right) => profileRole === right
);
} else {
requiredRightChecked = profileRole === requiredRight;
}
setHasRequiredRight(requiredRightChecked);
// Vérifier si l'utilisateur a le droit requis mais pas le bon role on le redirige la page d'accueil associé au role
if (!hasRequiredRight) {
if (!requiredRightChecked) {
const redirectUrl = getRedirectUrlFromRole(profileRole);
router.push(`${redirectUrl}`);
if (redirectUrl !== null) {
router.push(`${redirectUrl}`);
}
}
} else {
// User non authentifié
router.push(`${FE_USERS_LOGIN_URL}`);
}
}, [profileRole]);
}, [user]);
// Autoriser l'affichage si authentifié et rôle correct
return hasRequiredRight ? children : null;

View File

@ -17,7 +17,7 @@ const SidebarItem = ({ icon: Icon, text, active, url, onClick }) => (
</div>
);
function Sidebar({ currentPage, items, onCloseMobile, onRoleChange }) {
function Sidebar({ currentPage, items, onCloseMobile }) {
const router = useRouter();
const [selectedItem, setSelectedItem] = useState(currentPage);
@ -37,7 +37,7 @@ function Sidebar({ currentPage, items, onCloseMobile, onRoleChange }) {
return (
<div className="w-64 bg-white border-r h-full border-gray-200">
<div className="border-b border-gray-200 ">
<ProfileSelector onRoleChange={onRoleChange} className="border-none" />
<ProfileSelector className="border-none" />
</div>
<nav className="space-y-1 px-4 py-6">
{items.map((item) => (