/**
* HomeView Component
* Client-side home page view with search and filtering
*/
'use client';
import { useState } from 'react';
import { useSearchParams } from 'next/navigation';
import { FilterBar } from './FilterBar';
import { SchoolCard } from './SchoolCard';
import { SchoolMap } from './SchoolMap';
import { Pagination } from './Pagination';
import { EmptyState } from './EmptyState';
import { useComparisonContext } from '@/context/ComparisonContext';
import type { SchoolsResponse, Filters, School } from '@/lib/types';
import styles from './HomeView.module.css';
interface HomeViewProps {
initialSchools: SchoolsResponse;
filters: Filters;
}
export function HomeView({ initialSchools, filters }: HomeViewProps) {
const searchParams = useSearchParams();
const { addSchool, selectedSchools } = useComparisonContext();
const [resultsView, setResultsView] = useState<'list' | 'map'>('list');
const hasSearch = searchParams.get('search') || searchParams.get('postcode');
const isLocationSearch = !!searchParams.get('postcode');
return (
{/* Combined Hero + Search and Filters */}
{/* Location Info Banner with View Toggle */}
{isLocationSearch && initialSchools.location_info && (
Showing schools within {(initialSchools.location_info.radius / 1.60934).toFixed(1)} miles of{' '}
{initialSchools.location_info.postcode}
{initialSchools.schools.length > 0 && (
)}
)}
{/* Results Section */}
{!hasSearch && initialSchools.schools.length > 0 && (
Featured Schools
Explore schools from across England
)}
{hasSearch && resultsView === 'list' && (
{initialSchools.total.toLocaleString()} school
{initialSchools.total !== 1 ? 's' : ''} found
)}
{initialSchools.schools.length === 0 ? (
{
window.location.href = '/';
},
}
: undefined
}
/>
) : resultsView === 'map' && isLocationSearch ? (
/* Map View Layout */
{initialSchools.schools.map((school) => (
s.urn === school.urn)}
/>
))}
) : (
/* List View Layout */
<>
{initialSchools.schools.map((school) => (
))}
{initialSchools.total_pages > 1 && (
)}
>
)}
);
}
/* Compact School Item for Map View */
interface CompactSchoolItemProps {
school: School;
onAddToCompare: (school: School) => void;
isInCompare: boolean;
}
function CompactSchoolItem({ school, onAddToCompare, isInCompare }: CompactSchoolItemProps) {
return (
{school.school_name}
{school.distance !== undefined && school.distance !== null && (
{school.distance.toFixed(1)} mi
)}
{school.school_type && {school.school_type}}
{school.local_authority && {school.local_authority}}
{school.rwm_expected_pct !== null ? `${school.rwm_expected_pct}%` : '-'} RWM
{school.total_pupils || '-'} pupils
Details
);
}