api client refactor
This commit is contained in:
@@ -9,51 +9,10 @@ import Breadcrumbs from '@/components/layout/Breadcrumbs';
|
||||
import ResultsTable from '@/components/races/ResultsTable';
|
||||
import ImportResultsForm from '@/components/races/ImportResultsForm';
|
||||
import QuickPenaltyModal from '@/components/leagues/QuickPenaltyModal';
|
||||
import { apiClient } from '@/lib/apiClient';
|
||||
import { getRaceResults, getRaceSOF, importRaceResults } from '@/lib/services/races/RaceResultsService';
|
||||
import { useEffectiveDriverId } from '@/lib/currentDriver';
|
||||
import { isLeagueAdminOrHigherRole } from '@/lib/leagueRoles';
|
||||
import type { RaceResultsDetailViewModel, RaceWithSOFViewModel } from '@/lib/apiClient';
|
||||
|
||||
type PenaltyTypeDTO =
|
||||
| 'time_penalty'
|
||||
| 'grid_penalty'
|
||||
| 'points_deduction'
|
||||
| 'disqualification'
|
||||
| 'warning'
|
||||
| 'license_points'
|
||||
| string;
|
||||
|
||||
interface PenaltyData {
|
||||
driverId: string;
|
||||
type: PenaltyTypeDTO;
|
||||
value?: number;
|
||||
}
|
||||
|
||||
interface RaceResultRowDTO {
|
||||
id: string;
|
||||
raceId: string;
|
||||
driverId: string;
|
||||
position: number;
|
||||
fastestLap: number;
|
||||
incidents: number;
|
||||
startPosition: number;
|
||||
getPositionChange(): number;
|
||||
}
|
||||
|
||||
interface DriverRowDTO {
|
||||
id: string;
|
||||
name: string;
|
||||
}
|
||||
|
||||
interface ImportResultRowDTO {
|
||||
id: string;
|
||||
raceId: string;
|
||||
driverId: string;
|
||||
position: number;
|
||||
fastestLap: number;
|
||||
incidents: number;
|
||||
startPosition: number;
|
||||
}
|
||||
import type { RaceResultsDetailViewModel } from '@/lib/view-models';
|
||||
|
||||
export default function RaceResultsPage() {
|
||||
const router = useRouter();
|
||||
@@ -69,16 +28,16 @@ export default function RaceResultsPage() {
|
||||
const [importSuccess, setImportSuccess] = useState(false);
|
||||
const [isAdmin, setIsAdmin] = useState(false);
|
||||
const [showQuickPenaltyModal, setShowQuickPenaltyModal] = useState(false);
|
||||
const [preSelectedDriver, setPreSelectedDriver] = useState<DriverRowDTO | undefined>(undefined);
|
||||
const [preSelectedDriver, setPreSelectedDriver] = useState<{ id: string; name: string } | undefined>(undefined);
|
||||
|
||||
const loadData = async () => {
|
||||
try {
|
||||
const raceData = await apiClient.races.getResultsDetail(raceId);
|
||||
const raceData = await getRaceResults(raceId, currentDriverId);
|
||||
setRaceData(raceData);
|
||||
setError(null);
|
||||
|
||||
try {
|
||||
const sofData = await apiClient.races.getWithSOF(raceId);
|
||||
const sofData = await getRaceSOF(raceId);
|
||||
setRaceSOF(sofData.strengthOfField);
|
||||
} catch (sofErr) {
|
||||
console.error('Failed to load SOF:', sofErr);
|
||||
@@ -106,12 +65,12 @@ export default function RaceResultsPage() {
|
||||
}
|
||||
}, [raceData?.league?.id, currentDriverId]);
|
||||
|
||||
const handleImportSuccess = async (importedResults: ImportResultRowDTO[]) => {
|
||||
const handleImportSuccess = async (importedResults: any[]) => {
|
||||
setImporting(true);
|
||||
setError(null);
|
||||
|
||||
try {
|
||||
await apiClient.races.importResults(raceId, {
|
||||
await importRaceResults(raceId, {
|
||||
resultsFileContent: JSON.stringify(importedResults), // Assuming the API expects JSON string
|
||||
});
|
||||
|
||||
@@ -128,7 +87,7 @@ export default function RaceResultsPage() {
|
||||
setError(errorMessage);
|
||||
};
|
||||
|
||||
const handlePenaltyClick = (driver: DriverRowDTO) => {
|
||||
const handlePenaltyClick = (driver: { id: string; name: string }) => {
|
||||
setPreSelectedDriver(driver);
|
||||
setShowQuickPenaltyModal(true);
|
||||
};
|
||||
@@ -241,7 +200,7 @@ export default function RaceResultsPage() {
|
||||
</span>
|
||||
<span className="flex items-center gap-2">
|
||||
<Users className="w-4 h-4" />
|
||||
{raceData.results.length} drivers classified
|
||||
{raceData.stats.totalDrivers} drivers classified
|
||||
</span>
|
||||
</>
|
||||
)}
|
||||
@@ -265,11 +224,11 @@ export default function RaceResultsPage() {
|
||||
<Card>
|
||||
{hasResults && raceData ? (
|
||||
<ResultsTable
|
||||
results={raceData.results as any}
|
||||
drivers={raceData.drivers as any}
|
||||
results={raceData.resultsByPosition}
|
||||
drivers={raceData.drivers}
|
||||
pointsSystem={raceData.pointsSystem ?? {}}
|
||||
fastestLapTime={raceData.fastestLapTime ?? 0}
|
||||
penalties={raceData.penalties as any}
|
||||
penalties={raceData.penalties}
|
||||
currentDriverId={raceData.currentDriverId ?? ''}
|
||||
isAdmin={isAdmin}
|
||||
onPenaltyClick={handlePenaltyClick}
|
||||
|
||||
Reference in New Issue
Block a user