import { Button, Container, Heading, HStack, Input, Radio, RadioGroup, Textarea, useToast, } from "@chakra-ui/react"; import { useEffect, useState } from "react"; import Success from "../../components/Success.js"; import { useLoaderData } from "@remix-run/react"; export async function loader({ context }: { context: RequestContext }) { if (!context.data.current_user) throw new Response(null, { status: 401, }); if ( ![1 << 3, 1 << 4, 1 << 12].find( (p) => context.data.current_user.permissions & p, ) ) throw new Response(null, { status: 403, }); return null; } export default function () { useLoaderData(); const toast = useToast(); const currentDate = new Date(); const currentMonth = currentDate.getUTCMonth() + 1; const currentYear = currentDate.getUTCFullYear(); const [datePickerMax, setDatePickerMax] = useState(""); const [datePickerMin, setDatePickerMin] = useState(""); const [eventDay, setEventDay] = useState("0"); const [eventDetails, setEventDetails] = useState(""); const [eventType, setEventType] = useState(""); const [riddleAnswer, setRiddleAnswer] = useState(""); const [submitSuccess, setSubmitSuccess] = useState(false); useEffect(() => { setDatePickerMin(`${currentDate.toISOString().split("T").at(0)}`); currentDate.setUTCDate(0); setDatePickerMax( `${currentYear}-${currentMonth.toString().padStart(2, "0")}-${new Date(currentYear, currentMonth, 0).getUTCDate()}`, ); }, []); async function submit() { let eventResp: Response; try { eventResp = await fetch("/api/events-team/events/new", { body: JSON.stringify({ answer: riddleAnswer || undefined, day: parseInt(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 {} toast({ 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