import { NextUpRacePanel } from '@/components/races/NextUpRacePanel'; import { RacesCommandBar } from '@/components/races/RacesCommandBar'; import { RacesDayGroup } from '@/components/races/RacesDayGroup'; import { RacesEmptyState } from '@/components/races/RacesEmptyState'; import { RacesLiveRail } from '@/components/races/RacesLiveRail'; import { RaceFilterModal } from '@/components/races/RaceFilterModal'; import type { RacesViewData, RaceViewData } from '@/lib/view-data/RacesViewData'; import { PageHeader } from '@/ui/PageHeader'; import { Section } from '@/ui/Section'; import { Stack } from '@/ui/Stack'; import { Flag } from 'lucide-react'; export interface RacesIndexTemplateProps { viewData: RacesViewData & { nextUpRace?: RaceViewData; }; // Filters statusFilter: string; setStatusFilter: (filter: string) => void; leagueFilter: string; setLeagueFilter: (filter: string) => void; timeFilter: string; setTimeFilter: (filter: string) => void; // Actions onRaceClick: (raceId: string) => void; // UI State showFilterModal: boolean; setShowFilterModal: (show: boolean) => void; } export function RacesIndexTemplate({ viewData, statusFilter, setStatusFilter, leagueFilter, setLeagueFilter, timeFilter, setTimeFilter, onRaceClick, showFilterModal, setShowFilterModal, }: RacesIndexTemplateProps) { const hasRaces = viewData.racesByDate.length > 0; return (
{/* 1. Status Rail: Live sessions first */} {/* 2. Command Bar: Fast filters */} setShowFilterModal(true)} /> {/* 3. Next Up: High signal panel */} {timeFilter === 'upcoming' && viewData.nextUpRace && ( )} {/* 4. Browse by Day: Grouped schedule */} {hasRaces ? ( {viewData.racesByDate.map((group) => ( ))} ) : ( )} setShowFilterModal(false)} statusFilter={statusFilter as any} setStatusFilter={setStatusFilter} leagueFilter={leagueFilter} setLeagueFilter={setLeagueFilter} timeFilter={timeFilter as any} setTimeFilter={setTimeFilter} searchQuery="" setSearchQuery={() => {}} leagues={viewData.leagues} showSearch={true} showTimeFilter={false} />
); }