import { Box } from '@chakra-ui/react'; import { useMutation } from '@tanstack/react-query'; import React, { useCallback, useState } from 'react'; import useIsMobile from 'lib/hooks/useIsMobile'; import { Button } from 'toolkit/chakra/button'; import { DialogBody, DialogContent, DialogFooter, DialogHeader, DialogRoot } from 'toolkit/chakra/dialog'; import FormSubmitAlert from 'ui/shared/FormSubmitAlert'; type Props = { open: boolean; onOpenChange: ({ open }: { open: boolean }) => void; title: string; renderContent: () => React.JSX.Element; mutationFn: () => Promise; onSuccess: () => Promise; }; const DeleteModal: React.FC = ({ open, onOpenChange, title, renderContent, mutationFn, onSuccess, }) => { const [ isAlertVisible, setAlertVisible ] = useState(false); const onModalOpenChange = useCallback(({ open }: { open: boolean }) => { !open && setAlertVisible(false); onOpenChange({ open }); }, [ onOpenChange, setAlertVisible ]); const { mutate, isPending } = useMutation({ mutationFn, onSuccess: async() => { onSuccess(); onOpenChange({ open: false }); }, onError: () => { setAlertVisible(true); }, }); const onDeleteClick = useCallback(() => { setAlertVisible(false); mutate(); }, [ setAlertVisible, mutate ]); const isMobile = useIsMobile(); return ( { title } { isAlertVisible && } { renderContent() } ); }; export default DeleteModal;