fix: correction des redirections vers la login page

This commit is contained in:
Luc SORIGNET
2025-04-17 17:23:17 +02:00
parent f7666c894b
commit 2e0fe86c71
6 changed files with 44 additions and 48 deletions

View File

@ -30,7 +30,6 @@ import {
} from '@/utils/Url';
import { disconnect } from '@/app/actions/authAction';
import { useSession } from 'next-auth/react';
import ProtectedRoute from '@/components/ProtectedRoute';
import { getGravatarUrl } from '@/utils/gravatar';
import Footer from '@/components/Footer';
@ -41,9 +40,8 @@ import { useEstablishment } from '@/context/EstablishmentContext';
export default function Layout({ children }) {
const t = useTranslations('sidebar');
const [isSidebarOpen, setIsSidebarOpen] = useState(false);
const { data: session } = useSession();
const {
selectedEstablishmentId,
setSelectedRoleId,
setSelectedEstablishmentId,
profileRole,
setProfileRole,
@ -163,17 +161,17 @@ export default function Layout({ children }) {
currentPage={currentPage}
items={Object.values(sidebarItems)}
onCloseMobile={toggleSidebar}
onEstablishmentChange={(establishmentId) => {
const parsedEstablishmentId = parseInt(establishmentId, 10);
setSelectedEstablishmentId(parsedEstablishmentId);
let roleIndex = session.user.roles.findIndex(
(role) => role.establishment__id === parsedEstablishmentId
);
if (roleIndex === -1) {
roleIndex = 0;
onRoleChange={(roleId) => {
let parsedRoleId = parseInt(roleId, 10);
if (parsedRoleId === -1) {
parsedRoleId = 0;
}
const role = session.user.roles[roleIndex].role_type;
const role = user.roles[parsedRoleId].role_type;
const establishmentId =
user.roles[parsedRoleId].establishment__id;
setProfileRole(role);
setSelectedRoleId(parsedRoleId);
setSelectedEstablishmentId(establishmentId);
}}
/>
</div>

View File

@ -8,6 +8,7 @@ import { Search } from 'lucide-react';
import Popup from '@/components/Popup';
import Loader from '@/components/Loader';
import AlertWithModal from '@/components/AlertWithModal';
import { useRouter } from 'next/navigation';
import DropdownMenu from '@/components/DropdownMenu';
import {
MoreVertical,
@ -112,6 +113,7 @@ export default function Page({ params: { locale } }) {
const [isOpenAddGuardian, setIsOpenAddGuardian] = useState(false);
const csrfToken = useCsrfToken();
const router = useRouter();
const { selectedEstablishmentId } = useEstablishment();
const openModal = () => {
@ -670,7 +672,9 @@ export default function Page({ params: { locale } }) {
{
icon: <Edit className="w-5 h-5 text-blue-500 hover:text-blue-700" />,
onClick: () =>
(window.location.href = `${FE_ADMIN_SUBSCRIPTIONS_EDIT_URL}?studentId=${row.student.id}&id=1`),
router.push(
`${FE_ADMIN_SUBSCRIPTIONS_EDIT_URL}?studentId=${row.student.id}`
),
},
{
icon: (
@ -688,7 +692,9 @@ export default function Page({ params: { locale } }) {
{
icon: <Edit className="w-5 h-5 text-blue-500 hover:text-blue-700" />,
onClick: () =>
(window.location.href = `${FE_ADMIN_SUBSCRIPTIONS_EDIT_URL}?studentId=${row.student.id}&id=1`),
router.push(
`${FE_ADMIN_SUBSCRIPTIONS_EDIT_URL}?studentId=${row.student.id}`
),
},
],
3: [
@ -697,7 +703,9 @@ export default function Page({ params: { locale } }) {
<CircleCheck className="w-5 h-5 text-green-500 hover:text-green-700" />
),
onClick: () =>
(window.location.href = `${FE_ADMIN_SUBSCRIPTIONS_VALIDATE_URL}?studentId=${row.student.id}&firstName=${row.student.first_name}&lastName=${row.student.last_name}&paymentMode=${row.registration_payment}&file=${row.registration_file}`),
router.push(
`${FE_ADMIN_SUBSCRIPTIONS_VALIDATE_URL}?studentId=${row.student.id}&firstName=${row.student.first_name}&lastName=${row.student.last_name}&paymentMode=${row.registration_payment}&file=${row.registration_file}`
),
},
],
5: [

View File

@ -14,13 +14,7 @@ export default function ParentHomePage() {
const [children, setChildren] = useState([]);
const [userId, setUserId] = useState(null);
const [currentPage, setCurrentPage] = useState(1);
const {
user,
setProfileRole,
selectedEstablishmentId,
setSelectedEstablishmentId,
establishments,
} = useEstablishment();
const { user, selectedEstablishmentId } = useEstablishment();
const router = useRouter();
@ -33,14 +27,6 @@ export default function ParentHomePage() {
});
}, [selectedEstablishmentId]);
const handleEstablishmentChange = (e) => {
const establishmentId = parseInt(e.target.value, 10);
setSelectedEstablishmentId(establishmentId);
const role = establishments.find(
(est) => est.id === establishmentId
)?.role_type;
setProfileRole(role);
};
function handleEdit(eleveId) {
// Logique pour éditer le dossier de l'élève
logger.debug(`Edit dossier for student id: ${eleveId}`);

View File

@ -4,24 +4,26 @@ import DropdownMenu from '@/components/DropdownMenu';
import { getRightStr } from '@/utils/rights';
import { ChevronDown } from 'lucide-react'; // Import de l'icône
const ProfileSelector = ({ onEstablishmentChange, className = '' }) => {
const ProfileSelector = ({ onRoleChange, className = '' }) => {
const {
establishments,
selectedEstablishmentId,
selectedRoleId,
setSelectedRoleId,
setSelectedEstablishmentId,
setProfileRole,
user,
} = useEstablishment();
const [dropdownOpen, setDropdownOpen] = useState(false);
const handleEstablishmentChange = (establishmentId) => {
setSelectedEstablishmentId(establishmentId);
const role = establishments.find(
(est) => est.id === establishmentId
)?.role_type;
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);
if (onEstablishmentChange) {
onEstablishmentChange(establishmentId);
const establishmentId = user.roles[roleId].establishment__id;
setSelectedEstablishmentId(establishmentId);
if (onRoleChange) {
onRoleChange(roleId);
}
setDropdownOpen(false); // Fermer le menu après sélection
};
@ -36,7 +38,7 @@ const ProfileSelector = ({ onEstablishmentChange, className = '' }) => {
}
const selectedEstablishment = establishments.find(
(est) => est.id === selectedEstablishmentId
(est) => est.role_id === selectedRoleId
);
return (
@ -70,7 +72,7 @@ const ProfileSelector = ({ onEstablishmentChange, className = '' }) => {
<div className="text-sm text-gray-500">{establishment.name}</div>
</div>
),
onClick: () => handleEstablishmentChange(establishment.id),
onClick: () => handleRoleChange(establishment.role_id),
}))}
buttonClassName="w-full"
menuClassName="absolute mt-2 w-full bg-white border border-gray-200 rounded shadow-lg z-10"

View File

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

View File

@ -5,6 +5,7 @@ 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);
@ -14,9 +15,10 @@ export const EstablishmentProvider = ({ children }) => {
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) => ({
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);
@ -31,6 +33,7 @@ export const EstablishmentProvider = ({ children }) => {
setSelectedEstablishmentId(userEstablishments[roleIndexDefault].id);
setProfileRole(userEstablishments[roleIndexDefault].role_type);
}
setSelectedRoleId(roleIndexDefault);
}
}, [user]);
@ -39,6 +42,8 @@ export const EstablishmentProvider = ({ children }) => {
value={{
selectedEstablishmentId,
setSelectedEstablishmentId,
selectedRoleId,
setSelectedRoleId,
profileRole,
setProfileRole,
establishments,