'use client'; import { LeagueCard } from '@/components/leagues/LeagueCardWrapper'; import type { LeaguesViewData } from '@/lib/view-data/LeaguesViewData'; import { LeagueSummaryViewModel } from '@/lib/view-models/LeagueSummaryViewModel'; import { Heading } from '@/ui/Heading'; import { Input } from '@/ui/Input'; import { Button } from '@/ui/Button'; import { Group } from '@/ui/Group'; import { Grid } from '@/ui/Grid'; import { Container } from '@/ui/Container'; import { Text } from '@/ui/Text'; import { Icon } from '@/ui/Icon'; import { Section } from '@/ui/Section'; import { StatusDot } from '@/ui/StatusDot'; import { Plus, Search, Trophy, type LucideIcon, } from 'lucide-react'; import React from 'react'; import { TemplateProps } from '@/lib/contracts/components/ComponentContracts'; export type CategoryId = | 'all' | 'driver' | 'team' | 'nations' | 'trophy' | 'new' | 'popular' | 'openSlots' | 'endurance' | 'sprint'; export interface Category { id: CategoryId; label: string; icon: LucideIcon; description: string; filter: (league: LeaguesViewData['leagues'][number]) => boolean; color?: string; } interface LeaguesTemplateProps extends TemplateProps { searchQuery: string; onSearchChange: (query: string) => void; activeCategory: CategoryId; onCategoryChange: (id: CategoryId) => void; filteredLeagues: LeaguesViewData['leagues']; categories: Category[]; onCreateLeague: () => void; onLeagueClick: (id: string) => void; onClearFilters: () => void; } export function LeaguesTemplate({ viewData, searchQuery, onSearchChange, activeCategory, onCategoryChange, filteredLeagues, categories, onCreateLeague, onLeagueClick, onClearFilters, }: LeaguesTemplateProps) { return ( {/* Hero */} Competition Hub Find Your Grid From casual sprints to epic endurance battles — discover the perfect league for your racing style. {viewData.leagues.length} Active Leagues {/* Search & Filters */} ) => onSearchChange(e.target.value)} icon={} /> {categories.map((category) => { const isActive = activeCategory === category.id; const CategoryIcon = category.icon; return ( ); })} {/* Grid */} {filteredLeagues.length > 0 ? ( {filteredLeagues.map((league) => ( onLeagueClick(league.id)} /> ))} ) : (
No Leagues Found Try adjusting your search or filters
)}
); }