import React from 'react' import { AlertDialog, AlertDialogBody, AlertDialogContent, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, Button, } from '@chakra-ui/react' import { useForm } from 'react-hook-form' import { useMutation, useQueryClient } from 'react-query' import { ItemsService, UsersService } from '../../client' import useCustomToast from '../../hooks/useCustomToast' interface DeleteProps { type: string id: number isOpen: boolean onClose: () => void } const Delete: React.FC = ({ type, id, isOpen, onClose }) => { 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(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(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