Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Take 1 at trying to stop double clicks
  • Loading branch information
regalijan committed Feb 1, 2025
1 parent 1bed3ed commit e7c6b8f
Showing 1 changed file with 57 additions and 5 deletions.
62 changes: 57 additions & 5 deletions app/routes/events-team.tsx
Expand Up @@ -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`,
{
Expand All @@ -146,6 +151,7 @@ export default function () {
title: "Oops!",
});

setDisableClicks(false);
return;
}

Expand All @@ -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`,
{
Expand All @@ -189,6 +200,7 @@ export default function () {
title: "Failed to certify game night",
});

setDisableClicks(false);
return;
}

Expand All @@ -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`,
{
Expand All @@ -234,6 +249,7 @@ export default function () {
title: "Failed to complete",
});

setDisableClicks(false);
return;
}

Expand All @@ -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`,
{
Expand All @@ -280,6 +299,7 @@ export default function () {
title: "Failed to forget",
});

setDisableClicks(false);
return;
}

Expand All @@ -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",
});
Expand All @@ -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;
Expand All @@ -343,6 +370,7 @@ export default function () {
title: "Failed to reschedule",
});

setDisableClicks(false);
return;
}

Expand All @@ -352,6 +380,7 @@ export default function () {
setEventData([...newEventData]);
setSelectedEvent("");
onRescheduleClose();
setDisableClicks(false);
toast({
description: `Event rescheduled to ${newDate}`,
status: "success",
Expand All @@ -373,11 +402,16 @@ export default function () {
</Text>
</ModalBody>
<ModalFooter>
<Button colorScheme="red" onClick={onClose}>
<Button
colorScheme="red"
disabled={disableClicks}
onClick={onClose}
>
Cancel
</Button>
<Button
colorScheme="blue"
disabled={disableClicks}
ml="8px"
onClick={async () => {
await certify(selectedEvent);
Expand All @@ -401,9 +435,12 @@ export default function () {
</Text>
</ModalBody>
<ModalFooter>
<Button onClick={closeComplete}>Cancel</Button>
<Button disabled={disableClicks} onClick={closeComplete}>
Cancel
</Button>
<Button
colorScheme="blue"
disabled={disableClicks}
ml="8px"
onClick={async () => await markComplete(selectedEvent)}
>
Expand All @@ -422,9 +459,12 @@ export default function () {
will be given a 5 point penalty.
</ModalBody>
<ModalFooter>
<Button onClick={onForgottenClose}>Cancel</Button>
<Button disabled={disableClicks} onClick={onForgottenClose}>
Cancel
</Button>
<Button
colorScheme="blue"
disabled={disableClicks}
ml="8px"
onClick={async () => await markForgotten(selectedEvent)}
>
Expand All @@ -443,9 +483,12 @@ export default function () {
want to continue?
</ModalBody>
<ModalFooter>
<Button onClick={onDeleteClose}>Cancel</Button>
<Button disabled={disableClicks} onClick={onDeleteClose}>
Cancel
</Button>
<Button
colorScheme="red"
disabled={disableClicks}
ml="8px"
onClick={async () => await deleteEvent(selectedEvent)}
>
Expand Down Expand Up @@ -478,9 +521,12 @@ export default function () {
</Text>
</ModalBody>
<ModalFooter>
<Button onClick={onRescheduleClose}>Cancel</Button>
<Button disabled={disableClicks} onClick={onRescheduleClose}>
Cancel
</Button>
<Button
colorScheme="blue"
disabled={disableClicks}
ml="8px"
onClick={async () => await reschedule(selectedEvent)}
>
Expand Down Expand Up @@ -585,12 +631,14 @@ export default function () {
<>
<Button
colorScheme="red"
disabled={disableClicks}
onClick={async () => await decide(false, event.id)}
>
Reject
</Button>
<Button
colorScheme="blue"
disabled={disableClicks}
onClick={async () => await decide(true, event.id)}
>
Approve
Expand All @@ -603,6 +651,7 @@ export default function () {
<>
<Button
colorScheme="blue"
disabled={disableClicks}
onClick={() => {
setSelectedEvent(event.id);
openComplete();
Expand All @@ -612,6 +661,7 @@ export default function () {
</Button>
<Button
colorScheme="red"
disabled={disableClicks}
onClick={() => {
setSelectedEvent(event.id);
onForgottenOpen();
Expand All @@ -628,6 +678,7 @@ export default function () {
!event.reached_minimum_player_count ? (
<Button
colorScheme="blue"
disabled={disableClicks}
onClick={() => {
setSelectedEvent(event.id);
onOpen();
Expand All @@ -650,6 +701,7 @@ export default function () {
<IconButton
alignSelf="center"
aria-label="Delete event"
disabled={disableClicks}
display={
(event.created_by === user_id &&
event.day > new Date().getUTCDate()) ||
Expand Down

0 comments on commit e7c6b8f

Please sign in to comment.