2026-02-02 20:34:35 +00:00
/**
* Compare Page (SSR)
* Side-by-side comparison of schools with metrics
*/
import { fetchComparison , fetchMetrics } from '@/lib/api' ;
import { ComparisonView } from '@/components/ComparisonView' ;
import type { Metadata } from 'next' ;
interface ComparePageProps {
searchParams : Promise < {
urns? : string ;
metric? : string ;
} > ;
}
export const metadata : Metadata = {
title : 'Compare Schools' ,
2026-07-13 23:58:00 +01:00
description :
'Compare schools in England side by side — Ofsted inspections, KS2 and GCSE results against the England average, admissions odds and school community.' ,
keywords :
'school comparison, compare schools, Ofsted comparison, school admissions, KS2 comparison, primary school performance' ,
2026-02-02 20:34:35 +00:00
};
2026-06-02 13:46:45 +01:00
// Dynamic via searchParams; remove force-dynamic so internal data fetches
// can still use Next.js's per-call revalidate cache.
2026-02-02 20:34:35 +00:00
export default async function ComparePage ({ searchParams } : ComparePageProps ) {
const { urns : urnsParam , metric : metricParam } = await searchParams ;
const urns = urnsParam ? . split ( ',' ). map ( Number ). filter ( Boolean ) || [];
const selectedMetric = metricParam || 'rwm_expected_pct' ;
2026-02-02 21:28:50 +00:00
try {
// Fetch comparison data if URNs provided
let comparisonData = null ;
if ( urns . length > 0 ) {
try {
const response = await fetchComparison ( urnsParam ! );
comparisonData = response . comparison ;
} catch ( error ) {
console . error ( 'Failed to fetch comparison:' , error );
}
2026-02-02 20:34:35 +00:00
}
2026-02-02 21:28:50 +00:00
// Fetch available metrics
const metricsResponse = await fetchMetrics ();
2026-02-02 22:00:07 +00:00
// Metrics is already an array
const metricsArray = metricsResponse ? . metrics || [];
2026-02-02 21:28:50 +00:00
return (
< ComparisonView
initialData = { comparisonData }
initialUrns = { urns }
metrics = { metricsArray }
selectedMetric = { selectedMetric }
/>
);
} catch ( error ) {
console . error ( 'Error fetching data for compare page:' , error );
// Return error state with empty metrics
return (
< ComparisonView
initialData = { null }
initialUrns = { urns }
metrics = {[]}
selectedMetric = { selectedMetric }
/>
);
2026-02-02 20:34:35 +00:00
}
}