wip
This commit is contained in:
@@ -928,7 +928,7 @@ export default function RaceDetailPage() {
|
||||
isOpen={showProtestModal}
|
||||
onClose={() => setShowProtestModal(false)}
|
||||
raceId={race.id}
|
||||
leagueId={league?.id}
|
||||
leagueId={league ? league.id : ''}
|
||||
protestingDriverId={currentDriverId}
|
||||
participants={entryList.map(d => ({ id: d.id, name: d.name }))}
|
||||
/>
|
||||
|
||||
@@ -115,13 +115,17 @@ export default function RaceResultsPage() {
|
||||
setPointsSystem(viewModel.pointsSystem);
|
||||
setFastestLapTime(viewModel.fastestLapTime);
|
||||
setCurrentDriverId(viewModel.currentDriverId);
|
||||
setPenalties(
|
||||
viewModel.penalties.map((p) => ({
|
||||
const mappedPenalties: PenaltyData[] = viewModel.penalties.map((p) => {
|
||||
const base: PenaltyData = {
|
||||
driverId: p.driverId,
|
||||
type: p.type as PenaltyTypeDTO,
|
||||
value: p.value,
|
||||
})),
|
||||
);
|
||||
};
|
||||
if (typeof p.value === 'number') {
|
||||
return { ...base, value: p.value };
|
||||
}
|
||||
return base;
|
||||
});
|
||||
setPenalties(mappedPenalties);
|
||||
}
|
||||
|
||||
try {
|
||||
@@ -287,9 +291,9 @@ export default function RaceResultsPage() {
|
||||
results={results}
|
||||
drivers={drivers}
|
||||
pointsSystem={pointsSystem}
|
||||
fastestLapTime={fastestLapTime}
|
||||
fastestLapTime={fastestLapTime ?? 0}
|
||||
penalties={penalties}
|
||||
currentDriverId={currentDriverId}
|
||||
currentDriverId={currentDriverId ?? ''}
|
||||
/>
|
||||
) : (
|
||||
<>
|
||||
|
||||
@@ -31,6 +31,8 @@ import {
|
||||
} from '@/lib/di-container';
|
||||
import { useEffectiveDriverId } from '@/lib/currentDriver';
|
||||
import { isLeagueAdminOrHigherRole } from '@/lib/leagueRoles';
|
||||
import { RaceProtestsPresenter } from '@/lib/presenters/RaceProtestsPresenter';
|
||||
import { RacePenaltiesPresenter } from '@/lib/presenters/RacePenaltiesPresenter';
|
||||
import type { RaceProtestViewModel } from '@gridpilot/racing/application/presenters/IRaceProtestsPresenter';
|
||||
import type { RacePenaltyViewModel } from '@gridpilot/racing/application/presenters/IRacePenaltiesPresenter';
|
||||
import type { League } from '@gridpilot/racing/domain/entities/League';
|
||||
@@ -41,7 +43,9 @@ export default function RaceStewardingPage() {
|
||||
const router = useRouter();
|
||||
const raceId = params.id as string;
|
||||
const currentDriverId = useEffectiveDriverId();
|
||||
|
||||
|
||||
const driversById: Record<string, { name?: string }> = {};
|
||||
|
||||
const [race, setRace] = useState<Race | null>(null);
|
||||
const [league, setLeague] = useState<League | null>(null);
|
||||
const [protests, setProtests] = useState<RaceProtestViewModel[]>([]);
|
||||
@@ -78,13 +82,15 @@ export default function RaceStewardingPage() {
|
||||
setIsAdmin(membership ? isLeagueAdminOrHigherRole(membership.role) : false);
|
||||
}
|
||||
|
||||
await protestsUseCase.execute(raceId);
|
||||
const protestsViewModel = protestsUseCase.presenter.getViewModel();
|
||||
setProtests(protestsViewModel.protests);
|
||||
const protestsPresenter = new RaceProtestsPresenter();
|
||||
await protestsUseCase.execute({ raceId }, protestsPresenter);
|
||||
const protestsViewModel = protestsPresenter.getViewModel();
|
||||
setProtests(protestsViewModel?.protests ?? []);
|
||||
|
||||
await penaltiesUseCase.execute(raceId);
|
||||
const penaltiesViewModel = penaltiesUseCase.presenter.getViewModel();
|
||||
setPenalties(penaltiesViewModel.penalties);
|
||||
const penaltiesPresenter = new RacePenaltiesPresenter();
|
||||
await penaltiesUseCase.execute({ raceId }, penaltiesPresenter);
|
||||
const penaltiesViewModel = penaltiesPresenter.getViewModel();
|
||||
setPenalties(penaltiesViewModel?.penalties ?? []);
|
||||
} catch (err) {
|
||||
console.error('Failed to load data:', err);
|
||||
} finally {
|
||||
|
||||
Reference in New Issue
Block a user