2025-06-02 18:11:15 +03:00
|
|
|
|
import { useUser } from "../utils/users/UseUser.ts"; // Хук для получения информации о пользователе
|
|
|
|
|
|
import { Outlet, Link, useNavigate } from "react-router-dom"; // Композиция для маршрутизации
|
|
|
|
|
|
import React, { useEffect } from "react";
|
|
|
|
|
|
import {UserContextType} from "../types/users.ts";
|
2025-06-02 17:34:08 +03:00
|
|
|
|
|
|
|
|
|
|
export function DashboardLayout() {
|
2025-06-02 18:11:15 +03:00
|
|
|
|
const { user, logout } = useUser() as UserContextType; // Получаем данные о пользователе
|
|
|
|
|
|
const navigate = useNavigate(); // Получаем функцию для навигации
|
2025-06-02 17:34:08 +03:00
|
|
|
|
|
2025-06-02 18:11:15 +03:00
|
|
|
|
// Проверяем, есть ли пользователь, если нет, редиректим на страницу логина
|
2025-06-02 17:34:08 +03:00
|
|
|
|
useEffect(() => {
|
|
|
|
|
|
if (!user) {
|
2025-06-02 18:11:15 +03:00
|
|
|
|
navigate("/login/");
|
2025-06-02 17:34:08 +03:00
|
|
|
|
}
|
|
|
|
|
|
}, [navigate, user]);
|
|
|
|
|
|
|
2025-06-02 18:11:15 +03:00
|
|
|
|
if (!user) {
|
|
|
|
|
|
return null; // Если пользователь не найден, ничего не отображаем
|
2025-06-02 17:34:08 +03:00
|
|
|
|
}
|
|
|
|
|
|
|
2025-06-02 18:11:15 +03:00
|
|
|
|
|
|
|
|
|
|
// Определяем класс для активной ссылки
|
|
|
|
|
|
const isActive = (path: string) => window.location.pathname.includes(path)? 'selected' : 'unselected';
|
|
|
|
|
|
|
2025-06-02 17:34:08 +03:00
|
|
|
|
return (
|
2025-06-02 18:11:15 +03:00
|
|
|
|
<div className="dashboard-layout">
|
|
|
|
|
|
<div className="sidebar">
|
2025-06-02 17:34:08 +03:00
|
|
|
|
<h1 className="logo">Pro-Fi</h1>
|
2025-06-02 18:11:15 +03:00
|
|
|
|
<p className="role">{user.roleTitle || "Роль не опознана"}</p> {/* Отображаем текущую роль пользователя */}
|
|
|
|
|
|
<nav className="navigation">
|
|
|
|
|
|
<Link to="/dashboard/staff" className={isActive('/dashboard/staff')}>Штат</Link>
|
|
|
|
|
|
<Link to="/dashboard/schools" className={isActive('/dashboard/schools')}>Школы</Link>
|
|
|
|
|
|
<Link to="/dashboard/events" className={isActive('/dashboard/events')}>Мероприятия</Link>
|
|
|
|
|
|
<Link to="/dashboard/students" className={isActive('/dashboard/students')}>Студенты</Link>
|
|
|
|
|
|
<Link to="/dashboard/reports" className={isActive('/dashboard/reports')}>Отчеты</Link>
|
|
|
|
|
|
<Link to="/dashboard/partners" className={isActive('/dashboard/partners')}>Партнеры</Link>
|
|
|
|
|
|
<Link to="/admin" className={isActive('/admin')}>Админ-панель</Link>
|
|
|
|
|
|
<button onClick={logout} className="logout">Выйти</button>
|
|
|
|
|
|
</nav>
|
2025-06-02 17:34:08 +03:00
|
|
|
|
</div>
|
|
|
|
|
|
<div className="content">
|
|
|
|
|
|
<Outlet />
|
|
|
|
|
|
</div>
|
2025-06-02 18:11:15 +03:00
|
|
|
|
</div>
|
2025-06-02 17:34:08 +03:00
|
|
|
|
);
|
|
|
|
|
|
}
|