'use client'; import Breadcrumbs from '@/components/layout/Breadcrumbs'; import QuickPenaltyModal from '@/components/leagues/QuickPenaltyModal'; import ImportResultsForm from '@/components/races/ImportResultsForm'; import RaceResultsHeader from '@/components/races/RaceResultsHeader'; import ResultsTable from '@/components/races/ResultsTable'; import Button from '@/components/ui/Button'; import Card from '@/components/ui/Card'; import { useEffectiveDriverId } from '@/hooks/useEffectiveDriverId'; import { useRaceResultsDetail, useRaceWithSOF } from '@/hooks/useRaceService'; import { useLeagueMembership } from '@/hooks/useLeagueMembershipService'; import { LeagueRoleUtility } from '@/lib/utilities/LeagueRoleUtility'; import type { RaceResultsDetailViewModel } from '@/lib/view-models'; import { ArrowLeft, Calendar, Trophy, Users, Zap } from 'lucide-react'; import { useParams, useRouter } from 'next/navigation'; import { useEffect, useState } from 'react'; export default function RaceResultsPage() { const router = useRouter(); const params = useParams(); const raceId = params.id as string; const currentDriverId = useEffectiveDriverId(); const { data: raceData, isLoading: loading, error } = useRaceResultsDetail(raceId, currentDriverId); const { data: sofData } = useRaceWithSOF(raceId); const { data: membership } = useLeagueMembership(raceData?.league?.id || '', currentDriverId); const [importing, setImporting] = useState(false); const [importSuccess, setImportSuccess] = useState(false); const [showQuickPenaltyModal, setShowQuickPenaltyModal] = useState(false); const [preSelectedDriver, setPreSelectedDriver] = useState<{ id: string; name: string } | undefined>(undefined); const raceSOF = sofData?.strengthOfField || null; const isAdmin = membership ? LeagueRoleUtility.isLeagueAdminOrHigherRole(membership.role) : false; const handleImportSuccess = async (importedResults: any[]) => { setImporting(true); setError(null); try { await raceResultsService.importRaceResults(raceId, { resultsFileContent: JSON.stringify(importedResults), // Assuming the API expects JSON string }); setImportSuccess(true); await loadData(); } catch (err) { setError(err instanceof Error ? err.message : 'Failed to import results'); } finally { setImporting(false); } }; const handleImportError = (errorMessage: string) => { setError(errorMessage); }; const handlePenaltyClick = (driver: { id: string; name: string }) => { setPreSelectedDriver(driver); setShowQuickPenaltyModal(true); }; const handleCloseQuickPenaltyModal = () => { setShowQuickPenaltyModal(false); setPreSelectedDriver(undefined); }; if (loading) { return (
No results imported. Upload CSV to test the standings system.
{importing ? (