import { useQueryClient } from "@tanstack/react-query"; import EasyModal, { type InnerModalProps } from "ez-modal-react"; import { type ReactNode, useState } from "react"; import { Alert } from "react-bootstrap"; import Modal from "react-bootstrap/Modal"; import { Button } from "src/components"; import { T } from "src/locale"; interface ShowProps { title?: ReactNode; tTitle?: string; children: ReactNode; onConfirm: () => Promise | void; invalidations?: any[]; } interface Props extends InnerModalProps, ShowProps {} const showDeleteConfirmModal = (props: ShowProps) => { EasyModal.show(DeleteConfirmModal, props); }; const DeleteConfirmModal = EasyModal.create( ({ title, tTitle, children, onConfirm, invalidations, visible, remove }: Props) => { const queryClient = useQueryClient(); const [error, setError] = useState(null); const [isSubmitting, setIsSubmitting] = useState(false); const onSubmit = async () => { if (isSubmitting) return; setIsSubmitting(true); setError(null); try { await onConfirm(); remove(); // invalidate caches as requested invalidations?.forEach((inv) => { queryClient.invalidateQueries({ queryKey: inv }); }); } catch (err: any) { setError(); } setIsSubmitting(false); }; return ( {tTitle ? : title ? title : null} setError(null)} dismissible> {error}
{children}
); }, ); export { showDeleteConfirmModal };