'use client'; import { useState, useEffect } from 'react'; import { useRouter, useSearchParams } from 'next/navigation'; import Button from '@/components/ui/Button'; import Card from '@/components/ui/Card'; import RaceCard from '@/components/alpha/RaceCard'; import ScheduleRaceForm from '@/components/alpha/ScheduleRaceForm'; import { Race, RaceStatus } from '@/domain/entities/Race'; import { League } from '@/domain/entities/League'; import { getRaceRepository, getLeagueRepository } from '@/lib/di-container'; export default function RacesPage() { const router = useRouter(); const searchParams = useSearchParams(); const [races, setRaces] = useState([]); const [leagues, setLeagues] = useState>(new Map()); const [loading, setLoading] = useState(true); const [showScheduleForm, setShowScheduleForm] = useState(false); // Filters const [statusFilter, setStatusFilter] = useState('all'); const [leagueFilter, setLeagueFilter] = useState('all'); const [timeFilter, setTimeFilter] = useState<'all' | 'upcoming' | 'past'>('all'); const loadRaces = async () => { try { const raceRepo = getRaceRepository(); const leagueRepo = getLeagueRepository(); const [allRaces, allLeagues] = await Promise.all([ raceRepo.findAll(), leagueRepo.findAll() ]); setRaces(allRaces.sort((a, b) => b.scheduledAt.getTime() - a.scheduledAt.getTime())); const leagueMap = new Map(); allLeagues.forEach(league => leagueMap.set(league.id, league)); setLeagues(leagueMap); } catch (err) { console.error('Failed to load races:', err); } finally { setLoading(false); } }; useEffect(() => { loadRaces(); }, []); const filteredRaces = races.filter(race => { // Status filter if (statusFilter !== 'all' && race.status !== statusFilter) { return false; } // League filter if (leagueFilter !== 'all' && race.leagueId !== leagueFilter) { return false; } // Time filter if (timeFilter === 'upcoming' && !race.isUpcoming()) { return false; } if (timeFilter === 'past' && !race.isPast()) { return false; } return true; }); if (loading) { return (
Loading races...
); } if (showScheduleForm) { return (

Schedule New Race

{ router.push(`/races/${race.id}`); }} onCancel={() => setShowScheduleForm(false)} />
); } return (
{/* Header */}

Races

Manage and view all scheduled races across your leagues

{/* Filters */}
{/* Time Filter */}
{/* Status Filter */}
{/* League Filter */}
{/* Race List */} {filteredRaces.length === 0 ? (
{races.length === 0 ? ( <>

No races scheduled

Try the full workflow in alpha mode

) : ( <>

No races match your filters

Try adjusting your filter criteria

)}
) : (
{filteredRaces.map(race => ( router.push(`/races/${race.id}`)} /> ))}
)}
); }