diff --git a/app/routes/book-event.tsx b/app/routes/book-event.tsx new file mode 100644 index 0000000..dbb31b4 --- /dev/null +++ b/app/routes/book-event.tsx @@ -0,0 +1,118 @@ +import { + Button, + Container, + Heading, + HStack, + Input, + Radio, + RadioGroup, + Textarea, + useToast, +} from "@chakra-ui/react"; +import { useState } from "react"; +import Success from "../../components/Success.js"; + +export default function () { + const toast = useToast(); + const [eventDay, setEventDay] = useState("0"); + const [eventDetails, setEventDetails] = useState(""); + const [eventType, setEventType] = useState(""); + const [riddleAnswer, setRiddleAnswer] = useState(""); + const [submitSuccess, setSubmitSuccess] = useState(false); + + async function submit() { + let eventResp: Response; + + try { + eventResp = await fetch("/api/events-team/events/new", { + body: JSON.stringify({ + answer: riddleAnswer || undefined, + day: eventDay, + details: eventDetails, + type: eventType, + }), + headers: { + "content-type": "application/json", + }, + method: "POST", + }); + } catch { + toast({ + description: "Please check your internet and try again", + isClosable: true, + status: "error", + title: "Unknown error", + }); + + return; + } + + if (!eventResp.ok) { + let errorMessage = "Unknown error"; + + try { + errorMessage = ((await eventResp.json()) as { error: string }).error; + } catch {} + + useToast({ + description: errorMessage, + isClosable: true, + status: "error", + title: "Oops!", + }); + + return; + } + + setSubmitSuccess(true); + await new Promise((r) => setTimeout(r, 7500)); + location.assign("/events-team"); + } + + return submitSuccess ? ( + + ) : ( + + Book an Event + Event Type + + + FoTD + Gamenight + QoTD + RoTW + + +
+ + Event Date + + setEventDay(e.target.value.split("-")[2])} + type="date" + /> + + Event Details + +