feat: add React Router, lazy-load admin routes
This commit is contained in:
+59
@@ -0,0 +1,59 @@
|
||||
import React from 'react';
|
||||
import { BrowserRouter, Routes, Route, Navigate } from 'react-router-dom';
|
||||
import Navbar from './components/Navbar';
|
||||
import Hero from './components/Hero';
|
||||
import PhysicsOfSafety from './components/PhysicsOfSafety';
|
||||
import UseCases from './components/UseCases';
|
||||
import Estimator from './components/Estimator';
|
||||
import TrustBar from './components/TrustBar';
|
||||
import Comparison from './components/Comparison';
|
||||
import LeadForm from './components/LeadForm';
|
||||
import Footer from './components/Footer';
|
||||
|
||||
const LoginPage = React.lazy(() => import('./admin/auth/LoginPage'));
|
||||
const ProtectedRoute = React.lazy(() => import('./admin/auth/ProtectedRoute'));
|
||||
const AdminLayout = React.lazy(() => import('./admin/layout/AdminLayout'));
|
||||
const KanbanBoard = React.lazy(() => import('./admin/orders/KanbanBoard'));
|
||||
const AnalyticsDashboard = React.lazy(() => import('./admin/analytics/AnalyticsDashboard'));
|
||||
const CompletedOrdersTable = React.lazy(() => import('./admin/analytics/CompletedOrdersTable'));
|
||||
|
||||
function PublicSite() {
|
||||
return (
|
||||
<div style={{ minHeight: '100vh', display: 'flex', flexDirection: 'column' }}>
|
||||
<Navbar />
|
||||
<main style={{ flex: '1' }}>
|
||||
<Hero />
|
||||
<PhysicsOfSafety />
|
||||
<UseCases />
|
||||
<TrustBar />
|
||||
<Comparison />
|
||||
<Estimator />
|
||||
<LeadForm />
|
||||
</main>
|
||||
<Footer />
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
function App() {
|
||||
return (
|
||||
<BrowserRouter>
|
||||
<React.Suspense fallback={<div style={{ display: 'flex', justifyContent: 'center', alignItems: 'center', height: '100vh', fontFamily: 'sans-serif', color: '#475569' }}>Загрузка...</div>}>
|
||||
<Routes>
|
||||
<Route path="/" element={<PublicSite />} />
|
||||
<Route path="/admin/login" element={<LoginPage />} />
|
||||
<Route path="/admin" element={<Navigate to="/admin/kanban" replace />} />
|
||||
<Route path="/admin/*" element={<ProtectedRoute />}>
|
||||
<Route element={<AdminLayout />}>
|
||||
<Route path="kanban" element={<KanbanBoard />} />
|
||||
<Route path="analytics" element={<AnalyticsDashboard />} />
|
||||
<Route path="completed" element={<CompletedOrdersTable />} />
|
||||
</Route>
|
||||
</Route>
|
||||
</Routes>
|
||||
</React.Suspense>
|
||||
</BrowserRouter>
|
||||
);
|
||||
}
|
||||
|
||||
export default App;
|
||||
Reference in New Issue
Block a user