import { useAutoAnimate } from '@formkit/auto-animate/react' import { Flag, LogOut, Megaphone, OctagonX, Swords, Timer, TrendingDown, TrendingUp, Wrench, Zap, } from 'lucide-react' import type { LucideIcon } from 'lucide-react' import type { LiveDriverInfo } from '../../types' import type { LiveEvent, LiveEventKind } from '../../lib/events' import { teamColor } from '../../utils' import '../../styles/event-rail.css' interface Props { events: LiveEvent[] driverInfo?: Record } const KIND_ICONS: Record = { overtake: Swords, 'position-gain': TrendingUp, 'position-loss': TrendingDown, 'pit-in': Wrench, 'pit-out': LogOut, 'personal-best': Timer, 'fastest-lap': Zap, retirement: OctagonX, 'track-status': Flag, 'race-control': Megaphone, } export function EventRail({ events, driverInfo }: Props) { const [listRef] = useAutoAnimate() return (
What Just Happened {events.length > 0 && {events.length} events}
{events.length === 0 ? (
Events will appear here as the session unfolds.
) : (
{events.map((event) => { const Icon = KIND_ICONS[event.kind] ?? Megaphone const colour = driverInfo?.[event.racingNumbers[0]]?.TeamColour const accent = event.racingNumbers.length > 0 ? teamColor(colour) : 'var(--border-2)' return (
{event.headline} {event.detail && {event.detail}}
{event.lap > 0 && L{event.lap}}
) })}
)}
) }