From 1fc2ee8a1503adf7f9e99e0446c59b6eec690be5 Mon Sep 17 00:00:00 2001 From: "gpt-engineer-app[bot]" <159125892+gpt-engineer-app[bot]@users.noreply.github.com> Date: Tue, 18 Mar 2025 04:05:23 +0000 Subject: [PATCH] Fix transaction deletion issue Addresses the issue where deleting transactions would sometimes cause the application to freeze. --- .../transaction/TransactionDeleteAlert.tsx | 27 +++++++++--- .../deleteOperation/deleteTransactionCore.ts | 42 +++++++++---------- .../deleteTransactionStorage.ts | 41 ++++++++++-------- .../deleteTransaction.ts | 8 ++-- 4 files changed, 70 insertions(+), 48 deletions(-) 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); + }}>