import { useEffect, useMemo, useState } from 'react' import { useQueries, useQuery } from '@tanstack/react-query' import { Link } from '@tanstack/react-router' import { fetchLocalMeetings, fetchSeasons, fetchWeekend } from '../api' import { countWeekendStats, formatCoverageHint, sessionIconClass, sessionTypeAbbrev, } from '../lib/coverage' import { SourceBadge, weekendStatusLabel } from '../components/SourceBadge' import { CliCommands, ingestYearCommands } from '../components/CliCommands' import { MeetingDetailPanel } from '../components/MeetingDetailPanel' import type { Meeting, Weekend } from '../types' function formatMeetingDate(meeting: Meeting): string { const start = meeting.date_start?.slice(0, 10) if (!start) return '—' const d = new Date(start) if (Number.isNaN(d.getTime())) return start return d.toLocaleDateString('en-GB', { day: 'numeric', month: 'short' }) } export function DataLibraryPage() { const [selectedYear, setSelectedYear] = useState(null) const [selectedMeetingKey, setSelectedMeetingKey] = useState(null) const seasonsQuery = useQuery({ queryKey: ['seasons'], queryFn: fetchSeasons, }) const meetingsQuery = useQuery({ queryKey: ['meetings', selectedYear], queryFn: () => fetchLocalMeetings(selectedYear!), enabled: selectedYear != null, }) const meetings = meetingsQuery.data ?? [] const weekendQueries = useQueries({ queries: meetings.map((meeting) => ({ queryKey: ['weekend', meeting.meeting_key], queryFn: () => fetchWeekend(meeting.meeting_key), enabled: meetings.length > 0, staleTime: 60_000, })), }) const weekendsByKey = useMemo(() => { const map = new Map() meetings.forEach((meeting, i) => { const data = weekendQueries[i]?.data if (data) map.set(meeting.meeting_key, data) }) return map }, [meetings, weekendQueries]) const stats = countWeekendStats(weekendQueries.map((q) => q.data)) useEffect(() => { if (seasonsQuery.data?.length && selectedYear == null) { setSelectedYear(seasonsQuery.data[0]) } }, [seasonsQuery.data, selectedYear]) useEffect(() => { if (meetings.length === 0) { setSelectedMeetingKey(null) return } if (selectedMeetingKey == null || !meetings.some((m) => m.meeting_key === selectedMeetingKey)) { setSelectedMeetingKey(meetings[0].meeting_key) } }, [meetings, selectedMeetingKey]) const selectedWeekend = selectedMeetingKey != null ? weekendsByKey.get(selectedMeetingKey) : undefined const weekendsLoading = weekendQueries.some((q) => q.isLoading) if (seasonsQuery.isLoading) { return
loading local data library…
} if (seasonsQuery.isError) { return (
{seasonsQuery.error instanceof Error ? seasonsQuery.error.message : 'Failed to load seasons'}
) } const seasons = seasonsQuery.data ?? [] if (seasons.length === 0) { return (
box-box · admin

Data Health

Local SQLite domain store · ingestion guidance
No ingested seasons yet
Ingest a season or session from the CLI, then return here to inspect coverage.
Get Started
' }, ]} />
) } return (
box-box · admin

Data Health

{seasons.length} season{seasons.length === 1 ? '' : 's'} {stats.full} full {stats.partial} partial {stats.cancelled} cancelled {stats.missing} missing
{selectedYear} Season {meetings.length > 0 && ( {meetings.length} meeting{meetings.length === 1 ? '' : 's'} {!weekendsLoading && ( <> {' '} · {stats.full} complete · {stats.partial} partial )} )}
{meetingsQuery.isLoading && (
loading meetings…
)} {meetingsQuery.isError && (
{meetingsQuery.error instanceof Error ? meetingsQuery.error.message : 'Failed to load meetings'}
)} {!meetingsQuery.isLoading && !meetingsQuery.isError && meetings.length === 0 && (
No meetings discovered for {selectedYear}. Run{' '} box-box --ingest-year {selectedYear}
)} {meetings.length > 0 && (
{meetings.map((meeting, index) => { const weekend = weekendsByKey.get(meeting.meeting_key) const selected = meeting.meeting_key === selectedMeetingKey const source = weekend?.source ?? 'none' return ( setSelectedMeetingKey(meeting.meeting_key)} > ) })}
# Weekend Date Status Sessions Coverage
{index + 1} {meeting.meeting_name} key {meeting.meeting_key} {formatMeetingDate(meeting)} {weekend ? (
{weekend.sessions.map((entry) => ( {sessionTypeAbbrev(entry.session.session_type, entry.session.session_name)} ))}
) : ( )}
{weekend?.source === 'cancelled' ? 'cancelled' : weekend && weekend.sessions.length > 0 ? `${weekend.sessions.filter((s) => s.source === 'local').length}/${weekend.sessions.length} full` : '—'}
{weekendsLoading && selectedWeekend == null && (
loading weekend details…
)} {selectedWeekend && } {selectedMeetingKey != null && !weekendsLoading && selectedWeekend == null && (
Could not load weekend details.
)}
)}
← Command Center Open Race Hub →
) }