// frontend/src/components/Layout/Layout.tsx import React, { useEffect, useState } from 'react'; import { Outlet } from 'react-router-dom'; import api, { getToken } from '../../services/api'; import ThemeButton from "../UI/ThemeButton"; import Navbar from './Navbar'; interface LayoutProps { darkMode: boolean; setDarkMode: (value: boolean) => void; } export interface OutletContextType { setNavTitle: React.Dispatch>; setNavSubtitle: React.Dispatch>; role: 'admin' | 'ref' | null; showSettings: boolean; setShowSettings: React.Dispatch>; } export default function Layout({ darkMode, setDarkMode }: LayoutProps) { const [role, setRole] = useState<'admin' | 'ref' | null>(null); const [navTitle, setNavTitle] = useState(''); const [navSubtitle, setNavSubtitle] = useState(''); const [showSettings, setShowSettings] = useState(false); useEffect(() => { const verifyAuth = async () => { if (getToken()) { try { const res = await api.get<{ role: 'admin' | 'ref' }>('/auth/check'); setRole(res.role); } catch { setRole(null); localStorage.removeItem('volleyToken'); } } }; verifyAuth(); }, []); useEffect(() => { if (navTitle) { document.title = `${navTitle} | VolleyManager`; } else { document.title = 'VolleyManager'; } }, [navTitle]); const handleLogout = () => { localStorage.removeItem('volleyToken'); window.location.reload(); }; const contextValue: OutletContextType = { setNavTitle, setNavSubtitle, role, showSettings, setShowSettings }; return (
); }