'use client'; import type { DriversViewData } from '@/lib/types/view-data/DriversViewData'; import { DriversTemplate } from '@/templates/DriversTemplate'; import { Container } from '@/ui/Container'; import { Stack } from '@/ui/Stack'; import { Text } from '@/ui/Text'; import { useRouter } from 'next/navigation'; import { useMemo, useState } from 'react'; import { routes } from '@/lib/routing/RouteConfig'; interface DriversPageClientProps { viewData: DriversViewData | null; error?: string; empty?: { title: string; description: string; }; } /** * DriversPageClient * * Client component that: * 1. Manages search state * 2. Filters drivers based on search * 3. Passes ViewData to Template */ export function DriversPageClient({ viewData, error, empty }: DriversPageClientProps) { const [searchQuery, setSearchQuery] = useState(''); const router = useRouter(); const filteredDrivers = useMemo(() => { if (!viewData) return []; if (!searchQuery) return viewData.drivers; const query = searchQuery.toLowerCase(); return viewData.drivers.filter(driver => driver.name.toLowerCase().includes(query) || driver.nationality.toLowerCase().includes(query) ); }, [viewData, searchQuery]); const handleDriverClick = (id: string) => { router.push(routes.driver.detail(id)); }; const handleViewLeaderboard = () => { router.push(routes.leaderboards.drivers); }; // Handle error/empty states if (error) { return ( Error loading drivers Please try again later ); } if (!viewData || viewData.drivers.length === 0) { if (empty) { return ( {empty.title} {empty.description} ); } return null; } return ( ); }