import { Box, Button, Modal, ModalOverlay, ModalContent, ModalFooter, ModalHeader, ModalBody, ModalCloseButton, } from '@chakra-ui/react'; import { useMutation } from '@tanstack/react-query'; import React, { useCallback, useState } from 'react'; import useIsMobile from 'lib/hooks/useIsMobile'; import FormSubmitAlert from 'ui/shared/FormSubmitAlert'; type Props = { isOpen: boolean; onClose: () => void; title: string; renderContent: () => JSX.Element; mutationFn: () => Promise; onSuccess: () => Promise; } const DeleteModal: React.FC = ({ isOpen, onClose, title, renderContent, mutationFn, onSuccess, }) => { const [ isAlertVisible, setAlertVisible ] = useState(false); const onModalClose = useCallback(() => { setAlertVisible(false); onClose(); }, [ onClose, setAlertVisible ]); const mutation = useMutation({ mutationFn, onSuccess: async() => { onSuccess(); onClose(); }, onError: () => { setAlertVisible(true); }, }); const onDeleteClick = useCallback(() => { setAlertVisible(false); mutation.mutate(); }, [ setAlertVisible, mutation ]); const isMobile = useIsMobile(); return ( { title } { isAlertVisible && } { renderContent() } ); }; export default DeleteModal;