46 lines
1.2 KiB
TypeScript
46 lines
1.2 KiB
TypeScript
/**
|
|
* DriverRankingsViewData - Pure ViewData for DriverRankingsTemplate
|
|
* Contains only raw serializable data, no methods or computed properties
|
|
*/
|
|
|
|
export interface DriverRankingItem {
|
|
id: string;
|
|
name: string;
|
|
rating: number;
|
|
skillLevel: string;
|
|
nationality: string;
|
|
racesCompleted: number;
|
|
wins: number;
|
|
podiums: number;
|
|
rank: number;
|
|
avatarUrl: string;
|
|
winRate: string;
|
|
medalBg: string;
|
|
medalColor: string;
|
|
}
|
|
|
|
export interface PodiumDriver {
|
|
id: string;
|
|
name: string;
|
|
rating: number;
|
|
wins: number;
|
|
podiums: number;
|
|
avatarUrl: string;
|
|
position: 1 | 2 | 3;
|
|
}
|
|
|
|
export interface DriverRankingsViewData {
|
|
drivers: DriverRankingItem[];
|
|
podium: PodiumDriver[];
|
|
searchQuery: string;
|
|
selectedSkill: 'all' | 'pro' | 'advanced' | 'intermediate' | 'beginner';
|
|
sortBy: 'rank' | 'rating' | 'wins' | 'podiums' | 'winRate';
|
|
showFilters: boolean;
|
|
onSearchChange: (query: string) => void;
|
|
onSkillChange: (skill: 'all' | 'pro' | 'advanced' | 'intermediate' | 'beginner') => void;
|
|
onSortChange: (sort: 'rank' | 'rating' | 'wins' | 'podiums' | 'winRate') => void;
|
|
onToggleFilters: () => void;
|
|
onDriverClick: (id: string) => void;
|
|
onBackToLeaderboards: () => void;
|
|
onClearFilters: () => void;
|
|
} |