From 0f7573c93469f0978c3d2e7bb7239e69f5870a9a Mon Sep 17 00:00:00 2001 From: Michilis Date: Thu, 4 Jun 2026 22:53:39 +0000 Subject: [PATCH] Cap event page ticket quantity at 5 per booking. Limit the quantity stepper to five tickets or remaining spots, whichever is lower. --- .../src/app/(public)/events/[id]/EventDetailClient.tsx | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/frontend/src/app/(public)/events/[id]/EventDetailClient.tsx b/frontend/src/app/(public)/events/[id]/EventDetailClient.tsx index 87b4348..fa959fa 100644 --- a/frontend/src/app/(public)/events/[id]/EventDetailClient.tsx +++ b/frontend/src/app/(public)/events/[id]/EventDetailClient.tsx @@ -23,6 +23,8 @@ interface EventDetailClientProps { initialEvent: Event; } +const MAX_TICKETS_PER_PERSON = 5; + export default function EventDetailClient({ eventId, initialEvent }: EventDetailClientProps) { const { t, locale } = useLanguage(); const [event, setEvent] = useState(initialEvent); @@ -44,7 +46,13 @@ export default function EventDetailClient({ eventId, initialEvent }: EventDetail // Spots left: never negative; sold out when confirmed >= capacity const spotsLeft = Math.max(0, event.capacity - (event.bookedCount ?? 0)); const isSoldOut = (event.bookedCount ?? 0) >= event.capacity; - const maxTickets = isSoldOut ? 0 : Math.max(1, spotsLeft); + const maxTickets = isSoldOut ? 0 : Math.min(MAX_TICKETS_PER_PERSON, Math.max(1, spotsLeft)); + + useEffect(() => { + if (maxTickets > 0) { + setTicketQuantity((q) => Math.min(q, maxTickets)); + } + }, [maxTickets]); const decreaseQuantity = () => { setTicketQuantity(prev => Math.max(1, prev - 1));