74 lines
1.6 KiB
TypeScript
74 lines
1.6 KiB
TypeScript
import { ViewData } from '@/lib/contracts/view-data/ViewData';
|
|
|
|
/**
|
|
* Dashboard ViewData
|
|
*
|
|
* SSR-safe data structure that can be built directly from DTO
|
|
* without ViewModel instantiation. Contains formatted values
|
|
* for display and ISO string timestamps for JSON serialization.
|
|
*/
|
|
|
|
|
|
export interface DashboardViewData extends ViewData {
|
|
currentDriver: {
|
|
name: string;
|
|
avatarUrl: string;
|
|
country: string;
|
|
rating: string;
|
|
rank: string;
|
|
totalRaces: string;
|
|
wins: string;
|
|
podiums: string;
|
|
consistency: string;
|
|
};
|
|
nextRace: {
|
|
id: string;
|
|
track: string;
|
|
car: string;
|
|
scheduledAt: string; // ISO string
|
|
formattedDate: string;
|
|
formattedTime: string;
|
|
timeUntil: string;
|
|
isMyLeague: boolean;
|
|
} | null;
|
|
upcomingRaces: Array<{
|
|
id: string;
|
|
track: string;
|
|
car: string;
|
|
scheduledAt: string; // ISO string
|
|
formattedDate: string;
|
|
formattedTime: string;
|
|
timeUntil: string;
|
|
isMyLeague: boolean;
|
|
}>;
|
|
leagueStandings: Array<{
|
|
leagueId: string;
|
|
leagueName: string;
|
|
position: string;
|
|
points: string;
|
|
totalDrivers: string;
|
|
}>;
|
|
feedItems: Array<{
|
|
id: string;
|
|
type: string;
|
|
headline: string;
|
|
body?: string;
|
|
timestamp: string; // ISO string
|
|
formattedTime: string;
|
|
ctaHref?: string;
|
|
ctaLabel?: string;
|
|
}>;
|
|
friends: Array<{
|
|
id: string;
|
|
name: string;
|
|
avatarUrl: string;
|
|
country: string;
|
|
}>;
|
|
activeLeaguesCount: string;
|
|
friendCount: string;
|
|
hasUpcomingRaces: boolean;
|
|
hasLeagueStandings: boolean;
|
|
hasFeedItems: boolean;
|
|
hasFriends: boolean;
|
|
}
|