From ea281a70c112f92517cd666fb8f7063fabd467de Mon Sep 17 00:00:00 2001 From: Regalijan Date: Mon, 21 Oct 2024 03:17:49 -0400 Subject: [PATCH] Show date edit button on own events --- app/routes/events-team.tsx | 130 +++++++++++++++++++++++++++++++++---- 1 file changed, 117 insertions(+), 13 deletions(-) diff --git a/app/routes/events-team.tsx b/app/routes/events-team.tsx index f4f802f..b3ffa10 100644 --- a/app/routes/events-team.tsx +++ b/app/routes/events-team.tsx @@ -9,6 +9,7 @@ import { FormControl, FormLabel, Heading, + IconButton, Link, Modal, ModalBody, @@ -116,6 +117,11 @@ export default function () { onClose: onDeleteClose, onOpen: onDeleteOpen, } = useDisclosure(); + const { + isOpen: isRescheduleOpen, + onClose: onRescheduleClose, + onOpen: onRescheduleOpen, + } = useDisclosure(); const toast = useToast(); const [selectedEvent, setSelectedEvent] = useState(""); const [showOld, setShowOld] = useState(false); @@ -345,6 +351,42 @@ export default function () { setSelectedEvent(""); } + async function reschedule(eventId: string) { + const newDate = ( + document.getElementById("reschedule-input") as HTMLInputElement + ).value; + const rescheduleResp = await fetch(`/api/events-team/events/${eventId}`, { + body: JSON.stringify({ day: newDate.split("-").at(2) }), + headers: { + "content-type": "application/json", + }, + method: "PATCH", + }); + + if (!rescheduleResp.ok) { + let msg = "Unknown error"; + + try { + msg = ((await rescheduleResp.json()) as { error: string }).error; + } catch {} + + toast({ + description: msg, + status: "error", + title: "Failed to reschedule", + }); + + return; + } + + onRescheduleClose(); + toast({ + description: `Event rescheduled to ${newDate}`, + status: "success", + title: "Rescheduled", + }); + } + return ( @@ -460,6 +502,37 @@ export default function () { + + + + Reschedule Event + + + + New date: + + + + + + + + + {eventData .map((event) => { @@ -488,6 +561,36 @@ export default function () { Date {event.year}-{event.month}-{event.day} + new Date().getUTCDate()) || + can_approve + ? undefined + : "none" + } + icon={ + + + + + } + ml="8px" + onClick={() => { + setEventData(event.id); + onRescheduleOpen(); + }} + /> @@ -604,8 +707,9 @@ export default function () { : "Approved" : "Denied"} - + /> ); @@ -666,7 +771,6 @@ export default function () { ) : null} - ; ); }