Refactor useTransactions hook

Refactor the useTransactions hook into smaller, more manageable files to improve code organization and maintainability. All existing functionality is preserved.
This commit is contained in:
gpt-engineer-app[bot]
2025-03-16 09:39:56 +00:00
parent 662cacbc99
commit d45e1bbf78
7 changed files with 410 additions and 215 deletions

View File

@@ -0,0 +1,84 @@
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
};
};