import { LeagueCard } from '@/components/leagues/LeagueCardWrapper'; import { CategoryId, LeagueCategory } from '@/lib/config/leagueCategories'; import { TemplateProps } from '@/lib/contracts/components/ComponentContracts'; import { LeaguesViewData } from '@/lib/view-data/LeaguesViewData'; import { LeagueSummaryViewModel } from '@/lib/view-models/LeagueSummaryViewModel'; import { Box } from '@/ui/Box'; import { Button } from '@/ui/Button'; import { ControlBar } from '@/ui/ControlBar'; import { FeatureGrid } from '@/ui/FeatureGrid'; import { Group } from '@/ui/Group'; import { Heading } from '@/ui/Heading'; import { Icon } from '@/ui/Icon'; import { Input } from '@/ui/Input'; import { MetricCard } from '@/ui/MetricCard'; import { PageHeader } from '@/ui/PageHeader'; import { Section } from '@/ui/Section'; import { SegmentedControl } from '@/ui/SegmentedControl'; import { Stack } from '@/ui/Stack'; import { Surface } from '@/ui/Surface'; import { Text } from '@/ui/Text'; import { Filter, Plus, Search, Sparkles, Trophy } from 'lucide-react'; import React from 'react'; interface LeaguesTemplateProps extends TemplateProps { searchQuery: string; onSearchChange: (query: string) => void; activeCategory: CategoryId; onCategoryChange: (id: CategoryId) => void; filteredLeagues: LeaguesViewData['leagues']; categories: LeagueCategory[]; onCreateLeague: () => void; onLeagueClick: (id: string) => void; onClearFilters: () => void; } export function LeaguesTemplate({ viewData, searchQuery, onSearchChange, activeCategory, onCategoryChange, filteredLeagues, categories, onCreateLeague, onLeagueClick, onClearFilters, }: LeaguesTemplateProps) { return (
{/* Header Section */} } > Create League } /> {/* Stats Overview */} acc + (l.usedDriverSlots ?? 0), 0)} icon={Trophy} intent="primary" /> acc + Math.max(0, (l.maxDrivers ?? 0) - (l.usedDriverSlots ?? 0)), 0)} icon={Trophy} intent="success" /> {/* Featured Leagues Section */} {viewData.leagues.filter(l => (l.usedDriverSlots ?? 0) > 20).length > 0 && ( Featured Leagues {viewData.leagues .filter(l => (l.usedDriverSlots ?? 0) > 20) .slice(0, 2) .map((league) => ( onLeagueClick(league.id)} /> ))} )} {/* Control Bar */} ({ id: c.id, label: c.label, icon: }))} activeId={activeCategory} onChange={(id) => onCategoryChange(id as CategoryId)} /> } > ) => onSearchChange(e.target.value)} icon={} size="sm" /> {/* Results */} {filteredLeagues.length > 0 ? ( {filteredLeagues.map((league) => ( onLeagueClick(league.id)} /> ))} ) : ( No results found Adjust filters to find matching infrastructure. )}
); }