File size: 1,805 Bytes
f56a29b | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | import { BrowserRouter, Routes, Route } from 'react-router-dom'
import { ThemeProvider } from '@/lib/hooks/use-theme'
import { I18nProvider } from '@/lib/hooks/use-i18n'
import { Toaster } from '@/components/ui/sonner'
import { ServerProvidersInit } from '@/components/server-providers-init'
import { AccessCodeGuard } from '@/components/access-code-guard'
import { lazy, Suspense } from 'react'
// Lazy load pages for code splitting
const HomePage = lazy(() => import('@/pages/HomePage'))
const ClassroomPage = lazy(() => import('@/pages/ClassroomPage'))
const GenerationPreviewPage = lazy(() => import('@/pages/generation-preview/page'))
const WhiteboardEvalPage = lazy(() => import('@/pages/eval/whiteboard/page'))
function LoadingFallback() {
return (
<div className="flex-1 flex items-center justify-center min-h-screen bg-gray-50 dark:bg-gray-900">
<div className="text-center text-muted-foreground">
<p>Loading...</p>
</div>
</div>
)
}
function AppLayout({ children }: { children: React.ReactNode }) {
return (
<ThemeProvider>
<I18nProvider>
<ServerProvidersInit />
<AccessCodeGuard>{children}</AccessCodeGuard>
<Toaster position="top-center" />
</I18nProvider>
</ThemeProvider>
)
}
function App() {
return (
<BrowserRouter>
<AppLayout>
<Suspense fallback={<LoadingFallback />}>
<Routes>
<Route path="/" element={<HomePage />} />
<Route path="/classroom/:id" element={<ClassroomPage />} />
<Route path="/generation-preview" element={<GenerationPreviewPage />} />
<Route path="/eval/whiteboard" element={<WhiteboardEvalPage />} />
</Routes>
</Suspense>
</AppLayout>
</BrowserRouter>
)
}
export default App
|