import { LeaderboardFiltersBar } from '@/components/leaderboards/LeaderboardFiltersBar'; import { LeaderboardTable } from '@/components/leaderboards/LeaderboardTable'; import { RankingsPodium } from '@/components/leaderboards/RankingsPodium'; import type { DriverRankingsViewData } from '@/lib/view-data/DriverRankingsViewData'; import { Button } from '@/ui/Button'; import { Container } from '@/ui/Container'; import { Icon } from '@/ui/Icon'; import { PageHeader } from '@/ui/PageHeader'; import { Text } from '@/ui/Text'; import { Box } from '@/ui/Box'; import { Group } from '@/ui/Group'; import { Select } from '@/ui/Select'; import { ChevronLeft, Trophy, ChevronRight } from 'lucide-react'; import React from 'react'; type SkillLevel = 'all' | 'pro' | 'advanced' | 'intermediate' | 'beginner'; type SortBy = 'rank' | 'rating' | 'wins' | 'podiums' | 'winRate'; interface DriverRankingsTemplateProps { viewData: DriverRankingsViewData; searchQuery: string; onSearchChange: (query: string) => void; onSkillChange: (skill: SkillLevel) => void; onTeamChange: (teamId: string) => void; onSortChange: (sort: SortBy) => void; onPageChange: (page: number) => void; currentPage: number; totalPages: number; totalDrivers: number; onDriverClick?: (id: string) => void; onBackToLeaderboards?: () => void; } export function DriverRankingsTemplate({ viewData, searchQuery, onSearchChange, onSkillChange, onTeamChange, onSortChange, onPageChange, currentPage, totalPages, totalDrivers, onDriverClick, onBackToLeaderboards, }: DriverRankingsTemplateProps): React.ReactElement { const skillOptions = [ { value: 'all', label: 'All Skills' }, { value: 'pro', label: 'Pro' }, { value: 'advanced', label: 'Advanced' }, { value: 'intermediate', label: 'Intermediate' }, { value: 'beginner', label: 'Beginner' }, ]; const sortOptions = [ { value: 'rank', label: 'Rank' }, { value: 'rating', label: 'Rating' }, { value: 'wins', label: 'Wins' }, { value: 'podiums', label: 'Podiums' }, { value: 'winRate', label: 'Win Rate' }, ]; const teamOptions = [ { value: 'all', label: 'All Teams' }, ...viewData.availableTeams.map(t => ({ value: t.id, label: t.name })), ]; return ( } data-testid="back-to-leaderboards" > Back to Leaderboards ) } /> {/* Top 3 Podium */} {viewData.podium.length > 0 && !searchQuery && currentPage === 1 && ( ({ ...d, rating: Number(d.rating), wins: Number(d.wins), podiums: Number(d.podiums) }))} onDriverClick={onDriverClick} /> )} onTeamChange(e.target.value)} data-testid="team-filter" />