import React from 'react'; import ReactDOM from 'react-dom/client'; import { BrowserRouter, Routes, Route, Navigate, useLocation } from 'react-router-dom'; import './index.css'; import { SettingsContext, useSettingsProvider } from './hooks/useSettings'; import { AuthContext, useAuthProvider } from './hooks/useAuth'; import { useAuth } from './hooks/useAuth'; import Layout from './components/layout/Layout'; import Login from './pages/Login'; import Dashboard from './pages/Dashboard'; import Projects from './pages/Projects'; import ProjectDetail from './pages/ProjectDetail'; import Tools from './pages/Tools'; import SettingsPage from './pages/Settings'; import AdminUsers from './pages/AdminUsers'; // Guard: must be logged in function RequireAuth({ children }: { children: React.ReactNode }) { const { user, loading } = useAuth(); const location = useLocation(); if (loading) return (
); if (!user) return ; return <>{children}; } // Guard: must be admin function RequireAdmin({ children }: { children: React.ReactNode }) { const { user, loading } = useAuth(); if (loading) return null; if (!user || user.role !== 'admin') return ; return <>{children}; } function App() { const authCtx = useAuthProvider(); const settingsCtx = useSettingsProvider(); return ( {/* Public */} } /> {/* Protected */} }> } /> } /> } /> } /> {/* Admin-only routes */} } /> } /> {/* Catch-all */} } /> ); } ReactDOM.createRoot(document.getElementById('root')!).render( );