Files
whale-town-end-v2/client/src/app/App.tsx

43 lines
1.8 KiB
TypeScript

import { lazy, Suspense } from 'react';
import { ConfigProvider, Spin } from 'antd';
import { BrowserRouter, Navigate, Route, Routes } from 'react-router-dom';
import { isAuthed } from '../lib/adminAuth';
const AdminLayout = lazy(() => import('./AdminLayout').then((module) => ({ default: module.AdminLayout })));
const LoginPage = lazy(() => import('../pages/LoginPage').then((module) => ({ default: module.LoginPage })));
const UsersPage = lazy(() => import('../pages/UsersPage').then((module) => ({ default: module.UsersPage })));
const LogsPage = lazy(() => import('../pages/LogsPage').then((module) => ({ default: module.LogsPage })));
const InvitationCodesPage = lazy(() => import('../pages/InvitationCodesPage').then((module) => ({ default: module.InvitationCodesPage })));
function RouteLoading() {
return (
<div style={{ minHeight: '100vh', display: 'grid', placeItems: 'center' }}>
<Spin size="large" />
</div>
);
}
export function App() {
return (
<ConfigProvider>
<BrowserRouter basename={import.meta.env.BASE_URL}>
<Suspense fallback={<RouteLoading />}>
<Routes>
<Route path="/login" element={<LoginPage />} />
<Route
path="/"
element={isAuthed() ? <AdminLayout /> : <Navigate to="/login" replace />}
>
<Route index element={<Navigate to="/users" replace />} />
<Route path="users" element={<UsersPage />} />
<Route path="invitation-codes" element={<InvitationCodesPage />} />
<Route path="logs" element={<LogsPage />} />
</Route>
<Route path="*" element={<Navigate to={isAuthed() ? '/users' : '/login'} replace />} />
</Routes>
</Suspense>
</BrowserRouter>
</ConfigProvider>
);
}