import { Box, Button, Card, CardBody, CardFooter, CardHeader, Heading, Modal, ModalBody, ModalContent, ModalFooter, ModalHeader, ModalOverlay, Stack, StackDivider, Text, Textarea, useDisclosure, useToast, } from "@chakra-ui/react"; import { useEffect, useState } from "react"; export default function (props: AppealCardProps) { const [dateString, setDateString] = useState( new Date(props.createdAt).toUTCString() ); const [action, setAction] = useState(""); const [feedback, setFeedback] = useState(""); useEffect(() => { setDateString(new Date(props.createdAt).toLocaleString()); }, [props.createdAt]); const { isOpen, onClose, onOpen } = useDisclosure(); function showModal(action: "Accept" | "Deny") { setAction(action); onOpen(); } async function takeAction(action: string) { const actionReq = await fetch(`/api/appeals/${props.id}/${action}`, { body: feedback ? JSON.stringify({ feedback }) : "{}", headers: { "content-type": "application/json", }, method: "POST", }); if (actionReq.ok) { useToast()({ description: `Appeal ${action === "accept" ? "accepted" : "denied"}`, duration: 5000, status: "success", title: "Success", }); document.getElementById(`appeal_${props.id}`)?.remove(); } useToast()({ description: ((await actionReq.json()) as { error: string }).error, duration: 10000, status: "error", title: "Oops!", }); } return ( {action} this appeal? Optionally provide feedback