import { Link, Modal, ModalBody, ModalCloseButton, ModalContent, ModalFooter, ModalHeader, ModalOverlay, Table, TableContainer, Tbody, Td, Th, Thead, Tr, useDisclosure, useToast, } from "@chakra-ui/react"; import { useEffect, useState } from "react"; import NewAppealBan from "./NewAppealBan.js"; export default function (props: { isOpen: boolean; onClose: () => void }) { const [entries, setEntries] = useState( [] as { created_at: number; created_by: string; user: string }[], ); const toast = useToast(); const { isOpen, onClose, onOpen } = useDisclosure(); async function removeBan(user: string) { const removeResp = await fetch(`/api/appeals/${user}/ban`, { method: "DELETE", }); if (!removeResp.ok) { let error; try { error = ((await removeResp.json()) as { error: string }).error; } catch { error = "Unknown error"; } toast({ description: error, isClosable: true, status: "error", title: "Failed to remove member", }); return; } toast({ description: `User ${user} removed`, isClosable: true, status: "success", title: "Success", }); setEntries([...entries].filter((entry) => entry.user !== user)); } useEffect(() => {}, []); return ( <> Appeal Bans User Moderator Time Remove {entries.map((entry) => ( {entry.user} {entry.created_by} {new Date(entry.created_at).toUTCString()} await removeBan(entry.user)}> Remove ))} Click here to ban someone > ); }