import React, { useState } from 'react'; import { Button } from '@/components/ui/button'; import { Check, ChevronDown, ChevronUp, Calculator } from 'lucide-react'; import { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/components/ui/collapsible'; import BudgetProgress from './BudgetProgress'; import CategoryBudgetInputs from './CategoryBudgetInputs'; import { toast } from '@/components/ui/use-toast'; interface BudgetData { targetAmount: number; spentAmount: number; remainingAmount: number; } interface CategoryBudget { 식비: number; 생활비: number; 교통비: number; } interface BudgetTabContentProps { data: BudgetData; formatCurrency: (amount: number) => string; calculatePercentage: (spent: number, target: number) => number; onSaveBudget: (amount: number, categoryBudgets?: CategoryBudget) => void; } const BudgetTabContent: React.FC = ({ data, formatCurrency, calculatePercentage, onSaveBudget }) => { const percentage = calculatePercentage(data.spentAmount, data.targetAmount); const [isOpen, setIsOpen] = useState(false); const [budgetInput, setBudgetInput] = useState(data.targetAmount.toString()); // 저장된 카테고리 예산을 불러옵니다 const savedCategoryBudgets = localStorage.getItem('categoryBudgets'); const initialCategoryBudgets = savedCategoryBudgets ? JSON.parse(savedCategoryBudgets) : { 식비: Math.round(data.targetAmount * 0.4), 생활비: Math.round(data.targetAmount * 0.4), 교통비: Math.round(data.targetAmount * 0.2) }; const [categoryBudgets, setCategoryBudgets] = useState(initialCategoryBudgets); const handleInputChange = (value: string) => { // Remove all non-numeric characters const numericValue = value.replace(/[^0-9]/g, ''); setBudgetInput(numericValue); }; const handleCategoryInputChange = (value: string, category: keyof CategoryBudget) => { // Remove all non-numeric characters const numericValue = value.replace(/[^0-9]/g, ''); setCategoryBudgets(prev => ({ ...prev, [category]: parseInt(numericValue) || 0 })); }; const handleSave = () => { // Calculate total from all categories const totalAmount = Object.values(categoryBudgets).reduce((sum, value) => sum + value, 0); // 카테고리 예산도 함께 전달합니다 onSaveBudget(totalAmount, categoryBudgets); toast({ title: "예산 설정 완료", description: "카테고리별 예산이 성공적으로 저장되었습니다.", }); setIsOpen(false); }; // Format with commas for display const formatWithCommas = (amount: string) => { return amount.replace(/\B(?=(\d{3})+(?!\d))/g, ','); }; return
남은 예산 {formatCurrency(data.remainingAmount)}
카테고리별 예산 설정하기 {isOpen ? : }
총 예산:
{formatCurrency(Object.values(categoryBudgets).reduce((sum, value) => sum + value, 0))}

카테고리 예산을 설정하면 일일, 주간, 월간 예산이 자동으로 합산됩니다.

; }; export default BudgetTabContent;