import { useCallback } from 'react'; import { Transaction } from '@/components/TransactionCard'; import { useAuth } from '@/contexts/auth/AuthProvider'; import { toast } from '@/hooks/useToast.wrapper'; import { saveTransactionsToStorage } from './storageUtils'; import { updateTransactionInSupabase, deleteTransactionFromSupabase } from './supabaseUtils'; /** * 트랜잭션 작업 관련 훅 * 트랜잭션 업데이트, 삭제 기능을 제공합니다. */ export const useTransactionsOperations = ( transactions: Transaction[], setTransactions: (transactions: Transaction[]) => void ) => { const { user } = useAuth(); // 트랜잭션 업데이트 const updateTransaction = useCallback((updatedTransaction: Transaction) => { const updatedTransactions = transactions.map(transaction => transaction.id === updatedTransaction.id ? updatedTransaction : transaction ); // 로컬 스토리지 업데이트 saveTransactionsToStorage(updatedTransactions); // 상태 업데이트 setTransactions(updatedTransactions); // Supabase 업데이트 시도 if (user) { updateTransactionInSupabase(user, updatedTransaction); } // 이벤트 발생 window.dispatchEvent(new Event('transactionUpdated')); // 약간의 지연을 두고 토스트 표시 setTimeout(() => { toast({ title: "지출이 수정되었습니다", description: `${updatedTransaction.title} 항목이 업데이트되었습니다.`, duration: 3000 }); }, 100); }, [transactions, setTransactions, user]); // 트랜잭션 삭제 const deleteTransaction = useCallback((id: string) => { const updatedTransactions = transactions.filter(transaction => transaction.id !== id); // 로컬 스토리지 업데이트 saveTransactionsToStorage(updatedTransactions); // 상태 업데이트 setTransactions(updatedTransactions); // Supabase 삭제 시도 if (user) { deleteTransactionFromSupabase(user, id); } // 이벤트 발생 window.dispatchEvent(new Event('transactionUpdated')); // 약간의 지연을 두고 토스트 표시 setTimeout(() => { toast({ title: "지출이 삭제되었습니다", description: "선택한 지출 항목이 삭제되었습니다.", duration: 3000 }); }, 100); }, [transactions, setTransactions, user]); return { updateTransaction, deleteTransaction }; };