cosmo/frontend/src/Router.tsx

52 lines
1.6 KiB
TypeScript
Raw Normal View History

2025-11-29 15:10:00 +00:00
/**
* Router configuration
*/
import { BrowserRouter, Routes, Route, Navigate } from 'react-router-dom';
import { Login } from './pages/Login';
import { AdminLayout } from './pages/admin/AdminLayout';
import { Dashboard } from './pages/admin/Dashboard';
import { CelestialBodies } from './pages/admin/CelestialBodies';
import { auth } from './utils/auth';
import App from './App';
// Protected Route wrapper
function ProtectedRoute({ children }: { children: React.ReactNode }) {
if (!auth.isLoggedIn()) {
return <Navigate to="/login" replace />;
}
return <>{children}</>;
}
export function Router() {
return (
<BrowserRouter>
<Routes>
{/* Public routes */}
<Route path="/login" element={<Login />} />
{/* Main app (3D visualization) */}
<Route path="/" element={<App />} />
{/* Admin routes (protected) */}
<Route
path="/admin"
element={
<ProtectedRoute>
<AdminLayout />
</ProtectedRoute>
}
>
<Route index element={<Navigate to="/admin/dashboard" replace />} />
<Route path="dashboard" element={<Dashboard />} />
<Route path="celestial-bodies" element={<CelestialBodies />} />
<Route path="static-data" element={<div><h1></h1><p>...</p></div>} />
<Route path="nasa-data" element={<div><h1>NASA</h1><p>...</p></div>} />
</Route>
{/* Fallback */}
<Route path="*" element={<Navigate to="/" replace />} />
</Routes>
</BrowserRouter>
);
}