mirror of
https://git.v0id.ovh/n3wt-innov/n3wt-school.git
synced 2026-01-29 07:53:23 +00:00
fix: correction des redirections vers la login page
This commit is contained in:
@ -30,7 +30,6 @@ import {
|
|||||||
} from '@/utils/Url';
|
} from '@/utils/Url';
|
||||||
|
|
||||||
import { disconnect } from '@/app/actions/authAction';
|
import { disconnect } from '@/app/actions/authAction';
|
||||||
import { useSession } from 'next-auth/react';
|
|
||||||
import ProtectedRoute from '@/components/ProtectedRoute';
|
import ProtectedRoute from '@/components/ProtectedRoute';
|
||||||
import { getGravatarUrl } from '@/utils/gravatar';
|
import { getGravatarUrl } from '@/utils/gravatar';
|
||||||
import Footer from '@/components/Footer';
|
import Footer from '@/components/Footer';
|
||||||
@ -41,9 +40,8 @@ import { useEstablishment } from '@/context/EstablishmentContext';
|
|||||||
export default function Layout({ children }) {
|
export default function Layout({ children }) {
|
||||||
const t = useTranslations('sidebar');
|
const t = useTranslations('sidebar');
|
||||||
const [isSidebarOpen, setIsSidebarOpen] = useState(false);
|
const [isSidebarOpen, setIsSidebarOpen] = useState(false);
|
||||||
const { data: session } = useSession();
|
|
||||||
const {
|
const {
|
||||||
selectedEstablishmentId,
|
setSelectedRoleId,
|
||||||
setSelectedEstablishmentId,
|
setSelectedEstablishmentId,
|
||||||
profileRole,
|
profileRole,
|
||||||
setProfileRole,
|
setProfileRole,
|
||||||
@ -163,17 +161,17 @@ export default function Layout({ children }) {
|
|||||||
currentPage={currentPage}
|
currentPage={currentPage}
|
||||||
items={Object.values(sidebarItems)}
|
items={Object.values(sidebarItems)}
|
||||||
onCloseMobile={toggleSidebar}
|
onCloseMobile={toggleSidebar}
|
||||||
onEstablishmentChange={(establishmentId) => {
|
onRoleChange={(roleId) => {
|
||||||
const parsedEstablishmentId = parseInt(establishmentId, 10);
|
let parsedRoleId = parseInt(roleId, 10);
|
||||||
setSelectedEstablishmentId(parsedEstablishmentId);
|
if (parsedRoleId === -1) {
|
||||||
let roleIndex = session.user.roles.findIndex(
|
parsedRoleId = 0;
|
||||||
(role) => role.establishment__id === parsedEstablishmentId
|
|
||||||
);
|
|
||||||
if (roleIndex === -1) {
|
|
||||||
roleIndex = 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);
|
setProfileRole(role);
|
||||||
|
setSelectedRoleId(parsedRoleId);
|
||||||
|
setSelectedEstablishmentId(establishmentId);
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -8,6 +8,7 @@ import { Search } from 'lucide-react';
|
|||||||
import Popup from '@/components/Popup';
|
import Popup from '@/components/Popup';
|
||||||
import Loader from '@/components/Loader';
|
import Loader from '@/components/Loader';
|
||||||
import AlertWithModal from '@/components/AlertWithModal';
|
import AlertWithModal from '@/components/AlertWithModal';
|
||||||
|
import { useRouter } from 'next/navigation';
|
||||||
import DropdownMenu from '@/components/DropdownMenu';
|
import DropdownMenu from '@/components/DropdownMenu';
|
||||||
import {
|
import {
|
||||||
MoreVertical,
|
MoreVertical,
|
||||||
@ -112,6 +113,7 @@ export default function Page({ params: { locale } }) {
|
|||||||
const [isOpenAddGuardian, setIsOpenAddGuardian] = useState(false);
|
const [isOpenAddGuardian, setIsOpenAddGuardian] = useState(false);
|
||||||
|
|
||||||
const csrfToken = useCsrfToken();
|
const csrfToken = useCsrfToken();
|
||||||
|
const router = useRouter();
|
||||||
const { selectedEstablishmentId } = useEstablishment();
|
const { selectedEstablishmentId } = useEstablishment();
|
||||||
|
|
||||||
const openModal = () => {
|
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" />,
|
icon: <Edit className="w-5 h-5 text-blue-500 hover:text-blue-700" />,
|
||||||
onClick: () =>
|
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: (
|
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" />,
|
icon: <Edit className="w-5 h-5 text-blue-500 hover:text-blue-700" />,
|
||||||
onClick: () =>
|
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: [
|
3: [
|
||||||
@ -697,7 +703,9 @@ export default function Page({ params: { locale } }) {
|
|||||||
<CircleCheck className="w-5 h-5 text-green-500 hover:text-green-700" />
|
<CircleCheck className="w-5 h-5 text-green-500 hover:text-green-700" />
|
||||||
),
|
),
|
||||||
onClick: () =>
|
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: [
|
5: [
|
||||||
|
|||||||
@ -14,13 +14,7 @@ export default function ParentHomePage() {
|
|||||||
const [children, setChildren] = useState([]);
|
const [children, setChildren] = useState([]);
|
||||||
const [userId, setUserId] = useState(null);
|
const [userId, setUserId] = useState(null);
|
||||||
const [currentPage, setCurrentPage] = useState(1);
|
const [currentPage, setCurrentPage] = useState(1);
|
||||||
const {
|
const { user, selectedEstablishmentId } = useEstablishment();
|
||||||
user,
|
|
||||||
setProfileRole,
|
|
||||||
selectedEstablishmentId,
|
|
||||||
setSelectedEstablishmentId,
|
|
||||||
establishments,
|
|
||||||
} = useEstablishment();
|
|
||||||
|
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
|
|
||||||
@ -33,14 +27,6 @@ export default function ParentHomePage() {
|
|||||||
});
|
});
|
||||||
}, [selectedEstablishmentId]);
|
}, [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) {
|
function handleEdit(eleveId) {
|
||||||
// Logique pour éditer le dossier de l'élève
|
// Logique pour éditer le dossier de l'élève
|
||||||
logger.debug(`Edit dossier for student id: ${eleveId}`);
|
logger.debug(`Edit dossier for student id: ${eleveId}`);
|
||||||
|
|||||||
@ -4,24 +4,26 @@ import DropdownMenu from '@/components/DropdownMenu';
|
|||||||
import { getRightStr } from '@/utils/rights';
|
import { getRightStr } from '@/utils/rights';
|
||||||
import { ChevronDown } from 'lucide-react'; // Import de l'icône
|
import { ChevronDown } from 'lucide-react'; // Import de l'icône
|
||||||
|
|
||||||
const ProfileSelector = ({ onEstablishmentChange, className = '' }) => {
|
const ProfileSelector = ({ onRoleChange, className = '' }) => {
|
||||||
const {
|
const {
|
||||||
establishments,
|
establishments,
|
||||||
selectedEstablishmentId,
|
selectedRoleId,
|
||||||
|
setSelectedRoleId,
|
||||||
setSelectedEstablishmentId,
|
setSelectedEstablishmentId,
|
||||||
setProfileRole,
|
setProfileRole,
|
||||||
|
user,
|
||||||
} = useEstablishment();
|
} = useEstablishment();
|
||||||
const [dropdownOpen, setDropdownOpen] = useState(false);
|
const [dropdownOpen, setDropdownOpen] = useState(false);
|
||||||
|
|
||||||
const handleEstablishmentChange = (establishmentId) => {
|
const handleRoleChange = (roleId) => {
|
||||||
setSelectedEstablishmentId(establishmentId);
|
// Pas bon quand on a plusieur role pour le même établissement
|
||||||
const role = establishments.find(
|
setSelectedRoleId(roleId);
|
||||||
(est) => est.id === establishmentId
|
const role = user.roles[roleId].role_type;
|
||||||
)?.role_type;
|
|
||||||
setProfileRole(role);
|
setProfileRole(role);
|
||||||
|
const establishmentId = user.roles[roleId].establishment__id;
|
||||||
if (onEstablishmentChange) {
|
setSelectedEstablishmentId(establishmentId);
|
||||||
onEstablishmentChange(establishmentId);
|
if (onRoleChange) {
|
||||||
|
onRoleChange(roleId);
|
||||||
}
|
}
|
||||||
setDropdownOpen(false); // Fermer le menu après sélection
|
setDropdownOpen(false); // Fermer le menu après sélection
|
||||||
};
|
};
|
||||||
@ -36,7 +38,7 @@ const ProfileSelector = ({ onEstablishmentChange, className = '' }) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const selectedEstablishment = establishments.find(
|
const selectedEstablishment = establishments.find(
|
||||||
(est) => est.id === selectedEstablishmentId
|
(est) => est.role_id === selectedRoleId
|
||||||
);
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@ -70,7 +72,7 @@ const ProfileSelector = ({ onEstablishmentChange, className = '' }) => {
|
|||||||
<div className="text-sm text-gray-500">{establishment.name}</div>
|
<div className="text-sm text-gray-500">{establishment.name}</div>
|
||||||
</div>
|
</div>
|
||||||
),
|
),
|
||||||
onClick: () => handleEstablishmentChange(establishment.id),
|
onClick: () => handleRoleChange(establishment.role_id),
|
||||||
}))}
|
}))}
|
||||||
buttonClassName="w-full"
|
buttonClassName="w-full"
|
||||||
menuClassName="absolute mt-2 w-full bg-white border border-gray-200 rounded shadow-lg z-10"
|
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>
|
</div>
|
||||||
);
|
);
|
||||||
|
|
||||||
function Sidebar({ currentPage, items, onCloseMobile, onEstablishmentChange }) {
|
function Sidebar({ currentPage, items, onCloseMobile, onRoleChange }) {
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
|
|
||||||
const [selectedItem, setSelectedItem] = useState(currentPage);
|
const [selectedItem, setSelectedItem] = useState(currentPage);
|
||||||
@ -37,10 +37,7 @@ function Sidebar({ currentPage, items, onCloseMobile, onEstablishmentChange }) {
|
|||||||
return (
|
return (
|
||||||
<div className="w-64 bg-white border-r h-full border-gray-200">
|
<div className="w-64 bg-white border-r h-full border-gray-200">
|
||||||
<div className="border-b border-gray-200 ">
|
<div className="border-b border-gray-200 ">
|
||||||
<ProfileSelector
|
<ProfileSelector onRoleChange={onRoleChange} className="border-none" />
|
||||||
onEstablishmentChange={onEstablishmentChange}
|
|
||||||
className="border-none"
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
<nav className="space-y-1 px-4 py-6">
|
<nav className="space-y-1 px-4 py-6">
|
||||||
{items.map((item) => (
|
{items.map((item) => (
|
||||||
|
|||||||
@ -5,6 +5,7 @@ const EstablishmentContext = createContext();
|
|||||||
|
|
||||||
export const EstablishmentProvider = ({ children }) => {
|
export const EstablishmentProvider = ({ children }) => {
|
||||||
const [selectedEstablishmentId, setSelectedEstablishmentId] = useState(null);
|
const [selectedEstablishmentId, setSelectedEstablishmentId] = useState(null);
|
||||||
|
const [selectedRoleId, setSelectedRoleId] = useState(null);
|
||||||
const [profileRole, setProfileRole] = useState(null);
|
const [profileRole, setProfileRole] = useState(null);
|
||||||
const [establishments, setEstablishments] = useState([]);
|
const [establishments, setEstablishments] = useState([]);
|
||||||
const [user, setUser] = useState(null);
|
const [user, setUser] = useState(null);
|
||||||
@ -14,9 +15,10 @@ export const EstablishmentProvider = ({ children }) => {
|
|||||||
logger.debug('Establishments User= ', user);
|
logger.debug('Establishments User= ', user);
|
||||||
// Au changement de l'utilisateur on sette par défaut le premier établissement
|
// Au changement de l'utilisateur on sette par défaut le premier établissement
|
||||||
// et le premier rôle
|
// et le premier rôle
|
||||||
const userEstablishments = user.roles.map((role) => ({
|
const userEstablishments = user.roles.map((role, i) => ({
|
||||||
id: role.establishment__id,
|
id: role.establishment__id,
|
||||||
name: role.establishment__name,
|
name: role.establishment__name,
|
||||||
|
role_id: i,
|
||||||
role_type: role.role_type,
|
role_type: role.role_type,
|
||||||
}));
|
}));
|
||||||
setEstablishments(userEstablishments);
|
setEstablishments(userEstablishments);
|
||||||
@ -31,6 +33,7 @@ export const EstablishmentProvider = ({ children }) => {
|
|||||||
setSelectedEstablishmentId(userEstablishments[roleIndexDefault].id);
|
setSelectedEstablishmentId(userEstablishments[roleIndexDefault].id);
|
||||||
setProfileRole(userEstablishments[roleIndexDefault].role_type);
|
setProfileRole(userEstablishments[roleIndexDefault].role_type);
|
||||||
}
|
}
|
||||||
|
setSelectedRoleId(roleIndexDefault);
|
||||||
}
|
}
|
||||||
}, [user]);
|
}, [user]);
|
||||||
|
|
||||||
@ -39,6 +42,8 @@ export const EstablishmentProvider = ({ children }) => {
|
|||||||
value={{
|
value={{
|
||||||
selectedEstablishmentId,
|
selectedEstablishmentId,
|
||||||
setSelectedEstablishmentId,
|
setSelectedEstablishmentId,
|
||||||
|
selectedRoleId,
|
||||||
|
setSelectedRoleId,
|
||||||
profileRole,
|
profileRole,
|
||||||
setProfileRole,
|
setProfileRole,
|
||||||
establishments,
|
establishments,
|
||||||
|
|||||||
Reference in New Issue
Block a user