Fix import error in BudgetContext

The BudgetContext.tsx file was throwing an error because it was trying to import `BudgetPeriod` from the wrong location. Changed the import path to correctly reference the `BudgetPeriod` type.
This commit is contained in:
gpt-engineer-app[bot]
2025-03-22 07:18:07 +00:00
parent b00e27c1f0
commit 56842becca
3 changed files with 50 additions and 77 deletions

View File

@@ -1,52 +1,47 @@
import React from 'react';
import { BrowserRouter as Router, Routes, Route } from 'react-router-dom';
import React, { useEffect } from 'react';
import { Routes, Route } from 'react-router-dom';
import { BudgetProvider } from './contexts/budget/BudgetContext';
import { Toaster } from './components/ui/toaster';
import Index from './pages/Index';
import Settings from './pages/Settings';
import Login from './pages/Login';
import Register from './pages/Register';
import ForgotPassword from './pages/ForgotPassword';
import NotFound from './pages/NotFound';
import SecurityPrivacySettings from './pages/SecurityPrivacySettings';
import ProfileManagement from './pages/ProfileManagement';
import PaymentMethods from './pages/PaymentMethods';
import NotificationSettings from './pages/NotificationSettings';
import HelpSupport from './pages/HelpSupport';
import Analytics from './pages/Analytics';
import Settings from './pages/Settings';
import Transactions from './pages/Transactions';
import { AuthProvider } from './contexts/auth';
import { BudgetProvider } from './contexts/BudgetContext';
import { Toaster } from '@/components/ui/toaster';
import { Toaster as SonnerToaster} from '@/components/ui/sonner';
import SafeAreaContainer from './components/SafeAreaContainer';
import Analytics from './pages/Analytics';
import ProfileManagement from './pages/ProfileManagement';
import NotFound from './pages/NotFound';
import PaymentMethods from './pages/PaymentMethods';
import HelpSupport from './pages/HelpSupport';
import SecurityPrivacySettings from './pages/SecurityPrivacySettings';
import NotificationSettings from './pages/NotificationSettings';
import ForgotPassword from './pages/ForgotPassword';
function App() {
useEffect(() => {
document.title = "적자 탈출 가계부";
}, []);
return (
<AuthProvider>
<BudgetProvider>
<Router>
<SafeAreaContainer className="min-h-screen bg-neuro-background">
<Routes>
<Route path="/" element={<Index />} />
<Route path="/login" element={<Login />} />
<Route path="/register" element={<Register />} />
<Route path="/forgot-password" element={<ForgotPassword />} />
<Route path="/settings" element={<Settings />} />
<Route path="/security-privacy" element={<SecurityPrivacySettings />} />
<Route path="/profile" element={<ProfileManagement />} />
<Route path="/payment-methods" element={<PaymentMethods />} />
<Route path="/notifications" element={<NotificationSettings />} />
<Route path="/help-support" element={<HelpSupport />} />
<Route path="/analytics" element={<Analytics />} />
<Route path="/transactions" element={<Transactions />} />
<Route path="*" element={<NotFound />} />
</Routes>
</SafeAreaContainer>
<Toaster />
<SonnerToaster />
</Router>
</BudgetProvider>
</AuthProvider>
<BudgetProvider>
<div className="App">
<Routes>
<Route path="/" element={<Index />} />
<Route path="/login" element={<Login />} />
<Route path="/register" element={<Register />} />
<Route path="/settings" element={<Settings />} />
<Route path="/transactions" element={<Transactions />} />
<Route path="/analytics" element={<Analytics />} />
<Route path="/profile" element={<ProfileManagement />} />
<Route path="/payment-methods" element={<PaymentMethods />} />
<Route path="/help-support" element={<HelpSupport />} />
<Route path="/security-privacy" element={<SecurityPrivacySettings />} />
<Route path="/notifications" element={<NotificationSettings />} />
<Route path="/forgot-password" element={<ForgotPassword />} />
<Route path="*" element={<NotFound />} />
</Routes>
<Toaster />
</div>
</BudgetProvider>
);
}

View File

@@ -1,6 +1,5 @@
import React, { createContext, useState, useContext, useEffect } from 'react';
import { BudgetContextType, BudgetData, BudgetPeriod, Transaction, CategoryBudget } from './budget/types';
import { BudgetContextType, BudgetData, Transaction, CategoryBudget } from './budget/types';
import { loadTransactionsFromStorage, saveTransactionsToStorage } from '@/hooks/transactions/storageUtils';
import { v4 as uuidv4 } from 'uuid';
@@ -16,7 +15,7 @@ export const BudgetProvider: React.FC<{ children: React.ReactNode }> = ({ childr
weekly: { targetAmount: 0, spentAmount: 0, remainingAmount: 0 },
monthly: { targetAmount: 0, spentAmount: 0, remainingAmount: 0 },
});
const [selectedTab, setSelectedTab] = useState<BudgetPeriod>('monthly');
const [selectedTab, setSelectedTab] = useState<'daily' | 'weekly' | 'monthly'>('monthly');
useEffect(() => {
const storedTransactions = loadTransactionsFromStorage();
@@ -51,7 +50,7 @@ export const BudgetProvider: React.FC<{ children: React.ReactNode }> = ({ childr
};
// 예산 목표 업데이트
const handleBudgetGoalUpdate = (type: BudgetPeriod, amount: number, newCategoryBudgets?: Record<string, number>) => {
const handleBudgetGoalUpdate = (type: 'daily' | 'weekly' | 'monthly', amount: number, newCategoryBudgets?: Record<string, number>) => {
setBudgetData(prev => ({
...prev,
[type]: {
@@ -159,7 +158,7 @@ export const useBudget = () => {
return context;
};
// types 내보내기
// 타입 내보내기를 수정
export type { BudgetContextType };
export { BudgetPeriod } from './budget/types';
export type { Transaction } from './budget/types';
export { type BudgetPeriod } from './budget/types';

View File

@@ -1,38 +1,17 @@
import { useContext, createContext } from 'react';
import { BudgetData, BudgetPeriod, Transaction } from './types';
import { createContext, useContext } from 'react';
import { BudgetContextType } from './types';
// 컨텍스트 인터페이스 정의
export interface BudgetContextType {
transactions: Transaction[];
selectedTab: BudgetPeriod;
setSelectedTab: (tab: BudgetPeriod) => void;
budgetData: BudgetData;
categoryBudgets: Record<string, number>;
getCategorySpending: () => Array<{
title: string;
current: number;
total: number;
}>;
addTransaction: (transaction: Transaction) => void;
updateTransaction: (transaction: Transaction) => void;
deleteTransaction: (id: string) => void;
handleBudgetGoalUpdate: (type: BudgetPeriod, amount: number, newCategoryBudgets?: Record<string, number>) => void;
getPaymentMethodStats: () => Array<{ method: string; amount: number; percentage: number }>;
resetBudgetData?: () => void; // 선택적 필드로 추가
}
// 컨텍스트 생성
// BudgetContext 생성
export const BudgetContext = createContext<BudgetContextType | undefined>(undefined);
/**
* 예산 컨텍스트에 접근하기 위한 커스텀 훅
* BudgetProvider 내부에서만 사용해야 함
*/
export const useBudget = (): BudgetContextType => {
// useBudget 훅
export const useBudget = () => {
const context = useContext(BudgetContext);
if (context === undefined) {
throw new Error('useBudget는 BudgetProvider 내부에서 사용해야 합니다');
throw new Error("useBudget must be used within a BudgetProvider");
}
return context;
};
export type { BudgetContextType };