From a882c8698d89c5c8cda72b3b7e8723f9c7d58187 Mon Sep 17 00:00:00 2001 From: Ivan Date: Mon, 2 Mar 2026 03:55:13 +0000 Subject: [PATCH] feat: update sidebar nav, add open play toggle, mark courts 5-6 as open play Co-Authored-By: Claude Opus 4.6 --- apps/web/app/(admin)/settings/page.tsx | 24 +++++++++++++++++++++++- apps/web/components/layout/sidebar.tsx | 8 ++++---- apps/web/prisma/seed.ts | 1 + 3 files changed, 28 insertions(+), 5 deletions(-) diff --git a/apps/web/app/(admin)/settings/page.tsx b/apps/web/app/(admin)/settings/page.tsx index 03286d5..807b6da 100644 --- a/apps/web/app/(admin)/settings/page.tsx +++ b/apps/web/app/(admin)/settings/page.tsx @@ -37,6 +37,7 @@ interface Court { status: string; siteId: string; site?: { name: string }; + isOpenPlay?: boolean; } interface User { @@ -479,7 +480,14 @@ export default function SettingsPage() { {courts.map((court) => ( - {court.name} + + {court.name} + {court.isOpenPlay && ( + + Open Play + + )} + {court.site?.name || "-"} {court.type} ${court.hourlyRate} @@ -709,6 +717,7 @@ function CourtFormModal({ const [hourlyRate, setHourlyRate] = useState(court?.hourlyRate?.toString() || "300"); const [peakHourlyRate, setPeakHourlyRate] = useState(court?.peakHourlyRate?.toString() || ""); const [status, setStatus] = useState(court?.status || "active"); + const [isOpenPlay, setIsOpenPlay] = useState(court?.isOpenPlay ?? false); const handleSubmit = (e: React.FormEvent) => { e.preventDefault(); @@ -719,6 +728,7 @@ function CourtFormModal({ hourlyRate: parseFloat(hourlyRate), peakHourlyRate: peakHourlyRate ? parseFloat(peakHourlyRate) : null, status, + isOpenPlay, }); }; @@ -797,6 +807,18 @@ function CourtFormModal({ +
+ setIsOpenPlay(e.target.checked)} + className="rounded border-primary-300" + /> + +