import { Button, HStack, Input, Link, Modal, ModalBody, ModalCloseButton, ModalContent, ModalHeader, ModalOverlay, Table, TableContainer, Tbody, Td, Th, Thead, Tr, useToast, } from "@chakra-ui/react"; import { useEffect, useState } from "react"; export default function (props: { isOpen: boolean; onClose: () => void }) { const [mods, setMods] = useState([]); const [userToAdd, setUserToAdd] = useState(""); const toast = useToast(); useEffect(() => { if (!props.isOpen) return; (async function () { const gmeResp = await fetch("/api/gme/list"); if (!gmeResp.ok) { toast({ description: "Failed to load GME data", status: "error", title: "Oops", }); return; } setMods(await gmeResp.json()); })(); }, [props.isOpen]); async function addUser(user: string) { if (!user || !user.match(/^\d{17,19}$/)) { toast({ description: "Please check your input and try again", status: "error", title: "Invalid user", }); return; } const addResp = await fetch("/api/gme/add", { body: JSON.stringify({ user }), headers: { "content-type": "application/json", }, method: "POST", }); if (!addResp.ok) { toast({ description: ((await addResp.json()) as { error: string }).error, status: "error", title: "Oops", }); return; } toast({ description: `User ${user} added`, status: "success", title: "Success", }); props.onClose(); } async function removeUser(user: string) { const removeResp = await fetch("/api/gme/remove", { body: JSON.stringify({ user }), headers: { "content-type": "application/json", }, method: "POST", }); if (!removeResp.ok) { toast({ description: ((await removeResp.json()) as { error: string }).error, status: "error", title: "Oops", }); } else { toast({ description: `User ${user} removed`, status: "success", title: "Success", }); setMods(mods.filter((mod: any) => mod.user !== user)); } } return ( Game Moderators {mods.map((mod: any) => ( ))}
User Added At Added By Remove
{mod.user} {new Date(mod.metadata.time).toLocaleString()} {mod.metadata.user} await removeUser(mod.user)}> Remove
); }