diff --git a/src/components/transaction/TransactionDeleteAlert.tsx b/src/components/transaction/TransactionDeleteAlert.tsx index d491597..7bb9b87 100644 --- a/src/components/transaction/TransactionDeleteAlert.tsx +++ b/src/components/transaction/TransactionDeleteAlert.tsx @@ -15,7 +15,7 @@ import { } from '@/components/ui/alert-dialog'; interface TransactionDeleteAlertProps { - onDelete: () => void; + onDelete: () => Promise | boolean; } const TransactionDeleteAlert: React.FC = ({ onDelete }) => { @@ -24,18 +24,35 @@ const TransactionDeleteAlert: React.FC = ({ onDelet const handleDelete = async () => { try { + if (isDeleting) return; // 중복 클릭 방지 + setIsDeleting(true); - await onDelete(); - setIsOpen(false); + + // 비동기 실행 후 1초 내에 강제 닫힘 (UI 응답성 유지) + const deletePromise = onDelete(); + + // Promise 또는 boolean 값을 처리 (onDelete가 Promise가 아닐 수도 있음) + if (deletePromise instanceof Promise) { + await deletePromise; + } + + // 삭제 작업 완료 후 다이얼로그 닫기 (애니메이션 효과 위해 지연) + setTimeout(() => { + setIsOpen(false); + setTimeout(() => setIsDeleting(false), 300); // 추가 안전장치 + }, 300); } catch (error) { console.error('삭제 작업 처리 중 오류:', error); - } finally { setIsDeleting(false); } }; return ( - + { + // 삭제 중에는 닫기 방지 + if (isDeleting && !open) return; + setIsOpen(open); + }}>