41 lines
1.5 KiB
TypeScript
41 lines
1.5 KiB
TypeScript
import { Navigate, Route, Routes } from 'react-router-dom'
|
|
import { AppLayout } from './components/AppLayout'
|
|
import { AdminPage } from './pages/Admin'
|
|
import { AlertsPage } from './pages/Alerts'
|
|
import { LoginPage } from './pages/Login'
|
|
import { ObjectDetailPage } from './pages/ObjectDetail'
|
|
import { ObjectsPage } from './pages/Objects'
|
|
import { SnapshotsPage } from './pages/Snapshots'
|
|
import { TaskDetailPage } from './pages/TaskDetail'
|
|
import { TasksPage } from './pages/Tasks'
|
|
import { useAuthStore } from './store/auth'
|
|
|
|
function RequireAuth({ children }: { children: React.ReactNode }) {
|
|
const token = useAuthStore((s) => s.accessToken)
|
|
return token ? <>{children}</> : <Navigate to="/login" replace />
|
|
}
|
|
|
|
export default function App() {
|
|
return (
|
|
<Routes>
|
|
<Route path="/login" element={<LoginPage />} />
|
|
<Route
|
|
path="/"
|
|
element={
|
|
<RequireAuth>
|
|
<AppLayout />
|
|
</RequireAuth>
|
|
}
|
|
>
|
|
<Route index element={<Navigate to="/objects" replace />} />
|
|
<Route path="admin" element={<AdminPage />} />
|
|
<Route path="alerts" element={<AlertsPage />} />
|
|
<Route path="objects" element={<ObjectsPage />} />
|
|
<Route path="objects/:id" element={<ObjectDetailPage />} />
|
|
<Route path="objects/:id/snapshots" element={<SnapshotsPage />} />
|
|
<Route path="tasks" element={<TasksPage />} />
|
|
<Route path="tasks/:id" element={<TaskDetailPage />} />
|
|
</Route>
|
|
</Routes>
|
|
)
|
|
}
|