feat: Implement budget edit functionality

When the "Edit Budget" button is clicked, display a popup similar to the expense input form for budget modification.
This commit is contained in:
gpt-engineer-app[bot]
2025-04-05 05:41:15 +00:00
parent 45df7c368a
commit 62551d58e3
5 changed files with 159 additions and 105 deletions

View File

@@ -1,11 +1,11 @@
import React from 'react';
import React, { useState } from 'react';
import { useBudgetTabContent } from '@/hooks/budget/useBudgetTabContent';
import BudgetHeader from './budget/BudgetHeader';
import BudgetProgressBar from './budget/BudgetProgressBar';
import BudgetStatusDisplay from './budget/BudgetStatusDisplay';
import BudgetInputButton from './budget/BudgetInputButton';
import BudgetInputForm from './budget/BudgetInputForm';
import BudgetDialog from './budget/BudgetDialog';
interface BudgetData {
targetAmount: number;
@@ -26,10 +26,11 @@ const BudgetTabContent: React.FC<BudgetTabContentProps> = ({
calculatePercentage,
onSaveBudget
}) => {
const [showBudgetDialog, setShowBudgetDialog] = useState(false);
const [isSubmitting, setIsSubmitting] = useState(false);
const {
categoryBudgets,
showBudgetInput,
toggleBudgetInput,
handleCategoryInputChange,
handleSaveCategoryBudgets,
isBudgetSet,
@@ -48,6 +49,23 @@ const BudgetTabContent: React.FC<BudgetTabContentProps> = ({
onSaveBudget
});
const handleOpenDialog = () => {
setShowBudgetDialog(true);
};
const handleSaveBudget = () => {
setIsSubmitting(true);
try {
handleSaveCategoryBudgets();
} finally {
// 성공 또는 실패 여부와 관계없이 제출 상태 해제 및 다이얼로그 닫기
setTimeout(() => {
setIsSubmitting(false);
setShowBudgetDialog(false);
}, 300);
}
};
// 월간 예산 모드 로깅
React.useEffect(() => {
console.log('BudgetTabContent 렌더링: 월간 예산');
@@ -81,16 +99,17 @@ const BudgetTabContent: React.FC<BudgetTabContentProps> = ({
<BudgetInputButton
isBudgetSet={isBudgetSet}
budgetButtonText={budgetButtonText}
toggleBudgetInput={toggleBudgetInput}
toggleBudgetInput={handleOpenDialog}
/>
<BudgetInputForm
showBudgetInput={showBudgetInput}
<BudgetDialog
open={showBudgetDialog}
onOpenChange={setShowBudgetDialog}
categoryBudgets={categoryBudgets}
handleCategoryInputChange={handleCategoryInputChange}
handleSaveCategoryBudgets={handleSaveCategoryBudgets}
handleSaveCategoryBudgets={handleSaveBudget}
calculateTotalBudget={calculateTotalBudget}
formatCurrency={formatCurrency}
isSubmitting={isSubmitting}
/>
</div>
);