import React from 'react'; import { BarChart, Bar, XAxis, YAxis, Tooltip, ResponsiveContainer, Legend, Cell } from 'recharts'; import { formatCurrency } from '@/utils/formatters'; interface MonthlyData { name: string; budget: number; expense: number; } interface MonthlyComparisonChartProps { monthlyData: MonthlyData[]; isEmpty?: boolean; } const MonthlyComparisonChart: React.FC = ({ monthlyData, isEmpty = false }) => { // Format for Y-axis (K format) const formatYAxisTick = (value: number) => { return `${Math.round(value / 1000)}K`; }; // Format for tooltip (original currency format) const formatTooltip = (value: number | string) => { if (typeof value === 'number') { return formatCurrency(value); } return value; }; // 데이터 확인 로깅 console.log('MonthlyComparisonChart 데이터:', monthlyData); // EmptyGraphState 컴포넌트: 데이터가 없을 때 표시 const EmptyGraphState = () => (

데이터가 없습니다

지출 내역을 추가하면 그래프가 표시됩니다

); // 데이터 여부 확인 로직 개선 - 데이터가 비어있거나 모든 값이 0인 경우도 고려 const hasValidData = monthlyData && monthlyData.length > 0 && monthlyData.some(item => (item.budget > 0 || item.expense > 0)); // 지출 색상 결정 함수 추가 const getExpenseColor = (budget: number, expense: number) => { if (budget === 0) return "#81c784"; // 예산이 0이면 기본 색상 const ratio = expense / budget; if (ratio > 1) return "#f44336"; // 빨간색 (예산 초과) if (ratio >= 0.9) return "#ffeb3b"; // 노란색 (예산의 90% 이상) return "#81c784"; // 기본 초록색 }; return (
{hasValidData ? ( {monthlyData.map((entry, index) => ( ))} ) : ( )}
); }; export default MonthlyComparisonChart;