diff --git a/app/routes/events-team.tsx b/app/routes/events-team.tsx index 3d72c74..6b2c6c4 100644 --- a/app/routes/events-team.tsx +++ b/app/routes/events-team.tsx @@ -119,9 +119,14 @@ export default function () { } = useDisclosure(); const toast = useToast(); const [selectedEvent, setSelectedEvent] = useState(""); + const [disableClicks, setDisableClicks] = useState(false); const [showOld, setShowOld] = useState(false); async function decide(approved: boolean, eventId: string) { + if (disableClicks) return; + + setDisableClicks(true); + const decisionResp = await fetch( `/api/events-team/events/${eventId}/decision`, { @@ -146,6 +151,7 @@ export default function () { title: "Oops!", }); + setDisableClicks(false); return; } @@ -162,9 +168,14 @@ export default function () { newEventData[eventIdx].pending = false; setEventData([...newEventData]); + setDisableClicks(false); } async function certify(eventId: string) { + if (disableClicks) return; + + setDisableClicks(true); + const certifyResp = await fetch( `/api/events-team/events/${eventId}/certify`, { @@ -189,6 +200,7 @@ export default function () { title: "Failed to certify game night", }); + setDisableClicks(false); return; } @@ -205,9 +217,12 @@ export default function () { setEventData([...newEventData]); setSelectedEvent(""); + setDisableClicks(false); } async function markComplete(eventId: string) { + setDisableClicks(true); + const completeResp = await fetch( `/api/events-team/events/${eventId}/complete`, { @@ -234,6 +249,7 @@ export default function () { title: "Failed to complete", }); + setDisableClicks(false); return; } @@ -251,9 +267,12 @@ export default function () { setEventData([...newEventData]); setSelectedEvent(""); + setDisableClicks(false); } async function markForgotten(eventId: string) { + setDisableClicks(true); + const forgottenResp = await fetch( `/api/events-team/events/${eventId}/forgotten`, { @@ -280,6 +299,7 @@ export default function () { title: "Failed to forget", }); + setDisableClicks(false); return; } @@ -288,9 +308,12 @@ export default function () { newEventData[eventData.findIndex((e) => e.id === eventId)].performed_at = 0; setEventData([...newEventData]); setSelectedEvent(""); + setDisableClicks(false); } async function deleteEvent(eventId: string) { + setDisableClicks(true); + const deleteResp = await fetch(`/api/events-team/events/${eventId}`, { method: "DELETE", }); @@ -310,14 +333,18 @@ export default function () { title: "Failed to delete", }); + setDisableClicks(false); return; } setEventData(eventData.filter((e) => e.id !== eventId)); setSelectedEvent(""); + setDisableClicks(false); } async function reschedule(eventId: string) { + setDisableClicks(true); + const newDate = ( document.getElementById("reschedule-input") as HTMLInputElement ).value; @@ -343,6 +370,7 @@ export default function () { title: "Failed to reschedule", }); + setDisableClicks(false); return; } @@ -352,6 +380,7 @@ export default function () { setEventData([...newEventData]); setSelectedEvent(""); onRescheduleClose(); + setDisableClicks(false); toast({ description: `Event rescheduled to ${newDate}`, status: "success", @@ -373,11 +402,16 @@ export default function () { - + + + +