mirror of
https://git.v0id.ovh/n3wt-innov/n3wt-school.git
synced 2026-01-28 23:43:22 +00:00
fix: correction des redirections vers la login page
This commit is contained in:
@ -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>
|
||||
|
||||
@ -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: [
|
||||
|
||||
@ -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}`);
|
||||
|
||||
@ -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"
|
||||
|
||||
@ -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) => (
|
||||
|
||||
@ -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,
|
||||
|
||||
Reference in New Issue
Block a user