'use client'; import { useInject } from '@/lib/di/hooks/useInject'; import { RACE_RESULTS_SERVICE_TOKEN } from '@/lib/di/tokens'; import { FilePicker } from '@/ui/FilePicker'; import { InfoBox } from '@/ui/InfoBox'; import { Stack } from '@/ui/Stack'; import { Text } from '@/ui/Text'; import { AlertCircle } from 'lucide-react'; import React, { useState } from 'react'; interface ImportResultsFormProps { raceId: string; onSuccess: (results: unknown[]) => void; onError: (error: string) => void; } export function ImportResultsForm({ raceId, onSuccess, onError }: ImportResultsFormProps) { const [uploading, setUploading] = useState(false); const [error, setError] = useState(null); const raceResultsService = useInject(RACE_RESULTS_SERVICE_TOKEN); const handleFileChange = async (event: React.ChangeEvent) => { const file = event.target.files?.[0]; if (!file) return; setUploading(true); setError(null); try { const content = await file.text(); // eslint-disable-next-line @typescript-eslint/no-explicit-any const results = (raceResultsService as any).parseAndTransformCSV(content, raceId); onSuccess(results); } catch (err) { const errorMessage = err instanceof Error ? err.message : 'Failed to parse CSV file'; setError(errorMessage); onError(errorMessage); } finally { setUploading(false); event.target.value = ''; } }; return ( {error && ( )} {uploading && ( Parsing CSV and importing results... )} CSV Example: {`driverId,position,fastestLap,incidents,startPosition 550e8400-e29b-41d4-a716-446655440001,1,92.456,0,3 550e8400-e29b-41d4-a716-446655440002,2,92.789,1,1 550e8400-e29b-41d4-a716-446655440003,3,93.012,2,2`} ); }