Refactor useTransactionsOperations hook

Refactor the useTransactionsOperations.ts file into smaller modules for better code organization and maintainability, without changing any functionality.
This commit is contained in:
gpt-engineer-app[bot]
2025-03-17 16:39:10 +00:00
parent a53717c502
commit 9db57e10db
5 changed files with 305 additions and 249 deletions

View File

@@ -0,0 +1,48 @@
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';
/**
* 트랜잭션 업데이트 기능
* 로컬 스토리지와 Supabase에 트랜잭션을 업데이트합니다.
*/
export const useUpdateTransaction = (
transactions: Transaction[],
setTransactions: React.Dispatch<React.SetStateAction<Transaction[]>>
) => {
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) {
updateTransactionInSupabase(user, updatedTransaction);
}
// 이벤트 발생
window.dispatchEvent(new Event('transactionUpdated'));
// 약간의 지연을 두고 토스트 표시
setTimeout(() => {
toast({
title: "지출이 수정되었습니다",
description: `${updatedTransaction.title} 항목이 업데이트되었습니다.`,
duration: 3000
});
}, 100);
}, [transactions, setTransactions, user]);
};