From daf24e4739b15af15cc9bde8f0b140b50e82bbdf Mon Sep 17 00:00:00 2001 From: Tudor Date: Mon, 30 Mar 2026 09:08:15 +0100 Subject: [PATCH] fix(search): fix load-more silently failing due to missing page_size param MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Load-more requests read URL params (postcode, radius, etc.) but page_size is never in the URL — it's hardcoded in page.tsx. Without it the backend received page_size=None, hit a TypeError on (page-1)*None, returned 500, and the silent catch left the user stuck on page 1. In a dense area (e.g. Wimbledon SW19) 50 schools fit within ~1.8 miles, so page 1 never shows anything beyond that regardless of selected radius. Fix: - Backend: give page_size a safe default of 25 instead of None - Frontend: explicitly pass initialSchools.page_size in load-more params Co-Authored-By: Claude Sonnet 4.6 --- backend/app.py | 2 +- nextjs-app/components/HomeView.tsx | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/backend/app.py b/backend/app.py index c8894e0..94be390 100644 --- a/backend/app.py +++ b/backend/app.py @@ -295,7 +295,7 @@ async def get_schools( postcode: Optional[str] = Query(None, description="Search near postcode", max_length=10), radius: float = Query(5.0, ge=0.1, le=50, description="Search radius in miles"), page: int = Query(1, ge=1, le=1000, description="Page number"), - page_size: int = Query(None, ge=1, le=100, description="Results per page"), + page_size: int = Query(25, ge=1, le=100, description="Results per page"), gender: Optional[str] = Query(None, description="Filter by gender (Mixed/Boys/Girls)", max_length=50), admissions_policy: Optional[str] = Query(None, description="Filter by admissions policy", max_length=100), has_sixth_form: Optional[str] = Query(None, description="Filter by sixth form presence: yes/no", max_length=3), diff --git a/nextjs-app/components/HomeView.tsx b/nextjs-app/components/HomeView.tsx index 95cc375..c6dad29 100644 --- a/nextjs-app/components/HomeView.tsx +++ b/nextjs-app/components/HomeView.tsx @@ -75,6 +75,7 @@ export function HomeView({ initialSchools, filters, totalSchools }: HomeViewProp const params: Record = {}; searchParams.forEach((value, key) => { params[key] = value; }); params.page = currentPage + 1; + params.page_size = initialSchools.page_size; const response = await fetchSchools(params, { cache: 'no-store' }); setAllSchools(prev => [...prev, ...response.schools]); setCurrentPage(response.page);