@zeniai/client-epic-state 5.0.82-betaAS1 → 5.0.83-betaRR0

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 (161) hide show
  1. package/lib/common/aiCfo/aiCfoSuggestedQuestionsPageContext.d.ts +1 -1
  2. package/lib/entity/aiCfo/aiCfoPayload.d.ts +140 -1
  3. package/lib/entity/aiCfo/aiCfoReducer.d.ts +23 -2
  4. package/lib/entity/aiCfo/aiCfoReducer.js +328 -5
  5. package/lib/entity/aiCfo/aiCfoSelector.d.ts +13 -1
  6. package/lib/entity/aiCfo/aiCfoSelector.js +28 -1
  7. package/lib/entity/aiCfo/aiCfoState.d.ts +225 -4
  8. package/lib/entity/aiCfo/aiCfoState.js +30 -1
  9. package/lib/entity/cardPolicy/cardPolicyPayload.d.ts +277 -0
  10. package/lib/entity/cardPolicy/cardPolicyPayload.js +143 -0
  11. package/lib/entity/cardPolicy/cardPolicyReducer.d.ts +19 -0
  12. package/lib/entity/cardPolicy/cardPolicyReducer.js +175 -0
  13. package/lib/entity/cardPolicy/cardPolicySelector.d.ts +32 -0
  14. package/lib/entity/cardPolicy/cardPolicySelector.js +99 -0
  15. package/lib/entity/cardPolicy/cardPolicyState.d.ts +205 -0
  16. package/lib/entity/cardPolicy/cardPolicyState.js +14 -0
  17. package/lib/entity/cardPolicy/extractPolicyDocumentEpic.d.ts +18 -0
  18. package/lib/entity/cardPolicy/extractPolicyDocumentEpic.js +68 -0
  19. package/lib/entity/cardPolicy/fetchCardPolicyVendorOptionsEpic.d.ts +26 -0
  20. package/lib/entity/cardPolicy/fetchCardPolicyVendorOptionsEpic.js +47 -0
  21. package/lib/entity/cardPolicy/policyDocumentExtractionToRecommendationBridgeEpic.d.ts +25 -0
  22. package/lib/entity/cardPolicy/policyDocumentExtractionToRecommendationBridgeEpic.js +39 -0
  23. package/lib/entity/cardPolicy/policyRecommendationFromUploadEpic.d.ts +23 -0
  24. package/lib/entity/cardPolicy/policyRecommendationFromUploadEpic.js +104 -0
  25. package/lib/entity/jeSchedules/jeSchedulesTypes.d.ts +1 -1
  26. package/lib/entity/monthEndCloseChecks/monthEndCloseChecksState.d.ts +1 -1
  27. package/lib/entity/snackbar/snackbarTypes.d.ts +1 -1
  28. package/lib/entity/snackbar/snackbarTypes.js +3 -0
  29. package/lib/entity/tenant/clearAllEpic.d.ts +6 -2
  30. package/lib/entity/tenant/clearAllEpic.js +8 -0
  31. package/lib/entity/tenant/tenantPayload.d.ts +0 -3
  32. package/lib/entity/tenant/tenantReducer.d.ts +1 -1
  33. package/lib/entity/tenant/tenantReducer.js +3 -23
  34. package/lib/entity/tenant/tenantState.d.ts +0 -3
  35. package/lib/epic.d.ts +11 -3
  36. package/lib/epic.js +11 -3
  37. package/lib/esm/entity/aiCfo/aiCfoReducer.js +328 -5
  38. package/lib/esm/entity/aiCfo/aiCfoSelector.js +26 -1
  39. package/lib/esm/entity/aiCfo/aiCfoState.js +27 -0
  40. package/lib/esm/entity/cardPolicy/cardPolicyPayload.js +130 -0
  41. package/lib/esm/entity/cardPolicy/cardPolicyReducer.js +171 -0
  42. package/lib/esm/entity/cardPolicy/cardPolicySelector.js +75 -0
  43. package/lib/esm/entity/cardPolicy/cardPolicyState.js +9 -0
  44. package/lib/esm/entity/cardPolicy/extractPolicyDocumentEpic.js +64 -0
  45. package/lib/esm/entity/cardPolicy/fetchCardPolicyVendorOptionsEpic.js +43 -0
  46. package/lib/esm/entity/cardPolicy/policyDocumentExtractionToRecommendationBridgeEpic.js +35 -0
  47. package/lib/esm/entity/cardPolicy/policyRecommendationFromUploadEpic.js +100 -0
  48. package/lib/esm/entity/snackbar/snackbarTypes.js +3 -0
  49. package/lib/esm/entity/tenant/clearAllEpic.js +8 -0
  50. package/lib/esm/entity/tenant/tenantReducer.js +2 -22
  51. package/lib/esm/epic.js +11 -3
  52. package/lib/esm/index.js +29 -11
  53. package/lib/esm/reducer.js +12 -0
  54. package/lib/esm/view/aiCfoView/aiCfoViewReducer.js +6 -3
  55. package/lib/esm/view/aiCfoView/epics/createSessionAndSubmitEpic.js +5 -2
  56. package/lib/esm/view/aiCfoView/epics/createSessionEpic.js +2 -1
  57. package/lib/esm/view/aiCfoView/epics/fetchSuggestedQuestionsEpic.js +12 -2
  58. package/lib/esm/view/dashboard/dashboardReducer.js +5 -1
  59. package/lib/esm/view/dashboard/dashboardSelector.js +2 -1
  60. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/cardPolicyDetailReducer.js +70 -0
  61. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/cardPolicyDetailSelector.js +22 -0
  62. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/cardPolicyDetailState.js +1 -0
  63. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/fetchCardPolicyDetailEpic.js +56 -0
  64. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/updateCardPolicyEpic.js +49 -0
  65. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/archiveCardPolicyEpic.js +42 -0
  66. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/cardPolicyListReducer.js +72 -0
  67. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/cardPolicyListSelector.js +21 -0
  68. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/cardPolicyListState.js +1 -0
  69. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/fetchCardPolicyListEpic.js +56 -0
  70. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/createCardPolicyReducer.js +45 -0
  71. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/createCardPolicySelector.js +39 -0
  72. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/createCardPolicyState.js +1 -0
  73. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/createCardPolicyTemplateEpic.js +53 -0
  74. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/fetchCardPolicyMccCategoriesEpic.js +25 -0
  75. package/lib/esm/view/spendManagement/chargeCards/chargeCardList/chargeCardListSelector.js +25 -0
  76. package/lib/esm/view/spendManagement/chargeCards/issueChargeCard/aiCardCreationFormDraftTypes.js +1 -0
  77. package/lib/esm/view/spendManagement/chargeCards/issueChargeCard/buildAiCardCreationFormDraftSeed.js +62 -0
  78. package/lib/esm/view/spendManagement/chargeCards/issueChargeCard/deriveAiCardRowsFromTeams.js +47 -0
  79. package/lib/esm/view/spendManagement/chargeCards/issueChargeCard/issueChargeCardEpic.js +2 -2
  80. package/lib/esm/view/spendManagement/chargeCards/issueChargeCard/issueChargeCardReducer.js +62 -4
  81. package/lib/esm/view/spendManagement/chargeCards/issueChargeCard/issueChargeCardSelector.js +61 -0
  82. package/lib/esm/view/spendManagement/chargeCards/issueChargeCard/toIssueChargeCardLocalDataFromDraft.js +69 -0
  83. package/lib/esm/view/spendManagement/treasury/treasurySetUp/treasurySetupViewReducer.js +1 -45
  84. package/lib/index.d.ts +28 -11
  85. package/lib/index.js +154 -29
  86. package/lib/reducer.d.ts +12 -0
  87. package/lib/reducer.js +12 -0
  88. package/lib/view/aiCfoView/aiCfoViewReducer.d.ts +11 -2
  89. package/lib/view/aiCfoView/aiCfoViewReducer.js +6 -3
  90. package/lib/view/aiCfoView/epics/createSessionAndSubmitEpic.js +5 -2
  91. package/lib/view/aiCfoView/epics/createSessionEpic.js +2 -1
  92. package/lib/view/aiCfoView/epics/fetchSuggestedQuestionsEpic.d.ts +8 -1
  93. package/lib/view/aiCfoView/epics/fetchSuggestedQuestionsEpic.js +12 -2
  94. package/lib/view/dashboard/dashboardReducer.d.ts +1 -1
  95. package/lib/view/dashboard/dashboardReducer.js +6 -2
  96. package/lib/view/dashboard/dashboardSelector.d.ts +1 -0
  97. package/lib/view/dashboard/dashboardSelector.js +2 -1
  98. package/lib/view/dashboard/dashboardState.d.ts +1 -0
  99. package/lib/view/expenseAutomationView/helpers/transactionCategorizationLocalDataHelper.d.ts +1 -1
  100. package/lib/view/expenseAutomationView/types/reconciliationViewState.d.ts +1 -1
  101. package/lib/view/people/peopleTypes.d.ts +1 -1
  102. package/lib/view/scheduleView/scheduleListView/scheduleListTypes.d.ts +1 -1
  103. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/cardPolicyDetailReducer.d.ts +14 -0
  104. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/cardPolicyDetailReducer.js +74 -0
  105. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/cardPolicyDetailSelector.d.ts +21 -0
  106. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/cardPolicyDetailSelector.js +28 -0
  107. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/cardPolicyDetailState.d.ts +25 -0
  108. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/cardPolicyDetailState.js +2 -0
  109. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/fetchCardPolicyDetailEpic.d.ts +19 -0
  110. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/fetchCardPolicyDetailEpic.js +60 -0
  111. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/updateCardPolicyEpic.d.ts +18 -0
  112. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/updateCardPolicyEpic.js +53 -0
  113. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/archiveCardPolicyEpic.d.ts +16 -0
  114. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/archiveCardPolicyEpic.js +46 -0
  115. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/cardPolicyListReducer.d.ts +15 -0
  116. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/cardPolicyListReducer.js +76 -0
  117. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/cardPolicyListSelector.d.ts +21 -0
  118. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/cardPolicyListSelector.js +27 -0
  119. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/cardPolicyListState.d.ts +19 -0
  120. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/cardPolicyListState.js +2 -0
  121. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/fetchCardPolicyListEpic.d.ts +19 -0
  122. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/fetchCardPolicyListEpic.js +60 -0
  123. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/createCardPolicyReducer.d.ts +13 -0
  124. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/createCardPolicyReducer.js +49 -0
  125. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/createCardPolicySelector.d.ts +32 -0
  126. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/createCardPolicySelector.js +46 -0
  127. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/createCardPolicyState.d.ts +45 -0
  128. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/createCardPolicyState.js +2 -0
  129. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/createCardPolicyTemplateEpic.d.ts +25 -0
  130. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/createCardPolicyTemplateEpic.js +57 -0
  131. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/fetchCardPolicyMccCategoriesEpic.d.ts +15 -0
  132. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/fetchCardPolicyMccCategoriesEpic.js +29 -0
  133. package/lib/view/spendManagement/chargeCards/chargeCardList/chargeCardList.d.ts +1 -1
  134. package/lib/view/spendManagement/chargeCards/chargeCardList/chargeCardListSelector.d.ts +14 -0
  135. package/lib/view/spendManagement/chargeCards/chargeCardList/chargeCardListSelector.js +27 -1
  136. package/lib/view/spendManagement/chargeCards/issueChargeCard/aiCardCreationFormDraftTypes.d.ts +79 -0
  137. package/lib/view/spendManagement/chargeCards/issueChargeCard/aiCardCreationFormDraftTypes.js +2 -0
  138. package/lib/view/spendManagement/chargeCards/issueChargeCard/buildAiCardCreationFormDraftSeed.d.ts +25 -0
  139. package/lib/view/spendManagement/chargeCards/issueChargeCard/buildAiCardCreationFormDraftSeed.js +66 -0
  140. package/lib/view/spendManagement/chargeCards/issueChargeCard/deriveAiCardRowsFromTeams.d.ts +26 -0
  141. package/lib/view/spendManagement/chargeCards/issueChargeCard/deriveAiCardRowsFromTeams.js +51 -0
  142. package/lib/view/spendManagement/chargeCards/issueChargeCard/issueChargeCardEpic.d.ts +2 -2
  143. package/lib/view/spendManagement/chargeCards/issueChargeCard/issueChargeCardEpic.js +1 -1
  144. package/lib/view/spendManagement/chargeCards/issueChargeCard/issueChargeCardReducer.d.ts +12 -2
  145. package/lib/view/spendManagement/chargeCards/issueChargeCard/issueChargeCardReducer.js +63 -5
  146. package/lib/view/spendManagement/chargeCards/issueChargeCard/issueChargeCardSelector.d.ts +42 -0
  147. package/lib/view/spendManagement/chargeCards/issueChargeCard/issueChargeCardSelector.js +68 -1
  148. package/lib/view/spendManagement/chargeCards/issueChargeCard/issueChargeCardState.d.ts +18 -0
  149. package/lib/view/spendManagement/chargeCards/issueChargeCard/toIssueChargeCardLocalDataFromDraft.d.ts +11 -0
  150. package/lib/view/spendManagement/chargeCards/issueChargeCard/toIssueChargeCardLocalDataFromDraft.js +73 -0
  151. package/lib/view/spendManagement/treasury/treasurySetUp/treasurySetupViewReducer.d.ts +1 -1
  152. package/lib/view/spendManagement/treasury/treasurySetUp/treasurySetupViewReducer.js +2 -46
  153. package/lib/view/spendManagement/treasury/treasurySetUp/treasurySetupViewState.d.ts +0 -2
  154. package/lib/view/taskManager/taskListView/taskListReducer.d.ts +1 -1
  155. package/package.json +1 -1
  156. package/lib/esm/view/spendManagement/treasury/treasurySetUp/epic/updateTreasuryPromoIntroClosedByOutsideClickEpic.js +0 -18
  157. package/lib/esm/view/spendManagement/treasury/treasurySetUp/epic/updateTreasuryPromoRemindMeLaterClickedEpic.js +0 -18
  158. package/lib/view/spendManagement/treasury/treasurySetUp/epic/updateTreasuryPromoIntroClosedByOutsideClickEpic.d.ts +0 -8
  159. package/lib/view/spendManagement/treasury/treasurySetUp/epic/updateTreasuryPromoIntroClosedByOutsideClickEpic.js +0 -22
  160. package/lib/view/spendManagement/treasury/treasurySetUp/epic/updateTreasuryPromoRemindMeLaterClickedEpic.d.ts +0 -8
  161. package/lib/view/spendManagement/treasury/treasurySetUp/epic/updateTreasuryPromoRemindMeLaterClickedEpic.js +0 -22
@@ -0,0 +1,19 @@
1
+ import { ActionsObservable, StateObservable } from 'redux-observable';
2
+ import { Observable } from 'rxjs';
3
+ import { updateCreatedCardPolicyTemplate } from '../../../../../entity/cardPolicy/cardPolicyReducer';
4
+ import { RootState } from '../../../../../reducer';
5
+ import { ZeniAPI } from '../../../../../zeniAPI';
6
+ import { fetchCardPolicyDetail, updateCardPolicyDetailFetchStatus, updateCardPolicyFormDraft } from './cardPolicyDetailReducer';
7
+ export type ActionType = ReturnType<typeof fetchCardPolicyDetail> | ReturnType<typeof updateCreatedCardPolicyTemplate> | ReturnType<typeof updateCardPolicyFormDraft> | ReturnType<typeof updateCardPolicyDetailFetchStatus>;
8
+ /**
9
+ * `GET /cards/1.0/policy-templates/{id}`. Response is the same
10
+ * `{cards_applied, template}` envelope the create endpoint returns.
11
+ * We:
12
+ *
13
+ * 1. Cache the template on the entity slice (so the list page picks
14
+ * up any drift from the server).
15
+ * 2. Seed the local edit-form draft from the camelCased template so
16
+ * the page can render with the existing values pre-populated.
17
+ * 3. Flip the view lifecycle to `Completed` / `Error`.
18
+ */
19
+ export declare const fetchCardPolicyDetailEpic: (actions$: ActionsObservable<ActionType>, _state$: StateObservable<RootState>, zeniAPI: ZeniAPI) => Observable<ActionType>;
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.fetchCardPolicyDetailEpic = void 0;
4
+ const rxjs_1 = require("rxjs");
5
+ const operators_1 = require("rxjs/operators");
6
+ const cardPolicyPayload_1 = require("../../../../../entity/cardPolicy/cardPolicyPayload");
7
+ const cardPolicyReducer_1 = require("../../../../../entity/cardPolicy/cardPolicyReducer");
8
+ const responsePayload_1 = require("../../../../../responsePayload");
9
+ const cardPolicyDetailReducer_1 = require("./cardPolicyDetailReducer");
10
+ /**
11
+ * `GET /cards/1.0/policy-templates/{id}`. Response is the same
12
+ * `{cards_applied, template}` envelope the create endpoint returns.
13
+ * We:
14
+ *
15
+ * 1. Cache the template on the entity slice (so the list page picks
16
+ * up any drift from the server).
17
+ * 2. Seed the local edit-form draft from the camelCased template so
18
+ * the page can render with the existing values pre-populated.
19
+ * 3. Flip the view lifecycle to `Completed` / `Error`.
20
+ */
21
+ const fetchCardPolicyDetailEpic = (actions$, _state$, zeniAPI) => actions$.pipe((0, operators_1.filter)(cardPolicyDetailReducer_1.fetchCardPolicyDetail.match),
22
+ // `exhaustMap` (rather than `mergeMap`) so a duplicate
23
+ // `fetchCardPolicyDetail` dispatched while the previous one is
24
+ // still in flight is dropped instead of producing a second HTTP
25
+ // request. The edit screen dispatches this on mount, and React 18
26
+ // StrictMode invokes its mount effect twice with a stale
27
+ // `detailFetchState` closure — without `exhaustMap` that yields
28
+ // two `/policy-templates/{id}` calls. (The screen also dedupes
29
+ // list→edit navigations via the entity-cached template, so the
30
+ // detail GET is only emitted on direct landings — there's no
31
+ // realistic cross-templateId scenario that needs cancel-and-retry
32
+ // semantics here.)
33
+ (0, operators_1.exhaustMap)((action) => {
34
+ const templateId = action.payload;
35
+ return zeniAPI
36
+ .getJSON(`${zeniAPI.apiEndPoints.cardMicroServiceBaseUrl}/1.0/policy-templates/${templateId}`)
37
+ .pipe((0, operators_1.mergeMap)((response) => {
38
+ if ((0, responsePayload_1.isSuccessStatus)(response) && response.data != null) {
39
+ const { template } = response.data;
40
+ const formDraft = (0, cardPolicyPayload_1.toCardPolicyEditFormDraft)((0, cardPolicyPayload_1.toCardPolicyTemplate)(template));
41
+ const actions = [
42
+ (0, cardPolicyReducer_1.updateCreatedCardPolicyTemplate)(template),
43
+ (0, cardPolicyDetailReducer_1.updateCardPolicyFormDraft)(formDraft),
44
+ (0, cardPolicyDetailReducer_1.updateCardPolicyDetailFetchStatus)({ fetchState: 'Completed' }),
45
+ ];
46
+ return (0, rxjs_1.from)(actions);
47
+ }
48
+ else {
49
+ return (0, rxjs_1.of)((0, cardPolicyDetailReducer_1.updateCardPolicyDetailFetchStatus)({
50
+ fetchState: 'Error',
51
+ error: response.status,
52
+ }));
53
+ }
54
+ }), (0, operators_1.catchError)((error) => (0, rxjs_1.of)((0, cardPolicyDetailReducer_1.updateCardPolicyDetailFetchStatus)({
55
+ fetchState: 'Error',
56
+ error: (0, responsePayload_1.createZeniAPIStatus)('Unexpected Error', 'Fetch card-policy detail REST API call errored out' +
57
+ JSON.stringify(error)),
58
+ }))));
59
+ }));
60
+ exports.fetchCardPolicyDetailEpic = fetchCardPolicyDetailEpic;
@@ -0,0 +1,18 @@
1
+ import { ActionsObservable, StateObservable } from 'redux-observable';
2
+ import { Observable } from 'rxjs';
3
+ import { updateCreatedCardPolicyTemplate } from '../../../../../entity/cardPolicy/cardPolicyReducer';
4
+ import { RootState } from '../../../../../reducer';
5
+ import { ZeniAPI } from '../../../../../zeniAPI';
6
+ import { updateCardPolicy, updateCardPolicyFetchStatus } from './cardPolicyDetailReducer';
7
+ export type ActionType = ReturnType<typeof updateCardPolicy> | ReturnType<typeof updateCreatedCardPolicyTemplate> | ReturnType<typeof updateCardPolicyFetchStatus>;
8
+ /**
9
+ * `PUT /cards/1.0/policy-templates/{id}`. Reads the current `formDraft`
10
+ * off the `cardPolicyDetail` slice, converts it to the snake_case wire
11
+ * body (same shape as create), and submits. On success the entity
12
+ * slice picks up the refreshed template and the view lifecycle flips
13
+ * to `Completed`.
14
+ *
15
+ * If the action fires before a draft is seeded (e.g. user clicks save
16
+ * before the detail fetch lands), we short-circuit with an Error.
17
+ */
18
+ export declare const updateCardPolicyEpic: (actions$: ActionsObservable<ActionType>, state$: StateObservable<RootState>, zeniAPI: ZeniAPI) => Observable<ActionType>;
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.updateCardPolicyEpic = void 0;
4
+ const rxjs_1 = require("rxjs");
5
+ const operators_1 = require("rxjs/operators");
6
+ const cardPolicyPayload_1 = require("../../../../../entity/cardPolicy/cardPolicyPayload");
7
+ const cardPolicyReducer_1 = require("../../../../../entity/cardPolicy/cardPolicyReducer");
8
+ const responsePayload_1 = require("../../../../../responsePayload");
9
+ const cardPolicyDetailReducer_1 = require("./cardPolicyDetailReducer");
10
+ /**
11
+ * `PUT /cards/1.0/policy-templates/{id}`. Reads the current `formDraft`
12
+ * off the `cardPolicyDetail` slice, converts it to the snake_case wire
13
+ * body (same shape as create), and submits. On success the entity
14
+ * slice picks up the refreshed template and the view lifecycle flips
15
+ * to `Completed`.
16
+ *
17
+ * If the action fires before a draft is seeded (e.g. user clicks save
18
+ * before the detail fetch lands), we short-circuit with an Error.
19
+ */
20
+ const updateCardPolicyEpic = (actions$, state$, zeniAPI) => actions$.pipe((0, operators_1.filter)(cardPolicyDetailReducer_1.updateCardPolicy.match), (0, operators_1.mergeMap)((action) => {
21
+ const templateId = action.payload;
22
+ const formDraft = state$.value.cardPolicyDetailState.formDraft;
23
+ if (formDraft == null) {
24
+ return (0, rxjs_1.of)((0, cardPolicyDetailReducer_1.updateCardPolicyFetchStatus)({
25
+ fetchState: 'Error',
26
+ error: (0, responsePayload_1.createZeniAPIStatus)('Missing form draft', `Cannot update card-policy ${templateId} — no formDraft is loaded.`),
27
+ }));
28
+ }
29
+ const body = (0, cardPolicyPayload_1.toUpdateCardPolicyTemplateRequestBody)(formDraft);
30
+ return zeniAPI
31
+ .putAndGetJSON(`${zeniAPI.apiEndPoints.cardMicroServiceBaseUrl}/1.0/policy-templates/${templateId}`, body)
32
+ .pipe((0, operators_1.mergeMap)((response) => {
33
+ if ((0, responsePayload_1.isSuccessStatus)(response) && response.data != null) {
34
+ const { template } = response.data;
35
+ const actions = [
36
+ (0, cardPolicyReducer_1.updateCreatedCardPolicyTemplate)(template),
37
+ (0, cardPolicyDetailReducer_1.updateCardPolicyFetchStatus)({ fetchState: 'Completed' }),
38
+ ];
39
+ return (0, rxjs_1.from)(actions);
40
+ }
41
+ else {
42
+ return (0, rxjs_1.of)((0, cardPolicyDetailReducer_1.updateCardPolicyFetchStatus)({
43
+ fetchState: 'Error',
44
+ error: response.status,
45
+ }));
46
+ }
47
+ }), (0, operators_1.catchError)((error) => (0, rxjs_1.of)((0, cardPolicyDetailReducer_1.updateCardPolicyFetchStatus)({
48
+ fetchState: 'Error',
49
+ error: (0, responsePayload_1.createZeniAPIStatus)('Unexpected Error', 'Update card-policy REST API call errored out' +
50
+ JSON.stringify(error)),
51
+ }))));
52
+ }));
53
+ exports.updateCardPolicyEpic = updateCardPolicyEpic;
@@ -0,0 +1,16 @@
1
+ import { ActionsObservable, StateObservable } from 'redux-observable';
2
+ import { Observable } from 'rxjs';
3
+ import { removeCardPolicyTemplate } from '../../../../../entity/cardPolicy/cardPolicyReducer';
4
+ import { RootState } from '../../../../../reducer';
5
+ import { ZeniAPI } from '../../../../../zeniAPI';
6
+ import { archiveCardPolicy, updateArchiveCardPolicyFetchStatus } from './cardPolicyListReducer';
7
+ export type ActionType = ReturnType<typeof archiveCardPolicy> | ReturnType<typeof removeCardPolicyTemplate> | ReturnType<typeof updateArchiveCardPolicyFetchStatus>;
8
+ /**
9
+ * `DELETE /cards/1.0/policy-templates/{id}`. Modeled like
10
+ * `deleteBillEpic`: typed as bare `ZeniAPIResponse` (no `data` body
11
+ * expected) with `isSuccessStatus` driving the success branch. On
12
+ * success the entity slice drops the template via
13
+ * `removeCardPolicyTemplate(templateId)` and the view slice records
14
+ * `Completed` (also pruning the ID from `templateIds`).
15
+ */
16
+ export declare const archiveCardPolicyEpic: (actions$: ActionsObservable<ActionType>, _state$: StateObservable<RootState>, zeniAPI: ZeniAPI) => Observable<ActionType>;
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.archiveCardPolicyEpic = void 0;
4
+ const rxjs_1 = require("rxjs");
5
+ const operators_1 = require("rxjs/operators");
6
+ const cardPolicyReducer_1 = require("../../../../../entity/cardPolicy/cardPolicyReducer");
7
+ const responsePayload_1 = require("../../../../../responsePayload");
8
+ const cardPolicyListReducer_1 = require("./cardPolicyListReducer");
9
+ /**
10
+ * `DELETE /cards/1.0/policy-templates/{id}`. Modeled like
11
+ * `deleteBillEpic`: typed as bare `ZeniAPIResponse` (no `data` body
12
+ * expected) with `isSuccessStatus` driving the success branch. On
13
+ * success the entity slice drops the template via
14
+ * `removeCardPolicyTemplate(templateId)` and the view slice records
15
+ * `Completed` (also pruning the ID from `templateIds`).
16
+ */
17
+ const archiveCardPolicyEpic = (actions$, _state$, zeniAPI) => actions$.pipe((0, operators_1.filter)(cardPolicyListReducer_1.archiveCardPolicy.match), (0, operators_1.mergeMap)((action) => {
18
+ const templateId = action.payload;
19
+ return zeniAPI
20
+ .deleteAndGetJSON(`${zeniAPI.apiEndPoints.cardMicroServiceBaseUrl}/1.0/policy-templates/${templateId}`)
21
+ .pipe((0, operators_1.mergeMap)((response) => {
22
+ if ((0, responsePayload_1.isSuccessStatus)(response)) {
23
+ const actions = [
24
+ (0, cardPolicyReducer_1.removeCardPolicyTemplate)(templateId),
25
+ (0, cardPolicyListReducer_1.updateArchiveCardPolicyFetchStatus)({
26
+ fetchState: 'Completed',
27
+ templateId,
28
+ }),
29
+ ];
30
+ return (0, rxjs_1.from)(actions);
31
+ }
32
+ else {
33
+ return (0, rxjs_1.of)((0, cardPolicyListReducer_1.updateArchiveCardPolicyFetchStatus)({
34
+ fetchState: 'Error',
35
+ error: response.status,
36
+ templateId,
37
+ }));
38
+ }
39
+ }), (0, operators_1.catchError)((error) => (0, rxjs_1.of)((0, cardPolicyListReducer_1.updateArchiveCardPolicyFetchStatus)({
40
+ fetchState: 'Error',
41
+ error: (0, responsePayload_1.createZeniAPIStatus)('Unexpected Error', 'Archive card-policy REST API call errored out' +
42
+ JSON.stringify(error)),
43
+ templateId,
44
+ }))));
45
+ }));
46
+ exports.archiveCardPolicyEpic = archiveCardPolicyEpic;
@@ -0,0 +1,15 @@
1
+ import { FetchState, ID } from '../../../../../commonStateTypes/common';
2
+ import { ZeniAPIStatus } from '../../../../../responsePayload';
3
+ import { CardPolicyListState } from './cardPolicyListState';
4
+ export declare const initialState: CardPolicyListState;
5
+ export declare const fetchCardPolicyList: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<"cardPolicyList/fetchCardPolicyList">, updateCardPolicyListFetchStatus: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
6
+ fetchState: FetchState;
7
+ error?: ZeniAPIStatus;
8
+ templateIds?: ID[];
9
+ }, "cardPolicyList/updateCardPolicyListFetchStatus">, archiveCardPolicy: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[templateId: string], string, "cardPolicyList/archiveCardPolicy", never, never>, updateArchiveCardPolicyFetchStatus: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
10
+ fetchState: FetchState;
11
+ error?: ZeniAPIStatus;
12
+ templateId?: ID;
13
+ }, "cardPolicyList/updateArchiveCardPolicyFetchStatus">, clearCardPolicyList: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<"cardPolicyList/clearCardPolicyList">;
14
+ declare const _default: import("redux").Reducer<CardPolicyListState>;
15
+ export default _default;
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ var _a;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.clearCardPolicyList = exports.updateArchiveCardPolicyFetchStatus = exports.archiveCardPolicy = exports.updateCardPolicyListFetchStatus = exports.fetchCardPolicyList = exports.initialState = void 0;
5
+ const toolkit_1 = require("@reduxjs/toolkit");
6
+ exports.initialState = {
7
+ templateIds: [],
8
+ fetchState: {
9
+ fetchState: 'Not-Started',
10
+ error: undefined,
11
+ },
12
+ archiveFetchState: {
13
+ fetchState: 'Not-Started',
14
+ error: undefined,
15
+ },
16
+ archiveTargetTemplateId: undefined,
17
+ };
18
+ const cardPolicyList = (0, toolkit_1.createSlice)({
19
+ name: 'cardPolicyList',
20
+ initialState: exports.initialState,
21
+ reducers: {
22
+ /**
23
+ * Kick off the `GET /cards/1.0/policy-templates` request. The
24
+ * accompanying epic dispatches `updateCardPolicyTemplates(templates)`
25
+ * + `updateCardPolicyStats(stats)` on the entity slice and
26
+ * `updateCardPolicyListFetchStatus` here (also supplying the ordered
27
+ * `templateIds` on success).
28
+ */
29
+ fetchCardPolicyList(draft) {
30
+ draft.fetchState.fetchState = 'In-Progress';
31
+ draft.fetchState.error = undefined;
32
+ },
33
+ updateCardPolicyListFetchStatus(draft, action) {
34
+ draft.fetchState.fetchState = action.payload.fetchState;
35
+ draft.fetchState.error = action.payload.error;
36
+ if (action.payload.templateIds != null) {
37
+ draft.templateIds = action.payload.templateIds;
38
+ }
39
+ },
40
+ /**
41
+ * Kick off the `DELETE /cards/1.0/policy-templates/{id}` request.
42
+ * The accompanying epic dispatches `removeCardPolicyTemplate(id)` on
43
+ * the entity slice on success + `updateArchiveCardPolicyFetchStatus`
44
+ * here. The view layer also drops the ID from `templateIds` so the
45
+ * list stays in sync without re-fetching.
46
+ */
47
+ archiveCardPolicy: {
48
+ reducer(draft, action) {
49
+ draft.archiveFetchState.fetchState = 'In-Progress';
50
+ draft.archiveFetchState.error = undefined;
51
+ draft.archiveTargetTemplateId = action.payload;
52
+ },
53
+ prepare(templateId) {
54
+ return { payload: templateId };
55
+ },
56
+ },
57
+ updateArchiveCardPolicyFetchStatus(draft, action) {
58
+ draft.archiveFetchState.fetchState = action.payload.fetchState;
59
+ draft.archiveFetchState.error = action.payload.error;
60
+ if (action.payload.fetchState === 'Completed') {
61
+ if (action.payload.templateId != null) {
62
+ draft.templateIds = draft.templateIds.filter((id) => id !== action.payload.templateId);
63
+ }
64
+ draft.archiveTargetTemplateId = undefined;
65
+ }
66
+ else if (action.payload.fetchState === 'Error') {
67
+ draft.archiveTargetTemplateId = undefined;
68
+ }
69
+ },
70
+ clearCardPolicyList(draft) {
71
+ Object.assign(draft, exports.initialState);
72
+ },
73
+ },
74
+ });
75
+ _a = cardPolicyList.actions, exports.fetchCardPolicyList = _a.fetchCardPolicyList, exports.updateCardPolicyListFetchStatus = _a.updateCardPolicyListFetchStatus, exports.archiveCardPolicy = _a.archiveCardPolicy, exports.updateArchiveCardPolicyFetchStatus = _a.updateArchiveCardPolicyFetchStatus, exports.clearCardPolicyList = _a.clearCardPolicyList;
76
+ exports.default = cardPolicyList.reducer;
@@ -0,0 +1,21 @@
1
+ import { FetchStateAndError, ID } from '../../../../../commonStateTypes/common';
2
+ import { CardPolicyStats, CardPolicyTemplate } from '../../../../../entity/cardPolicy/cardPolicyState';
3
+ import { RootState } from '../../../../../reducer';
4
+ /**
5
+ * Composite view returned by `getCardPolicyListView` — the only public
6
+ * shape the Card Policy list page should consume. Mirrors how
7
+ * `chargeCardListSelector` joins the view ID list with the entity store
8
+ * and exposes ancillary lifecycle slots in a single object.
9
+ */
10
+ export interface CardPolicyListSelectorView {
11
+ archiveFetchState: FetchStateAndError;
12
+ fetchState: FetchStateAndError;
13
+ templateIds: ID[];
14
+ templates: CardPolicyTemplate[];
15
+ archiveTargetTemplateId?: ID;
16
+ stats?: CardPolicyStats;
17
+ }
18
+ export declare function getCardPolicyListView(state: RootState): CardPolicyListSelectorView;
19
+ export declare function getCardPolicyListFetchState(state: RootState): FetchStateAndError;
20
+ export declare function getArchiveCardPolicyFetchState(state: RootState): FetchStateAndError;
21
+ export declare function getCardPolicyTemplateIds(state: RootState): ID[];
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getCardPolicyListView = getCardPolicyListView;
4
+ exports.getCardPolicyListFetchState = getCardPolicyListFetchState;
5
+ exports.getArchiveCardPolicyFetchState = getArchiveCardPolicyFetchState;
6
+ exports.getCardPolicyTemplateIds = getCardPolicyTemplateIds;
7
+ const cardPolicySelector_1 = require("../../../../../entity/cardPolicy/cardPolicySelector");
8
+ function getCardPolicyListView(state) {
9
+ const { cardPolicyListState, cardPolicyState } = state;
10
+ return {
11
+ templates: (0, cardPolicySelector_1.getCardPolicyTemplatesByIds)(cardPolicyState, cardPolicyListState.templateIds),
12
+ templateIds: cardPolicyListState.templateIds,
13
+ fetchState: cardPolicyListState.fetchState,
14
+ archiveFetchState: cardPolicyListState.archiveFetchState,
15
+ archiveTargetTemplateId: cardPolicyListState.archiveTargetTemplateId,
16
+ stats: (0, cardPolicySelector_1.getCardPolicyStats)(cardPolicyState),
17
+ };
18
+ }
19
+ function getCardPolicyListFetchState(state) {
20
+ return state.cardPolicyListState.fetchState;
21
+ }
22
+ function getArchiveCardPolicyFetchState(state) {
23
+ return state.cardPolicyListState.archiveFetchState;
24
+ }
25
+ function getCardPolicyTemplateIds(state) {
26
+ return state.cardPolicyListState.templateIds;
27
+ }
@@ -0,0 +1,19 @@
1
+ import { FetchStateAndError, ID } from '../../../../../commonStateTypes/common';
2
+ /**
3
+ * View-side state for the Card Policy list page. Mirrors the
4
+ * `chargeCardList` pattern: server-order ID list + sibling
5
+ * `FetchStateAndError` slots for each long-running mutation the page
6
+ * owns. The actual `CardPolicyTemplate` objects (and tenant-wide stats)
7
+ * live on the `cardPolicy` entity slice so any reader can join via
8
+ * `getCardPolicyTemplatesByIds` / `getCardPolicyStats`.
9
+ */
10
+ export interface CardPolicyListState {
11
+ /** Lifecycle for the `DELETE /policy-templates/{id}` request. */
12
+ archiveFetchState: FetchStateAndError;
13
+ /** Lifecycle for the `GET /policy-templates` request. */
14
+ fetchState: FetchStateAndError;
15
+ /** Ordered list of template IDs as returned by the list endpoint. */
16
+ templateIds: ID[];
17
+ /** ID of the template currently being archived (cleared on completion). */
18
+ archiveTargetTemplateId?: ID;
19
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,19 @@
1
+ import { ActionsObservable, StateObservable } from 'redux-observable';
2
+ import { Observable } from 'rxjs';
3
+ import { updateCardPolicyStats, updateCardPolicyTemplates } from '../../../../../entity/cardPolicy/cardPolicyReducer';
4
+ import { RootState } from '../../../../../reducer';
5
+ import { ZeniAPI } from '../../../../../zeniAPI';
6
+ import { fetchCardPolicyList, updateCardPolicyListFetchStatus } from './cardPolicyListReducer';
7
+ export type ActionType = ReturnType<typeof fetchCardPolicyList> | ReturnType<typeof updateCardPolicyTemplates> | ReturnType<typeof updateCardPolicyStats> | ReturnType<typeof updateCardPolicyListFetchStatus>;
8
+ /**
9
+ * `GET /cards/1.0/policy-templates`. On success the response carries
10
+ * both the tenant-wide `stats` block and a `templates[]` array whose
11
+ * rows are wrapped in `{data: {cards_applied, template}}` (the same
12
+ * envelope the create endpoint returns). We split the result into
13
+ * three actions:
14
+ *
15
+ * 1. `updateCardPolicyTemplates` — full replace of the entity map.
16
+ * 2. `updateCardPolicyStats` — entity-level cached stats.
17
+ * 3. `updateCardPolicyListFetchStatus` — view lifecycle + ordered IDs.
18
+ */
19
+ export declare const fetchCardPolicyListEpic: (actions$: ActionsObservable<ActionType>, _state$: StateObservable<RootState>, zeniAPI: ZeniAPI) => Observable<ActionType>;
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.fetchCardPolicyListEpic = void 0;
4
+ const rxjs_1 = require("rxjs");
5
+ const operators_1 = require("rxjs/operators");
6
+ const cardPolicyPayload_1 = require("../../../../../entity/cardPolicy/cardPolicyPayload");
7
+ const cardPolicyReducer_1 = require("../../../../../entity/cardPolicy/cardPolicyReducer");
8
+ const responsePayload_1 = require("../../../../../responsePayload");
9
+ const cardPolicyListReducer_1 = require("./cardPolicyListReducer");
10
+ /**
11
+ * `GET /cards/1.0/policy-templates`. On success the response carries
12
+ * both the tenant-wide `stats` block and a `templates[]` array whose
13
+ * rows are wrapped in `{data: {cards_applied, template}}` (the same
14
+ * envelope the create endpoint returns). We split the result into
15
+ * three actions:
16
+ *
17
+ * 1. `updateCardPolicyTemplates` — full replace of the entity map.
18
+ * 2. `updateCardPolicyStats` — entity-level cached stats.
19
+ * 3. `updateCardPolicyListFetchStatus` — view lifecycle + ordered IDs.
20
+ */
21
+ const fetchCardPolicyListEpic = (actions$, _state$, zeniAPI) => actions$.pipe((0, operators_1.filter)(cardPolicyListReducer_1.fetchCardPolicyList.match),
22
+ // `exhaustMap` (rather than `mergeMap`) so a duplicate
23
+ // `fetchCardPolicyList` dispatched while the previous one is still
24
+ // in flight is dropped instead of producing a second HTTP request.
25
+ // This guards against React 18 StrictMode, which mount-cleanup-
26
+ // remounts the screen's mount effect with a stale closure of
27
+ // `listFetchState`, causing the same effect to dispatch this
28
+ // action twice synchronously. Retry-after-error still works
29
+ // because the previous inner observable has completed by the time
30
+ // the user retries.
31
+ (0, operators_1.exhaustMap)(() => {
32
+ return zeniAPI
33
+ .getJSON(`${zeniAPI.apiEndPoints.cardMicroServiceBaseUrl}/1.0/policy-templates`)
34
+ .pipe((0, operators_1.mergeMap)((response) => {
35
+ if ((0, responsePayload_1.isSuccessStatus)(response) && response.data != null) {
36
+ const templates = (0, cardPolicyPayload_1.toCardPolicyTemplateList)(response.data);
37
+ const stats = (0, cardPolicyPayload_1.toCardPolicyStats)(response.data.stats);
38
+ const actions = [
39
+ (0, cardPolicyReducer_1.updateCardPolicyTemplates)(templates),
40
+ (0, cardPolicyReducer_1.updateCardPolicyStats)(stats),
41
+ (0, cardPolicyListReducer_1.updateCardPolicyListFetchStatus)({
42
+ fetchState: 'Completed',
43
+ templateIds: templates.map((t) => t.templateId),
44
+ }),
45
+ ];
46
+ return (0, rxjs_1.from)(actions);
47
+ }
48
+ else {
49
+ return (0, rxjs_1.of)((0, cardPolicyListReducer_1.updateCardPolicyListFetchStatus)({
50
+ fetchState: 'Error',
51
+ error: response.status,
52
+ }));
53
+ }
54
+ }), (0, operators_1.catchError)((error) => (0, rxjs_1.of)((0, cardPolicyListReducer_1.updateCardPolicyListFetchStatus)({
55
+ fetchState: 'Error',
56
+ error: (0, responsePayload_1.createZeniAPIStatus)('Unexpected Error', 'Fetch card-policy list REST API call errored out' +
57
+ JSON.stringify(error)),
58
+ }))));
59
+ }));
60
+ exports.fetchCardPolicyListEpic = fetchCardPolicyListEpic;
@@ -0,0 +1,13 @@
1
+ import { FetchState, ID } from '../../../../../commonStateTypes/common';
2
+ import { BulkCreateCardPolicyTemplateError, CreateCardPolicyTemplatesRequest } from '../../../../../entity/cardPolicy/cardPolicyPayload';
3
+ import { ZeniAPIStatus } from '../../../../../responsePayload';
4
+ import { CreateCardPolicyState } from './createCardPolicyState';
5
+ export declare const initialState: CreateCardPolicyState;
6
+ export declare const createCardPolicyTemplates: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[request: CreateCardPolicyTemplatesRequest], CreateCardPolicyTemplatesRequest, "createCardPolicy/createCardPolicyTemplates", never, never>, updateCreateCardPolicyTemplateRequestState: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
7
+ fetchState: FetchState;
8
+ error?: ZeniAPIStatus;
9
+ perItemErrors?: BulkCreateCardPolicyTemplateError[];
10
+ templateIds?: ID[];
11
+ }, "createCardPolicy/updateCreateCardPolicyTemplateRequestState">, clearCreateCardPolicy: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<"createCardPolicy/clearCreateCardPolicy">;
12
+ declare const _default: import("redux").Reducer<CreateCardPolicyState>;
13
+ export default _default;
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ var _a;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.clearCreateCardPolicy = exports.updateCreateCardPolicyTemplateRequestState = exports.createCardPolicyTemplates = exports.initialState = void 0;
5
+ const toolkit_1 = require("@reduxjs/toolkit");
6
+ exports.initialState = {
7
+ createCardPolicyTemplateRequestState: {
8
+ fetchState: 'Not-Started',
9
+ error: undefined,
10
+ },
11
+ lastCreatedCardPolicyTemplateIds: [],
12
+ lastCreateCardPolicyTemplateErrors: [],
13
+ };
14
+ const createCardPolicy = (0, toolkit_1.createSlice)({
15
+ name: 'createCardPolicy',
16
+ initialState: exports.initialState,
17
+ reducers: {
18
+ createCardPolicyTemplates: {
19
+ reducer(draft, action) {
20
+ draft.createCardPolicyTemplateRequestState.fetchState = 'In-Progress';
21
+ draft.createCardPolicyTemplateRequestState.error = undefined;
22
+ draft.lastCreatedCardPolicyTemplateIds = [];
23
+ draft.lastCreateCardPolicyTemplateErrors = [];
24
+ // Mirrors `lastIssueSourceChatSessionId` so list/drawer can attribute the in-flight create to its AI CFO session.
25
+ draft.lastCreateCardPolicySourceChatSessionId =
26
+ action.payload.sourceChatSessionId;
27
+ },
28
+ prepare(request) {
29
+ return { payload: request };
30
+ },
31
+ },
32
+ updateCreateCardPolicyTemplateRequestState(draft, action) {
33
+ draft.createCardPolicyTemplateRequestState.fetchState =
34
+ action.payload.fetchState;
35
+ draft.createCardPolicyTemplateRequestState.error = action.payload.error;
36
+ if (action.payload.templateIds != null) {
37
+ draft.lastCreatedCardPolicyTemplateIds = action.payload.templateIds;
38
+ }
39
+ if (action.payload.perItemErrors != null) {
40
+ draft.lastCreateCardPolicyTemplateErrors = action.payload.perItemErrors;
41
+ }
42
+ },
43
+ clearCreateCardPolicy(draft) {
44
+ Object.assign(draft, exports.initialState);
45
+ },
46
+ },
47
+ });
48
+ _a = createCardPolicy.actions, exports.createCardPolicyTemplates = _a.createCardPolicyTemplates, exports.updateCreateCardPolicyTemplateRequestState = _a.updateCreateCardPolicyTemplateRequestState, exports.clearCreateCardPolicy = _a.clearCreateCardPolicy;
49
+ exports.default = createCardPolicy.reducer;
@@ -0,0 +1,32 @@
1
+ import { FetchStateAndError, ID } from '../../../../../commonStateTypes/common';
2
+ import { BulkCreateCardPolicyTemplateError } from '../../../../../entity/cardPolicy/cardPolicyPayload';
3
+ import { CreateCardPolicyState } from './createCardPolicyState';
4
+ export declare function getCreateCardPolicyTemplateRequestState(state: CreateCardPolicyState): FetchStateAndError;
5
+ /**
6
+ * All template ids created by the most recent successful bulk submit
7
+ * (in BE return order). Empty array before any submit or after
8
+ * `clearCreateCardPolicy`. Multi-policy AI CFO submit reads this; the
9
+ * single-policy `getLastCreatedCardPolicyTemplateId` selector below is a
10
+ * convenience for the manual-create routing flow.
11
+ */
12
+ export declare function getLastCreatedCardPolicyTemplateIds(state: CreateCardPolicyState): ID[];
13
+ /**
14
+ * Convenience selector returning the first id of the most recent submit
15
+ * — kept ergonomic for the single-create page's "navigate to detail on
16
+ * success" logic, which only ever creates one template. Returns
17
+ * `undefined` when no submit has succeeded or when the list is empty.
18
+ */
19
+ export declare function getLastCreatedCardPolicyTemplateId(state: CreateCardPolicyState): ID | undefined;
20
+ /**
21
+ * Per-item errors returned by the bulk POST when one or more templates
22
+ * failed to persist. Empty on full success; populated on partial success
23
+ * so the UI can render a "N of M created" banner alongside the navigate /
24
+ * close behaviour driven by the lifecycle selector.
25
+ */
26
+ export declare function getLastCreateCardPolicyTemplateErrors(state: CreateCardPolicyState): BulkCreateCardPolicyTemplateError[];
27
+ /**
28
+ * Chat session id that triggered the most recent bulk create — used by the
29
+ * card policy list screen and the AI CFO drawer to scope "creating…" and
30
+ * "created" placeholders to the active conversation.
31
+ */
32
+ export declare function getLastCreateCardPolicySourceChatSessionId(state: CreateCardPolicyState): ID | undefined;
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getCreateCardPolicyTemplateRequestState = getCreateCardPolicyTemplateRequestState;
4
+ exports.getLastCreatedCardPolicyTemplateIds = getLastCreatedCardPolicyTemplateIds;
5
+ exports.getLastCreatedCardPolicyTemplateId = getLastCreatedCardPolicyTemplateId;
6
+ exports.getLastCreateCardPolicyTemplateErrors = getLastCreateCardPolicyTemplateErrors;
7
+ exports.getLastCreateCardPolicySourceChatSessionId = getLastCreateCardPolicySourceChatSessionId;
8
+ function getCreateCardPolicyTemplateRequestState(state) {
9
+ return state.createCardPolicyTemplateRequestState;
10
+ }
11
+ /**
12
+ * All template ids created by the most recent successful bulk submit
13
+ * (in BE return order). Empty array before any submit or after
14
+ * `clearCreateCardPolicy`. Multi-policy AI CFO submit reads this; the
15
+ * single-policy `getLastCreatedCardPolicyTemplateId` selector below is a
16
+ * convenience for the manual-create routing flow.
17
+ */
18
+ function getLastCreatedCardPolicyTemplateIds(state) {
19
+ return state.lastCreatedCardPolicyTemplateIds;
20
+ }
21
+ /**
22
+ * Convenience selector returning the first id of the most recent submit
23
+ * — kept ergonomic for the single-create page's "navigate to detail on
24
+ * success" logic, which only ever creates one template. Returns
25
+ * `undefined` when no submit has succeeded or when the list is empty.
26
+ */
27
+ function getLastCreatedCardPolicyTemplateId(state) {
28
+ return state.lastCreatedCardPolicyTemplateIds[0];
29
+ }
30
+ /**
31
+ * Per-item errors returned by the bulk POST when one or more templates
32
+ * failed to persist. Empty on full success; populated on partial success
33
+ * so the UI can render a "N of M created" banner alongside the navigate /
34
+ * close behaviour driven by the lifecycle selector.
35
+ */
36
+ function getLastCreateCardPolicyTemplateErrors(state) {
37
+ return state.lastCreateCardPolicyTemplateErrors;
38
+ }
39
+ /**
40
+ * Chat session id that triggered the most recent bulk create — used by the
41
+ * card policy list screen and the AI CFO drawer to scope "creating…" and
42
+ * "created" placeholders to the active conversation.
43
+ */
44
+ function getLastCreateCardPolicySourceChatSessionId(state) {
45
+ return state.lastCreateCardPolicySourceChatSessionId;
46
+ }