@zeniai/client-epic-state 5.0.65 → 5.0.66-betaAK1
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 +3 -1
- package/lib/commonStateTypes/cacheOverrideFetchReducer.d.ts +17 -0
- package/lib/commonStateTypes/cacheOverrideFetchReducer.js +20 -0
- package/lib/commonStateTypes/pusherActions.d.ts +11 -0
- package/lib/commonStateTypes/pusherActions.js +6 -0
- package/lib/entity/chargeCard/chargeCardReducer.d.ts +19 -2
- package/lib/entity/chargeCard/chargeCardReducer.js +35 -2
- package/lib/entity/chargeCardTransaction/chargeCardTransactionReducer.d.ts +14 -1
- package/lib/entity/chargeCardTransaction/chargeCardTransactionReducer.js +36 -2
- package/lib/entity/upcomingPaymentEvent/upcomingPaymentEventPayload.d.ts +11 -0
- package/lib/entity/upcomingPaymentEvent/upcomingPaymentEventPayload.js +23 -0
- package/lib/entity/upcomingPaymentEvent/upcomingPaymentEventReducer.d.ts +6 -0
- package/lib/entity/upcomingPaymentEvent/upcomingPaymentEventReducer.js +31 -0
- package/lib/entity/upcomingPaymentEvent/upcomingPaymentEventSelector.d.ts +4 -0
- package/lib/entity/upcomingPaymentEvent/upcomingPaymentEventSelector.js +16 -0
- package/lib/entity/upcomingPaymentEvent/upcomingPaymentEventState.d.ts +13 -0
- package/lib/entity/upcomingPaymentEvent/upcomingPaymentEventState.js +2 -0
- package/lib/epic.d.ts +4 -1
- package/lib/epic.js +4 -1
- package/lib/esm/commonStateTypes/amount.js +1 -0
- package/lib/esm/commonStateTypes/cacheOverrideFetchReducer.js +16 -0
- package/lib/esm/commonStateTypes/pusherActions.js +3 -0
- package/lib/esm/entity/chargeCard/chargeCardReducer.js +34 -1
- package/lib/esm/entity/chargeCardTransaction/chargeCardTransactionReducer.js +35 -1
- package/lib/esm/entity/upcomingPaymentEvent/upcomingPaymentEventPayload.js +19 -0
- package/lib/esm/entity/upcomingPaymentEvent/upcomingPaymentEventReducer.js +27 -0
- package/lib/esm/entity/upcomingPaymentEvent/upcomingPaymentEventSelector.js +11 -0
- package/lib/esm/entity/upcomingPaymentEvent/upcomingPaymentEventState.js +1 -0
- package/lib/esm/epic.js +4 -1
- package/lib/esm/index.js +7 -2
- package/lib/esm/reducer.js +6 -0
- package/lib/esm/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewPayload.js +1 -0
- package/lib/esm/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewReducer.js +88 -0
- package/lib/esm/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewSelector.js +93 -0
- package/lib/esm/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewState.js +14 -0
- package/lib/esm/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchCashManagementBannerEpic.js +6 -0
- package/lib/esm/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchCashManagementOverviewPageEpic.js +35 -0
- package/lib/esm/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchUpcomingPaymentEventsEpic.js +22 -0
- package/lib/esm/view/spendManagement/chargeCards/cashbackDetail/cashbackDetailReducer.js +3 -2
- package/lib/esm/view/spendManagement/chargeCards/chargeCardConfig/chargeCardConfigReducer.js +3 -2
- package/lib/esm/view/spendManagement/chargeCards/chargeCardDetail/chargeCardDetailReducer.js +55 -18
- package/lib/esm/view/spendManagement/chargeCards/chargeCardDetail/fetchChargeCardDetailEpic.js +16 -2
- package/lib/esm/view/spendManagement/chargeCards/chargeCardDetail/fetchChargeCardDetailPageEpic.js +5 -4
- package/lib/esm/view/spendManagement/chargeCards/chargeCardList/chargeCardListReducer.js +28 -9
- package/lib/esm/view/spendManagement/chargeCards/chargeCardList/fetchChargeCardListPageEpic.js +9 -6
- package/lib/esm/view/spendManagement/chargeCards/chargeCardPaymentHistory/chargeCardPaymentHistoryReducer.js +3 -2
- package/lib/esm/view/spendManagement/chargeCards/chargeCardPaymentHistory/fetchChargeCardPaymentPageEpic.js +1 -1
- package/lib/esm/view/spendManagement/chargeCards/chargeCardRepaymentDetail/chargeCardRepaymentDetailReducer.js +7 -3
- package/lib/index.d.ts +9 -3
- package/lib/index.js +27 -11
- package/lib/reducer.d.ts +6 -0
- package/lib/reducer.js +6 -0
- package/lib/tsconfig.typecheck.tsbuildinfo +1 -1
- package/lib/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewPayload.d.ts +10 -0
- package/lib/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewPayload.js +2 -0
- package/lib/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewReducer.d.ts +20 -0
- package/lib/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewReducer.js +92 -0
- package/lib/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewSelector.d.ts +20 -0
- package/lib/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewSelector.js +98 -0
- package/lib/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewState.d.ts +21 -0
- package/lib/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewState.js +17 -0
- package/lib/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchCashManagementBannerEpic.d.ts +5 -0
- package/lib/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchCashManagementBannerEpic.js +10 -0
- package/lib/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchCashManagementOverviewPageEpic.d.ts +8 -0
- package/lib/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchCashManagementOverviewPageEpic.js +39 -0
- package/lib/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchUpcomingPaymentEventsEpic.d.ts +8 -0
- package/lib/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchUpcomingPaymentEventsEpic.js +26 -0
- package/lib/view/spendManagement/chargeCards/cashbackDetail/cashbackDetailReducer.d.ts +3 -1
- package/lib/view/spendManagement/chargeCards/cashbackDetail/cashbackDetailReducer.js +3 -2
- package/lib/view/spendManagement/chargeCards/chargeCardConfig/chargeCardConfigReducer.d.ts +3 -1
- package/lib/view/spendManagement/chargeCards/chargeCardConfig/chargeCardConfigReducer.js +3 -2
- package/lib/view/spendManagement/chargeCards/chargeCardDetail/chargeCardDetailReducer.js +55 -18
- package/lib/view/spendManagement/chargeCards/chargeCardDetail/fetchChargeCardDetailEpic.js +16 -2
- package/lib/view/spendManagement/chargeCards/chargeCardDetail/fetchChargeCardDetailPageEpic.js +5 -4
- package/lib/view/spendManagement/chargeCards/chargeCardList/chargeCardListReducer.d.ts +18 -3
- package/lib/view/spendManagement/chargeCards/chargeCardList/chargeCardListReducer.js +29 -10
- package/lib/view/spendManagement/chargeCards/chargeCardList/fetchChargeCardListPageEpic.js +9 -6
- package/lib/view/spendManagement/chargeCards/chargeCardPaymentHistory/chargeCardPaymentHistoryReducer.d.ts +3 -1
- package/lib/view/spendManagement/chargeCards/chargeCardPaymentHistory/chargeCardPaymentHistoryReducer.js +3 -2
- package/lib/view/spendManagement/chargeCards/chargeCardPaymentHistory/fetchChargeCardPaymentPageEpic.js +1 -1
- package/lib/view/spendManagement/chargeCards/chargeCardRepaymentDetail/chargeCardRepaymentDetailReducer.d.ts +3 -1
- package/lib/view/spendManagement/chargeCards/chargeCardRepaymentDetail/chargeCardRepaymentDetailReducer.js +7 -3
- package/package.json +1 -1
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { UpcomingPaymentEventPayload } from '../../../../entity/upcomingPaymentEvent/upcomingPaymentEventPayload';
|
|
2
|
+
import { ZeniAPIResponse } from '../../../../responsePayload';
|
|
3
|
+
export interface FetchUpcomingPaymentEventsPayload {
|
|
4
|
+
bill_stages: string[];
|
|
5
|
+
events: UpcomingPaymentEventPayload[];
|
|
6
|
+
horizon_days: number;
|
|
7
|
+
reimbursement_stages: string[];
|
|
8
|
+
tenant_namespace: string;
|
|
9
|
+
}
|
|
10
|
+
export type FetchUpcomingPaymentEventsResponse = ZeniAPIResponse<FetchUpcomingPaymentEventsPayload>;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { FetchState } from '../../../../commonStateTypes/common';
|
|
2
|
+
import { FetchUpcomingPaymentEventsPayload } from './cashManagementOverviewPayload';
|
|
3
|
+
import { ZeniAPIStatus } from '../../../../responsePayload';
|
|
4
|
+
import { CashManagementBannerData, CashManagementOverviewState } from './cashManagementOverviewState';
|
|
5
|
+
export declare const initialState: CashManagementOverviewState;
|
|
6
|
+
export declare const fetchCashManagementOverviewPage: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[cacheOverride: boolean], {
|
|
7
|
+
cacheOverride: boolean;
|
|
8
|
+
}, "cashManagementOverview/fetchCashManagementOverviewPage", never, never>, fetchUpcomingPaymentEvents: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<"cashManagementOverview/fetchUpcomingPaymentEvents">, updateUpcomingPaymentEventsList: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
9
|
+
data: FetchUpcomingPaymentEventsPayload;
|
|
10
|
+
}, "cashManagementOverview/updateUpcomingPaymentEventsList">, updateUpcomingPaymentEventsListFetchStatus: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
11
|
+
fetchState: FetchState;
|
|
12
|
+
error?: ZeniAPIStatus;
|
|
13
|
+
}, "cashManagementOverview/updateUpcomingPaymentEventsListFetchStatus">, fetchCashManagementBanner: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<"cashManagementOverview/fetchCashManagementBanner">, updateCashManagementBanner: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
14
|
+
data: CashManagementBannerData;
|
|
15
|
+
}, "cashManagementOverview/updateCashManagementBanner">, updateCashManagementBannerFetchStatus: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
16
|
+
fetchState: FetchState;
|
|
17
|
+
error?: ZeniAPIStatus;
|
|
18
|
+
}, "cashManagementOverview/updateCashManagementBannerFetchStatus">, clearCashManagementOverview: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<"cashManagementOverview/clearCashManagementOverview">;
|
|
19
|
+
declare const _default: import("redux").Reducer<CashManagementOverviewState>;
|
|
20
|
+
export default _default;
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.clearCashManagementOverview = exports.updateCashManagementBannerFetchStatus = exports.updateCashManagementBanner = exports.fetchCashManagementBanner = exports.updateUpcomingPaymentEventsListFetchStatus = exports.updateUpcomingPaymentEventsList = exports.fetchUpcomingPaymentEvents = exports.fetchCashManagementOverviewPage = exports.initialState = void 0;
|
|
5
|
+
const toolkit_1 = require("@reduxjs/toolkit");
|
|
6
|
+
const cashManagementOverviewState_1 = require("./cashManagementOverviewState");
|
|
7
|
+
exports.initialState = {
|
|
8
|
+
banner: cashManagementOverviewState_1.initialCashManagementBannerState,
|
|
9
|
+
upcomingPaymentEvents: cashManagementOverviewState_1.initialUpcomingPaymentEventsListState,
|
|
10
|
+
fetchState: 'Not-Started',
|
|
11
|
+
error: undefined,
|
|
12
|
+
hasValidState() {
|
|
13
|
+
return this.fetchState == 'Completed';
|
|
14
|
+
},
|
|
15
|
+
};
|
|
16
|
+
const cashManagementOverview = (0, toolkit_1.createSlice)({
|
|
17
|
+
name: 'cashManagementOverview',
|
|
18
|
+
initialState: exports.initialState,
|
|
19
|
+
reducers: {
|
|
20
|
+
fetchCashManagementOverviewPage: {
|
|
21
|
+
reducer(
|
|
22
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
23
|
+
_draft,
|
|
24
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
25
|
+
_action) {
|
|
26
|
+
// do nothing - the corresponding epic listens to this action and fans out
|
|
27
|
+
},
|
|
28
|
+
prepare(cacheOverride) {
|
|
29
|
+
return { payload: { cacheOverride } };
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
fetchUpcomingPaymentEvents(draft) {
|
|
33
|
+
draft.upcomingPaymentEvents = {
|
|
34
|
+
...draft.upcomingPaymentEvents,
|
|
35
|
+
fetchState: 'In-Progress',
|
|
36
|
+
error: undefined,
|
|
37
|
+
};
|
|
38
|
+
},
|
|
39
|
+
updateUpcomingPaymentEventsList(draft, action) {
|
|
40
|
+
const { data } = action.payload;
|
|
41
|
+
const eventIds = [];
|
|
42
|
+
data.events.forEach((payload) => {
|
|
43
|
+
if (payload.id != null) {
|
|
44
|
+
eventIds.push(payload.id);
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
draft.upcomingPaymentEvents = {
|
|
48
|
+
fetchState: 'Completed',
|
|
49
|
+
error: undefined,
|
|
50
|
+
billStages: (data.bill_stages ?? []),
|
|
51
|
+
eventIds,
|
|
52
|
+
horizonDays: data.horizon_days,
|
|
53
|
+
reimbursementStages: (data.reimbursement_stages ??
|
|
54
|
+
[]),
|
|
55
|
+
tenantNamespace: data.tenant_namespace,
|
|
56
|
+
};
|
|
57
|
+
},
|
|
58
|
+
updateUpcomingPaymentEventsListFetchStatus(draft, action) {
|
|
59
|
+
draft.upcomingPaymentEvents = {
|
|
60
|
+
...draft.upcomingPaymentEvents,
|
|
61
|
+
fetchState: action.payload.fetchState,
|
|
62
|
+
error: action.payload.error,
|
|
63
|
+
};
|
|
64
|
+
},
|
|
65
|
+
fetchCashManagementBanner(draft) {
|
|
66
|
+
draft.banner = {
|
|
67
|
+
...cashManagementOverviewState_1.initialCashManagementBannerState,
|
|
68
|
+
fetchState: 'In-Progress',
|
|
69
|
+
error: undefined,
|
|
70
|
+
};
|
|
71
|
+
},
|
|
72
|
+
updateCashManagementBanner(draft, action) {
|
|
73
|
+
draft.banner = {
|
|
74
|
+
fetchState: 'Completed',
|
|
75
|
+
error: undefined,
|
|
76
|
+
data: action.payload.data,
|
|
77
|
+
};
|
|
78
|
+
},
|
|
79
|
+
updateCashManagementBannerFetchStatus(draft, action) {
|
|
80
|
+
draft.banner = {
|
|
81
|
+
...draft.banner,
|
|
82
|
+
fetchState: action.payload.fetchState,
|
|
83
|
+
error: action.payload.error,
|
|
84
|
+
};
|
|
85
|
+
},
|
|
86
|
+
clearCashManagementOverview(draft) {
|
|
87
|
+
Object.assign(draft, exports.initialState);
|
|
88
|
+
},
|
|
89
|
+
},
|
|
90
|
+
});
|
|
91
|
+
_a = cashManagementOverview.actions, exports.fetchCashManagementOverviewPage = _a.fetchCashManagementOverviewPage, exports.fetchUpcomingPaymentEvents = _a.fetchUpcomingPaymentEvents, exports.updateUpcomingPaymentEventsList = _a.updateUpcomingPaymentEventsList, exports.updateUpcomingPaymentEventsListFetchStatus = _a.updateUpcomingPaymentEventsListFetchStatus, exports.fetchCashManagementBanner = _a.fetchCashManagementBanner, exports.updateCashManagementBanner = _a.updateCashManagementBanner, exports.updateCashManagementBannerFetchStatus = _a.updateCashManagementBannerFetchStatus, exports.clearCashManagementOverview = _a.clearCashManagementOverview;
|
|
92
|
+
exports.default = cashManagementOverview.reducer;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Amount } from '../../../../commonStateTypes/amount';
|
|
2
|
+
import { FetchStateAndError } from '../../../../commonStateTypes/common';
|
|
3
|
+
import { SelectorView } from '../../../../commonStateTypes/viewAndReport/viewAndReport';
|
|
4
|
+
import { UpcomingPaymentEvent } from '../../../../entity/upcomingPaymentEvent/upcomingPaymentEventState';
|
|
5
|
+
import { RootState } from '../../../../reducer';
|
|
6
|
+
import { CashManagementBannerData } from './cashManagementOverviewState';
|
|
7
|
+
export interface CashManagementOverviewBannerSelectorView extends SelectorView {
|
|
8
|
+
data?: CashManagementBannerData;
|
|
9
|
+
}
|
|
10
|
+
export interface CashManagementOverviewSelectorView extends SelectorView {
|
|
11
|
+
bannerFetchState: FetchStateAndError;
|
|
12
|
+
cashBalance: Amount;
|
|
13
|
+
horizonDays: number;
|
|
14
|
+
outflowEvents: UpcomingPaymentEvent[];
|
|
15
|
+
outflowEventsFetchState: FetchStateAndError;
|
|
16
|
+
totalCash: Amount;
|
|
17
|
+
treasuryBalance: Amount;
|
|
18
|
+
}
|
|
19
|
+
export declare const getCashManagementOverviewBanner: (state: RootState) => CashManagementOverviewBannerSelectorView;
|
|
20
|
+
export declare const getCashManagementOverview: (state: RootState) => CashManagementOverviewSelectorView;
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getCashManagementOverview = exports.getCashManagementOverviewBanner = void 0;
|
|
4
|
+
const amount_1 = require("../../../../commonStateTypes/amount");
|
|
5
|
+
const reduceFetchState_1 = require("../../../../commonStateTypes/reduceFetchState");
|
|
6
|
+
const upcomingPaymentEventSelector_1 = require("../../../../entity/upcomingPaymentEvent/upcomingPaymentEventSelector");
|
|
7
|
+
const getCashManagementOverviewBanner = (state) => {
|
|
8
|
+
const { banner } = state.cashManagementOverviewState;
|
|
9
|
+
return {
|
|
10
|
+
fetchState: banner.fetchState,
|
|
11
|
+
error: banner.error,
|
|
12
|
+
data: banner.data,
|
|
13
|
+
version: 0,
|
|
14
|
+
};
|
|
15
|
+
};
|
|
16
|
+
exports.getCashManagementOverviewBanner = getCashManagementOverviewBanner;
|
|
17
|
+
const getCashManagementOverview = (state) => {
|
|
18
|
+
const { cashManagementOverviewState, depositAccountListState, depositAccountState, paymentAccountListState, paymentAccountState, treasuryDetailState, } = state;
|
|
19
|
+
const outflowEventsFetchState = {
|
|
20
|
+
fetchState: cashManagementOverviewState.upcomingPaymentEvents.fetchState,
|
|
21
|
+
error: cashManagementOverviewState.upcomingPaymentEvents.error,
|
|
22
|
+
};
|
|
23
|
+
const bannerFetchState = {
|
|
24
|
+
fetchState: cashManagementOverviewState.banner.fetchState,
|
|
25
|
+
error: cashManagementOverviewState.banner.error,
|
|
26
|
+
};
|
|
27
|
+
const aggregate = (0, reduceFetchState_1.reduceAllFetchState)([
|
|
28
|
+
{
|
|
29
|
+
fetchState: paymentAccountListState.fetchState,
|
|
30
|
+
error: paymentAccountListState.error,
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
fetchState: depositAccountListState.fetchState,
|
|
34
|
+
error: depositAccountListState.error,
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
fetchState: treasuryDetailState.fetchState,
|
|
38
|
+
error: treasuryDetailState.error,
|
|
39
|
+
},
|
|
40
|
+
outflowEventsFetchState,
|
|
41
|
+
bannerFetchState,
|
|
42
|
+
]);
|
|
43
|
+
const treasuryBalance = treasuryDetailState.accountSummary?.totalBalance ?? (0, amount_1.zeroAmount)();
|
|
44
|
+
const cashBalance = sumCashBalances(paymentAccountListState.paymentAccountIds, paymentAccountState, depositAccountListState.accountIds, depositAccountState);
|
|
45
|
+
const totalCash = addAmounts(treasuryBalance, cashBalance);
|
|
46
|
+
return {
|
|
47
|
+
bannerFetchState,
|
|
48
|
+
cashBalance,
|
|
49
|
+
horizonDays: cashManagementOverviewState.upcomingPaymentEvents.horizonDays,
|
|
50
|
+
outflowEvents: (0, upcomingPaymentEventSelector_1.getUpcomingPaymentEventsByIds)(state.upcomingPaymentEventState, cashManagementOverviewState.upcomingPaymentEvents.eventIds),
|
|
51
|
+
outflowEventsFetchState,
|
|
52
|
+
totalCash,
|
|
53
|
+
treasuryBalance,
|
|
54
|
+
fetchState: aggregate.fetchState,
|
|
55
|
+
error: aggregate.error,
|
|
56
|
+
version: 0,
|
|
57
|
+
};
|
|
58
|
+
};
|
|
59
|
+
exports.getCashManagementOverview = getCashManagementOverview;
|
|
60
|
+
const isZeroAmount = (a) => a.amount === 0 && a.currencyCode === 'USD' && a.currencySymbol === '$';
|
|
61
|
+
/**
|
|
62
|
+
* Adds two Amounts. Currencies must match (the seeded zeroAmount() counts as
|
|
63
|
+
* "no currency yet" and adopts `b`'s currency). Mismatches return `a`
|
|
64
|
+
* unchanged and warn — mixing currencies in a total is a bug, not silent
|
|
65
|
+
* conversion.
|
|
66
|
+
*/
|
|
67
|
+
const addAmounts = (a, b) => {
|
|
68
|
+
if (isZeroAmount(a)) {
|
|
69
|
+
return { ...b };
|
|
70
|
+
}
|
|
71
|
+
if (a.currencyCode !== b.currencyCode ||
|
|
72
|
+
a.currencySymbol !== b.currencySymbol) {
|
|
73
|
+
console.warn(`cashManagementOverview: skipping balance with mismatched currency. Expected ${a.currencyCode} (${a.currencySymbol}), got ${b.currencyCode} (${b.currencySymbol}).`);
|
|
74
|
+
return a;
|
|
75
|
+
}
|
|
76
|
+
return {
|
|
77
|
+
amount: a.amount + b.amount,
|
|
78
|
+
currencyCode: a.currencyCode,
|
|
79
|
+
currencySymbol: a.currencySymbol,
|
|
80
|
+
};
|
|
81
|
+
};
|
|
82
|
+
const sumCashBalances = (paymentAccountIds, paymentAccountState, depositAccountIds, depositAccountState) => {
|
|
83
|
+
let total = (0, amount_1.zeroAmount)();
|
|
84
|
+
paymentAccountIds.forEach((id) => {
|
|
85
|
+
const balance = paymentAccountState.paymentAccountByID[id]?.balances
|
|
86
|
+
?.available;
|
|
87
|
+
if (balance != null) {
|
|
88
|
+
total = addAmounts(total, balance);
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
depositAccountIds.forEach((id) => {
|
|
92
|
+
const balance = depositAccountState.depositAccountByID[id]?.accountBalance?.available;
|
|
93
|
+
if (balance != null) {
|
|
94
|
+
total = addAmounts(total, balance);
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
return total;
|
|
98
|
+
};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { FetchStateAndError, FetchedState, ID } from '../../../../commonStateTypes/common';
|
|
2
|
+
import { BillStageCodeType } from '../../../../entity/billPay/billTransaction/billTransactionState';
|
|
3
|
+
export interface CashManagementBannerData {
|
|
4
|
+
placeholder?: never;
|
|
5
|
+
}
|
|
6
|
+
export interface CashManagementBannerState extends FetchStateAndError {
|
|
7
|
+
data?: CashManagementBannerData;
|
|
8
|
+
}
|
|
9
|
+
export interface UpcomingPaymentEventsListState extends FetchStateAndError {
|
|
10
|
+
billStages: BillStageCodeType[];
|
|
11
|
+
eventIds: ID[];
|
|
12
|
+
horizonDays: number;
|
|
13
|
+
reimbursementStages: BillStageCodeType[];
|
|
14
|
+
tenantNamespace?: string;
|
|
15
|
+
}
|
|
16
|
+
export interface CashManagementOverviewState extends FetchedState {
|
|
17
|
+
banner: CashManagementBannerState;
|
|
18
|
+
upcomingPaymentEvents: UpcomingPaymentEventsListState;
|
|
19
|
+
}
|
|
20
|
+
export declare const initialCashManagementBannerState: CashManagementBannerState;
|
|
21
|
+
export declare const initialUpcomingPaymentEventsListState: UpcomingPaymentEventsListState;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.initialUpcomingPaymentEventsListState = exports.initialCashManagementBannerState = void 0;
|
|
4
|
+
exports.initialCashManagementBannerState = {
|
|
5
|
+
fetchState: 'Not-Started',
|
|
6
|
+
error: undefined,
|
|
7
|
+
data: undefined,
|
|
8
|
+
};
|
|
9
|
+
exports.initialUpcomingPaymentEventsListState = {
|
|
10
|
+
fetchState: 'Not-Started',
|
|
11
|
+
error: undefined,
|
|
12
|
+
billStages: [],
|
|
13
|
+
eventIds: [],
|
|
14
|
+
horizonDays: 0,
|
|
15
|
+
reimbursementStages: [],
|
|
16
|
+
tenantNamespace: undefined,
|
|
17
|
+
};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { ActionsObservable } from 'redux-observable';
|
|
2
|
+
import { Observable } from 'rxjs';
|
|
3
|
+
import { fetchCashManagementBanner, updateCashManagementBanner, updateCashManagementBannerFetchStatus } from '../cashManagementOverviewReducer';
|
|
4
|
+
export type ActionType = ReturnType<typeof fetchCashManagementBanner> | ReturnType<typeof updateCashManagementBanner> | ReturnType<typeof updateCashManagementBannerFetchStatus>;
|
|
5
|
+
export declare const fetchCashManagementBannerEpic: (actions$: ActionsObservable<ActionType>) => Observable<ActionType>;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.fetchCashManagementBannerEpic = void 0;
|
|
4
|
+
const rxjs_1 = require("rxjs");
|
|
5
|
+
const operators_1 = require("rxjs/operators");
|
|
6
|
+
const cashManagementOverviewReducer_1 = require("../cashManagementOverviewReducer");
|
|
7
|
+
// TODO: replace EMPTY with an actual API call once the banner endpoint is finalized.
|
|
8
|
+
// Figma: https://www.figma.com/design/FUg2pv7edRAidx9X56VnZT/Cash-Management?node-id=2265-63443
|
|
9
|
+
const fetchCashManagementBannerEpic = (actions$) => actions$.pipe((0, operators_1.filter)(cashManagementOverviewReducer_1.fetchCashManagementBanner.match), (0, operators_1.mergeMap)(() => rxjs_1.EMPTY));
|
|
10
|
+
exports.fetchCashManagementBannerEpic = fetchCashManagementBannerEpic;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ActionsObservable, StateObservable } from 'redux-observable';
|
|
2
|
+
import { Observable } from 'rxjs';
|
|
3
|
+
import { RootState } from '../../../../../reducer';
|
|
4
|
+
import { fetchTreasuryOverviewDetail } from '../../../treasury/treasuryList/treasuryDetailReducer';
|
|
5
|
+
import { fetchZeniAccountList } from '../../../zeniAccounts/zeniAccountList/zeniAccountListReducer';
|
|
6
|
+
import { fetchCashManagementBanner, fetchCashManagementOverviewPage, fetchUpcomingPaymentEvents } from '../cashManagementOverviewReducer';
|
|
7
|
+
export type ActionType = ReturnType<typeof fetchCashManagementOverviewPage> | ReturnType<typeof fetchTreasuryOverviewDetail> | ReturnType<typeof fetchZeniAccountList> | ReturnType<typeof fetchUpcomingPaymentEvents> | ReturnType<typeof fetchCashManagementBanner>;
|
|
8
|
+
export declare const fetchCashManagementOverviewPageEpic: (actions$: ActionsObservable<ActionType>, state$: StateObservable<RootState>) => Observable<ActionType>;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.fetchCashManagementOverviewPageEpic = void 0;
|
|
4
|
+
const rxjs_1 = require("rxjs");
|
|
5
|
+
const operators_1 = require("rxjs/operators");
|
|
6
|
+
const treasuryDetailReducer_1 = require("../../../treasury/treasuryList/treasuryDetailReducer");
|
|
7
|
+
const zeniAccountListReducer_1 = require("../../../zeniAccounts/zeniAccountList/zeniAccountListReducer");
|
|
8
|
+
const cashManagementOverviewReducer_1 = require("../cashManagementOverviewReducer");
|
|
9
|
+
const fetchCashManagementOverviewPageEpic = (actions$, state$) => actions$.pipe((0, operators_1.filter)(cashManagementOverviewReducer_1.fetchCashManagementOverviewPage.match), (0, operators_1.mergeMap)((action) => {
|
|
10
|
+
const { cacheOverride } = action.payload;
|
|
11
|
+
const state = state$.value;
|
|
12
|
+
const pageActions = [];
|
|
13
|
+
if (cacheOverride === true) {
|
|
14
|
+
pageActions.push((0, treasuryDetailReducer_1.fetchTreasuryOverviewDetail)(true));
|
|
15
|
+
pageActions.push((0, zeniAccountListReducer_1.fetchZeniAccountList)(true));
|
|
16
|
+
pageActions.push((0, cashManagementOverviewReducer_1.fetchUpcomingPaymentEvents)());
|
|
17
|
+
pageActions.push((0, cashManagementOverviewReducer_1.fetchCashManagementBanner)());
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
const treasuryDetailState = state.treasuryDetailState;
|
|
21
|
+
if (treasuryDetailState.hasValidState() === false &&
|
|
22
|
+
treasuryDetailState.fetchState !== 'In-Progress') {
|
|
23
|
+
pageActions.push((0, treasuryDetailReducer_1.fetchTreasuryOverviewDetail)(false));
|
|
24
|
+
}
|
|
25
|
+
pageActions.push((0, zeniAccountListReducer_1.fetchZeniAccountList)(false));
|
|
26
|
+
const upcomingEvents = state.cashManagementOverviewState.upcomingPaymentEvents;
|
|
27
|
+
if (upcomingEvents.fetchState !== 'Completed' &&
|
|
28
|
+
upcomingEvents.fetchState !== 'In-Progress') {
|
|
29
|
+
pageActions.push((0, cashManagementOverviewReducer_1.fetchUpcomingPaymentEvents)());
|
|
30
|
+
}
|
|
31
|
+
const banner = state.cashManagementOverviewState.banner;
|
|
32
|
+
if (banner.fetchState !== 'Completed' &&
|
|
33
|
+
banner.fetchState !== 'In-Progress') {
|
|
34
|
+
pageActions.push((0, cashManagementOverviewReducer_1.fetchCashManagementBanner)());
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return (0, rxjs_1.concat)((0, rxjs_1.from)(pageActions));
|
|
38
|
+
}));
|
|
39
|
+
exports.fetchCashManagementOverviewPageEpic = fetchCashManagementOverviewPageEpic;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ActionsObservable, StateObservable } from 'redux-observable';
|
|
2
|
+
import { Observable } from 'rxjs';
|
|
3
|
+
import { RootState } from '../../../../../reducer';
|
|
4
|
+
import { ZeniAPI } from '../../../../../zeniAPI';
|
|
5
|
+
import { updateUpcomingPaymentEvents } from '../../../../../entity/upcomingPaymentEvent/upcomingPaymentEventReducer';
|
|
6
|
+
import { fetchUpcomingPaymentEvents, updateUpcomingPaymentEventsList, updateUpcomingPaymentEventsListFetchStatus } from '../cashManagementOverviewReducer';
|
|
7
|
+
export type ActionType = ReturnType<typeof fetchUpcomingPaymentEvents> | ReturnType<typeof updateUpcomingPaymentEvents> | ReturnType<typeof updateUpcomingPaymentEventsList> | ReturnType<typeof updateUpcomingPaymentEventsListFetchStatus>;
|
|
8
|
+
export declare const fetchUpcomingPaymentEventsEpic: (actions$: ActionsObservable<ActionType>, _state$: StateObservable<RootState>, zeniAPI: ZeniAPI) => Observable<ActionType>;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.fetchUpcomingPaymentEventsEpic = void 0;
|
|
4
|
+
const rxjs_1 = require("rxjs");
|
|
5
|
+
const operators_1 = require("rxjs/operators");
|
|
6
|
+
const responsePayload_1 = require("../../../../../responsePayload");
|
|
7
|
+
const upcomingPaymentEventReducer_1 = require("../../../../../entity/upcomingPaymentEvent/upcomingPaymentEventReducer");
|
|
8
|
+
const cashManagementOverviewReducer_1 = require("../cashManagementOverviewReducer");
|
|
9
|
+
const fetchUpcomingPaymentEventsEpic = (actions$, _state$, zeniAPI) => actions$.pipe((0, operators_1.filter)(cashManagementOverviewReducer_1.fetchUpcomingPaymentEvents.match), (0, operators_1.switchMap)(() => zeniAPI
|
|
10
|
+
.getJSON(
|
|
11
|
+
// TODO: drop /rajat/ once the prod endpoint lands.
|
|
12
|
+
`${zeniAPI.apiEndPoints.spendManagementMicroServiceBaseUrl}/rajat/1.0/upcoming-payment-events`)
|
|
13
|
+
.pipe((0, operators_1.mergeMap)((response) => {
|
|
14
|
+
if ((0, responsePayload_1.isSuccessResponse)(response) && response.data != null) {
|
|
15
|
+
return (0, rxjs_1.of)((0, upcomingPaymentEventReducer_1.updateUpcomingPaymentEvents)(response.data.events), (0, cashManagementOverviewReducer_1.updateUpcomingPaymentEventsList)({ data: response.data }));
|
|
16
|
+
}
|
|
17
|
+
return (0, rxjs_1.of)((0, cashManagementOverviewReducer_1.updateUpcomingPaymentEventsListFetchStatus)({
|
|
18
|
+
fetchState: 'Error',
|
|
19
|
+
error: response.status,
|
|
20
|
+
}));
|
|
21
|
+
}), (0, operators_1.catchError)((error) => (0, rxjs_1.of)((0, cashManagementOverviewReducer_1.updateUpcomingPaymentEventsListFetchStatus)({
|
|
22
|
+
fetchState: 'Error',
|
|
23
|
+
error: (0, responsePayload_1.createZeniAPIStatus)('Unexpected Error', 'Fetch upcoming payment events REST API call errored out' +
|
|
24
|
+
JSON.stringify(error)),
|
|
25
|
+
}))))));
|
|
26
|
+
exports.fetchUpcomingPaymentEventsEpic = fetchUpcomingPaymentEventsEpic;
|
|
@@ -2,7 +2,9 @@ import { ZeniAPIStatus } from '../../../../responsePayload';
|
|
|
2
2
|
import { ChargeCardCashbackPayload } from './cashbackDetailPayload';
|
|
3
3
|
import { CashbackDetailState, CashbackDetailUIState } from './cashbackDetailState';
|
|
4
4
|
export declare const initialState: CashbackDetailState;
|
|
5
|
-
export declare const fetchCashbackDetail: import("@reduxjs/toolkit").
|
|
5
|
+
export declare const fetchCashbackDetail: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[cacheOverride?: boolean | undefined], {
|
|
6
|
+
cacheOverride: boolean;
|
|
7
|
+
}, "cashbackDetail/fetchCashbackDetail", never, never>, updateCashbackDetail: import("@reduxjs/toolkit").ActionCreatorWithPayload<ChargeCardCashbackPayload, "cashbackDetail/updateCashbackDetail">, updateCashbackDetailFailure: import("@reduxjs/toolkit").ActionCreatorWithPayload<ZeniAPIStatus<Record<string, unknown>>, "cashbackDetail/updateCashbackDetailFailure">, updateCashbackDetailUIState: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
6
8
|
uiState: Partial<CashbackDetailUIState>;
|
|
7
9
|
}, "cashbackDetail/updateCashbackDetailUIState">, clearCashbackDetail: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<"cashbackDetail/clearCashbackDetail">;
|
|
8
10
|
declare const _default: import("redux").Reducer<CashbackDetailState>;
|
|
@@ -5,6 +5,7 @@ exports.clearCashbackDetail = exports.updateCashbackDetailUIState = exports.upda
|
|
|
5
5
|
const toolkit_1 = require("@reduxjs/toolkit");
|
|
6
6
|
const viewAndReportPayloadv2_1 = require("../../../../commonPayloadTypes/v2/viewAndReportPayloadv2");
|
|
7
7
|
const amount_1 = require("../../../../commonStateTypes/amount");
|
|
8
|
+
const cacheOverrideFetchReducer_1 = require("../../../../commonStateTypes/cacheOverrideFetchReducer");
|
|
8
9
|
const cashbackDetailState_1 = require("./cashbackDetailState");
|
|
9
10
|
exports.initialState = {
|
|
10
11
|
fetchState: 'Not-Started',
|
|
@@ -31,10 +32,10 @@ const cashbackDetail = (0, toolkit_1.createSlice)({
|
|
|
31
32
|
name: 'cashbackDetail',
|
|
32
33
|
initialState: exports.initialState,
|
|
33
34
|
reducers: {
|
|
34
|
-
fetchCashbackDetail(draft) {
|
|
35
|
+
fetchCashbackDetail: (0, cacheOverrideFetchReducer_1.createCacheOverrideFetchReducer)((draft) => {
|
|
35
36
|
draft.fetchState = 'In-Progress';
|
|
36
37
|
draft.error = undefined;
|
|
37
|
-
},
|
|
38
|
+
}),
|
|
38
39
|
updateCashbackDetail(draft, action) {
|
|
39
40
|
draft.cashbackByPeriod = toCashbackByPeriod(action.payload);
|
|
40
41
|
draft.cashbackSummary = toCashbackSummary(action.payload);
|
|
@@ -2,6 +2,8 @@ import { ZeniAPIStatus } from '../../../../responsePayload';
|
|
|
2
2
|
import { ChargeCardConfigPayload } from './chargeCardConfigPayload';
|
|
3
3
|
import { ChargeCardConfigState } from './chargeCardConfigState';
|
|
4
4
|
export declare const initialState: ChargeCardConfigState;
|
|
5
|
-
export declare const fetchChargeCardConfig: import("@reduxjs/toolkit").
|
|
5
|
+
export declare const fetchChargeCardConfig: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[cacheOverride?: boolean | undefined], {
|
|
6
|
+
cacheOverride: boolean;
|
|
7
|
+
}, "chargeCardConfig/fetchChargeCardConfig", never, never>, updateChargeCardConfig: import("@reduxjs/toolkit").ActionCreatorWithPayload<ChargeCardConfigPayload, "chargeCardConfig/updateChargeCardConfig">, updateChargeCardConfigFailure: import("@reduxjs/toolkit").ActionCreatorWithPayload<ZeniAPIStatus<Record<string, unknown>>, "chargeCardConfig/updateChargeCardConfigFailure">, clearChargeCardConfig: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<"chargeCardConfig/clearChargeCardConfig">;
|
|
6
8
|
declare const _default: import("redux").Reducer<ChargeCardConfigState>;
|
|
7
9
|
export default _default;
|
|
@@ -4,6 +4,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
4
4
|
exports.clearChargeCardConfig = exports.updateChargeCardConfigFailure = exports.updateChargeCardConfig = exports.fetchChargeCardConfig = exports.initialState = void 0;
|
|
5
5
|
const toolkit_1 = require("@reduxjs/toolkit");
|
|
6
6
|
const amount_1 = require("../../../../commonStateTypes/amount");
|
|
7
|
+
const cacheOverrideFetchReducer_1 = require("../../../../commonStateTypes/cacheOverrideFetchReducer");
|
|
7
8
|
const chargeCard_1 = require("../../../../entity/chargeCard/chargeCard");
|
|
8
9
|
const chargeCardConfigPayload_1 = require("./chargeCardConfigPayload");
|
|
9
10
|
exports.initialState = {
|
|
@@ -34,10 +35,10 @@ const chargeCardConfig = (0, toolkit_1.createSlice)({
|
|
|
34
35
|
name: 'chargeCardConfig',
|
|
35
36
|
initialState: exports.initialState,
|
|
36
37
|
reducers: {
|
|
37
|
-
fetchChargeCardConfig(draft) {
|
|
38
|
+
fetchChargeCardConfig: (0, cacheOverrideFetchReducer_1.createCacheOverrideFetchReducer)((draft) => {
|
|
38
39
|
draft.fetchState = 'In-Progress';
|
|
39
40
|
draft.error = undefined;
|
|
40
|
-
},
|
|
41
|
+
}),
|
|
41
42
|
updateChargeCardConfig(draft, action) {
|
|
42
43
|
const { payload } = action;
|
|
43
44
|
draft.creditLimitFrequency =
|
|
@@ -6,6 +6,7 @@ const toolkit_1 = require("@reduxjs/toolkit");
|
|
|
6
6
|
const sortOrderPayload_1 = require("../../../../commonPayloadTypes/sortOrderPayload");
|
|
7
7
|
const attachmentPayload_1 = require("../../../../entity/transaction/payloadTypes/attachmentPayload");
|
|
8
8
|
const chargeCardDetail_1 = require("./chargeCardDetail");
|
|
9
|
+
const pusherActions_1 = require("../../../../commonStateTypes/pusherActions");
|
|
9
10
|
exports.initialState = {
|
|
10
11
|
detailById: {},
|
|
11
12
|
recurringExpensesByChargeCardId: {},
|
|
@@ -68,19 +69,30 @@ const chargeCardDetail = (0, toolkit_1.createSlice)({
|
|
|
68
69
|
},
|
|
69
70
|
fetchChargeCardTransactionList: {
|
|
70
71
|
reducer(draft, action) {
|
|
71
|
-
const { chargeCardId, pageToken, pageTokenType } = action.payload;
|
|
72
|
+
const { chargeCardId, pageToken, pageTokenType, cacheOverride } = action.payload;
|
|
72
73
|
const existingCardDetail = draft.detailById[chargeCardId] ?? chargeCardDetail_1.emptyChargeCardDetail;
|
|
74
|
+
const existingUi = existingCardDetail.transactionList.uiState;
|
|
75
|
+
// cacheOverride=true (Pusher): preserve fetchState, error, and scroll
|
|
76
|
+
// to avoid skeleton flash. Normal fetches reset as before.
|
|
73
77
|
draft.detailById[chargeCardId] = {
|
|
74
78
|
...existingCardDetail,
|
|
75
79
|
transactionList: {
|
|
76
80
|
...existingCardDetail.transactionList,
|
|
77
|
-
fetchState:
|
|
78
|
-
|
|
81
|
+
fetchState: cacheOverride
|
|
82
|
+
? existingCardDetail.transactionList.fetchState
|
|
83
|
+
: 'In-Progress',
|
|
84
|
+
error: cacheOverride
|
|
85
|
+
? existingCardDetail.transactionList.error
|
|
86
|
+
: undefined,
|
|
79
87
|
uiState: {
|
|
80
|
-
...
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
88
|
+
...existingUi,
|
|
89
|
+
// Preserve scroll on silent refresh so users aren't snapped
|
|
90
|
+
// away from their reading position.
|
|
91
|
+
scrollYOffset: cacheOverride
|
|
92
|
+
? existingUi.scrollYOffset
|
|
93
|
+
: existingUi.pageToken === null
|
|
94
|
+
? 0
|
|
95
|
+
: existingUi.scrollYOffset,
|
|
84
96
|
pageToken: pageToken,
|
|
85
97
|
pageTokenType: pageTokenType,
|
|
86
98
|
},
|
|
@@ -97,18 +109,24 @@ const chargeCardDetail = (0, toolkit_1.createSlice)({
|
|
|
97
109
|
const { chargeCardId, data, cacheOverride } = action.payload;
|
|
98
110
|
const existingCardDetail = draft.detailById[chargeCardId] ?? chargeCardDetail_1.emptyChargeCardDetail;
|
|
99
111
|
const newTransactionIds = data.transactions.map((tran) => tran.transaction_id);
|
|
112
|
+
const existingIds = existingCardDetail.transactionList.transactionIds;
|
|
113
|
+
// cacheOverride (Pusher): refresh page 1 but keep page 2+ IDs.
|
|
114
|
+
// Normal pagination: append new page, deduped.
|
|
115
|
+
const newIdSet = new Set(newTransactionIds);
|
|
116
|
+
const mergedTransactionIds = cacheOverride
|
|
117
|
+
? [
|
|
118
|
+
...newTransactionIds,
|
|
119
|
+
...existingIds.filter((id) => !newIdSet.has(id)),
|
|
120
|
+
]
|
|
121
|
+
: [
|
|
122
|
+
...existingIds,
|
|
123
|
+
...newTransactionIds.filter((id) => !existingIds.includes(id)),
|
|
124
|
+
];
|
|
100
125
|
draft.detailById[chargeCardId] = {
|
|
101
126
|
...existingCardDetail,
|
|
102
127
|
transactionList: {
|
|
103
128
|
...existingCardDetail.transactionList,
|
|
104
|
-
transactionIds:
|
|
105
|
-
...new Set([
|
|
106
|
-
...(cacheOverride
|
|
107
|
-
? []
|
|
108
|
-
: existingCardDetail.transactionList.transactionIds),
|
|
109
|
-
...newTransactionIds,
|
|
110
|
-
]),
|
|
111
|
-
],
|
|
129
|
+
transactionIds: mergedTransactionIds,
|
|
112
130
|
fetchState: 'Completed',
|
|
113
131
|
error: undefined,
|
|
114
132
|
uiState: {
|
|
@@ -120,9 +138,12 @@ const chargeCardDetail = (0, toolkit_1.createSlice)({
|
|
|
120
138
|
limit: data.query.limit,
|
|
121
139
|
pageToken: data.query.page_token,
|
|
122
140
|
pageTokenType: data.query.page_token_type,
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
141
|
+
// Preserve scroll on silent refresh; reset on user-triggered first page.
|
|
142
|
+
scrollYOffset: cacheOverride
|
|
143
|
+
? existingCardDetail.transactionList.uiState.scrollYOffset
|
|
144
|
+
: existingCardDetail.transactionList.uiState.pageToken === null
|
|
145
|
+
? 0
|
|
146
|
+
: existingCardDetail.transactionList.uiState.scrollYOffset,
|
|
126
147
|
},
|
|
127
148
|
},
|
|
128
149
|
};
|
|
@@ -636,6 +657,22 @@ const chargeCardDetail = (0, toolkit_1.createSlice)({
|
|
|
636
657
|
Object.assign(draft, exports.initialState);
|
|
637
658
|
},
|
|
638
659
|
},
|
|
660
|
+
extraReducers: (builder) => {
|
|
661
|
+
const prependTransaction = (draft, cardId, txId) => {
|
|
662
|
+
const detail = draft.detailById[cardId];
|
|
663
|
+
if (detail != null &&
|
|
664
|
+
!detail.transactionList.transactionIds.includes(txId)) {
|
|
665
|
+
detail.transactionList.transactionIds.unshift(txId);
|
|
666
|
+
}
|
|
667
|
+
};
|
|
668
|
+
builder
|
|
669
|
+
.addCase(pusherActions_1.addChargeCardTransactionFromPusher, (draft, action) => {
|
|
670
|
+
prependTransaction(draft, action.payload.cardId, action.payload.transaction.transaction_id);
|
|
671
|
+
})
|
|
672
|
+
.addCase(pusherActions_1.addDeclinedChargeCardTransactionFromPusher, (draft, action) => {
|
|
673
|
+
prependTransaction(draft, action.payload.cardId, action.payload.transaction.transaction_id);
|
|
674
|
+
});
|
|
675
|
+
},
|
|
639
676
|
});
|
|
640
677
|
_a = chargeCardDetail.actions, exports.fetchChargeCardDetailPage = _a.fetchChargeCardDetailPage, exports.fetchChargeCardDetail = _a.fetchChargeCardDetail, exports.updateChargeCardDetailFetchState = _a.updateChargeCardDetailFetchState, exports.fetchChargeCardTransactionList = _a.fetchChargeCardTransactionList, exports.updateChargeCardDetailUIState = _a.updateChargeCardDetailUIState, exports.updateChargeCardTransactionList = _a.updateChargeCardTransactionList, exports.updateChargeCardTransactionUploadReceiptsFetchStatus = _a.updateChargeCardTransactionUploadReceiptsFetchStatus, exports.fetchChargeCardTransactionAttachments = _a.fetchChargeCardTransactionAttachments, exports.updateChargeCardTransactionIsViewReceiptClicked = _a.updateChargeCardTransactionIsViewReceiptClicked, exports.updateChargeCardTransactionAttachmentsFailure = _a.updateChargeCardTransactionAttachmentsFailure, exports.updatePhysicalChargeCardAttemptSuccessOrFailure = _a.updatePhysicalChargeCardAttemptSuccessOrFailure, exports.updatePhysicalChargeCardAttempt = _a.updatePhysicalChargeCardAttempt, exports.updateDebitCardPinAttempt = _a.updateDebitCardPinAttempt, exports.updateDebitCardPinAttemptSuccessOrFailure = _a.updateDebitCardPinAttemptSuccessOrFailure, exports.updateChargeCardTransactionReceiptsShowTickFetchStatus = _a.updateChargeCardTransactionReceiptsShowTickFetchStatus, exports.updateChargeCardTransactionAttachmentsInCardDetail = _a.updateChargeCardTransactionAttachmentsInCardDetail, exports.updateChargeCardTransactionListFailure = _a.updateChargeCardTransactionListFailure, exports.updateChargeCardDetail = _a.updateChargeCardDetail, exports.startCVVActivationWait = _a.startCVVActivationWait, exports.completeCVVActivationWait = _a.completeCVVActivationWait, exports.startDebitCardSetPinWait = _a.startDebitCardSetPinWait, exports.completeDebitCardSetPinWait = _a.completeDebitCardSetPinWait, exports.updateChargeCardDetailUpdateStatus = _a.updateChargeCardDetailUpdateStatus, exports.updateChargeCardSpendLimit = _a.updateChargeCardSpendLimit, exports.updateChargeCardSpendLimitSuccessOrFailure = _a.updateChargeCardSpendLimitSuccessOrFailure, exports.updateChargeCardName = _a.updateChargeCardName, exports.updateChargeCardNameSuccessOrFailure = _a.updateChargeCardNameSuccessOrFailure, exports.lockChargeCard = _a.lockChargeCard, exports.lockChargeCardSuccessOrFailure = _a.lockChargeCardSuccessOrFailure, exports.unlockChargeCard = _a.unlockChargeCard, exports.unlockChargeCardSuccessOrFailure = _a.unlockChargeCardSuccessOrFailure, exports.closeChargeCard = _a.closeChargeCard, exports.closeChargeCardSuccessOrFailure = _a.closeChargeCardSuccessOrFailure, exports.fetchDepositAccountLimit = _a.fetchDepositAccountLimit, exports.updateDepositAccountLimitFetchStatus = _a.updateDepositAccountLimitFetchStatus, exports.fetchChargeCardTransactionStatistics = _a.fetchChargeCardTransactionStatistics, exports.updateChargeCardTransactionStatistics = _a.updateChargeCardTransactionStatistics, exports.updateChargeCardTransactionStatisticsFetchState = _a.updateChargeCardTransactionStatisticsFetchState, exports.fetchChargeCardsRecurringExpenses = _a.fetchChargeCardsRecurringExpenses, exports.updateChargeCardsRecurringExpenses = _a.updateChargeCardsRecurringExpenses, exports.updateChargeCardsRecurringExpensesFetchState = _a.updateChargeCardsRecurringExpensesFetchState, exports.sendOtpCardHolder = _a.sendOtpCardHolder, exports.resendOtpCardHolder = _a.resendOtpCardHolder, exports.sendOtpCardHolderSuccess = _a.sendOtpCardHolderSuccess, exports.sendOtpCardHolderFailure = _a.sendOtpCardHolderFailure, exports.verifyOtpCardHolder = _a.verifyOtpCardHolder, exports.verifyOtpCardHolderSuccess = _a.verifyOtpCardHolderSuccess, exports.verifyOtpCardHolderFailure = _a.verifyOtpCardHolderFailure, exports.clearChargeCardDetail = _a.clearChargeCardDetail;
|
|
641
678
|
exports.default = chargeCardDetail.reducer;
|