Files
page-agent/packages/website/src/router.tsx
T

73 lines
1.9 KiB
TypeScript
Raw Normal View History

2026-03-03 21:38:29 +08:00
import { Suspense, lazy, useEffect, useLayoutEffect } from 'react'
import { Route, Switch, useLocation } from 'wouter'
2025-09-29 16:33:15 +08:00
2026-02-27 19:46:44 +08:00
import Footer from './components/Footer'
import Header from './components/Header'
2026-03-05 16:21:58 +08:00
import HomePage from './pages/home'
2026-03-03 21:05:16 +08:00
2026-03-05 16:21:58 +08:00
const docsImport = () => import('./pages/docs')
2026-03-03 21:38:29 +08:00
const DocsPages = lazy(docsImport)
2025-09-29 16:33:15 +08:00
function ScrollToTop() {
const [pathname] = useLocation()
useLayoutEffect(() => {
window.scrollTo(0, 0)
}, [pathname])
return null
}
2025-09-29 16:33:15 +08:00
export default function Router() {
2026-03-03 21:38:29 +08:00
useEffect(() => {
if ('requestIdleCallback' in globalThis) {
const id = requestIdleCallback(() => docsImport())
return () => cancelIdleCallback(id)
}
const id = setTimeout(() => docsImport(), 1)
return () => clearTimeout(id)
2026-03-03 21:38:29 +08:00
}, [])
2025-09-29 16:33:15 +08:00
return (
2026-02-27 20:42:24 +08:00
<div className="flex min-h-screen flex-col">
2026-02-27 19:46:44 +08:00
<Header />
<Suspense>
<ScrollToTop />
<Switch>
<Route path="/">
<main
id="main-content"
2026-02-27 20:42:24 +08:00
className="flex-1 bg-linear-to-br from-blue-50 to-purple-50 dark:from-gray-900 dark:to-gray-800"
2026-02-27 19:46:44 +08:00
>
2026-02-27 20:42:24 +08:00
<HomePage />
2026-02-27 19:46:44 +08:00
</main>
</Route>
2025-09-29 16:33:15 +08:00
2026-02-27 19:46:44 +08:00
<Route path="/docs" nest>
2026-02-27 20:42:24 +08:00
<div className="flex-1 bg-white dark:bg-gray-900">
2026-03-03 21:38:29 +08:00
<Suspense
fallback={
<div className="flex items-center justify-center gap-3 py-20 text-gray-400">
<div className="w-4 h-4 border-2 border-blue-500 border-t-transparent rounded-full animate-spin" />
Loading...
</div>
}
>
2026-03-03 21:05:16 +08:00
<DocsPages />
</Suspense>
2026-02-27 19:46:44 +08:00
</div>
</Route>
2025-09-29 16:33:15 +08:00
2026-02-27 19:46:44 +08:00
<Route>
2026-02-27 20:42:24 +08:00
<div className="flex-1 bg-white dark:bg-gray-900 flex items-center justify-center">
2026-02-27 19:46:44 +08:00
<div className="text-center">
<h1 className="text-4xl font-bold mb-4 text-gray-900 dark:text-white">404</h1>
<p className="text-xl text-gray-600 dark:text-gray-300">Page not found</p>
</div>
2026-01-16 15:05:09 +08:00
</div>
2026-02-27 19:46:44 +08:00
</Route>
</Switch>
</Suspense>
<Footer />
2026-02-27 20:42:24 +08:00
</div>
2025-09-29 16:33:15 +08:00
)
}