@zeniai/client-epic-state 5.1.51 → 5.1.52
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/commonStateTypes/amount.d.ts +1 -0
- package/lib/commonStateTypes/amount.js +9 -1
- package/lib/commonStateTypes/workingDayHelper.d.ts +4 -3
- package/lib/commonStateTypes/workingDayHelper.js +4 -3
- package/lib/entity/aiCfo/aiCfoPayload.d.ts +0 -1
- package/lib/entity/aiCfo/aiCfoReducer.js +1 -3
- package/lib/entity/aiCfo/aiCfoState.d.ts +0 -1
- package/lib/entity/tenant/clearAllEpic.d.ts +3 -1
- package/lib/entity/tenant/clearAllEpic.js +4 -0
- package/lib/epic.d.ts +7 -1
- package/lib/epic.js +7 -1
- package/lib/esm/commonStateTypes/amount.js +7 -0
- package/lib/esm/commonStateTypes/workingDayHelper.js +4 -3
- package/lib/esm/entity/aiCfo/aiCfoReducer.js +1 -3
- package/lib/esm/entity/tenant/clearAllEpic.js +4 -0
- package/lib/esm/epic.js +7 -1
- package/lib/esm/index.js +5 -0
- package/lib/esm/reducer.js +6 -0
- package/lib/esm/view/expenseAutomationView/reducers/reconciliationViewReducer.js +24 -7
- package/lib/esm/view/spendManagement/autotransferRules/autoTransferRulesSelector.js +22 -2
- package/lib/esm/view/spendManagement/cashManagement/autoSweepFlow/autoSweepFlowPayload.js +29 -0
- package/lib/esm/view/spendManagement/cashManagement/autoSweepFlow/autoSweepFlowReducer.js +78 -0
- package/lib/esm/view/spendManagement/cashManagement/autoSweepFlow/autoSweepFlowSelector.js +49 -0
- package/lib/esm/view/spendManagement/cashManagement/autoSweepFlow/autoSweepFlowState.js +47 -0
- package/lib/esm/view/spendManagement/cashManagement/autoSweepFlow/epics/fetchCashManagementSettingsEpic.js +32 -0
- package/lib/esm/view/spendManagement/cashManagement/autoSweepFlow/epics/saveAutoSweepSettingsEpic.js +32 -0
- package/lib/esm/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewPayload.js +54 -0
- package/lib/esm/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewReducer.js +92 -0
- package/lib/esm/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewSelector.js +212 -0
- package/lib/esm/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewState.js +10 -0
- package/lib/esm/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchCashManagementBannerEpic.js +23 -0
- package/lib/esm/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchCashManagementOverviewPageEpic.js +36 -0
- package/lib/esm/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchCashManagementRecommendationEpic.js +27 -0
- package/lib/esm/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchRecentTransferEpic.js +28 -0
- package/lib/index.d.ts +10 -1
- package/lib/index.js +20 -1
- package/lib/reducer.d.ts +6 -0
- package/lib/reducer.js +6 -0
- package/lib/view/expenseAutomationView/reducers/reconciliationViewReducer.js +24 -7
- package/lib/view/spendManagement/autotransferRules/autoTransferRulesSelector.d.ts +8 -1
- package/lib/view/spendManagement/autotransferRules/autoTransferRulesSelector.js +21 -1
- package/lib/view/spendManagement/autotransferRules/autoTransferRulesState.d.ts +22 -0
- package/lib/view/spendManagement/cashManagement/autoSweepFlow/autoSweepFlowPayload.d.ts +47 -0
- package/lib/view/spendManagement/cashManagement/autoSweepFlow/autoSweepFlowPayload.js +34 -0
- package/lib/view/spendManagement/cashManagement/autoSweepFlow/autoSweepFlowReducer.d.ts +23 -0
- package/lib/view/spendManagement/cashManagement/autoSweepFlow/autoSweepFlowReducer.js +82 -0
- package/lib/view/spendManagement/cashManagement/autoSweepFlow/autoSweepFlowSelector.d.ts +40 -0
- package/lib/view/spendManagement/cashManagement/autoSweepFlow/autoSweepFlowSelector.js +53 -0
- package/lib/view/spendManagement/cashManagement/autoSweepFlow/autoSweepFlowState.d.ts +37 -0
- package/lib/view/spendManagement/cashManagement/autoSweepFlow/autoSweepFlowState.js +53 -0
- package/lib/view/spendManagement/cashManagement/autoSweepFlow/epics/fetchCashManagementSettingsEpic.d.ts +14 -0
- package/lib/view/spendManagement/cashManagement/autoSweepFlow/epics/fetchCashManagementSettingsEpic.js +36 -0
- package/lib/view/spendManagement/cashManagement/autoSweepFlow/epics/saveAutoSweepSettingsEpic.d.ts +7 -0
- package/lib/view/spendManagement/cashManagement/autoSweepFlow/epics/saveAutoSweepSettingsEpic.js +36 -0
- package/lib/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewPayload.d.ts +56 -0
- package/lib/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewPayload.js +60 -0
- package/lib/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewReducer.d.ts +22 -0
- package/lib/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewReducer.js +96 -0
- package/lib/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewSelector.d.ts +59 -0
- package/lib/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewSelector.js +217 -0
- package/lib/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewState.d.ts +122 -0
- package/lib/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewState.js +13 -0
- package/lib/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchCashManagementBannerEpic.d.ts +7 -0
- package/lib/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchCashManagementBannerEpic.js +27 -0
- package/lib/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchCashManagementOverviewPageEpic.d.ts +9 -0
- package/lib/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchCashManagementOverviewPageEpic.js +40 -0
- package/lib/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchCashManagementRecommendationEpic.d.ts +7 -0
- package/lib/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchCashManagementRecommendationEpic.js +31 -0
- package/lib/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchRecentTransferEpic.d.ts +15 -0
- package/lib/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchRecentTransferEpic.js +32 -0
- package/lib/zeniAPI.d.ts +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { createSlice } from '@reduxjs/toolkit';
|
|
2
|
+
import { toCashManagementBannerData, toCashManagementTransfer, } from './cashManagementOverviewPayload';
|
|
3
|
+
import { initialCashManagementBannerState, initialCashManagementRecentTransferState, } from './cashManagementOverviewState';
|
|
4
|
+
export const initialState = {
|
|
5
|
+
banner: initialCashManagementBannerState,
|
|
6
|
+
recentTransfer: initialCashManagementRecentTransferState,
|
|
7
|
+
};
|
|
8
|
+
const cashManagementOverview = createSlice({
|
|
9
|
+
name: 'cashManagementOverview',
|
|
10
|
+
initialState,
|
|
11
|
+
reducers: {
|
|
12
|
+
fetchCashManagementOverviewPage: {
|
|
13
|
+
reducer() { },
|
|
14
|
+
prepare(cacheOverride) {
|
|
15
|
+
return { payload: { cacheOverride } };
|
|
16
|
+
},
|
|
17
|
+
},
|
|
18
|
+
/**
|
|
19
|
+
* Public banner-fetch entry point. Triggers an orchestrator epic that
|
|
20
|
+
* fans out to the recommend, settings, and recent-transfer API calls
|
|
21
|
+
* in parallel. No reducer-side state change — each inner action drives
|
|
22
|
+
* its own sub-state.
|
|
23
|
+
*
|
|
24
|
+
* `cacheOverride === true` forces all three inner fetches regardless
|
|
25
|
+
* of current slice state; `false` keeps the per-slice dedup so repeat
|
|
26
|
+
* dispatches are no-ops once a slice is loaded or in-flight.
|
|
27
|
+
*/
|
|
28
|
+
fetchCashManagementBanner: {
|
|
29
|
+
reducer() { },
|
|
30
|
+
prepare(cacheOverride) {
|
|
31
|
+
return { payload: { cacheOverride } };
|
|
32
|
+
},
|
|
33
|
+
},
|
|
34
|
+
/**
|
|
35
|
+
* Internal trigger for the recommend API (`/cash-agent/recommend`).
|
|
36
|
+
* Dispatched by the orchestrator; not exported.
|
|
37
|
+
*/
|
|
38
|
+
fetchCashManagementRecommendation(draft) {
|
|
39
|
+
// Keep `draft.banner.data` so the projection chart renders the last
|
|
40
|
+
// good payload while the refetch is in flight, instead of flickering
|
|
41
|
+
// to the empty/skeleton state on every page revisit.
|
|
42
|
+
draft.banner.fetchState = 'In-Progress';
|
|
43
|
+
draft.banner.error = undefined;
|
|
44
|
+
},
|
|
45
|
+
updateCashManagementRecommendation(draft, action) {
|
|
46
|
+
draft.banner = {
|
|
47
|
+
fetchState: 'Completed',
|
|
48
|
+
error: undefined,
|
|
49
|
+
data: toCashManagementBannerData(action.payload.data),
|
|
50
|
+
};
|
|
51
|
+
},
|
|
52
|
+
updateCashManagementRecommendationFetchStatus(draft, action) {
|
|
53
|
+
draft.banner = {
|
|
54
|
+
...draft.banner,
|
|
55
|
+
fetchState: action.payload.fetchState,
|
|
56
|
+
error: action.payload.error,
|
|
57
|
+
};
|
|
58
|
+
},
|
|
59
|
+
/**
|
|
60
|
+
* Internal trigger for the recent-transfer API
|
|
61
|
+
* (`/cash-management/transfers`). Dispatched by the orchestrator; not
|
|
62
|
+
* exported.
|
|
63
|
+
*/
|
|
64
|
+
fetchRecentTransfer(draft) {
|
|
65
|
+
// Same anti-flicker pattern as the recommend fetch: keep prior data
|
|
66
|
+
// while the refetch is in flight.
|
|
67
|
+
draft.recentTransfer.fetchState = 'In-Progress';
|
|
68
|
+
draft.recentTransfer.error = undefined;
|
|
69
|
+
},
|
|
70
|
+
updateRecentTransfer(draft, action) {
|
|
71
|
+
draft.recentTransfer = {
|
|
72
|
+
fetchState: 'Completed',
|
|
73
|
+
error: undefined,
|
|
74
|
+
data: action.payload.data != null
|
|
75
|
+
? toCashManagementTransfer(action.payload.data)
|
|
76
|
+
: undefined,
|
|
77
|
+
};
|
|
78
|
+
},
|
|
79
|
+
updateRecentTransferFetchStatus(draft, action) {
|
|
80
|
+
draft.recentTransfer = {
|
|
81
|
+
...draft.recentTransfer,
|
|
82
|
+
fetchState: action.payload.fetchState,
|
|
83
|
+
error: action.payload.error,
|
|
84
|
+
};
|
|
85
|
+
},
|
|
86
|
+
clearCashManagementOverview(draft) {
|
|
87
|
+
Object.assign(draft, initialState);
|
|
88
|
+
},
|
|
89
|
+
},
|
|
90
|
+
});
|
|
91
|
+
export const { fetchCashManagementOverviewPage, fetchCashManagementBanner, fetchCashManagementRecommendation, updateCashManagementRecommendation, updateCashManagementRecommendationFetchStatus, fetchRecentTransfer, updateRecentTransfer, updateRecentTransferFetchStatus, clearCashManagementOverview, } = cashManagementOverview.actions;
|
|
92
|
+
export default cashManagementOverview.reducer;
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
import { zeroAmount } from '../../../../commonStateTypes/amount';
|
|
2
|
+
import { reduceAllFetchState } from '../../../../commonStateTypes/reduceFetchState';
|
|
3
|
+
import { getDepositAccountByDepositAccountId } from '../../../../entity/depositAccount/depositAccountSelector';
|
|
4
|
+
import { mapDepositAccToFundingAccount, } from '../../commonSetup/setupViewSelector';
|
|
5
|
+
/**
|
|
6
|
+
* Default account type used when the recommend payload has no movement to
|
|
7
|
+
* expose yet (e.g. before the first fetch resolves). Callers that care about
|
|
8
|
+
* the movement should also gate on `fetchState === 'Completed'`.
|
|
9
|
+
*/
|
|
10
|
+
const DEFAULT_BANK_ACCOUNT_TYPE = 'deposit_account';
|
|
11
|
+
const DEFAULT_SUB_MOVEMENT_TYPE = 'push';
|
|
12
|
+
export const getCashManagementOverviewBanner = (state) => {
|
|
13
|
+
const { banner, recentTransfer } = state.cashManagementOverviewState;
|
|
14
|
+
const autoSweep = state.autoSweepFlowState;
|
|
15
|
+
// The banner today surfaces a single recommended movement (the first one
|
|
16
|
+
// returned by the agent). When the agent returns multiple groups/movements
|
|
17
|
+
// we'll need to broaden this — for now consumers only render one.
|
|
18
|
+
const movement = banner.data?.moneyMovements[0]?.movements[0];
|
|
19
|
+
const aggregate = reduceAllFetchState([
|
|
20
|
+
{ fetchState: banner.fetchState, error: banner.error },
|
|
21
|
+
{ fetchState: autoSweep.fetchState, error: autoSweep.error },
|
|
22
|
+
{ fetchState: recentTransfer.fetchState, error: recentTransfer.error },
|
|
23
|
+
]);
|
|
24
|
+
const subMovementType = movement?.subMovementType ?? DEFAULT_SUB_MOVEMENT_TYPE;
|
|
25
|
+
// The "primary" account is the deposit-account side of the movement —
|
|
26
|
+
// source for a push (money leaving primary → treasury) and destination
|
|
27
|
+
// for a pull (money returning to primary).
|
|
28
|
+
const primaryAccountId = subMovementType === 'pull'
|
|
29
|
+
? movement?.destinationBankAccountId
|
|
30
|
+
: movement?.sourceBankAccountId;
|
|
31
|
+
const primaryDepositAccount = primaryAccountId != null && primaryAccountId !== ''
|
|
32
|
+
? getDepositAccountByDepositAccountId(state.depositAccountState, primaryAccountId)
|
|
33
|
+
: undefined;
|
|
34
|
+
const primaryFundingAccount = primaryDepositAccount != null
|
|
35
|
+
? mapDepositAccToFundingAccount(primaryDepositAccount)
|
|
36
|
+
: undefined;
|
|
37
|
+
// For pull, surface the largest outflow in the horizon as the
|
|
38
|
+
// "triggering" event. This is a heuristic — the agent doesn't tag a
|
|
39
|
+
// specific outflow today, but the largest one is the most likely cause
|
|
40
|
+
// of the buffer breach and matches what the design wants to highlight.
|
|
41
|
+
const triggeringOutflow = subMovementType === 'pull'
|
|
42
|
+
? pickLargestOutflow(banner.data?.outflows)
|
|
43
|
+
: undefined;
|
|
44
|
+
return {
|
|
45
|
+
fetchState: aggregate.fetchState,
|
|
46
|
+
error: aggregate.error,
|
|
47
|
+
amount: movement?.amount ?? zeroAmount(),
|
|
48
|
+
cashManagementSettingsId: autoSweep.settingsId,
|
|
49
|
+
destinationBankAccountId: movement?.destinationBankAccountId ?? '',
|
|
50
|
+
destinationBankAccountType: movement?.destinationBankAccountType ?? DEFAULT_BANK_ACCOUNT_TYPE,
|
|
51
|
+
reasoning: movement?.reasoning ?? '',
|
|
52
|
+
sourceBankAccountId: movement?.sourceBankAccountId ?? '',
|
|
53
|
+
sourceBankAccountType: movement?.sourceBankAccountType ?? DEFAULT_BANK_ACCOUNT_TYPE,
|
|
54
|
+
subMovementType,
|
|
55
|
+
primaryFundingAccount,
|
|
56
|
+
triggeringOutflow,
|
|
57
|
+
recentTransfer: recentTransfer.data,
|
|
58
|
+
version: 0,
|
|
59
|
+
};
|
|
60
|
+
};
|
|
61
|
+
const pickLargestOutflow = (outflows) => {
|
|
62
|
+
if (outflows == null || outflows.length === 0) {
|
|
63
|
+
return undefined;
|
|
64
|
+
}
|
|
65
|
+
return outflows.reduce((largest, event) => event.amount.amount > largest.amount.amount ? event : largest);
|
|
66
|
+
};
|
|
67
|
+
export const getCashManagementOverview = (state) => {
|
|
68
|
+
const { cashManagementOverviewState, depositAccountListState, paymentAccountListState, treasuryDetailState, } = state;
|
|
69
|
+
const aggregate = reduceAllFetchState([
|
|
70
|
+
{
|
|
71
|
+
fetchState: paymentAccountListState.fetchState,
|
|
72
|
+
error: paymentAccountListState.error,
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
fetchState: depositAccountListState.fetchState,
|
|
76
|
+
error: depositAccountListState.error,
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
fetchState: treasuryDetailState.fetchState,
|
|
80
|
+
error: treasuryDetailState.error,
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
fetchState: cashManagementOverviewState.banner.fetchState,
|
|
84
|
+
error: cashManagementOverviewState.banner.error,
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
fetchState: state.autoSweepFlowState.fetchState,
|
|
88
|
+
error: state.autoSweepFlowState.error,
|
|
89
|
+
},
|
|
90
|
+
]);
|
|
91
|
+
const treasuryBalance = treasuryDetailState.accountSummary?.totalBalance ?? zeroAmount();
|
|
92
|
+
const bannerView = getCashManagementOverviewBanner(state);
|
|
93
|
+
// cashBalance is the primary (agent-managed) deposit account's available
|
|
94
|
+
// balance — the account the banner resolves as primaryFundingAccount — not
|
|
95
|
+
// the sum of all cash accounts. Zero until that account resolves.
|
|
96
|
+
const cashBalance = bannerView.primaryFundingAccount?.accountBalance?.available ?? zeroAmount();
|
|
97
|
+
const totalCash = addAmounts(treasuryBalance, cashBalance);
|
|
98
|
+
const bannerData = cashManagementOverviewState.banner.data;
|
|
99
|
+
const inflowEvents = bannerData?.inflows ?? [];
|
|
100
|
+
const outflowEvents = bannerData?.outflows ?? [];
|
|
101
|
+
const totalInFlow = sumEventAmounts(inflowEvents);
|
|
102
|
+
const totalOutFlow = sumEventAmounts(outflowEvents);
|
|
103
|
+
const cashflow = subtractAmounts(totalInFlow, totalOutFlow);
|
|
104
|
+
const projectionData = buildProjectionData(cashBalance, inflowEvents, outflowEvents);
|
|
105
|
+
return {
|
|
106
|
+
banner: bannerView,
|
|
107
|
+
cashBalance,
|
|
108
|
+
cashflow,
|
|
109
|
+
inflowEvents,
|
|
110
|
+
outflowEvents,
|
|
111
|
+
projectionData,
|
|
112
|
+
totalCash,
|
|
113
|
+
totalInFlow,
|
|
114
|
+
totalOutFlow,
|
|
115
|
+
treasuryBalance,
|
|
116
|
+
fetchState: aggregate.fetchState,
|
|
117
|
+
error: aggregate.error,
|
|
118
|
+
version: 0,
|
|
119
|
+
};
|
|
120
|
+
};
|
|
121
|
+
/**
|
|
122
|
+
* Walks the inflow / outflow events in chronological order, stepping the
|
|
123
|
+
* running balance from today's `cashBalance`. Emits a point per event so the
|
|
124
|
+
* chart can render colored markers at each cash event. Events with the same
|
|
125
|
+
* payment date are kept as separate steps (preserves the marker count even
|
|
126
|
+
* if Recharts overlays them at the same X position).
|
|
127
|
+
*/
|
|
128
|
+
const buildProjectionData = (cashBalance, inflowEvents, outflowEvents) => {
|
|
129
|
+
const events = [
|
|
130
|
+
...inflowEvents.map((e) => ({
|
|
131
|
+
amount: e.amount,
|
|
132
|
+
date: e.paymentDate,
|
|
133
|
+
isInflow: true,
|
|
134
|
+
})),
|
|
135
|
+
...outflowEvents.map((e) => ({
|
|
136
|
+
amount: e.amount,
|
|
137
|
+
date: e.paymentDate,
|
|
138
|
+
isInflow: false,
|
|
139
|
+
})),
|
|
140
|
+
].sort((a, b) => {
|
|
141
|
+
const diff = a.date.valueOf() - b.date.valueOf();
|
|
142
|
+
if (diff !== 0) {
|
|
143
|
+
return diff;
|
|
144
|
+
}
|
|
145
|
+
// Same-day tie-breaker: apply outflows before inflows so the projection
|
|
146
|
+
// shows the worst-case low first, then the recovery — matches the
|
|
147
|
+
// "show me the dip" framing on the cash management overview.
|
|
148
|
+
if (a.isInflow === b.isInflow) {
|
|
149
|
+
return 0;
|
|
150
|
+
}
|
|
151
|
+
return a.isInflow ? 1 : -1;
|
|
152
|
+
});
|
|
153
|
+
let balance = cashBalance;
|
|
154
|
+
const points = [{ balance, date: 'Today' }];
|
|
155
|
+
events.forEach((event) => {
|
|
156
|
+
balance = event.isInflow
|
|
157
|
+
? addAmounts(balance, event.amount)
|
|
158
|
+
: subtractAmounts(balance, event.amount);
|
|
159
|
+
points.push({
|
|
160
|
+
balance,
|
|
161
|
+
date: event.date.format('MMM D'),
|
|
162
|
+
isInflow: event.isInflow ? true : undefined,
|
|
163
|
+
isOutflow: event.isInflow ? undefined : true,
|
|
164
|
+
});
|
|
165
|
+
});
|
|
166
|
+
return points;
|
|
167
|
+
};
|
|
168
|
+
const sumEventAmounts = (events) => events.reduce((acc, event) => addAmounts(acc, event.amount), zeroAmount());
|
|
169
|
+
/**
|
|
170
|
+
* Subtracts `b` from `a`, sharing the currency-match guard with `addAmounts`.
|
|
171
|
+
* Used to compute net cash flow (`inflow - outflow`).
|
|
172
|
+
*/
|
|
173
|
+
const subtractAmounts = (a, b) => {
|
|
174
|
+
if (isZeroAmount(b)) {
|
|
175
|
+
return { ...a };
|
|
176
|
+
}
|
|
177
|
+
if (isZeroAmount(a)) {
|
|
178
|
+
return { ...b, amount: -b.amount };
|
|
179
|
+
}
|
|
180
|
+
if (a.currencyCode !== b.currencyCode ||
|
|
181
|
+
a.currencySymbol !== b.currencySymbol) {
|
|
182
|
+
console.warn(`cashManagementOverview: skipping balance with mismatched currency. Expected ${a.currencyCode} (${a.currencySymbol}), got ${b.currencyCode} (${b.currencySymbol}).`);
|
|
183
|
+
return a;
|
|
184
|
+
}
|
|
185
|
+
return {
|
|
186
|
+
amount: a.amount - b.amount,
|
|
187
|
+
currencyCode: a.currencyCode,
|
|
188
|
+
currencySymbol: a.currencySymbol,
|
|
189
|
+
};
|
|
190
|
+
};
|
|
191
|
+
const isZeroAmount = (a) => a.amount === 0 && a.currencyCode === 'USD' && a.currencySymbol === '$';
|
|
192
|
+
/**
|
|
193
|
+
* Adds two Amounts. Currencies must match (the seeded zeroAmount() counts as
|
|
194
|
+
* "no currency yet" and adopts `b`'s currency). Mismatches return `a`
|
|
195
|
+
* unchanged and warn — mixing currencies in a total is a bug, not silent
|
|
196
|
+
* conversion.
|
|
197
|
+
*/
|
|
198
|
+
const addAmounts = (a, b) => {
|
|
199
|
+
if (isZeroAmount(a)) {
|
|
200
|
+
return { ...b };
|
|
201
|
+
}
|
|
202
|
+
if (a.currencyCode !== b.currencyCode ||
|
|
203
|
+
a.currencySymbol !== b.currencySymbol) {
|
|
204
|
+
console.warn(`cashManagementOverview: skipping balance with mismatched currency. Expected ${a.currencyCode} (${a.currencySymbol}), got ${b.currencyCode} (${b.currencySymbol}).`);
|
|
205
|
+
return a;
|
|
206
|
+
}
|
|
207
|
+
return {
|
|
208
|
+
amount: a.amount + b.amount,
|
|
209
|
+
currencyCode: a.currencyCode,
|
|
210
|
+
currencySymbol: a.currencySymbol,
|
|
211
|
+
};
|
|
212
|
+
};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { from } from 'rxjs';
|
|
2
|
+
import { filter, mergeMap } from 'rxjs/operators';
|
|
3
|
+
import { fetchCashManagementSettings } from '../../autoSweepFlow/autoSweepFlowReducer';
|
|
4
|
+
import { fetchCashManagementBanner, fetchCashManagementRecommendation, fetchRecentTransfer, } from '../cashManagementOverviewReducer';
|
|
5
|
+
export const fetchCashManagementBannerEpic = (actions$, state$) => actions$.pipe(filter(fetchCashManagementBanner.match), mergeMap((action) => {
|
|
6
|
+
const { cacheOverride } = action.payload;
|
|
7
|
+
const state = state$.value;
|
|
8
|
+
const actions = [];
|
|
9
|
+
if (cacheOverride === true ||
|
|
10
|
+
needsFetch(state.cashManagementOverviewState.banner.fetchState)) {
|
|
11
|
+
actions.push(fetchCashManagementRecommendation());
|
|
12
|
+
}
|
|
13
|
+
if (cacheOverride === true ||
|
|
14
|
+
needsFetch(state.autoSweepFlowState.fetchState)) {
|
|
15
|
+
actions.push(fetchCashManagementSettings());
|
|
16
|
+
}
|
|
17
|
+
if (cacheOverride === true ||
|
|
18
|
+
needsFetch(state.cashManagementOverviewState.recentTransfer.fetchState)) {
|
|
19
|
+
actions.push(fetchRecentTransfer());
|
|
20
|
+
}
|
|
21
|
+
return from(actions);
|
|
22
|
+
}));
|
|
23
|
+
const needsFetch = (fetchState) => fetchState !== 'Completed' && fetchState !== 'In-Progress';
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { concat, from } from 'rxjs';
|
|
2
|
+
import { filter, mergeMap } from 'rxjs/operators';
|
|
3
|
+
import { fetchAutoTransferRules } from '../../../autotransferRules/autoTransferRulesReducer';
|
|
4
|
+
import { fetchTreasuryOverviewDetail } from '../../../treasury/treasuryList/treasuryDetailReducer';
|
|
5
|
+
import { fetchZeniAccountList } from '../../../zeniAccounts/zeniAccountList/zeniAccountListReducer';
|
|
6
|
+
import { fetchCashManagementBanner, fetchCashManagementOverviewPage, } from '../cashManagementOverviewReducer';
|
|
7
|
+
export const fetchCashManagementOverviewPageEpic = (actions$, state$) => actions$.pipe(filter(fetchCashManagementOverviewPage.match), mergeMap((action) => {
|
|
8
|
+
const { cacheOverride } = action.payload;
|
|
9
|
+
const state = state$.value;
|
|
10
|
+
const pageActions = [];
|
|
11
|
+
if (cacheOverride === true) {
|
|
12
|
+
// Banner orchestrator (fetchCashManagementBannerEpic) fans out to
|
|
13
|
+
// recommendation + settings + recent-transfer internally.
|
|
14
|
+
pageActions.push(fetchTreasuryOverviewDetail(true), fetchZeniAccountList(true), fetchCashManagementBanner(true), fetchAutoTransferRules(true));
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
const treasuryDetailState = state.treasuryDetailState;
|
|
18
|
+
if (treasuryDetailState.hasValidState() === false &&
|
|
19
|
+
treasuryDetailState.fetchState !== 'In-Progress') {
|
|
20
|
+
pageActions.push(fetchTreasuryOverviewDetail(false));
|
|
21
|
+
}
|
|
22
|
+
// zeniAccountListState has no top-level fetchState to dedup against
|
|
23
|
+
// (only `newCheckingAccount.fetchState`), and the downstream epic is
|
|
24
|
+
// cheap. Always re-dispatch so the summary stays fresh on page entry.
|
|
25
|
+
pageActions.push(fetchZeniAccountList(false));
|
|
26
|
+
// Banner orchestrator handles its own per-slice dedup across
|
|
27
|
+
// recommendation, settings, and recent-transfer.
|
|
28
|
+
pageActions.push(fetchCashManagementBanner(false));
|
|
29
|
+
const autoTransferRules = state.autotransferRulesState;
|
|
30
|
+
if (autoTransferRules.fetchState !== 'Completed' &&
|
|
31
|
+
autoTransferRules.fetchState !== 'In-Progress') {
|
|
32
|
+
pageActions.push(fetchAutoTransferRules(false));
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return concat(from(pageActions));
|
|
36
|
+
}));
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { of } from 'rxjs';
|
|
2
|
+
import { catchError, filter, mergeMap, switchMap } from 'rxjs/operators';
|
|
3
|
+
import { createZeniAPIStatus, isSuccessResponse, } from '../../../../../responsePayload';
|
|
4
|
+
import { fetchCashManagementRecommendation, updateCashManagementRecommendation, updateCashManagementRecommendationFetchStatus, } from '../cashManagementOverviewReducer';
|
|
5
|
+
/**
|
|
6
|
+
* Hits the cash agent's recommend endpoint and stores the full response on
|
|
7
|
+
* the banner state — `inflows[]`, `outflows[]`, and `money_movements[]` all
|
|
8
|
+
* live there, so consumers can read them directly without an entity-bucket
|
|
9
|
+
* lookup.
|
|
10
|
+
*/
|
|
11
|
+
const DEFAULT_RECOMMEND_HORIZON_DAYS = 30;
|
|
12
|
+
export const fetchCashManagementRecommendationEpic = (actions$, _state$, zeniAPI) => actions$.pipe(filter(fetchCashManagementRecommendation.match), switchMap(() => {
|
|
13
|
+
const endpoint = `${zeniAPI.apiEndPoints.cashManagementAgentBaseUrl}/1.0/cash-agent/recommend?horizon_days=${DEFAULT_RECOMMEND_HORIZON_DAYS}`;
|
|
14
|
+
return zeniAPI.getJSON(endpoint).pipe(mergeMap((response) => {
|
|
15
|
+
if (isSuccessResponse(response) && response.data != null) {
|
|
16
|
+
return of(updateCashManagementRecommendation({ data: response.data }));
|
|
17
|
+
}
|
|
18
|
+
return of(updateCashManagementRecommendationFetchStatus({
|
|
19
|
+
fetchState: 'Error',
|
|
20
|
+
error: response.status,
|
|
21
|
+
}));
|
|
22
|
+
}), catchError((error) => of(updateCashManagementRecommendationFetchStatus({
|
|
23
|
+
fetchState: 'Error',
|
|
24
|
+
error: createZeniAPIStatus('Unexpected Error', 'Fetch cash management recommendation REST API call errored out: ' +
|
|
25
|
+
(error?.message ?? String(error))),
|
|
26
|
+
}))));
|
|
27
|
+
}));
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { of } from 'rxjs';
|
|
2
|
+
import { catchError, filter, mergeMap, switchMap } from 'rxjs/operators';
|
|
3
|
+
import { createZeniAPIStatus, isSuccessResponse, } from '../../../../../responsePayload';
|
|
4
|
+
import { fetchRecentTransfer, updateRecentTransfer, updateRecentTransferFetchStatus, } from '../cashManagementOverviewReducer';
|
|
5
|
+
/**
|
|
6
|
+
* Hits `GET /cash-management/transfers` and stores the most recent actual
|
|
7
|
+
* cash-management transfer on `recentTransfer.data`. Used by the banner
|
|
8
|
+
* surface to render the "transfer scheduled / in-progress / complete"
|
|
9
|
+
* variant for existing users who have a settings id. The API returns the
|
|
10
|
+
* single most-relevant transfer under `transfer`; that field is optional
|
|
11
|
+
* (fresh users with no transfer history get `undefined`).
|
|
12
|
+
*/
|
|
13
|
+
export const fetchRecentTransferEpic = (actions$, _state$, zeniAPI) => actions$.pipe(filter(fetchRecentTransfer.match), switchMap(() => {
|
|
14
|
+
const endpoint = `${zeniAPI.apiEndPoints.cashManagementAgentBaseUrl}/1.0/cash-management/transfers/latest`;
|
|
15
|
+
return zeniAPI.getJSON(endpoint).pipe(mergeMap((response) => {
|
|
16
|
+
if (isSuccessResponse(response) && response.data != null) {
|
|
17
|
+
return of(updateRecentTransfer({ data: response.data.transfer }));
|
|
18
|
+
}
|
|
19
|
+
return of(updateRecentTransferFetchStatus({
|
|
20
|
+
fetchState: 'Error',
|
|
21
|
+
error: response.status,
|
|
22
|
+
}));
|
|
23
|
+
}), catchError((error) => of(updateRecentTransferFetchStatus({
|
|
24
|
+
fetchState: 'Error',
|
|
25
|
+
error: createZeniAPIStatus('Unexpected Error', 'Fetch recent cash-management transfer REST API call errored out: ' +
|
|
26
|
+
(error?.message ?? String(error))),
|
|
27
|
+
}))));
|
|
28
|
+
}));
|
package/lib/index.d.ts
CHANGED
|
@@ -972,7 +972,7 @@ export { TreasuryTaxLettersSelectorView, getTreasuryTaxLetters, } from './view/s
|
|
|
972
972
|
export { TreasuryTransactionStatus } from './view/spendManagement/treasury/treasuryList/treasuryDetailPayload';
|
|
973
973
|
export { fetchAutoTransferRules, createAutoTransferRule, updateAutoTransferRule, deleteAutoTransferRule, fetchAutoTransferRuleHistory, fetchAutoTransferReviewDetail, updateRuleLocalData, clearRuleUpdateLocalData, } from './view/spendManagement/autotransferRules/autoTransferRulesReducer';
|
|
974
974
|
export { AutoTransferRulesSelectorView, getAutoTransferRules, getAutoTransferRuleById, getAutoTransferRuleHistory, } from './view/spendManagement/autotransferRules/autoTransferRulesSelector';
|
|
975
|
-
export { AutoTransferRule, } from './view/spendManagement/autotransferRules/autoTransferRulesState';
|
|
975
|
+
export { AutoTransferRule, CashManagementRule, } from './view/spendManagement/autotransferRules/autoTransferRulesState';
|
|
976
976
|
export { AutoTransferRuleType, AutoTransferRuleFrequency, AutoTransferRuleLocalData, } from './view/spendManagement/autotransferRules/autoTransferRulesPayload';
|
|
977
977
|
export type { TransactionActivityLog } from './entity/transactionActivityLog/transactionActivityLogState';
|
|
978
978
|
export { BULK_UPLOAD_AUTOMATCHING_TIMEOUT_MS, BULK_UPLOAD_BAR_COMPLETE_HOLD_MS, } from './view/expenseAutomationView/helpers/bulkUploadTiming';
|
|
@@ -984,3 +984,12 @@ export type { SessionCallbacks, SessionConfig, } from './entity/tenant/sessionTy
|
|
|
984
984
|
export { DEFAULT_SESSION_CONFIG } from './entity/tenant/sessionTypes';
|
|
985
985
|
export type { KybProvidedDocumentType, KycKybAutofillTarget, KycKybProvidedDocumentType, KycProvidedDocumentType, KycSelectDocumentType, } from './view/spendManagement/commonSetup/types/kycKybAutofill';
|
|
986
986
|
export { toKycProvidedDocumentType, toKycProvidedDocumentTypeFromAllowed, } from './view/spendManagement/commonSetup/types/kycKybAutofill';
|
|
987
|
+
export { fetchCashManagementBanner, fetchCashManagementOverviewPage, } from './view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewReducer';
|
|
988
|
+
export { clearAutoSweepFlow, saveAutoSweepSettings, updateAutoSweepDraft, updateAutoSweepRisk, updateAutoSweepSettingsFetchStatus, updateCashManagementSettings, updateCashManagementSettingsFetchStatus, } from './view/spendManagement/cashManagement/autoSweepFlow/autoSweepFlowReducer';
|
|
989
|
+
export { getAutoSweepFlow } from './view/spendManagement/cashManagement/autoSweepFlow/autoSweepFlowSelector';
|
|
990
|
+
export type { AutoSweepFlowFormData, AutoSweepFlowSelectorView, } from './view/spendManagement/cashManagement/autoSweepFlow/autoSweepFlowSelector';
|
|
991
|
+
export { RISK_BUFFER_AMOUNT, bufferAmountToRisk, } from './view/spendManagement/cashManagement/autoSweepFlow/autoSweepFlowState';
|
|
992
|
+
export type { AutoSweepFlowState, AutoSweepFrequency, RiskLevel, } from './view/spendManagement/cashManagement/autoSweepFlow/autoSweepFlowState';
|
|
993
|
+
export { getCashManagementOverview, getCashManagementOverviewBanner, } from './view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewSelector';
|
|
994
|
+
export type { CashManagementOverviewBannerSelectorView, CashManagementOverviewSelectorView, CashProjectionPoint, } from './view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewSelector';
|
|
995
|
+
export type { CashManagementScenario, CashManagementTransfer, CashManagementTransferStatus, UpcomingPaymentEvent, UpcomingPaymentEventAccountType, } from './view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewState';
|
package/lib/index.js
CHANGED
|
@@ -76,7 +76,7 @@ exports.toAiCfoVisualizationType = exports.ALL_INTERACTIVE_FORM_TYPES = exports.
|
|
|
76
76
|
exports.getPolicyRecommendationFromUploadError = exports.getPolicyRecommendationFromUploadChatSessionId = exports.getPolicyRecommendationFromUploadAnswerId = exports.getPolicyDocumentExtractionFetchState = exports.getPolicyDocumentExtractionError = exports.getExtractedCardPolicyRules = exports.getCardPolicyVendorSearchString = exports.getCardPolicyVendorSearchOptions = exports.getCardPolicyVendorSearchFetchState = exports.getCardPolicyTemplatesByIds = exports.getCardPolicyTemplateById = exports.getCardPolicySuggestedBlockMerchants = exports.getCardPolicySuggestedBlockCategories = exports.getCardPolicySuggestedAllowMerchants = exports.getCardPolicySuggestedAllowCategories = exports.getCardPolicyStats = exports.getCardPolicyMccCategoriesFetchState = exports.getCardPolicyMccCategoriesError = exports.getCardPolicyMccCategories = exports.getAllCardPolicyTemplates = exports.clearCardPolicy = exports.updatePolicyRecommendationFromUploadSuccess = exports.updatePolicyRecommendationFromUploadFailure = exports.updatePolicyDocumentExtractionSuccess = exports.updatePolicyDocumentExtractionFailure = exports.updateCreatedCardPolicyTemplate = exports.updateCardPolicyVendorOptionsFailure = exports.updateCardPolicyVendorOptions = exports.updateCardPolicyTemplates = exports.updateCardPolicyStats = exports.updateCardPolicyMccCategoriesFailure = exports.updateCardPolicyMccCategories = exports.removeCardPolicyTemplate = exports.fetchCardPolicyVendorOptions = exports.fetchCardPolicyRecommendationFromUpload = exports.fetchCardPolicyMccCategories = exports.extractPolicyDocument = exports.clearPolicyDocumentExtraction = exports.toMessageType = exports.toMessageSender = exports.ALL_SYNTHETIC_AI_CFO_ANSWER_KINDS = exports.toInteractiveFormTypeStrict = exports.toInteractiveFormType = exports.toAiCfoAnswerResponseTypeStrict = exports.toAiCfoAnswerResponseType = exports.toAiCfoAnswerStateTypeStrict = exports.toAiCfoAnswerStateType = exports.toAiCfoChartTypeStrict = exports.toAiCfoChartType = exports.toAiCfoVisualizationTypeStrict = void 0;
|
|
77
77
|
exports.applyAiCardPolicyFormDraftUpdate = exports.deriveAiPolicyReviewRowsFromInputs = exports.buildManualCardPolicyFormDraftSeed = exports.buildUploadReviewRows = exports.buildEmptyLimitRows = exports.buildAiCardPolicyFormDraftSeed = exports.toVendorChipFieldValue = exports.toMccCategoryChipFieldValue = exports.buildVendorChipId = exports.buildMccCategoryChipId = exports.VENDOR_CHIP_ID_PREFIX = exports.MCC_CHIP_ID_PREFIX = exports.toMccCategoryLike = exports.CARD_POLICY_LIMIT_ROW_ID_TRANSACTION = exports.CARD_POLICY_LIMIT_ROW_ID_REQUIRE_RECEIPT = exports.getManualCardPolicyFormDraft = exports.getLastCreatedCardPolicyTemplateIds = exports.getLastCreatedCardPolicyTemplateId = exports.getLastCreateCardPolicyTemplateErrors = exports.getLastCreateCardPolicySourceChatSessionId = exports.getCreateCardPolicyTemplateRequestState = exports.getAiCardPolicyFormDraft = exports.updateManualCardPolicyFormDraft = exports.updateCreateCardPolicyTemplateRequestState = exports.updateAiCardPolicyFormDraftFromUploadPlan = exports.updateAiCardPolicyFormDraft = exports.seedManualCardPolicyFormDraft = exports.seedAiCardPolicyFormDraft = exports.createCardPolicyTemplates = exports.clearManualCardPolicyFormDraft = exports.clearCreateCardPolicy = exports.clearAiCardPolicyFormDraft = exports.applyExtractedPolicyToManualCardPolicyDraft = exports.applyExtractedPolicyToAiCardPolicyDraft = exports.toUpdateCardPolicyTemplateRequestBody = exports.toExtractedCardPolicyRules = exports.toCreateCardPolicyTemplatesRequestBody = exports.toCreateCardPolicyTemplateRequestBody = exports.toCardPolicyVendorSearchOption = exports.toCardPolicyTemplateList = exports.toCardPolicyTemplate = exports.toCardPolicyStats = exports.toCardPolicyEditFormDraft = exports.toBulkCreateCardPolicyTemplateError = exports.toCardPolicyTemplateStatus = exports.toCardPolicyTemplateMode = exports.ALL_CARD_POLICY_TEMPLATE_STATUSES = exports.ALL_CARD_POLICY_TEMPLATE_MODES = exports.getUploadedPolicyDocumentFileName = exports.getPolicyRecommendationFromUploadFetchState = void 0;
|
|
78
78
|
exports.getTransactionActivityLogView = exports.fetchTransactionActivityLog = exports.BULK_UPLOAD_BAR_COMPLETE_HOLD_MS = exports.BULK_UPLOAD_AUTOMATCHING_TIMEOUT_MS = exports.getAutoTransferRuleHistory = exports.getAutoTransferRuleById = exports.getAutoTransferRules = exports.clearRuleUpdateLocalData = exports.updateRuleLocalData = exports.fetchAutoTransferReviewDetail = exports.fetchAutoTransferRuleHistory = exports.deleteAutoTransferRule = exports.updateAutoTransferRule = exports.createAutoTransferRule = exports.fetchAutoTransferRules = exports.getTreasuryTaxLetters = exports.fetchTreasuryTaxLetterList = exports.getTreasuryStatements = exports.fetchTreasuryStatementList = exports.getTreasuryTransferMoney = exports.clearTreasuryTransferMoney = exports.updateTreasuryTransferMoneyLocalData = exports.executeTreasuryTransferMoney = exports.getTreasuryDetail = exports.updateTreasuryTransactionListUIState = exports.fetchTreasuryTransactionList = exports.fetchTreasuryOverviewDetail = exports.getUpdateCardPolicyFetchState = exports.getCardPolicyFormDraft = exports.getCardPolicyDetailView = exports.getCardPolicyDetailFetchState = exports.updateCardPolicyFormDraft = exports.updateCardPolicyFetchStatus = exports.updateCardPolicyDetailFetchStatus = exports.updateCardPolicy = exports.fetchCardPolicyDetail = exports.clearCardPolicyDetail = exports.getCardPolicyTemplateIds = exports.getCardPolicyListView = exports.getCardPolicyListFetchState = exports.getArchiveCardPolicyFetchState = exports.updateCardPolicyListFetchStatus = exports.updateArchiveCardPolicyFetchStatus = exports.prependCardPolicyTemplateIds = exports.fetchCardPolicyList = exports.clearCardPolicyList = exports.archiveCardPolicy = exports.toManualCardPolicyTemplateRequestFromDraft = exports.toBulkCardPolicyTemplateRequestsFromDraft = exports.toCardPolicyTemplateRequestFromDraft = void 0;
|
|
79
|
-
exports.toKycProvidedDocumentTypeFromAllowed = exports.toKycProvidedDocumentType = exports.DEFAULT_SESSION_CONFIG = exports.SessionManager = void 0;
|
|
79
|
+
exports.getCashManagementOverviewBanner = exports.getCashManagementOverview = exports.bufferAmountToRisk = exports.RISK_BUFFER_AMOUNT = exports.getAutoSweepFlow = exports.updateCashManagementSettingsFetchStatus = exports.updateCashManagementSettings = exports.updateAutoSweepSettingsFetchStatus = exports.updateAutoSweepRisk = exports.updateAutoSweepDraft = exports.saveAutoSweepSettings = exports.clearAutoSweepFlow = exports.fetchCashManagementOverviewPage = exports.fetchCashManagementBanner = exports.toKycProvidedDocumentTypeFromAllowed = exports.toKycProvidedDocumentType = exports.DEFAULT_SESSION_CONFIG = exports.SessionManager = void 0;
|
|
80
80
|
const allowedValue_1 = require("./commonStateTypes/allowedValue");
|
|
81
81
|
Object.defineProperty(exports, "isAllowedValueWithCode", { enumerable: true, get: function () { return allowedValue_1.isAllowedValueWithCode; } });
|
|
82
82
|
Object.defineProperty(exports, "isAllowedValueWithID", { enumerable: true, get: function () { return allowedValue_1.isAllowedValueWithID; } });
|
|
@@ -2595,3 +2595,22 @@ Object.defineProperty(exports, "DEFAULT_SESSION_CONFIG", { enumerable: true, get
|
|
|
2595
2595
|
var kycKybAutofill_1 = require("./view/spendManagement/commonSetup/types/kycKybAutofill");
|
|
2596
2596
|
Object.defineProperty(exports, "toKycProvidedDocumentType", { enumerable: true, get: function () { return kycKybAutofill_1.toKycProvidedDocumentType; } });
|
|
2597
2597
|
Object.defineProperty(exports, "toKycProvidedDocumentTypeFromAllowed", { enumerable: true, get: function () { return kycKybAutofill_1.toKycProvidedDocumentTypeFromAllowed; } });
|
|
2598
|
+
var cashManagementOverviewReducer_1 = require("./view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewReducer");
|
|
2599
|
+
Object.defineProperty(exports, "fetchCashManagementBanner", { enumerable: true, get: function () { return cashManagementOverviewReducer_1.fetchCashManagementBanner; } });
|
|
2600
|
+
Object.defineProperty(exports, "fetchCashManagementOverviewPage", { enumerable: true, get: function () { return cashManagementOverviewReducer_1.fetchCashManagementOverviewPage; } });
|
|
2601
|
+
var autoSweepFlowReducer_1 = require("./view/spendManagement/cashManagement/autoSweepFlow/autoSweepFlowReducer");
|
|
2602
|
+
Object.defineProperty(exports, "clearAutoSweepFlow", { enumerable: true, get: function () { return autoSweepFlowReducer_1.clearAutoSweepFlow; } });
|
|
2603
|
+
Object.defineProperty(exports, "saveAutoSweepSettings", { enumerable: true, get: function () { return autoSweepFlowReducer_1.saveAutoSweepSettings; } });
|
|
2604
|
+
Object.defineProperty(exports, "updateAutoSweepDraft", { enumerable: true, get: function () { return autoSweepFlowReducer_1.updateAutoSweepDraft; } });
|
|
2605
|
+
Object.defineProperty(exports, "updateAutoSweepRisk", { enumerable: true, get: function () { return autoSweepFlowReducer_1.updateAutoSweepRisk; } });
|
|
2606
|
+
Object.defineProperty(exports, "updateAutoSweepSettingsFetchStatus", { enumerable: true, get: function () { return autoSweepFlowReducer_1.updateAutoSweepSettingsFetchStatus; } });
|
|
2607
|
+
Object.defineProperty(exports, "updateCashManagementSettings", { enumerable: true, get: function () { return autoSweepFlowReducer_1.updateCashManagementSettings; } });
|
|
2608
|
+
Object.defineProperty(exports, "updateCashManagementSettingsFetchStatus", { enumerable: true, get: function () { return autoSweepFlowReducer_1.updateCashManagementSettingsFetchStatus; } });
|
|
2609
|
+
var autoSweepFlowSelector_1 = require("./view/spendManagement/cashManagement/autoSweepFlow/autoSweepFlowSelector");
|
|
2610
|
+
Object.defineProperty(exports, "getAutoSweepFlow", { enumerable: true, get: function () { return autoSweepFlowSelector_1.getAutoSweepFlow; } });
|
|
2611
|
+
var autoSweepFlowState_1 = require("./view/spendManagement/cashManagement/autoSweepFlow/autoSweepFlowState");
|
|
2612
|
+
Object.defineProperty(exports, "RISK_BUFFER_AMOUNT", { enumerable: true, get: function () { return autoSweepFlowState_1.RISK_BUFFER_AMOUNT; } });
|
|
2613
|
+
Object.defineProperty(exports, "bufferAmountToRisk", { enumerable: true, get: function () { return autoSweepFlowState_1.bufferAmountToRisk; } });
|
|
2614
|
+
var cashManagementOverviewSelector_1 = require("./view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewSelector");
|
|
2615
|
+
Object.defineProperty(exports, "getCashManagementOverview", { enumerable: true, get: function () { return cashManagementOverviewSelector_1.getCashManagementOverview; } });
|
|
2616
|
+
Object.defineProperty(exports, "getCashManagementOverviewBanner", { enumerable: true, get: function () { return cashManagementOverviewSelector_1.getCashManagementOverviewBanner; } });
|
package/lib/reducer.d.ts
CHANGED
|
@@ -157,6 +157,8 @@ import { InternationalWireVerificationState } from './view/spendManagement/billP
|
|
|
157
157
|
import { MagicLinkViewState } from './view/spendManagement/billPay/magicLinkView/magicLinkViewState';
|
|
158
158
|
import { PreviousBillsState } from './view/spendManagement/billPay/previousBills/previousBillsState';
|
|
159
159
|
import { WiseRedirectState } from './view/spendManagement/billPay/wiseRedirectView/wiseRedirectState';
|
|
160
|
+
import { AutoSweepFlowState } from './view/spendManagement/cashManagement/autoSweepFlow/autoSweepFlowState';
|
|
161
|
+
import { CashManagementOverviewState } from './view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewState';
|
|
160
162
|
import { CardPolicyDetailState } from './view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/cardPolicyDetailState';
|
|
161
163
|
import { CardPolicyListState } from './view/spendManagement/chargeCards/cardPolicy/cardPolicyList/cardPolicyListState';
|
|
162
164
|
import { CreateCardPolicyState } from './view/spendManagement/chargeCards/cardPolicy/createCardPolicy/createCardPolicyState';
|
|
@@ -310,6 +312,7 @@ type ViewsState = {
|
|
|
310
312
|
arAgingState: ArAgingState;
|
|
311
313
|
auditReportViewState: AuditReportViewState;
|
|
312
314
|
authenticationViewState: AuthenticationViewState;
|
|
315
|
+
autoSweepFlowState: AutoSweepFlowState;
|
|
313
316
|
autotransferRulesState: AutoTransferRulesState;
|
|
314
317
|
balanceSheetState: BalanceSheetState;
|
|
315
318
|
bankAccountViewState: BankAccountViewState;
|
|
@@ -331,6 +334,7 @@ type ViewsState = {
|
|
|
331
334
|
cashBalanceState: CashBalanceState;
|
|
332
335
|
cashFlowState: CashFlowState;
|
|
333
336
|
cashInCashOutState: CashInCashOutState;
|
|
337
|
+
cashManagementOverviewState: CashManagementOverviewState;
|
|
334
338
|
cashPositionState: CashPositionState;
|
|
335
339
|
chargeCardConfigState: ChargeCardConfigState;
|
|
336
340
|
chargeCardDetailState: ChargeCardDetailState;
|
|
@@ -476,6 +480,7 @@ declare const reducers: import("redux").Reducer<import("redux").CombinedState<{
|
|
|
476
480
|
arAgingState: ArAgingState;
|
|
477
481
|
auditReportViewState: AuditReportViewState;
|
|
478
482
|
authenticationViewState: AuthenticationViewState;
|
|
483
|
+
autoSweepFlowState: AutoSweepFlowState;
|
|
479
484
|
autotransferRulesState: AutoTransferRulesState;
|
|
480
485
|
balanceSheetState: BalanceSheetState;
|
|
481
486
|
bankAccountViewState: BankAccountViewState;
|
|
@@ -495,6 +500,7 @@ declare const reducers: import("redux").Reducer<import("redux").CombinedState<{
|
|
|
495
500
|
cashBalanceState: CashBalanceState;
|
|
496
501
|
cashFlowState: CashFlowState;
|
|
497
502
|
cashInCashOutState: CashInCashOutState;
|
|
503
|
+
cashManagementOverviewState: CashManagementOverviewState;
|
|
498
504
|
cashPositionState: CashPositionState;
|
|
499
505
|
chargeCardConfigState: ChargeCardConfigState;
|
|
500
506
|
chargeCardDetailState: ChargeCardDetailState;
|
package/lib/reducer.js
CHANGED
|
@@ -198,6 +198,8 @@ const internationalWireVerificationReducer_1 = __importStar(require("./view/spen
|
|
|
198
198
|
const magicLinkViewReducer_1 = __importStar(require("./view/spendManagement/billPay/magicLinkView/magicLinkViewReducer"));
|
|
199
199
|
const previousBillsReducer_1 = __importStar(require("./view/spendManagement/billPay/previousBills/previousBillsReducer"));
|
|
200
200
|
const wiseRedirectReducer_1 = __importStar(require("./view/spendManagement/billPay/wiseRedirectView/wiseRedirectReducer"));
|
|
201
|
+
const autoSweepFlowReducer_1 = __importStar(require("./view/spendManagement/cashManagement/autoSweepFlow/autoSweepFlowReducer"));
|
|
202
|
+
const cashManagementOverviewReducer_1 = __importStar(require("./view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewReducer"));
|
|
201
203
|
const cardPolicyDetailReducer_1 = __importStar(require("./view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/cardPolicyDetailReducer"));
|
|
202
204
|
const cardPolicyListReducer_1 = __importStar(require("./view/spendManagement/chargeCards/cardPolicy/cardPolicyList/cardPolicyListReducer"));
|
|
203
205
|
const createCardPolicyReducer_1 = __importStar(require("./view/spendManagement/chargeCards/cardPolicy/createCardPolicy/createCardPolicyReducer"));
|
|
@@ -353,6 +355,7 @@ const initialViewsState = {
|
|
|
353
355
|
arAgingState: arAgingReducer_1.initialState,
|
|
354
356
|
auditReportViewState: auditReportViewReducer_1.initialState,
|
|
355
357
|
authenticationViewState: authenticationViewReducer_1.initialState,
|
|
358
|
+
autoSweepFlowState: autoSweepFlowReducer_1.initialState,
|
|
356
359
|
autotransferRulesState: autoTransferRulesReducer_1.initialState,
|
|
357
360
|
balanceSheetState: balanceSheetReducer_1.initialState,
|
|
358
361
|
bankAccountViewState: bankAccountViewReducer_1.initialState,
|
|
@@ -373,6 +376,7 @@ const initialViewsState = {
|
|
|
373
376
|
cashBalanceState: cashBalanceReducer_1.initialState,
|
|
374
377
|
cashFlowState: cashFlowReducer_1.initialState,
|
|
375
378
|
cashInCashOutState: cashInCashOutReducer_1.initialState,
|
|
379
|
+
cashManagementOverviewState: cashManagementOverviewReducer_1.initialState,
|
|
376
380
|
cashPositionState: cashPositionReducer_1.initialState,
|
|
377
381
|
chargeCardConfigState: chargeCardConfigReducer_1.initialState,
|
|
378
382
|
chargeCardDetailState: chargeCardDetailReducer_1.initialState,
|
|
@@ -594,6 +598,7 @@ const viewReducers = {
|
|
|
594
598
|
arAgingState: arAgingReducer_1.default,
|
|
595
599
|
auditReportViewState: auditReportViewReducer_1.default,
|
|
596
600
|
authenticationViewState: authenticationViewReducer_1.default,
|
|
601
|
+
autoSweepFlowState: autoSweepFlowReducer_1.default,
|
|
597
602
|
autotransferRulesState: autoTransferRulesReducer_1.default,
|
|
598
603
|
balanceSheetState: balanceSheetReducer_1.default,
|
|
599
604
|
bankAccountViewState: bankAccountViewReducer_1.default,
|
|
@@ -613,6 +618,7 @@ const viewReducers = {
|
|
|
613
618
|
cashBalanceState: cashBalanceReducer_1.default,
|
|
614
619
|
cashFlowState: cashFlowReducer_1.default,
|
|
615
620
|
cashInCashOutState: cashInCashOutReducer_1.default,
|
|
621
|
+
cashManagementOverviewState: cashManagementOverviewReducer_1.default,
|
|
616
622
|
cashPositionState: cashPositionReducer_1.default,
|
|
617
623
|
chargeCardConfigState: chargeCardConfigReducer_1.default,
|
|
618
624
|
chargeCardDetailState: chargeCardDetailReducer_1.default,
|