import type { RaceControlMessage } from '../types' 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' } export function RaceControlView({ messages }: Props) { if (messages.length === 0) { return (
Race control messages not ingested. Run{' '} box-box --ingest-session <key> to load this dataset.
) } const rows = [...messages].sort((a, b) => a.date.localeCompare(b.date)) return (
{rows.map((message, index) => ( ))}
Time Lap Event Driver Message
{formatEventTime(message.date)} {message.lap_number ?? '—'} {eventLabel(message)} {message.scope && ( {message.scope.toLowerCase()} )} {message.driver_number ?? '—'} {message.message || '—'}
) }