2026-05-25 10:29:31 -04:00
|
|
|
import { createRootRoute, createRoute, createRouter, Outlet } from '@tanstack/react-router'
|
2026-05-25 01:10:44 -04:00
|
|
|
import { Nav } from './components/Nav'
|
2026-05-25 10:29:31 -04:00
|
|
|
import { CommandCenterPage } from './pages/CommandCenterPage'
|
2026-05-25 01:10:44 -04:00
|
|
|
import { RaceHubPage } from './pages/RaceHubPage'
|
2026-05-25 02:45:02 -04:00
|
|
|
import { DataLibraryPage } from './pages/DataLibraryPage'
|
2026-05-25 02:56:06 -04:00
|
|
|
import { LiveTimingPage } from './pages/LiveTimingPage'
|
2026-05-25 15:16:00 -04:00
|
|
|
import { BriefingPage } from './pages/BriefingPage'
|
2026-07-03 00:09:47 -04:00
|
|
|
import { ChampionshipPage } from './pages/ChampionshipPage'
|
2026-07-11 18:12:00 -04:00
|
|
|
import { DriverProfilePage } from './pages/DriverProfilePage'
|
2026-07-11 17:59:00 -04:00
|
|
|
import { RacePreviewPage } from './pages/RacePreviewPage'
|
2026-05-25 01:10:44 -04:00
|
|
|
|
|
|
|
|
type RaceHubSearch = {
|
|
|
|
|
session_key?: number
|
|
|
|
|
}
|
|
|
|
|
|
2026-07-11 18:12:00 -04:00
|
|
|
type DriverProfileSearch = {
|
|
|
|
|
year?: number
|
|
|
|
|
}
|
|
|
|
|
|
2026-05-25 01:10:44 -04:00
|
|
|
const rootRoute = createRootRoute({
|
|
|
|
|
component: () => (
|
|
|
|
|
<>
|
|
|
|
|
<Nav />
|
|
|
|
|
<Outlet />
|
|
|
|
|
</>
|
|
|
|
|
),
|
|
|
|
|
})
|
|
|
|
|
|
2026-05-25 10:29:31 -04:00
|
|
|
export const commandCenterRoute = createRoute({
|
2026-05-25 01:10:44 -04:00
|
|
|
getParentRoute: () => rootRoute,
|
|
|
|
|
path: '/',
|
2026-05-25 10:29:31 -04:00
|
|
|
component: CommandCenterPage,
|
2026-05-25 01:10:44 -04:00
|
|
|
})
|
|
|
|
|
|
|
|
|
|
export const raceHubRoute = createRoute({
|
|
|
|
|
getParentRoute: () => rootRoute,
|
|
|
|
|
path: '/race-hub',
|
|
|
|
|
validateSearch: (search: Record<string, unknown>): RaceHubSearch => {
|
|
|
|
|
const sessionKey = Number(search.session_key)
|
|
|
|
|
return Number.isFinite(sessionKey) && sessionKey > 0 ? { session_key: sessionKey } : {}
|
|
|
|
|
},
|
|
|
|
|
component: function RaceHubRoute() {
|
|
|
|
|
const { session_key } = raceHubRoute.useSearch()
|
|
|
|
|
return <RaceHubPage sessionKey={session_key ?? 0} />
|
|
|
|
|
},
|
|
|
|
|
})
|
|
|
|
|
|
2026-05-25 11:51:16 -04:00
|
|
|
export const adminRoute = createRoute({
|
|
|
|
|
getParentRoute: () => rootRoute,
|
|
|
|
|
path: '/admin',
|
|
|
|
|
component: DataLibraryPage,
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
// Legacy alias — kept so any saved /data-library links keep working.
|
2026-05-25 02:45:02 -04:00
|
|
|
export const dataLibraryRoute = createRoute({
|
|
|
|
|
getParentRoute: () => rootRoute,
|
|
|
|
|
path: '/data-library',
|
|
|
|
|
component: DataLibraryPage,
|
|
|
|
|
})
|
|
|
|
|
|
2026-05-25 02:56:06 -04:00
|
|
|
export const liveTimingRoute = createRoute({
|
|
|
|
|
getParentRoute: () => rootRoute,
|
|
|
|
|
path: '/live',
|
|
|
|
|
component: LiveTimingPage,
|
|
|
|
|
})
|
|
|
|
|
|
2026-07-03 00:09:47 -04:00
|
|
|
export const championshipRoute = createRoute({
|
|
|
|
|
getParentRoute: () => rootRoute,
|
|
|
|
|
path: '/championship',
|
|
|
|
|
component: ChampionshipPage,
|
|
|
|
|
})
|
|
|
|
|
|
2026-07-11 18:12:00 -04:00
|
|
|
export const driverProfileRoute = createRoute({
|
|
|
|
|
getParentRoute: () => rootRoute,
|
|
|
|
|
path: '/drivers/$driverNumber',
|
|
|
|
|
validateSearch: (search: Record<string, unknown>): DriverProfileSearch => {
|
|
|
|
|
const year = Number(search.year)
|
|
|
|
|
return Number.isFinite(year) && year > 0 ? { year } : {}
|
|
|
|
|
},
|
|
|
|
|
component: function DriverProfileRoute() {
|
|
|
|
|
const { driverNumber } = driverProfileRoute.useParams()
|
|
|
|
|
const { year } = driverProfileRoute.useSearch()
|
|
|
|
|
return <DriverProfilePage driverNumber={Number(driverNumber) || 0} year={year} />
|
|
|
|
|
},
|
|
|
|
|
})
|
|
|
|
|
|
2026-05-25 15:16:00 -04:00
|
|
|
export const briefingRoute = createRoute({
|
|
|
|
|
getParentRoute: () => rootRoute,
|
|
|
|
|
path: '/briefing',
|
|
|
|
|
component: BriefingPage,
|
|
|
|
|
})
|
|
|
|
|
|
2026-07-11 17:59:00 -04:00
|
|
|
export const previewRoute = createRoute({
|
|
|
|
|
getParentRoute: () => rootRoute,
|
|
|
|
|
path: '/preview',
|
|
|
|
|
component: RacePreviewPage,
|
|
|
|
|
})
|
|
|
|
|
|
2026-05-25 11:51:16 -04:00
|
|
|
const routeTree = rootRoute.addChildren([
|
|
|
|
|
commandCenterRoute,
|
|
|
|
|
raceHubRoute,
|
|
|
|
|
adminRoute,
|
|
|
|
|
dataLibraryRoute,
|
|
|
|
|
liveTimingRoute,
|
2026-07-03 00:09:47 -04:00
|
|
|
championshipRoute,
|
2026-07-11 18:12:00 -04:00
|
|
|
driverProfileRoute,
|
2026-05-25 15:16:00 -04:00
|
|
|
briefingRoute,
|
2026-07-11 17:59:00 -04:00
|
|
|
previewRoute,
|
2026-05-25 11:51:16 -04:00
|
|
|
])
|
2026-05-25 01:10:44 -04:00
|
|
|
|
|
|
|
|
export const router = createRouter({ routeTree })
|
|
|
|
|
|
|
|
|
|
declare module '@tanstack/react-router' {
|
|
|
|
|
interface Register {
|
|
|
|
|
router: typeof router
|
|
|
|
|
}
|
|
|
|
|
}
|