import React from 'react'; import { Calendar, Clock, PlayCircle, CheckCircle2, XCircle, Car, Zap, Trophy, ArrowRight, ChevronRight } from 'lucide-react'; import { Box } from '@/ui/Box'; import { Heading } from '@/ui/Heading'; import { Text } from '@/ui/Text'; import { Link } from '@/ui/Link'; import { Card } from '@/ui/Card'; import { Stack } from '@/ui/Stack'; import { Badge } from '@/ui/Badge'; import type { RaceViewData } from '@/lib/view-data/RacesViewData'; import { routes } from '@/lib/routing/RouteConfig'; interface RaceListProps { racesByDate: Array<{ dateKey: string; dateLabel: string; races: RaceViewData[]; }>; totalCount: number; onRaceClick: (raceId: string) => void; } export function RaceList({ racesByDate, totalCount, onRaceClick }: RaceListProps) { const statusConfig = { scheduled: { icon: Clock, variant: 'primary' as const, label: 'Scheduled', }, running: { icon: PlayCircle, variant: 'success' as const, label: 'LIVE', }, completed: { icon: CheckCircle2, variant: 'default' as const, label: 'Completed', }, cancelled: { icon: XCircle, variant: 'warning' as const, label: 'Cancelled', }, }; if (racesByDate.length === 0) { return ( No races found {totalCount === 0 ? 'No races have been scheduled yet' : 'Try adjusting your filters'} ); } return ( {racesByDate.map((group) => ( {/* Date Header */} {group.dateLabel} {group.races.length} race{group.races.length !== 1 ? 's' : ''} {/* Races for this date */} {group.races.map((race) => { const config = statusConfig[race.status as keyof typeof statusConfig] || statusConfig.scheduled; const StatusIcon = config.icon; return ( onRaceClick(race.id)} style={{ position: 'relative', overflow: 'hidden', borderRadius: '0.75rem', backgroundColor: '#262626', border: '1px solid rgba(38, 38, 38, 1)', padding: '1rem', cursor: 'pointer' }} > {/* Live indicator */} {race.status === 'running' && ( )} {/* Time Column */} {race.timeLabel} {race.status === 'running' ? 'LIVE' : race.relativeTimeLabel} {/* Divider */} {/* Main Content */} {race.track} {race.car} {race.strengthOfField && ( SOF {race.strengthOfField} )} {/* Status Badge */} {config.label} {/* League Link */} e.stopPropagation()} variant="primary" style={{ fontSize: '0.875rem' }} > {race.leagueName} {/* Arrow */} ); })} ))} ); }