Files
traceability/src/contexts/BudgetContext.tsx
2026-02-03 20:48:09 +01:00

46 lines
1.4 KiB
TypeScript

import React, { createContext, useContext, ReactNode } from 'react';
import { useBudgetSettings, useUpdateBudgetSettings } from '@/hooks/useBudget';
import { BudgetSettings } from '@/types/budget';
interface BudgetContextType {
settings: BudgetSettings | undefined;
isLoading: boolean;
updateSettings: (updates: Partial<BudgetSettings>) => void;
formatCurrency: (amount: number) => string;
}
const BudgetContext = createContext<BudgetContextType | undefined>(undefined);
export function BudgetProvider({ children }: { children: ReactNode }) {
const { data: settings, isLoading } = useBudgetSettings();
const updateSettingsMutation = useUpdateBudgetSettings();
const updateSettings = (updates: Partial<BudgetSettings>) => {
updateSettingsMutation.mutate(updates);
};
const formatCurrency = (amount: number): string => {
const currency = settings?.currency || 'USD';
return new Intl.NumberFormat('en-US', {
style: 'currency',
currency,
minimumFractionDigits: 0,
maximumFractionDigits: 2,
}).format(amount);
};
return (
<BudgetContext.Provider value={{ settings, isLoading, updateSettings, formatCurrency }}>
{children}
</BudgetContext.Provider>
);
}
export function useBudgetContext() {
const context = useContext(BudgetContext);
if (!context) {
throw new Error('useBudgetContext must be used within a BudgetProvider');
}
return context;
}