import React, { useState, useEffect } from 'react'; import NavBar from '@/components/NavBar'; import TransactionCard from '@/components/TransactionCard'; import AddTransactionButton from '@/components/AddTransactionButton'; import { Calendar, Search, ChevronLeft, ChevronRight, Loader2 } from 'lucide-react'; import { formatCurrency } from '@/utils/formatters'; import { useTransactions, MONTHS_KR } from '@/hooks/transactions'; import { useBudget } from '@/contexts/BudgetContext'; const Transactions = () => { const { transactions, isLoading, selectedMonth, searchQuery, setSearchQuery, handlePrevMonth, handleNextMonth, updateTransaction, deleteTransaction, totalExpenses, } = useTransactions(); const { budgetData } = useBudget(); const [isDataLoaded, setIsDataLoaded] = useState(false); // 데이터 로드 상태 관리 useEffect(() => { if (budgetData && !isLoading) { setIsDataLoaded(true); } }, [budgetData, isLoading]); // 트랜잭션을 날짜별로 그룹화 const groupedTransactions: Record = {}; transactions.forEach(transaction => { const datePart = transaction.date.split(',')[0]; if (!groupedTransactions[datePart]) { groupedTransactions[datePart] = []; } groupedTransactions[datePart].push(transaction); }); // 페이지 포커스나 가시성 변경 시 데이터 새로고침 useEffect(() => { const handleVisibilityChange = () => { if (document.visibilityState === 'visible') { console.log('거래내역 페이지 보임 - 데이터 새로고침'); // 상태 업데이트 트리거 setIsDataLoaded(prev => !prev); } }; const handleFocus = () => { console.log('거래내역 페이지 포커스 - 데이터 새로고침'); // 상태 업데이트 트리거 setIsDataLoaded(prev => !prev); }; document.addEventListener('visibilitychange', handleVisibilityChange); window.addEventListener('focus', handleFocus); return () => { document.removeEventListener('visibilitychange', handleVisibilityChange); window.removeEventListener('focus', handleFocus); }; }, []); return (
{/* Header */}

지출 내역

{/* Search */}
setSearchQuery(e.target.value)} />
{/* Month Selector */}
{selectedMonth}
{/* Summary */}

총 예산

{formatCurrency(budgetData?.monthly?.targetAmount || 0)}

총 지출

{formatCurrency(totalExpenses)}

{/* Loading State */} {isLoading && (
로딩 중...
)} {/* Empty State */} {!isLoading && transactions.length === 0 && (

{searchQuery.trim() ? '검색 결과가 없습니다.' : `${selectedMonth}에 등록된 지출이 없습니다.`}

{searchQuery.trim() && ( )}
)} {/* Transactions By Date */} {!isLoading && transactions.length > 0 && (
{Object.entries(groupedTransactions).map(([date, transactions]) => (

{date}

{transactions.map(transaction => ( ))}
))}
)}
); }; export default Transactions;