// components/live/LiveTiming.tsx 'use client'; import { BoltIcon } from '@/components/ui/icons'; interface TimingEntry { position: number; carID: number; driver_name: string; car_model: string; current_lap: number; last_lap_time: number | null; best_lap_time: number | null; gap_to_leader: string; avg_lap_time: number | null; } interface LiveTimingProps { entries: TimingEntry[]; } export default function LiveTiming({ entries }: LiveTimingProps) { // Format lap time from milliseconds const formatLapTime = (ms: number | null) => { if (!ms || ms === 0) return '-:--.---'; const minutes = Math.floor(ms / 60000); const seconds = Math.floor((ms % 60000) / 1000); const milliseconds = ms % 1000; return `${minutes}:${String(seconds).padStart(2, '0')}.${String(milliseconds).padStart(3, '0')}`; }; // Get position color const getPositionColor = (position: number) => { if (position === 1) return 'text-white border-white'; if (position === 2) return 'text-white/90 border-white/70'; if (position === 3) return 'text-white/80 border-white/50'; return 'text-white/60 border-white/20'; }; return (
{/* Header */}
POS
DRIVER
LAP
LAST LAP
BEST
{/* Timing Entries */}
{entries.map((entry) => { const isLeader = entry.position === 1; const isFastestLap = entries.length > 0 && entry.best_lap_time === Math.min(...entries.filter(e => e.best_lap_time).map(e => e.best_lap_time!)); return (
{/* Position */}
{String(entry.position).padStart(2, '0')}
{/* Driver Info */}
{entry.driver_name}
{entry.car_model}
{/* Current Lap */}
{entry.current_lap}
{/* Last Lap Time */}
{formatLapTime(entry.last_lap_time)}
{entry.avg_lap_time && (
Avg: {formatLapTime(entry.avg_lap_time)}
)}
{/* Best Lap Time */}
{formatLapTime(entry.best_lap_time)} {isFastestLap && ( )}
); })}
{/* Legend */}
Fastest lap overall
Times updated in real-time from server telemetry
); }