From a713369e03e1947a7338cca35b6f141e0ad76787 Mon Sep 17 00:00:00 2001 From: Ivan Date: Wed, 4 Mar 2026 03:52:08 +0000 Subject: [PATCH] fix: Settings courts list not loading and status display - Handle Courts API returning array directly (not wrapped in data property) - Map pricePerHour to hourlyRate for frontend compatibility - Handle uppercase DB status values (AVAILABLE, MAINTENANCE, CLOSED) - Send pricePerHour field when creating/updating courts Co-Authored-By: Claude Opus 4.6 --- apps/web/app/(admin)/settings/page.tsx | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/apps/web/app/(admin)/settings/page.tsx b/apps/web/app/(admin)/settings/page.tsx index 807b6da..14bd7c8 100644 --- a/apps/web/app/(admin)/settings/page.tsx +++ b/apps/web/app/(admin)/settings/page.tsx @@ -103,7 +103,12 @@ export default function SettingsPage() { const res = await fetch("/api/courts"); if (res.ok) { const data = await res.json(); - setCourts(data.data || []); + // Courts API returns array directly, map pricePerHour to hourlyRate for frontend + const courtsArray = Array.isArray(data) ? data : data.data || []; + setCourts(courtsArray.map((c: Record) => ({ + ...c, + hourlyRate: c.pricePerHour ?? c.hourlyRate, + }))); } } catch (error) { console.error("Error fetching courts:", error); @@ -494,14 +499,14 @@ export default function SettingsPage() { - {court.status === "active" ? "Active" : court.status === "maintenance" ? "Maintenance" : "Inactive"} + {["active", "AVAILABLE"].includes(court.status) ? "Active" : ["maintenance", "MAINTENANCE"].includes(court.status) ? "Maintenance" : "Inactive"} @@ -726,10 +731,11 @@ function CourtFormModal({ siteId, type, hourlyRate: parseFloat(hourlyRate), + pricePerHour: parseFloat(hourlyRate), peakHourlyRate: peakHourlyRate ? parseFloat(peakHourlyRate) : null, status, isOpenPlay, - }); + } as Partial & { pricePerHour?: number }); }; return (