@zeniai/client-epic-state 4.18.80 → 4.18.81

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.
Files changed (60) hide show
  1. package/lib/entity/chargeCard/chargeCard.d.ts +2 -1
  2. package/lib/entity/chargeCard/chargeCard.js +2 -0
  3. package/lib/entity/chargeCard/chargeCardPayload.d.ts +2 -1
  4. package/lib/entity/chargeCard/chargeCardPayload.js +10 -9
  5. package/lib/entity/chargeCardTransaction/chargeCardTransaction.d.ts +1 -1
  6. package/lib/entity/chargeCardTransaction/chargeCardTransactionPayload.d.ts +1 -2
  7. package/lib/entity/snackbar/snackbarTypes.d.ts +1 -1
  8. package/lib/entity/snackbar/snackbarTypes.js +12 -0
  9. package/lib/epic.d.ts +11 -1
  10. package/lib/epic.js +11 -1
  11. package/lib/index.d.ts +7 -6
  12. package/lib/index.js +28 -8
  13. package/lib/responsePayload.d.ts +3 -0
  14. package/lib/view/companyMonthEndReportView/companyMonthEndReportViewReducer.d.ts +2 -1
  15. package/lib/view/companyMonthEndReportView/companyMonthEndReportViewReducer.js +10 -2
  16. package/lib/view/companyMonthEndReportView/epics/fetchCompanyMonthEndReportViewEpic.js +2 -4
  17. package/lib/view/expenseAutomationView/epics/common/refreshExpenseAutomationCurrentTabEpic.js +1 -1
  18. package/lib/view/expenseAutomationView/epics/transactionCategorization/markTransactionAsNotMiscategorizedEpic.d.ts +2 -2
  19. package/lib/view/expenseAutomationView/epics/transactionCategorization/markTransactionAsNotMiscategorizedEpic.js +13 -2
  20. package/lib/view/expenseAutomationView/epics/transactionCategorization/saveTransactionCategorizationEpic.js +2 -2
  21. package/lib/view/expenseAutomationView/epics/transactionCategorization/updateTransactionCategorizationEpic.js +2 -2
  22. package/lib/view/expenseAutomationView/reducers/transactionsViewReducer.d.ts +6 -3
  23. package/lib/view/expenseAutomationView/reducers/transactionsViewReducer.js +6 -3
  24. package/lib/view/spendManagement/chargeCards/chargeCardDetail/chargeCardDetail.d.ts +17 -2
  25. package/lib/view/spendManagement/chargeCards/chargeCardDetail/chargeCardDetail.js +38 -3
  26. package/lib/view/spendManagement/chargeCards/chargeCardDetail/chargeCardDetailPayload.d.ts +11 -1
  27. package/lib/view/spendManagement/chargeCards/chargeCardDetail/chargeCardDetailReducer.d.ts +40 -4
  28. package/lib/view/spendManagement/chargeCards/chargeCardDetail/chargeCardDetailReducer.js +189 -26
  29. package/lib/view/spendManagement/chargeCards/chargeCardDetail/chargeCardDetailSelector.d.ts +19 -1
  30. package/lib/view/spendManagement/chargeCards/chargeCardDetail/chargeCardDetailSelector.js +87 -12
  31. package/lib/view/spendManagement/chargeCards/chargeCardDetail/closeChargeCardEpic.d.ts +9 -0
  32. package/lib/view/spendManagement/chargeCards/chargeCardDetail/closeChargeCardEpic.js +71 -0
  33. package/lib/view/spendManagement/chargeCards/chargeCardDetail/fetchChargeCardsRecurringExpensesEpic.d.ts +7 -0
  34. package/lib/view/spendManagement/chargeCards/chargeCardDetail/fetchChargeCardsRecurringExpensesEpic.js +44 -0
  35. package/lib/view/spendManagement/chargeCards/chargeCardDetail/fetchDepositAccountLimitEpic.js +4 -4
  36. package/lib/view/spendManagement/chargeCards/chargeCardDetail/lockChargeCardEpic.d.ts +9 -0
  37. package/lib/view/spendManagement/chargeCards/chargeCardDetail/lockChargeCardEpic.js +78 -0
  38. package/lib/view/spendManagement/chargeCards/chargeCardDetail/unlockChargeCardEpic.d.ts +9 -0
  39. package/lib/view/spendManagement/chargeCards/chargeCardDetail/unlockChargeCardEpic.js +75 -0
  40. package/lib/view/spendManagement/chargeCards/chargeCardDetail/updateChargeCardNameEpic.d.ts +9 -0
  41. package/lib/view/spendManagement/chargeCards/chargeCardDetail/updateChargeCardNameEpic.js +83 -0
  42. package/lib/view/spendManagement/chargeCards/chargeCardList/chargeCardList.d.ts +7 -0
  43. package/lib/view/spendManagement/chargeCards/chargeCardList/chargeCardListPayload.d.ts +1 -0
  44. package/lib/view/spendManagement/chargeCards/chargeCardList/chargeCardListReducer.d.ts +34 -4
  45. package/lib/view/spendManagement/chargeCards/chargeCardList/chargeCardListReducer.js +142 -3
  46. package/lib/view/spendManagement/chargeCards/chargeCardList/chargeCardListSelector.d.ts +46 -0
  47. package/lib/view/spendManagement/chargeCards/chargeCardList/chargeCardListSelector.js +198 -4
  48. package/lib/view/spendManagement/chargeCards/chargeCardList/closeChargeCardsEpic.d.ts +9 -0
  49. package/lib/view/spendManagement/chargeCards/chargeCardList/closeChargeCardsEpic.js +69 -0
  50. package/lib/view/spendManagement/chargeCards/chargeCardList/fetchChargeCardListPageEpic.d.ts +3 -1
  51. package/lib/view/spendManagement/chargeCards/chargeCardList/fetchChargeCardListPageEpic.js +18 -0
  52. package/lib/view/spendManagement/chargeCards/chargeCardList/lockChargeCardsEpic.d.ts +9 -0
  53. package/lib/view/spendManagement/chargeCards/chargeCardList/lockChargeCardsEpic.js +69 -0
  54. package/lib/view/spendManagement/chargeCards/chargeCardList/revokeChargeCardsInviteEpic.d.ts +8 -0
  55. package/lib/view/spendManagement/chargeCards/chargeCardList/revokeChargeCardsInviteEpic.js +71 -0
  56. package/lib/view/spendManagement/chargeCards/chargeCardList/unlockChargeCardsEpic.d.ts +9 -0
  57. package/lib/view/spendManagement/chargeCards/chargeCardList/unlockChargeCardsEpic.js +68 -0
  58. package/lib/view/spendManagement/chargeCards/chargeCardList/updateChargeCardsLimitEpic.d.ts +9 -0
  59. package/lib/view/spendManagement/chargeCards/chargeCardList/updateChargeCardsLimitEpic.js +76 -0
  60. package/package.json +1 -1
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  var _a;
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.revokeCardInviteFailure = exports.revokeCardInviteSuccess = exports.revokeCardInvite = exports.resendCardInviteFailure = exports.resendCardInviteSuccess = exports.resendCardInvite = exports.clearChargeCardList = exports.updateChargeCardListUIState = exports.updateSearchText = exports.updateChargeCardListFailure = exports.updateChargeCardList = exports.fetchChargeCardList = exports.updateDebitCardSummaryFailure = exports.updateDebitCardSummary = exports.fetchDebitCardSummary = exports.updateCreditAccountFailure = exports.updateCreditAccount = exports.fetchCreditAccount = exports.updateCreditAccountRepaymentAmountAndDate = exports.updateCreditAccountRepaymentFailure = exports.updateCreditAccountRepayment = exports.fetchCreditAccountRepayment = exports.fetchChargeCardListPage = exports.initialState = void 0;
4
+ exports.revokeChargeCardsInviteSuccessOrFailure = exports.revokeChargeCardsInvite = exports.closeChargeCardsSuccessOrFailure = exports.closeChargeCards = exports.unlockChargeCardsSuccessOrFailure = exports.unlockChargeCards = exports.lockChargeCardsSuccessOrFailure = exports.lockChargeCards = exports.updateChargeCardsSpendLimitSuccessOrFailure = exports.updateChargeCardsSpendLimit = exports.revokeCardInviteFailure = exports.revokeCardInviteSuccess = exports.revokeCardInvite = exports.resendCardInviteFailure = exports.resendCardInviteSuccess = exports.resendCardInvite = exports.clearChargeCardList = exports.updateChargeCardListUIState = exports.updateBulkActionCardIds = exports.updateSearchText = exports.updateChargeCardListFailure = exports.updateChargeCardList = exports.fetchChargeCardList = exports.updateDebitCardSummaryFailure = exports.updateDebitCardSummary = exports.fetchDebitCardSummary = exports.updateCreditAccountFailure = exports.updateCreditAccount = exports.fetchCreditAccount = exports.updateRowActionCardId = exports.updateCreditAccountRepaymentAmountAndDate = exports.updateCreditAccountRepaymentFailure = exports.updateCreditAccountRepayment = exports.fetchCreditAccountRepayment = exports.fetchChargeCardListPage = exports.initialState = void 0;
5
5
  const toolkit_1 = require("@reduxjs/toolkit");
6
6
  const amount_1 = require("../../../../commonStateTypes/amount");
7
7
  const zeniDayJS_1 = require("../../../../zeniDayJS");
@@ -9,11 +9,33 @@ const chargeCardList_1 = require("./chargeCardList");
9
9
  exports.initialState = {
10
10
  fetchState: 'Not-Started',
11
11
  error: undefined,
12
+ bulkActionCardIds: [],
12
13
  cardIds: [],
13
14
  searchText: '',
14
15
  unAssignedCredits: undefined,
16
+ rowActionCardId: undefined,
15
17
  creditAccount: chargeCardList_1.initialCreditAcc,
16
18
  debitCardSummaries: chargeCardList_1.initialDebitCardSummaries,
19
+ updateChargeCardsSpendLimitFetchState: {
20
+ fetchState: 'Not-Started',
21
+ error: undefined,
22
+ },
23
+ lockChargeCardsFetchState: {
24
+ fetchState: 'Not-Started',
25
+ error: undefined,
26
+ },
27
+ unlockChargeCardsFetchState: {
28
+ fetchState: 'Not-Started',
29
+ error: undefined,
30
+ },
31
+ closeChargeCardsFetchState: {
32
+ fetchState: 'Not-Started',
33
+ error: undefined,
34
+ },
35
+ revokeChargeCardsInviteFetchState: {
36
+ fetchState: 'Not-Started',
37
+ error: undefined,
38
+ },
17
39
  hasValidState() {
18
40
  return this.fetchState == 'Completed';
19
41
  },
@@ -58,6 +80,9 @@ const chargeCardList = (0, toolkit_1.createSlice)({
58
80
  updateCreditAccountRepaymentFailure(draft, action) {
59
81
  draft.creditAccountRepayment = Object.assign(Object.assign({}, chargeCardList_1.initialCreditAccountRepayment), { fetchState: 'Error', error: action.payload });
60
82
  },
83
+ updateRowActionCardId(draft, action) {
84
+ draft.rowActionCardId = action.payload;
85
+ },
61
86
  fetchCreditAccount(draft) {
62
87
  draft.creditAccount.fetchState = 'In-Progress';
63
88
  draft.creditAccount.error = undefined;
@@ -105,6 +130,9 @@ const chargeCardList = (0, toolkit_1.createSlice)({
105
130
  updateSearchText(draft, action) {
106
131
  draft.searchText = action.payload;
107
132
  },
133
+ updateBulkActionCardIds(draft, action) {
134
+ draft.bulkActionCardIds = action.payload;
135
+ },
108
136
  updateChargeCardListUIState(draft, action) {
109
137
  if (action.payload.uiState.sortKey != null) {
110
138
  draft.uiState.sortKey = action.payload.uiState.sortKey;
@@ -125,7 +153,7 @@ const chargeCardList = (0, toolkit_1.createSlice)({
125
153
  },
126
154
  reducer(draft, action) {
127
155
  draft.resendCardInvite.cardId = action.payload.cardId;
128
- draft.revokeCardInvite.saveStatus.fetchState = 'In-Progress';
156
+ draft.resendCardInvite.saveStatus.fetchState = 'In-Progress';
129
157
  },
130
158
  },
131
159
  resendCardInviteSuccess(draft, action) {
@@ -158,9 +186,120 @@ const chargeCardList = (0, toolkit_1.createSlice)({
158
186
  draft.revokeCardInvite.saveStatus.fetchState = 'Error';
159
187
  draft.revokeCardInvite.saveStatus.error = action.payload;
160
188
  },
189
+ updateChargeCardsSpendLimit: {
190
+ reducer(draft) {
191
+ draft.updateChargeCardsSpendLimitFetchState = {
192
+ fetchState: 'In-Progress',
193
+ error: undefined,
194
+ };
195
+ },
196
+ prepare(chargeCardIds, updatedSpendLimit, frequency) {
197
+ return {
198
+ payload: {
199
+ chargeCardIds,
200
+ updatedSpendLimit,
201
+ frequency,
202
+ },
203
+ };
204
+ },
205
+ },
206
+ updateChargeCardsSpendLimitSuccessOrFailure(draft, action) {
207
+ draft.updateChargeCardsSpendLimitFetchState = {
208
+ fetchState: action.payload.fetchState,
209
+ error: action.payload.error,
210
+ };
211
+ },
212
+ lockChargeCards: {
213
+ reducer(draft) {
214
+ draft.lockChargeCardsFetchState = {
215
+ fetchState: 'In-Progress',
216
+ error: undefined,
217
+ };
218
+ },
219
+ prepare(cardIds, reason) {
220
+ return {
221
+ payload: {
222
+ cardIds,
223
+ reason,
224
+ },
225
+ };
226
+ },
227
+ },
228
+ lockChargeCardsSuccessOrFailure(draft, action) {
229
+ draft.lockChargeCardsFetchState = {
230
+ fetchState: action.payload.fetchState,
231
+ error: action.payload.error,
232
+ };
233
+ },
234
+ closeChargeCards: {
235
+ reducer(draft) {
236
+ draft.closeChargeCardsFetchState = {
237
+ fetchState: 'In-Progress',
238
+ error: undefined,
239
+ };
240
+ },
241
+ prepare(cardIds, reason) {
242
+ return {
243
+ payload: {
244
+ cardIds,
245
+ reason,
246
+ },
247
+ };
248
+ },
249
+ },
250
+ closeChargeCardsSuccessOrFailure(draft, action) {
251
+ draft.closeChargeCardsFetchState = {
252
+ fetchState: action.payload.fetchState,
253
+ error: action.payload.error,
254
+ };
255
+ },
256
+ unlockChargeCards: {
257
+ reducer(draft) {
258
+ draft.unlockChargeCardsFetchState = {
259
+ fetchState: 'In-Progress',
260
+ error: undefined,
261
+ };
262
+ },
263
+ prepare(cardIds) {
264
+ return {
265
+ payload: {
266
+ cardIds,
267
+ },
268
+ };
269
+ },
270
+ },
271
+ unlockChargeCardsSuccessOrFailure(draft, action) {
272
+ draft.unlockChargeCardsFetchState = {
273
+ fetchState: action.payload.fetchState,
274
+ error: action.payload.error,
275
+ };
276
+ },
277
+ revokeChargeCardsInvite: {
278
+ reducer(draft) {
279
+ draft.revokeChargeCardsInviteFetchState = {
280
+ fetchState: 'In-Progress',
281
+ error: undefined,
282
+ };
283
+ },
284
+ prepare(cardIds) {
285
+ return {
286
+ payload: {
287
+ cardIds,
288
+ },
289
+ };
290
+ },
291
+ },
292
+ revokeChargeCardsInviteSuccessOrFailure(draft, action) {
293
+ draft.revokeChargeCardsInviteFetchState = {
294
+ fetchState: action.payload.fetchState,
295
+ error: action.payload.error,
296
+ };
297
+ // Remove successfully revoked cards from the list
298
+ draft.cardIds = draft.cardIds.filter((cardId) => !action.payload.revokedCardIds.includes(cardId));
299
+ },
161
300
  },
162
301
  });
163
- _a = chargeCardList.actions, exports.fetchChargeCardListPage = _a.fetchChargeCardListPage, exports.fetchCreditAccountRepayment = _a.fetchCreditAccountRepayment, exports.updateCreditAccountRepayment = _a.updateCreditAccountRepayment, exports.updateCreditAccountRepaymentFailure = _a.updateCreditAccountRepaymentFailure, exports.updateCreditAccountRepaymentAmountAndDate = _a.updateCreditAccountRepaymentAmountAndDate, exports.fetchCreditAccount = _a.fetchCreditAccount, exports.updateCreditAccount = _a.updateCreditAccount, exports.updateCreditAccountFailure = _a.updateCreditAccountFailure, exports.fetchDebitCardSummary = _a.fetchDebitCardSummary, exports.updateDebitCardSummary = _a.updateDebitCardSummary, exports.updateDebitCardSummaryFailure = _a.updateDebitCardSummaryFailure, exports.fetchChargeCardList = _a.fetchChargeCardList, exports.updateChargeCardList = _a.updateChargeCardList, exports.updateChargeCardListFailure = _a.updateChargeCardListFailure, exports.updateSearchText = _a.updateSearchText, exports.updateChargeCardListUIState = _a.updateChargeCardListUIState, exports.clearChargeCardList = _a.clearChargeCardList, exports.resendCardInvite = _a.resendCardInvite, exports.resendCardInviteSuccess = _a.resendCardInviteSuccess, exports.resendCardInviteFailure = _a.resendCardInviteFailure, exports.revokeCardInvite = _a.revokeCardInvite, exports.revokeCardInviteSuccess = _a.revokeCardInviteSuccess, exports.revokeCardInviteFailure = _a.revokeCardInviteFailure;
302
+ _a = chargeCardList.actions, exports.fetchChargeCardListPage = _a.fetchChargeCardListPage, exports.fetchCreditAccountRepayment = _a.fetchCreditAccountRepayment, exports.updateCreditAccountRepayment = _a.updateCreditAccountRepayment, exports.updateCreditAccountRepaymentFailure = _a.updateCreditAccountRepaymentFailure, exports.updateCreditAccountRepaymentAmountAndDate = _a.updateCreditAccountRepaymentAmountAndDate, exports.updateRowActionCardId = _a.updateRowActionCardId, exports.fetchCreditAccount = _a.fetchCreditAccount, exports.updateCreditAccount = _a.updateCreditAccount, exports.updateCreditAccountFailure = _a.updateCreditAccountFailure, exports.fetchDebitCardSummary = _a.fetchDebitCardSummary, exports.updateDebitCardSummary = _a.updateDebitCardSummary, exports.updateDebitCardSummaryFailure = _a.updateDebitCardSummaryFailure, exports.fetchChargeCardList = _a.fetchChargeCardList, exports.updateChargeCardList = _a.updateChargeCardList, exports.updateChargeCardListFailure = _a.updateChargeCardListFailure, exports.updateSearchText = _a.updateSearchText, exports.updateBulkActionCardIds = _a.updateBulkActionCardIds, exports.updateChargeCardListUIState = _a.updateChargeCardListUIState, exports.clearChargeCardList = _a.clearChargeCardList, exports.resendCardInvite = _a.resendCardInvite, exports.resendCardInviteSuccess = _a.resendCardInviteSuccess, exports.resendCardInviteFailure = _a.resendCardInviteFailure, exports.revokeCardInvite = _a.revokeCardInvite, exports.revokeCardInviteSuccess = _a.revokeCardInviteSuccess, exports.revokeCardInviteFailure = _a.revokeCardInviteFailure, exports.updateChargeCardsSpendLimit = _a.updateChargeCardsSpendLimit, exports.updateChargeCardsSpendLimitSuccessOrFailure = _a.updateChargeCardsSpendLimitSuccessOrFailure, exports.lockChargeCards = _a.lockChargeCards, exports.lockChargeCardsSuccessOrFailure = _a.lockChargeCardsSuccessOrFailure, exports.unlockChargeCards = _a.unlockChargeCards, exports.unlockChargeCardsSuccessOrFailure = _a.unlockChargeCardsSuccessOrFailure, exports.closeChargeCards = _a.closeChargeCards, exports.closeChargeCardsSuccessOrFailure = _a.closeChargeCardsSuccessOrFailure, exports.revokeChargeCardsInvite = _a.revokeChargeCardsInvite, exports.revokeChargeCardsInviteSuccessOrFailure = _a.revokeChargeCardsInviteSuccessOrFailure;
164
303
  exports.default = chargeCardList.reducer;
165
304
  // helper
166
305
  const toCreditAccount = (payload) => ({
@@ -10,6 +10,8 @@ import { UserRole } from '../../../../entity/userRole/userRoleState';
10
10
  import { RootState } from '../../../../reducer';
11
11
  import { Person } from '../../../people/peopleSelectorTypes';
12
12
  import { ChargeCardConfigState } from '../chargeCardConfig/chargeCardConfigState';
13
+ import { RecurringExpense } from '../chargeCardDetail/chargeCardDetail';
14
+ import { ChargeCardControlDetailView } from '../chargeCardDetail/chargeCardDetailSelector';
13
15
  import { ChargeCardListUIState, CreditAccount, CreditAccountRepayment, DebitCardSummaries, ResendRevokeCardInvite } from './chargeCardList';
14
16
  export interface ChargeCardWithUser extends ChargeCard {
15
17
  billingAddress: Address;
@@ -26,16 +28,21 @@ export interface ChargeCardListSelectorView extends SelectorView {
26
28
  allAccountingClasses: Class[];
27
29
  cards: ChargeCardWithUser[];
28
30
  chargeCardConfig: ChargeCardConfigState;
31
+ closeChargeCardsFetchState: FetchStateAndError;
29
32
  creditAccount: CreditAccount;
30
33
  creditAccountRepayment: CreditAccountRepayment;
31
34
  hasCreditCard: boolean;
32
35
  hasDebitCard: boolean;
33
36
  issueCardPageFetchState: FetchStateAndError;
37
+ lockChargeCardsFetchState: FetchStateAndError;
34
38
  resendCardInvite: ResendRevokeCardInvite;
35
39
  revokeCardInvite: ResendRevokeCardInvite;
40
+ revokeChargeCardsInviteFetchState: FetchStateAndError;
36
41
  searchText: string;
37
42
  totalCashback: Amount;
38
43
  uiState: ChargeCardListUIState;
44
+ unlockChargeCardsFetchState: FetchStateAndError;
45
+ updateChargeCardsSpendLimitFetchState: FetchStateAndError;
39
46
  userList: Person[];
40
47
  debitCardSummary?: DebitCardSummaries;
41
48
  unAssignedCredits?: Amount;
@@ -67,3 +74,42 @@ export interface DebitCardListSelectorView extends FetchStateAndError {
67
74
  }
68
75
  export declare const getDebitCardList: (state: RootState) => DebitCardListSelectorView;
69
76
  export declare const getDebitCardSummary: (state: RootState) => DebitCardSummaries;
77
+ export interface ChargeCardRecurringExpensesByCardIds extends FetchStateAndError {
78
+ recurringExpensesByChargeCardId: Record<ID, RecurringExpense[]>;
79
+ }
80
+ export declare const getChargeCardRecurringExpensesByCardIds: (state: RootState, chargeCardIds: ID[]) => ChargeCardRecurringExpensesByCardIds;
81
+ /**
82
+ * Memoized selector for row action card data
83
+ * Combines ChargeCardControlDetailView, depositAccountLimit, and recurringExpenses
84
+ * based on the rowActionCardId from chargeCardListState
85
+ */
86
+ export interface ChargeCardRowActionView extends ChargeCardControlDetailView {
87
+ depositAccountLimitFetchState: FetchStateAndError;
88
+ recurringExpenses: RecurringExpense[];
89
+ recurringExpensesFetchState: FetchStateAndError;
90
+ cardId?: ID;
91
+ chargeCard?: ChargeCardWithUser;
92
+ depositAccountLimit?: DepositAccountWithLimit;
93
+ }
94
+ /**
95
+ * Memoized selector that returns row action card data
96
+ * Only recomputes when relevant parts of state change
97
+ */
98
+ export declare const getChargeCardRowActionView: (state: RootState) => ChargeCardRowActionView;
99
+ /**
100
+ * Memoized selector for bulk action cards data
101
+ * Returns data for all cards selected in bulkActionCardIds
102
+ */
103
+ export interface ChargeCardBulkActionView {
104
+ bulkActionCardIds: ID[];
105
+ chargeCards: ChargeCardWithUser[];
106
+ hasCreditCards: boolean;
107
+ hasDebitCards: boolean;
108
+ recurringExpensesByCardId: Record<ID, RecurringExpense[]>;
109
+ recurringExpensesFetchState: FetchStateAndError;
110
+ }
111
+ /**
112
+ * Memoized selector that returns bulk action cards data
113
+ * Only recomputes when relevant parts of state change
114
+ */
115
+ export declare const getChargeCardBulkActionView: (state: RootState) => ChargeCardBulkActionView;
@@ -3,7 +3,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.getDebitCardSummary = exports.getDebitCardList = exports.getDepositAccountListWithDebitCardIssued = exports.getCreditAccountDetails = exports.anyCardOnHold = exports.getMyRequestOnHoldChargeCardListWithShippingAddress = exports.getMyPendingActivationChargeCardListView = exports.getChargeCardListView = void 0;
6
+ exports.getChargeCardBulkActionView = exports.getChargeCardRowActionView = exports.getChargeCardRecurringExpensesByCardIds = exports.getDebitCardSummary = exports.getDebitCardList = exports.getDepositAccountListWithDebitCardIssued = exports.getCreditAccountDetails = exports.anyCardOnHold = exports.getMyRequestOnHoldChargeCardListWithShippingAddress = exports.getMyPendingActivationChargeCardListView = exports.getChargeCardListView = void 0;
7
+ const toolkit_1 = require("@reduxjs/toolkit");
7
8
  const orderBy_1 = __importDefault(require("lodash/orderBy"));
8
9
  const sortOrderPayload_1 = require("../../../../commonPayloadTypes/sortOrderPayload");
9
10
  const reduceFetchState_1 = require("../../../../commonStateTypes/reduceFetchState");
@@ -14,6 +15,7 @@ const depositAccountSelector_1 = require("../../../../entity/depositAccount/depo
14
15
  const userSelector_1 = require("../../../../entity/user/userSelector");
15
16
  const userRoleSelector_1 = require("../../../../entity/userRole/userRoleSelector");
16
17
  const userListViewSelector_1 = require("../../../userListView/userListViewSelector");
18
+ const chargeCardDetailSelector_1 = require("../chargeCardDetail/chargeCardDetailSelector");
17
19
  const getChargeCardListView = (state, includeCreditAccountDebitSummaryAndCashbackInfo, isDebitCardEnabled, isCreditCardEnabled) => {
18
20
  const { chargeCardListState, chargeCardState, classState, userState, userRoleState, chargeCardConfigState, classListState, cashbackDetailState, userListViewState, } = state;
19
21
  const searchText = chargeCardListState.searchText.toLowerCase();
@@ -76,11 +78,16 @@ const getChargeCardListView = (state, includeCreditAccountDebitSummaryAndCashbac
76
78
  userList,
77
79
  allAccountingClasses,
78
80
  issueCardPageFetchState,
79
- uiState: chargeCardListState.uiState,
80
- searchText,
81
- version: '1.0',
81
+ closeChargeCardsFetchState: chargeCardListState.closeChargeCardsFetchState,
82
+ lockChargeCardsFetchState: chargeCardListState.lockChargeCardsFetchState,
82
83
  resendCardInvite: chargeCardListState.resendCardInvite,
83
84
  revokeCardInvite: chargeCardListState.revokeCardInvite,
85
+ revokeChargeCardsInviteFetchState: chargeCardListState.revokeChargeCardsInviteFetchState,
86
+ searchText,
87
+ unlockChargeCardsFetchState: chargeCardListState.unlockChargeCardsFetchState,
88
+ updateChargeCardsSpendLimitFetchState: chargeCardListState.updateChargeCardsSpendLimitFetchState,
89
+ uiState: chargeCardListState.uiState,
90
+ version: '1.0',
84
91
  debitCardSummary: chargeCardListState.debitCardSummaries,
85
92
  hasCreditCard,
86
93
  hasDebitCard,
@@ -233,3 +240,190 @@ const getCardsBySortKey = (card, sortKey) => {
233
240
  return card.limit.amount;
234
241
  }
235
242
  };
243
+ const getChargeCardRecurringExpensesByCardIds = (state, chargeCardIds) => {
244
+ const { chargeCardDetailState } = state;
245
+ const recurringExpensesByChargeCardId = {};
246
+ chargeCardIds.forEach((cardId) => {
247
+ var _a;
248
+ recurringExpensesByChargeCardId[cardId] =
249
+ (_a = chargeCardDetailState.recurringExpensesByChargeCardId[cardId]) !== null && _a !== void 0 ? _a : [];
250
+ });
251
+ const recurringExpensesFetchState = chargeCardDetailState.recurringExpensesFetchState;
252
+ return {
253
+ fetchState: recurringExpensesFetchState.fetchState,
254
+ error: recurringExpensesFetchState.error,
255
+ recurringExpensesByChargeCardId,
256
+ };
257
+ };
258
+ exports.getChargeCardRecurringExpensesByCardIds = getChargeCardRecurringExpensesByCardIds;
259
+ // Selector to get rowActionCardId from state
260
+ const selectRowActionCardId = (state) => state.chargeCardListState.rowActionCardId;
261
+ // Selector to get chargeCardDetailState
262
+ const selectChargeCardDetailState = (state) => state.chargeCardDetailState;
263
+ // Selector to get depositAccountState
264
+ const selectDepositAccountState = (state) => state.depositAccountState;
265
+ // Selector to get chargeCardState
266
+ const selectChargeCardState = (state) => state.chargeCardState;
267
+ /**
268
+ * Memoized selector that returns row action card data
269
+ * Only recomputes when relevant parts of state change
270
+ */
271
+ exports.getChargeCardRowActionView = (0, toolkit_1.createSelector)([
272
+ selectRowActionCardId,
273
+ selectChargeCardDetailState,
274
+ selectDepositAccountState,
275
+ selectChargeCardState,
276
+ (state) => state.chargeCardListState,
277
+ (state) => state.userState,
278
+ (state) => state.userRoleState,
279
+ (state) => state.classState,
280
+ (state) => state.addressState,
281
+ ], (rowActionCardId, chargeCardDetailState, depositAccountState, chargeCardState, chargeCardListState, userState, userRoleState, classState, addressState) => {
282
+ var _a;
283
+ // If no rowActionCardId, return empty state
284
+ if (rowActionCardId == null) {
285
+ return {
286
+ closeChargeCardsFetchState: {
287
+ fetchState: 'Not-Started',
288
+ error: undefined,
289
+ },
290
+ lockChargeCardsFetchState: {
291
+ fetchState: 'Not-Started',
292
+ error: undefined,
293
+ },
294
+ unlockChargeCardsFetchState: {
295
+ fetchState: 'Not-Started',
296
+ error: undefined,
297
+ },
298
+ revokeChargeCardFetchState: {
299
+ fetchState: 'Not-Started',
300
+ error: undefined,
301
+ },
302
+ updateChargeCardLimitFetchState: {
303
+ fetchState: 'Not-Started',
304
+ error: undefined,
305
+ },
306
+ updateChargeCardNameFetchState: {
307
+ fetchState: 'Not-Started',
308
+ error: undefined,
309
+ },
310
+ depositAccountLimitFetchState: {
311
+ fetchState: 'Not-Started',
312
+ error: undefined,
313
+ },
314
+ recurringExpenses: [],
315
+ recurringExpensesFetchState: {
316
+ fetchState: 'Not-Started',
317
+ error: undefined,
318
+ },
319
+ cardId: undefined,
320
+ chargeCard: undefined,
321
+ depositAccountLimit: undefined,
322
+ };
323
+ }
324
+ // Reconstruct a minimal state object for helper functions
325
+ const stateSubset = {
326
+ userState,
327
+ userRoleState,
328
+ classState,
329
+ addressState,
330
+ chargeCardDetailState,
331
+ chargeCardListState,
332
+ };
333
+ // Get charge card (base entity)
334
+ const chargeCardBase = (0, chargeCardSelector_1.getChargeCardById)(chargeCardState, rowActionCardId);
335
+ // Get enriched ChargeCardWithUser
336
+ let chargeCard = undefined;
337
+ if (chargeCardBase != null) {
338
+ const enrichedCards = getChargeCardsWithUser([chargeCardBase], stateSubset);
339
+ chargeCard = enrichedCards[0];
340
+ }
341
+ // Get control detail view
342
+ const controlDetailView = (0, chargeCardDetailSelector_1.getChargeCardControlDetailView)(stateSubset, rowActionCardId);
343
+ // Get deposit account limit (for debit cards)
344
+ let depositAccountLimit = undefined;
345
+ let depositAccountLimitFetchState = {
346
+ fetchState: 'Not-Started',
347
+ error: undefined,
348
+ };
349
+ if ((chargeCardBase === null || chargeCardBase === void 0 ? void 0 : chargeCardBase.type.code.includes('debit')) === true) {
350
+ depositAccountLimit =
351
+ (0, depositAccountSelector_1.getDepositAccountLimitForChargeCardByDepositAccountId)(depositAccountState, chargeCardBase.connectedAccountId);
352
+ depositAccountLimitFetchState =
353
+ (0, chargeCardDetailSelector_1.getDepositAccountLimitFetchStateByDepositAccountId)(stateSubset, chargeCardBase.connectedAccountId);
354
+ }
355
+ // Get recurring expenses
356
+ const recurringExpenses = (_a = chargeCardDetailState.recurringExpensesByChargeCardId[rowActionCardId]) !== null && _a !== void 0 ? _a : [];
357
+ const recurringExpensesFetchState = chargeCardDetailState.recurringExpensesFetchState;
358
+ return Object.assign(Object.assign({}, controlDetailView), { depositAccountLimitFetchState,
359
+ recurringExpenses, recurringExpensesFetchState: {
360
+ fetchState: recurringExpensesFetchState.fetchState,
361
+ error: recurringExpensesFetchState.error,
362
+ }, cardId: rowActionCardId, chargeCard,
363
+ depositAccountLimit });
364
+ });
365
+ // Selector to get bulkActionCardIds from state
366
+ const selectBulkActionCardIds = (state) => state.chargeCardListState.bulkActionCardIds;
367
+ /**
368
+ * Memoized selector that returns bulk action cards data
369
+ * Only recomputes when relevant parts of state change
370
+ */
371
+ exports.getChargeCardBulkActionView = (0, toolkit_1.createSelector)([
372
+ selectBulkActionCardIds,
373
+ selectChargeCardState,
374
+ selectChargeCardDetailState,
375
+ (state) => state.userState,
376
+ (state) => state.userRoleState,
377
+ (state) => state.classState,
378
+ (state) => state.addressState,
379
+ ], (bulkActionCardIds, chargeCardState, chargeCardDetailState, userState, userRoleState, classState, addressState) => {
380
+ // If no cards selected, return empty state
381
+ if (bulkActionCardIds.length === 0) {
382
+ return {
383
+ bulkActionCardIds: [],
384
+ chargeCards: [],
385
+ hasCreditCards: false,
386
+ hasDebitCards: false,
387
+ recurringExpensesByCardId: {},
388
+ recurringExpensesFetchState: {
389
+ fetchState: 'Not-Started',
390
+ error: undefined,
391
+ },
392
+ };
393
+ }
394
+ // Reconstruct a minimal state object for helper functions
395
+ const stateSubset = {
396
+ userState,
397
+ userRoleState,
398
+ classState,
399
+ addressState,
400
+ };
401
+ // Get all selected charge cards (base entities)
402
+ const chargeCardsBase = bulkActionCardIds
403
+ .map((cardId) => (0, chargeCardSelector_1.getChargeCardById)(chargeCardState, cardId))
404
+ .filter((card) => card != null);
405
+ // Get enriched ChargeCardWithUser array
406
+ const chargeCards = getChargeCardsWithUser(chargeCardsBase, stateSubset);
407
+ // Get recurring expenses for all selected cards
408
+ const recurringExpensesByCardId = {};
409
+ bulkActionCardIds.forEach((cardId) => {
410
+ var _a;
411
+ recurringExpensesByCardId[cardId] =
412
+ (_a = chargeCardDetailState.recurringExpensesByChargeCardId[cardId]) !== null && _a !== void 0 ? _a : [];
413
+ });
414
+ // Determine if selection contains debit or credit cards
415
+ const hasDebitCards = chargeCards.some((card) => card.type.code.includes('debit'));
416
+ const hasCreditCards = chargeCards.some((card) => card.type.code.includes('credit'));
417
+ const recurringExpensesFetchState = chargeCardDetailState.recurringExpensesFetchState;
418
+ return {
419
+ bulkActionCardIds,
420
+ chargeCards,
421
+ hasCreditCards,
422
+ hasDebitCards,
423
+ recurringExpensesByCardId,
424
+ recurringExpensesFetchState: {
425
+ fetchState: recurringExpensesFetchState.fetchState,
426
+ error: recurringExpensesFetchState.error,
427
+ },
428
+ };
429
+ });
@@ -0,0 +1,9 @@
1
+ import { ActionsObservable, StateObservable } from 'redux-observable';
2
+ import { Observable } from 'rxjs';
3
+ import { updateChargeCards } from '../../../../entity/chargeCard/chargeCardReducer';
4
+ import { openSnackbar } from '../../../../entity/snackbar/snackbarReducer';
5
+ import { RootState } from '../../../../reducer';
6
+ import { ZeniAPI } from '../../../../zeniAPI';
7
+ import { closeChargeCards, closeChargeCardsSuccessOrFailure } from './chargeCardListReducer';
8
+ export type ActionType = ReturnType<typeof closeChargeCards> | ReturnType<typeof closeChargeCardsSuccessOrFailure> | ReturnType<typeof openSnackbar> | ReturnType<typeof updateChargeCards>;
9
+ export declare const closeChargeCardsEpic: (actions$: ActionsObservable<ActionType>, _state$: StateObservable<RootState>, zeniAPI: ZeniAPI) => Observable<ActionType>;
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.closeChargeCardsEpic = void 0;
4
+ const rxjs_1 = require("rxjs");
5
+ const operators_1 = require("rxjs/operators");
6
+ const chargeCardReducer_1 = require("../../../../entity/chargeCard/chargeCardReducer");
7
+ const snackbarReducer_1 = require("../../../../entity/snackbar/snackbarReducer");
8
+ const responsePayload_1 = require("../../../../responsePayload");
9
+ const chargeCardListReducer_1 = require("./chargeCardListReducer");
10
+ const closeChargeCardsEpic = (actions$, _state$, zeniAPI) => actions$.pipe((0, operators_1.filter)(chargeCardListReducer_1.closeChargeCards.match), (0, operators_1.switchMap)((action) => {
11
+ const { cardIds, reason } = action.payload;
12
+ const payload = {
13
+ card_ids: cardIds,
14
+ reason: reason,
15
+ };
16
+ return zeniAPI
17
+ .putAndGetJSON(`${zeniAPI.apiEndPoints.cardMicroServiceBaseUrl}/1.0/cards/bulk/close`, payload)
18
+ .pipe((0, operators_1.mergeMap)((response) => {
19
+ if ((0, responsePayload_1.isSuccessStatus)(response) && response.data != null) {
20
+ return (0, rxjs_1.of)((0, chargeCardReducer_1.updateChargeCards)(response.data), (0, chargeCardListReducer_1.closeChargeCardsSuccessOrFailure)({
21
+ fetchState: 'Completed',
22
+ }), (0, snackbarReducer_1.openSnackbar)({
23
+ messageSection: 'close_charge_cards',
24
+ messageText: 'success',
25
+ type: 'success',
26
+ variables: [
27
+ {
28
+ variableName: '_number_of_cards_',
29
+ variableValue: cardIds.length === 1
30
+ ? '1 card'
31
+ : `${cardIds.length} cards`,
32
+ },
33
+ ],
34
+ }));
35
+ }
36
+ else {
37
+ return (0, rxjs_1.of)((0, snackbarReducer_1.openSnackbar)({
38
+ messageSection: 'close_charge_cards',
39
+ messageText: 'failed',
40
+ type: 'error',
41
+ variables: [
42
+ {
43
+ variableName: '_api-error_',
44
+ variableValue: response.status.message,
45
+ },
46
+ ],
47
+ }), (0, chargeCardListReducer_1.closeChargeCardsSuccessOrFailure)({
48
+ fetchState: 'Error',
49
+ error: response.status,
50
+ }));
51
+ }
52
+ }), (0, operators_1.catchError)((error) => {
53
+ return (0, rxjs_1.of)((0, snackbarReducer_1.openSnackbar)({
54
+ messageSection: 'close_charge_cards',
55
+ messageText: 'failed',
56
+ type: 'error',
57
+ variables: [
58
+ {
59
+ variableName: '_api-error_',
60
+ variableValue: JSON.stringify(error),
61
+ },
62
+ ],
63
+ }), (0, chargeCardListReducer_1.closeChargeCardsSuccessOrFailure)({
64
+ fetchState: 'Error',
65
+ error: (0, responsePayload_1.createZeniAPIStatus)('Unexpected Error', 'Close cards API call errored out' + JSON.stringify(error)),
66
+ }));
67
+ }));
68
+ }));
69
+ exports.closeChargeCardsEpic = closeChargeCardsEpic;
@@ -5,6 +5,8 @@ import { fetchClassList } from '../../../classList/classListReducer';
5
5
  import { fetchUserListByType } from '../../../userListView/userListViewReducer';
6
6
  import { fetchCashbackDetail } from '../cashbackDetail/cashbackDetailReducer';
7
7
  import { fetchChargeCardConfig } from '../chargeCardConfig/chargeCardConfigReducer';
8
+ import { fetchChargeCardSetupView } from '../chargeCardSetUp/chargeCardSetUpViewReducer';
9
+ import { fetchDepositAccountListForCards } from '../issueChargeCard/issueChargeCardReducer';
8
10
  import { fetchChargeCardList, fetchChargeCardListPage, fetchCreditAccount, fetchCreditAccountRepayment, fetchDebitCardSummary } from './chargeCardListReducer';
9
- export type ActionType = ReturnType<typeof fetchChargeCardListPage> | ReturnType<typeof fetchCreditAccount> | ReturnType<typeof fetchChargeCardList> | ReturnType<typeof fetchChargeCardConfig> | ReturnType<typeof fetchUserListByType> | ReturnType<typeof fetchCashbackDetail> | ReturnType<typeof fetchClassList> | ReturnType<typeof fetchDebitCardSummary> | ReturnType<typeof fetchCreditAccountRepayment>;
11
+ export type ActionType = ReturnType<typeof fetchChargeCardListPage> | ReturnType<typeof fetchCreditAccount> | ReturnType<typeof fetchChargeCardList> | ReturnType<typeof fetchChargeCardConfig> | ReturnType<typeof fetchUserListByType> | ReturnType<typeof fetchCashbackDetail> | ReturnType<typeof fetchClassList> | ReturnType<typeof fetchDebitCardSummary> | ReturnType<typeof fetchCreditAccountRepayment> | ReturnType<typeof fetchDepositAccountListForCards> | ReturnType<typeof fetchChargeCardSetupView>;
10
12
  export declare const fetchChargeCardListPageEpic: (actions$: ActionsObservable<ActionType>, state$: StateObservable<RootState>) => Observable<ActionType>;
@@ -3,10 +3,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.fetchChargeCardListPageEpic = void 0;
4
4
  const rxjs_1 = require("rxjs");
5
5
  const operators_1 = require("rxjs/operators");
6
+ const tenantSelector_1 = require("../../../../entity/tenant/tenantSelector");
6
7
  const classListReducer_1 = require("../../../classList/classListReducer");
7
8
  const userListViewReducer_1 = require("../../../userListView/userListViewReducer");
8
9
  const cashbackDetailReducer_1 = require("../cashbackDetail/cashbackDetailReducer");
9
10
  const chargeCardConfigReducer_1 = require("../chargeCardConfig/chargeCardConfigReducer");
11
+ const chargeCardSetUpViewReducer_1 = require("../chargeCardSetUp/chargeCardSetUpViewReducer");
12
+ const issueChargeCardReducer_1 = require("../issueChargeCard/issueChargeCardReducer");
10
13
  const chargeCardListReducer_1 = require("./chargeCardListReducer");
11
14
  const fetchChargeCardListPageEpic = (actions$, state$) => actions$.pipe((0, operators_1.filter)(chargeCardListReducer_1.fetchChargeCardListPage.match), (0, operators_1.mergeMap)((action) => {
12
15
  const { doFetchCreditAccountsDebitSummaryAndCashback, isDebitCardEnabled, isCreditCardEnabled, cacheOverride, } = action.payload;
@@ -80,6 +83,21 @@ const fetchChargeCardListPageEpic = (actions$, state$) => actions$.pipe((0, oper
80
83
  'Completed') {
81
84
  chargeCardListPageAction.push((0, chargeCardListReducer_1.fetchDebitCardSummary)());
82
85
  }
86
+ //Fetching deposit account list and charge card setup view for mix-panel events
87
+ if (doFetchCreditAccountsDebitSummaryAndCashback &&
88
+ isDebitCardEnabled &&
89
+ state.issueChargeCardState.depositAccountsFetchState.fetchState !==
90
+ 'In-Progress' &&
91
+ state.issueChargeCardState.depositAccountsFetchState.fetchState !==
92
+ 'Completed') {
93
+ chargeCardListPageAction.push((0, issueChargeCardReducer_1.fetchDepositAccountListForCards)());
94
+ }
95
+ if (doFetchCreditAccountsDebitSummaryAndCashback &&
96
+ state.chargeCardSetupViewState.fetchState !== 'In-Progress' &&
97
+ state.chargeCardSetupViewState.fetchState !== 'Completed') {
98
+ const currentTenant = (0, tenantSelector_1.getCurrentTenant)(state);
99
+ chargeCardListPageAction.push((0, chargeCardSetUpViewReducer_1.fetchChargeCardSetupView)(currentTenant.companyId, true));
100
+ }
83
101
  }
84
102
  return (0, rxjs_1.concat)((0, rxjs_1.from)(chargeCardListPageAction));
85
103
  }));
@@ -0,0 +1,9 @@
1
+ import { ActionsObservable, StateObservable } from 'redux-observable';
2
+ import { Observable } from 'rxjs';
3
+ import { updateChargeCards } from '../../../../entity/chargeCard/chargeCardReducer';
4
+ import { openSnackbar } from '../../../../entity/snackbar/snackbarReducer';
5
+ import { RootState } from '../../../../reducer';
6
+ import { ZeniAPI } from '../../../../zeniAPI';
7
+ import { lockChargeCards, lockChargeCardsSuccessOrFailure } from './chargeCardListReducer';
8
+ export type ActionType = ReturnType<typeof lockChargeCards> | ReturnType<typeof lockChargeCardsSuccessOrFailure> | ReturnType<typeof openSnackbar> | ReturnType<typeof updateChargeCards>;
9
+ export declare const lockChargeCardsEpic: (actions$: ActionsObservable<ActionType>, _state$: StateObservable<RootState>, zeniAPI: ZeniAPI) => Observable<ActionType>;