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));