/** * Home Page (SSR) * Main landing page with school search and browsing */ import { fetchSchools, fetchFilters, fetchDataInfo } from '@/lib/api'; import { HomeView } from '@/components/HomeView'; interface HomePageProps { searchParams: Promise<{ search?: string; local_authority?: string; school_type?: string; phase?: string; page?: string; postcode?: string; radius?: string; }>; } export const metadata = { title: 'Home', description: 'Search and compare school performance across England', }; // Force dynamic rendering (no static generation at build time) export const dynamic = 'force-dynamic'; export default async function HomePage({ searchParams }: HomePageProps) { // Await search params (Next.js 15 requirement) const params = await searchParams; // Parse search params const page = parseInt(params.page || '1'); const radius = params.radius ? parseFloat(params.radius) : undefined; // Check if user has performed a search const hasSearchParams = !!( params.search || params.local_authority || params.school_type || params.phase || params.postcode ); // Fetch data on server with error handling try { const [filtersData, dataInfo] = await Promise.all([fetchFilters(), fetchDataInfo().catch(() => null)]); // Only fetch schools if there are search parameters let schoolsData; if (hasSearchParams) { schoolsData = await fetchSchools({ search: params.search, local_authority: params.local_authority, school_type: params.school_type, phase: params.phase, postcode: params.postcode, radius, page, page_size: 50, }); } else { // Empty state by default schoolsData = { schools: [], page: 1, page_size: 50, total: 0, total_pages: 0 }; } return ( ); } catch (error) { console.error('Error fetching data for home page:', error); // Return error state with empty data return ( ); } }