'use client'; import { useState } from 'react'; import { useRouter } from 'next/navigation'; import { StatefulPageWrapper } from '@/components/shared/state/StatefulPageWrapper'; import { RacesAllTemplate, StatusFilter } from '@/templates/RacesAllTemplate'; import { useAllRacesPageData } from "@/lib/hooks/race/useAllRacesPageData"; import { Flag } from 'lucide-react'; const ITEMS_PER_PAGE = 10; export default function RacesAllPage() { const router = useRouter(); // Client-side state for filters and pagination const [currentPage, setCurrentPage] = useState(1); const [statusFilter, setStatusFilter] = useState('all'); const [leagueFilter, setLeagueFilter] = useState('all'); const [searchQuery, setSearchQuery] = useState(''); const [showFilters, setShowFilters] = useState(false); const [showFilterModal, setShowFilterModal] = useState(false); // Fetch data using domain hook const { data: pageData, isLoading, error, refetch } = useAllRacesPageData(); // Transform data for template const races = pageData?.races.map((race) => ({ id: race.id, track: race.track, car: race.car, scheduledAt: race.scheduledAt, status: race.status as 'scheduled' | 'running' | 'completed' | 'cancelled', sessionType: 'race', leagueId: race.leagueId, leagueName: race.leagueName, strengthOfField: race.strengthOfField ?? undefined, })) ?? []; // Calculate total pages const filteredRaces = races.filter((race) => { if (statusFilter !== 'all' && race.status !== statusFilter) { return false; } if (leagueFilter !== 'all' && race.leagueId !== leagueFilter) { return false; } if (searchQuery) { const query = searchQuery.toLowerCase(); const matchesTrack = race.track.toLowerCase().includes(query); const matchesCar = race.car.toLowerCase().includes(query); const matchesLeague = race.leagueName?.toLowerCase().includes(query); if (!matchesTrack && !matchesCar && !matchesLeague) { return false; } } return true; }); const totalPages = Math.ceil(filteredRaces.length / ITEMS_PER_PAGE); // Actions const handleRaceClick = (raceId: string) => { router.push(`/races/${raceId}`); }; const handleLeagueClick = (leagueId: string) => { router.push(`/leagues/${leagueId}`); }; const handlePageChange = (page: number) => { setCurrentPage(page); }; return ( ( )} loading={{ variant: 'skeleton', message: 'Loading races...' }} errorConfig={{ variant: 'full-screen' }} empty={{ icon: Flag, title: 'No races found', description: 'There are no races available at the moment', }} /> ); }