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 } from '../supabaseUtils'; import { TransactionOperationProps } from './types'; import { normalizeDate } from '@/utils/sync/transaction/dateUtils'; /** * 트랜잭션 업데이트 기능 * 로컬 스토리지와 Supabase에 트랜잭션을 업데이트합니다. */ export const useUpdateTransaction = ( transactions: Transaction[], setTransactions: React.Dispatch> ) => { const { user } = useAuth(); return useCallback((updatedTransaction: Transaction) => { const updatedTransactions = transactions.map(transaction => transaction.id === updatedTransaction.id ? updatedTransaction : transaction ); // 로컬 스토리지 업데이트 saveTransactionsToStorage(updatedTransactions); // 상태 업데이트 setTransactions(updatedTransactions); // Supabase 업데이트 시도 (날짜 형식 변환 추가) if (user) { // ISO 형식으로 날짜 변환 const transactionWithIsoDate = { ...updatedTransaction, dateForSync: normalizeDate(updatedTransaction.date) }; updateTransactionInSupabase(user, transactionWithIsoDate); } // 이벤트 발생 window.dispatchEvent(new Event('transactionUpdated')); // 약간의 지연을 두고 토스트 표시 setTimeout(() => { toast({ title: "지출이 수정되었습니다", description: `${updatedTransaction.title} 항목이 업데이트되었습니다.`, duration: 3000 }); }, 100); }, [transactions, setTransactions, user]); };