create-ex-den-kit
Version:
Create exam projects with Ex-Den-Kit
78 lines (69 loc) • 2.65 kB
JSX
import React, { useEffect } from 'react';
import { BrowserRouter as Router, Routes, Route, Navigate } from 'react-router-dom';
import { Toaster } from 'react-hot-toast';
import { AuthProvider } from './contexts/AuthContext';
import { ThemeProvider } from './contexts/ThemeContext';
import ProtectedRoute from './components/ProtectedRoute';
import Layout from './components/Layout';
// Pages
import ThemeSelector from './pages/ThemeSelector';
import Login from './pages/Login';
import Register from './pages/Register';
import Dashboard from './pages/Dashboard';
import CreateEntry from './pages/CreateEntry';
import Archive from './pages/Archive';
import AdminLogin from './pages/AdminLogin';
import AdminDashboard from './pages/AdminDashboard';
function App() {
return (
<Router>
<ThemeProvider>
<AuthProvider>
<Toaster
position="top-right"
toastOptions={{
duration: 4000,
style: {
background: '#363636',
color: '#fff',
},
success: {
style: {
background: '#10B981',
},
},
error: {
style: {
background: '#EF4444',
},
},
}}
/>
<Routes>
{/* Выбор темы */}
<Route path="/theme" element={<ThemeSelector />} />
{/* Публичные маршруты */}
<Route path="/login" element={<Login />} />
<Route path="/register" element={<Register />} />
<Route path="/admin/login" element={<AdminLogin />} />
{/* Защищенные маршруты пользователя */}
<Route element={<ProtectedRoute />}>
<Route element={<Layout />}>
<Route path="/dashboard" element={<Dashboard />} />
<Route path="/create" element={<CreateEntry />} />
<Route path="/archive" element={<Archive />} />
</Route>
</Route>
{/* Защищенные маршруты админа */}
<Route element={<ProtectedRoute adminOnly />}>
<Route path="/admin/dashboard" element={<AdminDashboard />} />
</Route>
{/* Редирект с главной */}
<Route path="/" element={<Navigate to="/login" replace />} />
</Routes>
</AuthProvider>
</ThemeProvider>
</Router>
);
}
export default App;