import { AlertDialog, AlertDialogBody, AlertDialogContent, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, Button, } from "@chakra-ui/react" import React from "react" import { useForm } from "react-hook-form" import { useMutation, useQueryClient } from "@tanstack/react-query" import { ItemsService, UsersService } from "../../client" import useCustomToast from "../../hooks/useCustomToast" interface DeleteProps { type: string id: number isOpen: boolean onClose: () => void } const Delete = ({ type, id, isOpen, onClose }: DeleteProps) => { const queryClient = useQueryClient() const showToast = useCustomToast() const cancelRef = React.useRef(null) const { handleSubmit, formState: { isSubmitting }, } = useForm() const deleteEntity = async (id: number) => { if (type === "Item") { await ItemsService.deleteItem({ id: id }) } else if (type === "User") { await UsersService.deleteUser({ userId: id }) } else { throw new Error(`Unexpected type: ${type}`) } } const mutation = useMutation({ mutationFn: deleteEntity, onSuccess: () => { showToast( "Success", `The ${type.toLowerCase()} was deleted successfully.`, "success", ) onClose() }, onError: () => { showToast( "An error occurred.", `An error occurred while deleting the ${type.toLowerCase()}.`, "error", ) }, onSettled: () => { queryClient.invalidateQueries({ queryKey: [type === "Item" ? "items" : "users"], }) }, }) const onSubmit = async () => { mutation.mutate(id) } return ( <> Delete {type} {type === "User" && ( All items associated with this user will also be{" "} permantly deleted. )} Are you sure? You will not be able to undo this action. ) } export default Delete