import type { RaceControlMessage } from '../types' import { rcFlagClass } from '../lib/live' interface Props { messages: RaceControlMessage[] } function formatEventTime(date: string): string { if (!date) return '—' const parsed = new Date(date) if (Number.isNaN(parsed.getTime())) return date return parsed.toLocaleTimeString('en-GB', { hour: '2-digit', minute: '2-digit', second: '2-digit', }) } function eventLabel(message: RaceControlMessage): string { return message.flag || message.category || 'Message' } function eventClass(message: RaceControlMessage): string { const flagClass = rcFlagClass(message.flag ?? '') if (flagClass) return flagClass const category = (message.category ?? '').toLowerCase() const text = `${message.message ?? ''} ${message.category ?? ''}`.toLowerCase() if (category.includes('safety') || text.includes('safety car')) return 'rc-flag-sc' if (category === 'drs' || text.includes('drs')) return 'rc-flag-drs' if (text.includes('virtual safety car')) return 'rc-flag-vsc' if (text.includes('red flag')) return 'rc-flag-red' if (text.includes('yellow')) return 'rc-flag-yellow' if (text.includes('green light') || text.includes('green flag')) return 'rc-flag-green' if (text.includes('chequered') || text.includes('checkered')) return 'rc-flag-chequered' return 'rc-flag-other' } export function RaceControlView({ messages }: Props) { if (messages.length === 0) { return (
box-box --ingest-session <key> to load this dataset.
| Time | Lap | Event | Driver | Message |
|---|---|---|---|---|
| {formatEventTime(message.date)} | {message.lap_number ?? '—'} | {eventLabel(message)} {message.scope && ( {message.scope.toLowerCase()} )} | {message.driver_number ?? '—'} | {message.message || '—'} |