Files
gridpilot.gg/apps/website/lib/view-models/RaceDetailsViewModel.ts
2026-01-24 01:25:46 +01:00

30 lines
1.5 KiB
TypeScript

import { ViewModel } from "../contracts/view-models/ViewModel";
import type { RaceDetailsViewData } from "../view-data/RaceDetailsViewData";
import { RaceDetailEntryViewModel } from './RaceDetailEntryViewModel';
import { RaceDetailUserResultViewModel } from './RaceDetailUserResultViewModel';
import { RaceDetailsLeagueViewModel } from './RaceDetailsLeagueViewModel';
import { RaceDetailsRaceViewModel } from './RaceDetailsRaceViewModel';
import { RaceDetailsRegistrationViewModel } from './RaceDetailsRegistrationViewModel';
export class RaceDetailsViewModel extends ViewModel {
private readonly data: RaceDetailsViewData;
readonly race: RaceDetailsRaceViewModel | null;
readonly league: RaceDetailsLeagueViewModel | null;
readonly entryList: RaceDetailEntryViewModel[];
readonly registration: RaceDetailsRegistrationViewModel;
readonly userResult: RaceDetailUserResultViewModel | null;
constructor(data: RaceDetailsViewData) {
super();
this.data = data;
this.race = data.race ? new RaceDetailsRaceViewModel(data.race) : null;
this.league = data.league ? new RaceDetailsLeagueViewModel(data.league) : null;
this.entryList = data.entryList.map(e => new RaceDetailEntryViewModel(e));
this.registration = new RaceDetailsRegistrationViewModel(data.registration);
this.userResult = data.userResult ? new RaceDetailUserResultViewModel(data.userResult) : null;
}
get canReopenRace(): boolean { return this.data.canReopenRace; }
get error(): string | undefined { return this.data.error; }
}