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;