-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathuseSWP.ts
More file actions
69 lines (56 loc) · 1.87 KB
/
Copy pathuseSWP.ts
File metadata and controls
69 lines (56 loc) · 1.87 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
/**
* useSWP — Custom React hook for SWP Calculator
* Manages all input state and memoized calculation results.
*/
'use client';
import { useState, useMemo, useCallback } from 'react';
import { SWPInputs, SWPMode, SWPResult } from '@/types/swp';
import { calculateSWP } from '@/lib/swpCalc';
/** Default input values */
const DEFAULT_INPUTS: SWPInputs = {
corpus: 2500000, // ₹25 Lakh
withdrawal: 15000, // ₹15,000/month
annualReturn: 8, // 8% p.a.
inflationAdjusted: false,
inflationRate: 5, // 5% default step-up
mode: 'DURATION',
specYears: 10,
};
export function useSWP() {
const [inputs, setInputs] = useState<SWPInputs>(DEFAULT_INPUTS);
// Memoized calculation — only recomputes when inputs change
const result: SWPResult = useMemo(() => calculateSWP(inputs), [inputs]);
// Individual setters for convenience
const setCorpus = useCallback((corpus: number) => {
setInputs(prev => ({ ...prev, corpus }));
}, []);
const setWithdrawal = useCallback((withdrawal: number) => {
setInputs(prev => ({ ...prev, withdrawal }));
}, []);
const setAnnualReturn = useCallback((annualReturn: number) => {
setInputs(prev => ({ ...prev, annualReturn }));
}, []);
const setInflationAdjusted = useCallback((inflationAdjusted: boolean) => {
setInputs(prev => ({ ...prev, inflationAdjusted }));
}, []);
const setInflationRate = useCallback((inflationRate: number) => {
setInputs(prev => ({ ...prev, inflationRate }));
}, []);
const setMode = useCallback((mode: SWPMode) => {
setInputs(prev => ({ ...prev, mode }));
}, []);
const setSpecYears = useCallback((specYears: number) => {
setInputs(prev => ({ ...prev, specYears }));
}, []);
return {
inputs,
result,
setCorpus,
setWithdrawal,
setAnnualReturn,
setInflationAdjusted,
setInflationRate,
setMode,
setSpecYears,
};
}