Gateprep / frontend /src /App.jsx
banu4prasad's picture
LCP optimization
fc59346
Raw
History Blame Contribute Delete
3.75 kB
import { lazy, Suspense } from 'react'
import { Routes, Route, Navigate } from 'react-router-dom'
import { AuthProvider } from './context/AuthContext'
import { ThemeProvider } from './context/ThemeContext'
import { ProtectedRoute, GuestRoute } from './components/shared/ProtectedRoute'
import Spinner from './components/shared/Spinner'
import AdminDashboard from './pages/AdminDashboard'
import Dashboard from './pages/Dashboard'
const LoginPage = lazy(() => import('./pages/Login'))
const RegisterPage = lazy(() => import('./pages/Register'))
const ForgotPassword = lazy(() => import('./pages/ForgotPassword'))
const ResetPassword = lazy(() => import('./pages/ResetPassword'))
const PendingPage = lazy(() => import('./pages/Pending'))
const AdminUsers = lazy(() => import('./pages/AdminUsers'))
const AdminTests = lazy(() => import('./pages/AdminTests'))
const AdminTestDetail = lazy(() => import('./pages/AdminTestDetail'))
const TestsPage = lazy(() => import('./pages/Tests'))
const TestEngine = lazy(() => import('./pages/TestEngine'))
const Result = lazy(() => import('./pages/Result'))
const MyResults = lazy(() => import('./pages/MyResults'))
const Leaderboard = lazy(() => import('./pages/Leaderboard'))
const Bookmarks = lazy(() => import('./pages/Bookmarks'))
export default function App() {
return (
<ThemeProvider>
<AuthProvider>
<Suspense fallback={
<div className="min-h-screen" style={{ background: 'var(--bg)' }}>
<div className="h-14 border-b" style={{ borderColor: 'var(--border)', background: 'var(--bg-card)' }} />
</div>
}>
<Routes>
{/* Public */}
<Route path="/login" element={<GuestRoute><LoginPage /></GuestRoute>} />
<Route path="/register" element={<GuestRoute><RegisterPage /></GuestRoute>} />
<Route path="/forgot-password" element={<GuestRoute><ForgotPassword /></GuestRoute>} />
<Route path="/reset-password" element={<ResetPassword />} />
<Route path="/pending" element={<PendingPage />} />
{/* Admin */}
<Route path="/admin" element={<ProtectedRoute role="admin"><AdminDashboard /></ProtectedRoute>} />
<Route path="/admin/users" element={<ProtectedRoute role="admin"><AdminUsers /></ProtectedRoute>} />
<Route path="/admin/tests" element={<ProtectedRoute role="admin"><AdminTests /></ProtectedRoute>} />
<Route path="/admin/tests/:testId" element={<ProtectedRoute role="admin"><AdminTestDetail /></ProtectedRoute>} />
{/* Aspirant */}
<Route path="/dashboard" element={<ProtectedRoute role="aspirant"><Dashboard /></ProtectedRoute>} />
<Route path="/tests" element={<ProtectedRoute role="aspirant"><TestsPage /></ProtectedRoute>} />
<Route path="/tests/:testId" element={<ProtectedRoute role="aspirant"><TestEngine /></ProtectedRoute>} />
<Route path="/tests/:testId/leaderboard" element={<ProtectedRoute role="aspirant"><Leaderboard /></ProtectedRoute>} />
<Route path="/results" element={<ProtectedRoute role="aspirant"><MyResults /></ProtectedRoute>} />
<Route path="/results/:attemptId" element={<ProtectedRoute><Result /></ProtectedRoute>} />
<Route path="/bookmarks" element={<ProtectedRoute role="aspirant"><Bookmarks /></ProtectedRoute>} />
<Route path="*" element={<Navigate to="/login" replace />} />
</Routes>
</Suspense>
</AuthProvider>
</ThemeProvider>
)
}