Cap event page ticket quantity at 5 per booking.
Limit the quantity stepper to five tickets or remaining spots, whichever is lower.
This commit is contained in:
@@ -23,6 +23,8 @@ interface EventDetailClientProps {
|
|||||||
initialEvent: Event;
|
initialEvent: Event;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const MAX_TICKETS_PER_PERSON = 5;
|
||||||
|
|
||||||
export default function EventDetailClient({ eventId, initialEvent }: EventDetailClientProps) {
|
export default function EventDetailClient({ eventId, initialEvent }: EventDetailClientProps) {
|
||||||
const { t, locale } = useLanguage();
|
const { t, locale } = useLanguage();
|
||||||
const [event, setEvent] = useState<Event>(initialEvent);
|
const [event, setEvent] = useState<Event>(initialEvent);
|
||||||
@@ -44,7 +46,13 @@ export default function EventDetailClient({ eventId, initialEvent }: EventDetail
|
|||||||
// Spots left: never negative; sold out when confirmed >= capacity
|
// Spots left: never negative; sold out when confirmed >= capacity
|
||||||
const spotsLeft = Math.max(0, event.capacity - (event.bookedCount ?? 0));
|
const spotsLeft = Math.max(0, event.capacity - (event.bookedCount ?? 0));
|
||||||
const isSoldOut = (event.bookedCount ?? 0) >= event.capacity;
|
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 = () => {
|
const decreaseQuantity = () => {
|
||||||
setTicketQuantity(prev => Math.max(1, prev - 1));
|
setTicketQuantity(prev => Math.max(1, prev - 1));
|
||||||
|
|||||||
Reference in New Issue
Block a user