Backend returns filters directly at top level, not wrapped in 'filters' property. Update FiltersResponse type and page components to match actual API response. Fixes empty dropdowns for school types and local authorities. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
66 lines
1.7 KiB
TypeScript
66 lines
1.7 KiB
TypeScript
/**
|
|
* Home Page (SSR)
|
|
* Main landing page with school search and browsing
|
|
*/
|
|
|
|
import { fetchSchools, fetchFilters } from '@/lib/api';
|
|
import { HomeView } from '@/components/HomeView';
|
|
|
|
interface HomePageProps {
|
|
searchParams: {
|
|
search?: string;
|
|
local_authority?: string;
|
|
school_type?: string;
|
|
page?: string;
|
|
postcode?: string;
|
|
radius?: string;
|
|
};
|
|
}
|
|
|
|
export const metadata = {
|
|
title: 'Home',
|
|
description: 'Search and compare primary school KS2 performance across England',
|
|
};
|
|
|
|
// Force dynamic rendering (no static generation at build time)
|
|
export const dynamic = 'force-dynamic';
|
|
|
|
export default async function HomePage({ searchParams }: HomePageProps) {
|
|
// Parse search params
|
|
const page = parseInt(searchParams.page || '1');
|
|
const radius = searchParams.radius ? parseInt(searchParams.radius) : undefined;
|
|
|
|
// Fetch data on server with error handling
|
|
try {
|
|
const [schoolsData, filtersData] = await Promise.all([
|
|
fetchSchools({
|
|
search: searchParams.search,
|
|
local_authority: searchParams.local_authority,
|
|
school_type: searchParams.school_type,
|
|
postcode: searchParams.postcode,
|
|
radius,
|
|
page,
|
|
page_size: 50,
|
|
}),
|
|
fetchFilters(),
|
|
]);
|
|
|
|
return (
|
|
<HomeView
|
|
initialSchools={schoolsData}
|
|
filters={filtersData || { local_authorities: [], school_types: [], years: [] }}
|
|
/>
|
|
);
|
|
} catch (error) {
|
|
console.error('Error fetching data for home page:', error);
|
|
|
|
// Return error state with empty data
|
|
return (
|
|
<HomeView
|
|
initialSchools={{ schools: [], page: 1, page_size: 50, total: 0, total_pages: 0 }}
|
|
filters={{ local_authorities: [], school_types: [], years: [] }}
|
|
/>
|
|
);
|
|
}
|
|
}
|