You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
93 lines
2.7 KiB
TypeScript
93 lines
2.7 KiB
TypeScript
import Router from 'preact-router'
|
|
import { route } from 'preact-router'
|
|
import { useContext, useEffect } from 'preact/hooks'
|
|
import { prependBaseUrl } from '../shared/utils'
|
|
|
|
import { ServerContext } from './hooks'
|
|
import { UserProvider } from './hooks/useCurrentUser'
|
|
|
|
import { AdminPage } from './pages/AdminPage'
|
|
import { ErrorPage } from './pages/ErrorPage'
|
|
import { HomePage } from './pages/HomePage'
|
|
import { LoginPage } from './pages/LoginPage'
|
|
import { NotFoundPage } from './pages/NotFoundPage'
|
|
import { ProblemPage } from './pages/ProblemPage'
|
|
import { ProfilePage } from './pages/ProfilePage'
|
|
import { ScoresPage } from './pages/ScoresPage'
|
|
import { UserPage } from './pages/UserPage'
|
|
import { JumbotronPage } from './pages/JumbotronPage'
|
|
|
|
// const Redirect = ({ to }: { to: string }) => {
|
|
// useEffect(() => {
|
|
// route(prependBaseUrl(to), true)
|
|
// }, [])
|
|
|
|
// return (
|
|
// <>
|
|
// Redirecting to <pre>{to}</pre>...
|
|
// </>
|
|
// )
|
|
// }
|
|
|
|
export const App = ({ url }: { url?: string }) => {
|
|
// during server side rendering don't prepend the BASE_URL
|
|
const pbu = prependBaseUrl
|
|
|
|
const handleRouteChange = () => {
|
|
// @ts-ignore
|
|
if (typeof window !== 'undefined' && window.goatcounter) {
|
|
// @ts-ignore
|
|
window.goatcounter.count({
|
|
path: location.pathname + location.search + location.hash,
|
|
})
|
|
}
|
|
}
|
|
|
|
return (
|
|
<UserProvider>
|
|
<Router url={url} onChange={handleRouteChange}>
|
|
<HomePage
|
|
// @ts-ignore
|
|
path={pbu('/')}
|
|
/>
|
|
<LoginPage
|
|
// @ts-ignore
|
|
path={pbu('/login')}
|
|
/>
|
|
<ProfilePage
|
|
// @ts-ignore
|
|
path={pbu('/profile')}
|
|
/>
|
|
<ProblemPage
|
|
// @ts-ignore
|
|
path={pbu('/problem/:id')}
|
|
/>
|
|
<JumbotronPage
|
|
// @ts-ignore
|
|
path={pbu('/jumbotron')}
|
|
/>
|
|
<UserPage
|
|
// @ts-ignore
|
|
path={pbu('/u/:uid')}
|
|
/>
|
|
<AdminPage
|
|
// @ts-ignore
|
|
path={pbu('/admin')}
|
|
/>
|
|
<ScoresPage
|
|
// @ts-ignore
|
|
path={pbu('/scores')}
|
|
/>
|
|
<ErrorPage
|
|
// @ts-ignore
|
|
path={pbu('/error')}
|
|
/>
|
|
<NotFoundPage
|
|
// @ts-ignore
|
|
default
|
|
/>
|
|
</Router>
|
|
</UserProvider>
|
|
)
|
|
}
|