'use client'; import { LeaderboardDriver, LeaderboardTrack, PointsEntry, ResultValue } from '@/lib/schemas/leaderboard'; interface ResultInputProps { value: ResultValue; pointsTable: PointsEntry[]; onChange: (value: ResultValue) => void; } function ResultInput({ value, pointsTable, onChange }: ResultInputProps) { const knownPoints = Array.from(new Set(pointsTable.map((e) => e.points))).sort((a, b) => b - a); const handleChange = (raw: string) => { if (raw === 'DNF') return onChange('DNF'); if (raw === 'DNS') return onChange('DNS'); onChange(parseInt(raw) || 0); }; return ( handleChange(e.target.value)} className="w-full rounded bg-gray-600 px-1 py-1 text-xs text-white" > {knownPoints.map((p) => ( {p} ))} DNF DNS ); } interface TracksEditorProps { tracks: LeaderboardTrack[]; drivers: LeaderboardDriver[]; pointsTable: PointsEntry[]; onChange: (tracks: LeaderboardTrack[]) => void; } export function TracksEditor({ tracks, drivers, pointsTable, onChange }: TracksEditorProps) { const updateTrack = (index: number, patch: Partial) => { onChange(tracks.map((t, i) => (i === index ? { ...t, ...patch } : t))); }; const updateResult = (trackIndex: number, driverIndex: number, value: ResultValue) => { const newResults = [...tracks[trackIndex].results]; newResults[driverIndex] = value; updateTrack(trackIndex, { results: newResults }); }; const removeTrack = (index: number) => { onChange(tracks.filter((_, i) => i !== index)); }; const addTrack = () => { onChange([ ...tracks, { name: `Race ${tracks.length + 1}`, results: drivers.map(() => 'DNS' as const), fastestLapInitials: '' } ]); }; return ( {tracks.map((track, ti) => ( updateTrack(ti, { name: e.target.value })} className="flex-1 rounded bg-gray-600 px-2 py-1 text-sm font-semibold text-white" placeholder="Track name" /> FL Driver: updateTrack(ti, { fastestLapInitials: e.target.value })} className="rounded bg-gray-600 px-2 py-1 text-sm text-white" > — {drivers.map((d) => ( {d.initials} ({d.name}) ))} removeTrack(ti)} className="rounded px-2 py-1 text-sm text-red-400 hover:bg-red-900/30 hover:text-red-300" title="Remove track" > ✕ {drivers.length === 0 ? ( Add drivers first to enter results. ) : ( {drivers.map((driver, di) => ( {driver.name} updateResult(ti, di, v)} /> ))} )} ))} + Add Track / Race ); }
Add drivers first to enter results.