feat: add React Router, lazy-load admin routes

This commit is contained in:
2026-05-07 20:06:20 +03:00
parent fa342235d9
commit cf6ef372c1
+59
View File
@@ -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;