website refactor
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
import { describe, it, expect } from 'vitest';
|
||||
import { LeagueDetailViewModel, LeagueViewModel, DriverViewModel, RaceViewModel } from './LeagueDetailViewModel';
|
||||
import { LeagueDetailViewModel, LeagueViewModel, LeagueDetailDriverViewModel, LeagueDetailRaceViewModel } from './LeagueDetailViewModel';
|
||||
|
||||
describe('LeagueDetailViewModel', () => {
|
||||
const baseLeague = {
|
||||
@@ -40,9 +40,9 @@ describe('LeagueDetailViewModel', () => {
|
||||
|
||||
expect(vm.league).toBeInstanceOf(LeagueViewModel);
|
||||
expect(vm.drivers).toHaveLength(2);
|
||||
expect(vm.drivers[0]).toBeInstanceOf(DriverViewModel);
|
||||
expect(vm.drivers[0]).toBeInstanceOf(LeagueDetailDriverViewModel);
|
||||
expect(vm.races).toHaveLength(2);
|
||||
expect(vm.races[0]).toBeInstanceOf(RaceViewModel);
|
||||
expect(vm.races[0]).toBeInstanceOf(LeagueDetailRaceViewModel);
|
||||
});
|
||||
|
||||
it('keeps core league metrics available on LeagueViewModel', () => {
|
||||
|
||||
@@ -8,13 +8,39 @@ import { RaceViewModel as SharedRaceViewModel } from "./RaceViewModel";
|
||||
*/
|
||||
export class LeagueDetailViewModel {
|
||||
league: LeagueViewModel;
|
||||
drivers: SharedDriverViewModel[];
|
||||
races: SharedRaceViewModel[];
|
||||
drivers: LeagueDetailDriverViewModel[];
|
||||
races: LeagueDetailRaceViewModel[];
|
||||
|
||||
constructor(data: { league: unknown; drivers: unknown[]; races: unknown[] }) {
|
||||
this.league = new LeagueViewModel(data.league);
|
||||
this.drivers = data.drivers.map(driver => new SharedDriverViewModel(driver as any));
|
||||
this.races = data.races.map(race => new SharedRaceViewModel(race as any));
|
||||
this.drivers = data.drivers.map(driver => new LeagueDetailDriverViewModel(driver as any));
|
||||
this.races = data.races.map(race => new LeagueDetailRaceViewModel(race as any));
|
||||
}
|
||||
}
|
||||
|
||||
export class LeagueDetailDriverViewModel extends SharedDriverViewModel {
|
||||
impressions: number;
|
||||
|
||||
constructor(dto: any) {
|
||||
super(dto);
|
||||
this.impressions = dto.impressions || 0;
|
||||
}
|
||||
|
||||
get formattedImpressions(): string {
|
||||
return this.impressions.toLocaleString();
|
||||
}
|
||||
}
|
||||
|
||||
export class LeagueDetailRaceViewModel extends SharedRaceViewModel {
|
||||
views: number;
|
||||
|
||||
constructor(dto: any) {
|
||||
super(dto);
|
||||
this.views = dto.views || 0;
|
||||
}
|
||||
|
||||
get formattedViews(): string {
|
||||
return this.views.toLocaleString();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
export interface LeagueSummaryViewModel {
|
||||
id: string;
|
||||
name: string;
|
||||
description: string;
|
||||
description: string | null;
|
||||
logoUrl: string | null;
|
||||
ownerId: string;
|
||||
createdAt: string;
|
||||
@@ -12,7 +12,7 @@ export interface LeagueSummaryViewModel {
|
||||
structureSummary: string;
|
||||
scoringPatternSummary?: string;
|
||||
timingSummary: string;
|
||||
category?: string;
|
||||
category?: string | null;
|
||||
scoring?: {
|
||||
gameId: string;
|
||||
gameName: string;
|
||||
|
||||
Reference in New Issue
Block a user