35 lines
1.3 KiB
React
35 lines
1.3 KiB
React
import { Navigate, Route, Routes } from 'react-router-dom';
|
|
import Layout from './components/Layout';
|
|
import { useAuth } from './AuthContext';
|
|
import Admin from './pages/Admin';
|
|
import CasePage from './pages/CasePage';
|
|
import Dashboard from './pages/Dashboard';
|
|
import Leaderboard from './pages/Leaderboard';
|
|
import Login from './pages/Login';
|
|
import Register from './pages/Register';
|
|
|
|
function HomeRedirect() {
|
|
const { user, loading } = useAuth();
|
|
if (loading) return <p className="muted" style={{ padding: '2rem' }}>Loading…</p>;
|
|
if (!user) return <Navigate to="/login" replace />;
|
|
if (user.role === 'admin') return <Navigate to="/admin" replace />;
|
|
return <Navigate to="/dashboard" replace />;
|
|
}
|
|
|
|
export default function App() {
|
|
return (
|
|
<Routes>
|
|
<Route path="/login" element={<Login />} />
|
|
<Route path="/register" element={<Register />} />
|
|
<Route path="/admin" element={<Admin />} />
|
|
<Route element={<Layout />}>
|
|
<Route path="/" element={<HomeRedirect />} />
|
|
<Route path="/dashboard" element={<Dashboard />} />
|
|
<Route path="/cases/:id" element={<CasePage />} />
|
|
<Route path="/leaderboard" element={<Leaderboard />} />
|
|
</Route>
|
|
<Route path="*" element={<Navigate to="/" replace />} />
|
|
</Routes>
|
|
);
|
|
}
|