import { Button, Input, Modal, ModalBody, ModalCloseButton, ModalContent, ModalFooter, ModalHeader, ModalOverlay, Select, Text, useToast } from "@chakra-ui/react"; import { useState } from "react"; export default function(props: { isOpen: boolean; onClose: () => void }) { const [loading, setLoading] = useState(false); const [punishment, setPunishment] = useState(""); const [user, setUser] = useState(""); const toast = useToast(); function pasteHandler(e: ClipboardEvent) { if (!props.isOpen) return; const evidenceElement = document.getElementById( "evidence" ) as HTMLInputElement; if (!evidenceElement.files && e.clipboardData?.files) { evidenceElement.files = e.clipboardData.files; return; } if (!evidenceElement.files || !e.clipboardData?.files.length) return; if (typeof window["DataTransfer"] === "undefined") return alert("Your browser is too old to paste images in."); const dataTransfer = new DataTransfer(); for (const file of evidenceElement.files) dataTransfer.items.add(file); dataTransfer.items.add(e.clipboardData.files[0]); evidenceElement.files = dataTransfer.files; } addEventListener("paste", pasteHandler); function reset() { removeEventListener("paste", pasteHandler); ( document.getElementById("punishment") as unknown as HTMLSelectElement ).selectedIndex = -1; (document.getElementById("user") as HTMLInputElement).value = ""; (document.getElementById("evidence") as HTMLInputElement).files = null; props.onClose(); } async function submit() { setLoading(true); const form = new FormData(); const { files } = document.getElementById("evidence") as HTMLInputElement; form.append("user", user); form.append("punishment", punishment); if (files) { for (let i = 0; i < files.length; i++) form.append(`file${i}`, files[i], files[i].name); } const postReq = await fetch("/api/infractions/new", { body: form, method: "POST" }); if (postReq.ok) { setLoading(false); toast({ description: "Infraction created", duration: 5000, isClosable: true, status: "success", title: "Success" }); props.onClose(); return; } setLoading(false); toast({ description: `Failed to create infraction (${ ((await postReq.json()) as { error: string }).error })`, duration: 5000, isClosable: true, status: "error", title: "Error" }); } return ( New Infraction User ID setUser(e.target.value)} />

Punishment

Evidence
); }