import { useMemo } from 'react' import { useQueries, useQuery } from '@tanstack/react-query' import { Link } from '@tanstack/react-router' import { fetchChampionshipHub, fetchLocalMeetings, fetchSeasonMeetings, fetchSeasons, fetchWeekend, } from '../api' import { countryFlag, formatGpDateRange } from '../lib/gpIdentity' import { meetingHasStarted } from '../lib/schedule' import { teamColor } from '../utils' import type { Weekend } from '../types' import '../styles/weekend.css' function analysisKey(weekend: Weekend | undefined): number | undefined { if (!weekend) return undefined const race = weekend.sessions.find((s) => s.session.session_type?.toLowerCase().includes('race')) return race?.session.session_key ?? weekend.default_session_key } export function ExplorePage() { const now = useMemo(() => new Date(), []) const seasonsQuery = useQuery({ queryKey: ['seasons'], queryFn: fetchSeasons }) const season = seasonsQuery.data?.[0] ?? null const localMeetingsQuery = useQuery({ queryKey: ['meetings', season, 'local'], queryFn: () => fetchLocalMeetings(season!), enabled: season != null, }) const seasonMeetingsQuery = useQuery({ queryKey: ['season-meetings', season], queryFn: () => fetchSeasonMeetings(season!), enabled: season != null, }) const championshipQuery = useQuery({ queryKey: ['championship-hub', season], queryFn: () => fetchChampionshipHub(season!), enabled: season != null, }) const localMeetings = localMeetingsQuery.data ?? [] const meetings = seasonMeetingsQuery.data?.length ? seasonMeetingsQuery.data : localMeetings const weekendQueries = useQueries({ queries: localMeetings.map((m) => ({ queryKey: ['weekend', m.meeting_key], queryFn: () => fetchWeekend(m.meeting_key), enabled: localMeetings.length > 0, staleTime: 60_000, })), }) const weekendsByKey = useMemo(() => { const map = new Map() localMeetings.forEach((m, i) => { const data = weekendQueries[i]?.data if (data) map.set(m.meeting_key, data) }) return map }, [localMeetings, weekendQueries]) const drivers = championshipQuery.data?.drivers ?? [] const activeMeetings = meetings.filter((m) => !m.is_cancelled) if (seasonsQuery.isLoading) { return

Loading…

} return (
Explore · {season ?? 'season'}
Season races {activeMeetings.length} rounds
{activeMeetings.length === 0 ? (

No season calendar available yet.

) : (
    {activeMeetings.map((meeting, index) => { const weekend = weekendsByKey.get(meeting.meeting_key) const target = analysisKey(weekend) const done = meetingHasStarted(meeting, now) const card = ( <>
    R{String(index + 1).padStart(2, '0')} {countryFlag(meeting) || meeting.country_code}
    {meeting.meeting_name}
    {meeting.circuit_short_name || meeting.location}
    {formatGpDateRange(meeting)}
    {done ? 'Completed' : 'Upcoming'} ) return (
  1. {target ? ( {card} ) : (
    {card}
    )}
  2. ) })}
)}
Drivers Championship →
{drivers.length === 0 ? (

Driver data not available yet.

) : (
    {drivers.map((d) => (
  1. {d.position} {d.name_acronym} {d.points}
  2. ))}
)}
) }