30 lines
1.5 KiB
TypeScript
30 lines
1.5 KiB
TypeScript
import { ViewModel } from "../contracts/view-models/ViewModel";
|
|
import { RaceDetailEntryViewModel } from './RaceDetailEntryViewModel';
|
|
import { RaceDetailUserResultViewModel } from './RaceDetailUserResultViewModel';
|
|
import { RaceDetailsRaceViewModel } from './RaceDetailsRaceViewModel';
|
|
import { RaceDetailsLeagueViewModel } from './RaceDetailsLeagueViewModel';
|
|
import { RaceDetailsRegistrationViewModel } from './RaceDetailsRegistrationViewModel';
|
|
import type { RaceDetailsViewData } from "../view-data/RaceDetailsViewData";
|
|
|
|
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; }
|
|
}
|