2026-05-25 01:10:44 -04:00
|
|
|
import { Link } from '@tanstack/react-router'
|
2026-07-17 11:53:38 -04:00
|
|
|
import { useQuery } from '@tanstack/react-query'
|
|
|
|
|
import { fetchLiveState } from '../api'
|
|
|
|
|
import { isLiveSessionActive } from '../lib/live'
|
2026-05-25 01:10:44 -04:00
|
|
|
|
|
|
|
|
export function Nav() {
|
2026-07-17 11:53:38 -04:00
|
|
|
const { data: liveState } = useQuery({
|
|
|
|
|
queryKey: ['live-state'],
|
|
|
|
|
queryFn: fetchLiveState,
|
|
|
|
|
staleTime: 5_000,
|
|
|
|
|
refetchInterval: 30_000,
|
|
|
|
|
})
|
|
|
|
|
const liveActive = isLiveSessionActive(liveState)
|
|
|
|
|
|
2026-05-25 01:10:44 -04:00
|
|
|
return (
|
|
|
|
|
<nav className="app-nav">
|
|
|
|
|
<Link to="/" className="nav-logo">
|
|
|
|
|
box<em>-</em>box
|
|
|
|
|
</Link>
|
|
|
|
|
<div className="nav-links">
|
2026-05-25 10:29:31 -04:00
|
|
|
<Link to="/" activeProps={{ className: 'active' }} activeOptions={{ exact: true }}>
|
|
|
|
|
Command
|
|
|
|
|
</Link>
|
2026-07-17 11:53:38 -04:00
|
|
|
<Link
|
|
|
|
|
to="/live"
|
|
|
|
|
className={liveActive ? 'nav-live nav-live-on' : 'nav-live'}
|
|
|
|
|
activeProps={{ className: 'active' }}
|
|
|
|
|
data-testid="nav-live"
|
|
|
|
|
data-live-active={liveActive ? 'true' : 'false'}
|
|
|
|
|
>
|
|
|
|
|
{liveActive && <span className="nav-live-dot" aria-hidden="true" />}
|
2026-05-25 02:56:06 -04:00
|
|
|
Live
|
2026-07-17 11:53:38 -04:00
|
|
|
{liveActive && <span className="sr-only"> session active</span>}
|
2026-05-25 02:56:06 -04:00
|
|
|
</Link>
|
2026-05-25 11:51:16 -04:00
|
|
|
<Link to="/race-hub" search={{}} activeProps={{ className: 'active' }}>
|
|
|
|
|
Race Hub
|
|
|
|
|
</Link>
|
2026-07-11 17:59:00 -04:00
|
|
|
<Link to="/preview" activeProps={{ className: 'active' }}>
|
|
|
|
|
Preview
|
|
|
|
|
</Link>
|
2026-07-03 00:09:47 -04:00
|
|
|
<Link to="/championship" activeProps={{ className: 'active' }}>
|
|
|
|
|
Championship
|
|
|
|
|
</Link>
|
2026-05-25 15:16:00 -04:00
|
|
|
<Link to="/briefing" activeProps={{ className: 'active' }}>
|
|
|
|
|
Briefing
|
|
|
|
|
</Link>
|
2026-05-25 11:51:16 -04:00
|
|
|
</div>
|
|
|
|
|
<div className="nav-utility">
|
|
|
|
|
<Link to="/admin" className="nav-utility-link" activeProps={{ className: 'nav-utility-link active' }}>
|
|
|
|
|
Admin
|
2026-05-25 02:45:02 -04:00
|
|
|
</Link>
|
2026-05-25 01:10:44 -04:00
|
|
|
</div>
|
|
|
|
|
</nav>
|
|
|
|
|
)
|
|
|
|
|
}
|