@zeniai/client-epic-state 5.0.82 → 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 (139) 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/epic.d.ts +11 -1
  32. package/lib/epic.js +11 -1
  33. package/lib/esm/entity/aiCfo/aiCfoReducer.js +328 -5
  34. package/lib/esm/entity/aiCfo/aiCfoSelector.js +26 -1
  35. package/lib/esm/entity/aiCfo/aiCfoState.js +27 -0
  36. package/lib/esm/entity/cardPolicy/cardPolicyPayload.js +130 -0
  37. package/lib/esm/entity/cardPolicy/cardPolicyReducer.js +171 -0
  38. package/lib/esm/entity/cardPolicy/cardPolicySelector.js +75 -0
  39. package/lib/esm/entity/cardPolicy/cardPolicyState.js +9 -0
  40. package/lib/esm/entity/cardPolicy/extractPolicyDocumentEpic.js +64 -0
  41. package/lib/esm/entity/cardPolicy/fetchCardPolicyVendorOptionsEpic.js +43 -0
  42. package/lib/esm/entity/cardPolicy/policyDocumentExtractionToRecommendationBridgeEpic.js +35 -0
  43. package/lib/esm/entity/cardPolicy/policyRecommendationFromUploadEpic.js +100 -0
  44. package/lib/esm/entity/snackbar/snackbarTypes.js +3 -0
  45. package/lib/esm/entity/tenant/clearAllEpic.js +8 -0
  46. package/lib/esm/epic.js +11 -1
  47. package/lib/esm/index.js +26 -8
  48. package/lib/esm/reducer.js +12 -0
  49. package/lib/esm/view/aiCfoView/aiCfoViewReducer.js +6 -3
  50. package/lib/esm/view/aiCfoView/epics/createSessionAndSubmitEpic.js +5 -2
  51. package/lib/esm/view/aiCfoView/epics/createSessionEpic.js +2 -1
  52. package/lib/esm/view/aiCfoView/epics/fetchSuggestedQuestionsEpic.js +12 -2
  53. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/cardPolicyDetailReducer.js +70 -0
  54. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/cardPolicyDetailSelector.js +22 -0
  55. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/cardPolicyDetailState.js +1 -0
  56. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/fetchCardPolicyDetailEpic.js +56 -0
  57. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/updateCardPolicyEpic.js +49 -0
  58. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/archiveCardPolicyEpic.js +42 -0
  59. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/cardPolicyListReducer.js +72 -0
  60. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/cardPolicyListSelector.js +21 -0
  61. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/cardPolicyListState.js +1 -0
  62. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/fetchCardPolicyListEpic.js +56 -0
  63. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/createCardPolicyReducer.js +45 -0
  64. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/createCardPolicySelector.js +39 -0
  65. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/createCardPolicyState.js +1 -0
  66. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/createCardPolicyTemplateEpic.js +53 -0
  67. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/fetchCardPolicyMccCategoriesEpic.js +25 -0
  68. package/lib/esm/view/spendManagement/chargeCards/chargeCardList/chargeCardListSelector.js +25 -0
  69. package/lib/esm/view/spendManagement/chargeCards/issueChargeCard/aiCardCreationFormDraftTypes.js +1 -0
  70. package/lib/esm/view/spendManagement/chargeCards/issueChargeCard/buildAiCardCreationFormDraftSeed.js +62 -0
  71. package/lib/esm/view/spendManagement/chargeCards/issueChargeCard/deriveAiCardRowsFromTeams.js +47 -0
  72. package/lib/esm/view/spendManagement/chargeCards/issueChargeCard/issueChargeCardEpic.js +2 -2
  73. package/lib/esm/view/spendManagement/chargeCards/issueChargeCard/issueChargeCardReducer.js +62 -4
  74. package/lib/esm/view/spendManagement/chargeCards/issueChargeCard/issueChargeCardSelector.js +61 -0
  75. package/lib/esm/view/spendManagement/chargeCards/issueChargeCard/toIssueChargeCardLocalDataFromDraft.js +69 -0
  76. package/lib/index.d.ts +25 -8
  77. package/lib/index.js +139 -13
  78. package/lib/reducer.d.ts +12 -0
  79. package/lib/reducer.js +12 -0
  80. package/lib/view/aiCfoView/aiCfoViewReducer.d.ts +11 -2
  81. package/lib/view/aiCfoView/aiCfoViewReducer.js +6 -3
  82. package/lib/view/aiCfoView/epics/createSessionAndSubmitEpic.js +5 -2
  83. package/lib/view/aiCfoView/epics/createSessionEpic.js +2 -1
  84. package/lib/view/aiCfoView/epics/fetchSuggestedQuestionsEpic.d.ts +8 -1
  85. package/lib/view/aiCfoView/epics/fetchSuggestedQuestionsEpic.js +12 -2
  86. package/lib/view/expenseAutomationView/helpers/transactionCategorizationLocalDataHelper.d.ts +1 -1
  87. package/lib/view/expenseAutomationView/types/reconciliationViewState.d.ts +1 -1
  88. package/lib/view/people/peopleTypes.d.ts +1 -1
  89. package/lib/view/scheduleView/scheduleListView/scheduleListTypes.d.ts +1 -1
  90. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/cardPolicyDetailReducer.d.ts +14 -0
  91. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/cardPolicyDetailReducer.js +74 -0
  92. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/cardPolicyDetailSelector.d.ts +21 -0
  93. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/cardPolicyDetailSelector.js +28 -0
  94. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/cardPolicyDetailState.d.ts +25 -0
  95. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/cardPolicyDetailState.js +2 -0
  96. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/fetchCardPolicyDetailEpic.d.ts +19 -0
  97. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/fetchCardPolicyDetailEpic.js +60 -0
  98. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/updateCardPolicyEpic.d.ts +18 -0
  99. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/updateCardPolicyEpic.js +53 -0
  100. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/archiveCardPolicyEpic.d.ts +16 -0
  101. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/archiveCardPolicyEpic.js +46 -0
  102. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/cardPolicyListReducer.d.ts +15 -0
  103. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/cardPolicyListReducer.js +76 -0
  104. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/cardPolicyListSelector.d.ts +21 -0
  105. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/cardPolicyListSelector.js +27 -0
  106. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/cardPolicyListState.d.ts +19 -0
  107. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/cardPolicyListState.js +2 -0
  108. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/fetchCardPolicyListEpic.d.ts +19 -0
  109. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/fetchCardPolicyListEpic.js +60 -0
  110. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/createCardPolicyReducer.d.ts +13 -0
  111. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/createCardPolicyReducer.js +49 -0
  112. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/createCardPolicySelector.d.ts +32 -0
  113. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/createCardPolicySelector.js +46 -0
  114. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/createCardPolicyState.d.ts +45 -0
  115. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/createCardPolicyState.js +2 -0
  116. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/createCardPolicyTemplateEpic.d.ts +25 -0
  117. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/createCardPolicyTemplateEpic.js +57 -0
  118. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/fetchCardPolicyMccCategoriesEpic.d.ts +15 -0
  119. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/fetchCardPolicyMccCategoriesEpic.js +29 -0
  120. package/lib/view/spendManagement/chargeCards/chargeCardList/chargeCardList.d.ts +1 -1
  121. package/lib/view/spendManagement/chargeCards/chargeCardList/chargeCardListSelector.d.ts +14 -0
  122. package/lib/view/spendManagement/chargeCards/chargeCardList/chargeCardListSelector.js +27 -1
  123. package/lib/view/spendManagement/chargeCards/issueChargeCard/aiCardCreationFormDraftTypes.d.ts +79 -0
  124. package/lib/view/spendManagement/chargeCards/issueChargeCard/aiCardCreationFormDraftTypes.js +2 -0
  125. package/lib/view/spendManagement/chargeCards/issueChargeCard/buildAiCardCreationFormDraftSeed.d.ts +25 -0
  126. package/lib/view/spendManagement/chargeCards/issueChargeCard/buildAiCardCreationFormDraftSeed.js +66 -0
  127. package/lib/view/spendManagement/chargeCards/issueChargeCard/deriveAiCardRowsFromTeams.d.ts +26 -0
  128. package/lib/view/spendManagement/chargeCards/issueChargeCard/deriveAiCardRowsFromTeams.js +51 -0
  129. package/lib/view/spendManagement/chargeCards/issueChargeCard/issueChargeCardEpic.d.ts +2 -2
  130. package/lib/view/spendManagement/chargeCards/issueChargeCard/issueChargeCardEpic.js +1 -1
  131. package/lib/view/spendManagement/chargeCards/issueChargeCard/issueChargeCardReducer.d.ts +12 -2
  132. package/lib/view/spendManagement/chargeCards/issueChargeCard/issueChargeCardReducer.js +63 -5
  133. package/lib/view/spendManagement/chargeCards/issueChargeCard/issueChargeCardSelector.d.ts +42 -0
  134. package/lib/view/spendManagement/chargeCards/issueChargeCard/issueChargeCardSelector.js +68 -1
  135. package/lib/view/spendManagement/chargeCards/issueChargeCard/issueChargeCardState.d.ts +18 -0
  136. package/lib/view/spendManagement/chargeCards/issueChargeCard/toIssueChargeCardLocalDataFromDraft.d.ts +11 -0
  137. package/lib/view/spendManagement/chargeCards/issueChargeCard/toIssueChargeCardLocalDataFromDraft.js +73 -0
  138. package/lib/view/taskManager/taskListView/taskListReducer.d.ts +1 -1
  139. package/package.json +1 -1
@@ -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
+ }
@@ -0,0 +1,45 @@
1
+ import { FetchStateAndError, ID } from '../../../../../commonStateTypes/common';
2
+ import { BulkCreateCardPolicyTemplateError } from '../../../../../entity/cardPolicy/cardPolicyPayload';
3
+ /**
4
+ * View-side scaffolding for the Card Policy "create" flow.
5
+ *
6
+ * `POST /cards/1.0/policy-templates` is now a bulk endpoint — both the
7
+ * manual create page and the AI CFO submit pass an array of templates
8
+ * (single-element today; multi-element when AI CFO multi-policy review
9
+ * lands). The slice tracks one request lifecycle for the whole submit
10
+ * and captures the per-template ids + errors on success.
11
+ *
12
+ * List + edit lifecycles live in sibling slices (`cardPolicyList`,
13
+ * `cardPolicyDetail`); MCC categories used by the create form live on
14
+ * the entity slice (shared with the AI-CFO flow) and are fetched via the
15
+ * co-located `fetchCardPolicyMccCategoriesEpic`.
16
+ */
17
+ export interface CreateCardPolicyState {
18
+ createCardPolicyTemplateRequestState: FetchStateAndError;
19
+ /**
20
+ * Per-item failures returned alongside `templates_created` on the bulk
21
+ * response. Empty on full success; populated on partial success so the
22
+ * UI can render a "N of M created" banner. Cleared when a new submit
23
+ * starts and by `clearCreateCardPolicy`.
24
+ */
25
+ lastCreateCardPolicyTemplateErrors: BulkCreateCardPolicyTemplateError[];
26
+ /**
27
+ * `templateId`s of the templates created by the most recent successful
28
+ * bulk submit, in the order they were returned by the BE. Empty when no
29
+ * submit has succeeded yet or after `clearCreateCardPolicy`.
30
+ *
31
+ * For the single-policy case this holds exactly one id; the
32
+ * `getLastCreatedCardPolicyTemplateId` selector returns `[0]` for
33
+ * ergonomic single-create routing.
34
+ */
35
+ lastCreatedCardPolicyTemplateIds: ID[];
36
+ /**
37
+ * Chat session id from `sourceChatSessionId` on the most recent
38
+ * `createCardPolicyTemplates` dispatch — i.e. the AI CFO conversation
39
+ * that triggered the bulk create. Lets the policy list and AI CFO
40
+ * drawer correlate an in-flight create back to its originating session.
41
+ * `undefined` when the most recent submit came from the manual create
42
+ * screen (which omits `sourceChatSessionId`).
43
+ */
44
+ lastCreateCardPolicySourceChatSessionId?: ID;
45
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,25 @@
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 { createCardPolicyTemplates, updateCreateCardPolicyTemplateRequestState } from './createCardPolicyReducer';
7
+ export type ActionType = ReturnType<typeof createCardPolicyTemplates> | ReturnType<typeof updateCreatedCardPolicyTemplate> | ReturnType<typeof updateCreateCardPolicyTemplateRequestState>;
8
+ /**
9
+ * `POST /cards/1.0/policy-templates` (bulk). Builds the bulk wire body
10
+ * from the camelCased action payload, sends one round-trip, and on
11
+ * success fans out:
12
+ * - one `updateCreatedCardPolicyTemplate` on the entity slice per row
13
+ * in `templates_created` (so the entity store is hydrated with every
14
+ * created template), and
15
+ * - one `updateCreateCardPolicyTemplateRequestState` with the ordered
16
+ * id list + per-item errors so the view can render partial-success
17
+ * UX without re-touching the wire types.
18
+ *
19
+ * Partial success (`errors.length > 0` with at least one template
20
+ * created) is still treated as `Completed` — the lifecycle is binary
21
+ * and the per-item errors live on the slice for the UI to inspect.
22
+ * Hard failures (non-success `status` or thrown errors) map to `Error`
23
+ * the same way they did pre-bulk.
24
+ */
25
+ export declare const createCardPolicyTemplatesEpic: (actions$: ActionsObservable<ActionType>, _state$: StateObservable<RootState>, zeniAPI: ZeniAPI) => Observable<ActionType>;
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createCardPolicyTemplatesEpic = 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 cardPolicyPayload_1 = require("../../../../../entity/cardPolicy/cardPolicyPayload");
8
+ const responsePayload_1 = require("../../../../../responsePayload");
9
+ const createCardPolicyReducer_1 = require("./createCardPolicyReducer");
10
+ /**
11
+ * `POST /cards/1.0/policy-templates` (bulk). Builds the bulk wire body
12
+ * from the camelCased action payload, sends one round-trip, and on
13
+ * success fans out:
14
+ * - one `updateCreatedCardPolicyTemplate` on the entity slice per row
15
+ * in `templates_created` (so the entity store is hydrated with every
16
+ * created template), and
17
+ * - one `updateCreateCardPolicyTemplateRequestState` with the ordered
18
+ * id list + per-item errors so the view can render partial-success
19
+ * UX without re-touching the wire types.
20
+ *
21
+ * Partial success (`errors.length > 0` with at least one template
22
+ * created) is still treated as `Completed` — the lifecycle is binary
23
+ * and the per-item errors live on the slice for the UI to inspect.
24
+ * Hard failures (non-success `status` or thrown errors) map to `Error`
25
+ * the same way they did pre-bulk.
26
+ */
27
+ const createCardPolicyTemplatesEpic = (actions$, _state$, zeniAPI) => actions$.pipe((0, operators_1.filter)(createCardPolicyReducer_1.createCardPolicyTemplates.match), (0, operators_1.mergeMap)((action) => {
28
+ const body = (0, cardPolicyPayload_1.toCreateCardPolicyTemplatesRequestBody)(action.payload);
29
+ return zeniAPI
30
+ .postAndGetJSON(`${zeniAPI.apiEndPoints.cardMicroServiceBaseUrl}/1.0/policy-templates`, body)
31
+ .pipe((0, operators_1.mergeMap)((response) => {
32
+ if ((0, responsePayload_1.isSuccessStatus)(response) && response.data != null) {
33
+ const { templates_created, errors } = response.data;
34
+ const createdTemplates = templates_created.map((row) => row.template);
35
+ const actions = [
36
+ ...createdTemplates.map((template) => (0, cardPolicyReducer_1.updateCreatedCardPolicyTemplate)(template)),
37
+ (0, createCardPolicyReducer_1.updateCreateCardPolicyTemplateRequestState)({
38
+ fetchState: 'Completed',
39
+ perItemErrors: (errors ?? []).map(cardPolicyPayload_1.toBulkCreateCardPolicyTemplateError),
40
+ templateIds: createdTemplates.map((template) => template.template_id),
41
+ }),
42
+ ];
43
+ return (0, rxjs_1.from)(actions);
44
+ }
45
+ else {
46
+ return (0, rxjs_1.of)((0, createCardPolicyReducer_1.updateCreateCardPolicyTemplateRequestState)({
47
+ fetchState: 'Error',
48
+ error: response.status,
49
+ }));
50
+ }
51
+ }), (0, operators_1.catchError)((error) => (0, rxjs_1.of)((0, createCardPolicyReducer_1.updateCreateCardPolicyTemplateRequestState)({
52
+ fetchState: 'Error',
53
+ error: (0, responsePayload_1.createZeniAPIStatus)('Unexpected Error', 'Create card-policy templates REST API call errored out' +
54
+ JSON.stringify(error)),
55
+ }))));
56
+ }));
57
+ exports.createCardPolicyTemplatesEpic = createCardPolicyTemplatesEpic;
@@ -0,0 +1,15 @@
1
+ import { ActionsObservable, StateObservable } from 'redux-observable';
2
+ import { Observable } from 'rxjs';
3
+ import { fetchCardPolicyMccCategories, updateCardPolicyMccCategories, updateCardPolicyMccCategoriesFailure } from '../../../../../entity/cardPolicy/cardPolicyReducer';
4
+ import { RootState } from '../../../../../reducer';
5
+ import { ZeniAPI } from '../../../../../zeniAPI';
6
+ /**
7
+ * MCC categories are reference data shared between the manual create
8
+ * flow and the AI-CFO `card_policy` form. The slice fields live on the
9
+ * `entity/cardPolicy` slice (so any consumer can read them without
10
+ * re-fetching); only the fetch lifecycle lives in `createCardPolicy/`
11
+ * because the manual create page is currently the only producer of the
12
+ * `fetchCardPolicyMccCategories` action.
13
+ */
14
+ export type ActionType = ReturnType<typeof fetchCardPolicyMccCategories> | ReturnType<typeof updateCardPolicyMccCategories> | ReturnType<typeof updateCardPolicyMccCategoriesFailure>;
15
+ export declare const fetchCardPolicyMccCategoriesEpic: (actions$: ActionsObservable<ActionType>, _state$: StateObservable<RootState>, zeniAPI: ZeniAPI) => Observable<ActionType>;
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.fetchCardPolicyMccCategoriesEpic = 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 fetchCardPolicyMccCategoriesEpic = (actions$, _state$, zeniAPI) => actions$.pipe((0, operators_1.filter)(cardPolicyReducer_1.fetchCardPolicyMccCategories.match),
9
+ // `exhaustMap` (rather than `mergeMap`) so a duplicate
10
+ // `fetchCardPolicyMccCategories` dispatched while the previous one
11
+ // is still in flight is dropped instead of producing a second HTTP
12
+ // request. Both the Create and Edit policy screens dispatch this
13
+ // on mount, and React 18 StrictMode invokes their mount effect
14
+ // twice with a stale `mccCategoriesFetchState` closure — without
15
+ // `exhaustMap` that yields two `/cards/mcc-codes` calls.
16
+ (0, operators_1.exhaustMap)(() => {
17
+ return zeniAPI
18
+ .getJSON(`${zeniAPI.apiEndPoints.cardMicroServiceBaseUrl}/1.0/cards/mcc-codes`)
19
+ .pipe((0, operators_1.mergeMap)((response) => {
20
+ if ((0, responsePayload_1.isSuccessStatus)(response) && response.data != null) {
21
+ return (0, rxjs_1.from)([(0, cardPolicyReducer_1.updateCardPolicyMccCategories)(response.data)]);
22
+ }
23
+ else {
24
+ return (0, rxjs_1.of)((0, cardPolicyReducer_1.updateCardPolicyMccCategoriesFailure)(response.status));
25
+ }
26
+ }), (0, operators_1.catchError)((error) => (0, rxjs_1.of)((0, cardPolicyReducer_1.updateCardPolicyMccCategoriesFailure)((0, responsePayload_1.createZeniAPIStatus)('Unexpected Error', 'Fetch card policy MCC categories REST API call errored out' +
27
+ JSON.stringify(error))))));
28
+ }));
29
+ exports.fetchCardPolicyMccCategoriesEpic = fetchCardPolicyMccCategoriesEpic;
@@ -61,7 +61,7 @@ export declare const initialCreditAcc: CreditAccount;
61
61
  export declare const initialDebitCardSummaries: DebitCardSummaries;
62
62
  export declare const initialResendRevokeCardInvite: ResendRevokeCardInvite;
63
63
  export declare const initialCreditAccountRepayment: CreditAccountRepayment;
64
- export declare const toChargeCardSortKeyType: (v: string) => "status" | "accountType" | "owner" | "cardName" | "limit" | "department" | "cardType" | "utilisation";
64
+ export declare const toChargeCardSortKeyType: (v: string) => "status" | "department" | "accountType" | "owner" | "cardName" | "limit" | "cardType" | "utilisation";
65
65
  export declare type ChargeCardViewSortKey = ReturnType<typeof toChargeCardSortKeyType>;
66
66
  export declare const ALL_CASHBACK_SORT_KEYS: readonly ["month", "cashback"];
67
67
  export declare const toCashbackSortKeyType: (v: string) => "month" | "cashback";
@@ -54,7 +54,21 @@ export interface MyPendingActivationChargeCardListSelectorView extends SelectorV
54
54
  export interface ChargeCardListWithShippingAddressSelectorView extends SelectorView {
55
55
  cards: ChargeCardWithUserAndShippingAddress[];
56
56
  }
57
+ export interface AllChargeCardsWithUserSelectorView extends SelectorView {
58
+ cards: ChargeCardWithUser[];
59
+ }
57
60
  export declare const getChargeCardListView: (state: RootState, includeCreditAccountDebitSummaryAndCashbackInfo: boolean, isDebitCardEnabled: boolean, isCreditCardEnabled: boolean) => ChargeCardListSelectorView;
61
+ /**
62
+ * Returns every enriched `ChargeCardWithUser` for the tenant, without
63
+ * applying the cards-list screen's `searchText` filter or its column
64
+ * `sortKey/sortOrder`. Used by surfaces that need the raw card universe
65
+ * decoupled from whatever the user has typed/sorted on the cards list
66
+ * (e.g. the Card Policy "Apply to Cards" picker, which owns its own
67
+ * search + sort UI). The list-screen's filter/sort state is intentionally
68
+ * left untouched so revisits to the cards list still restore the user's
69
+ * search.
70
+ */
71
+ export declare const getAllChargeCardsWithUser: (state: RootState) => AllChargeCardsWithUserSelectorView;
58
72
  export declare const getMyPendingActivationChargeCardListView: (state: RootState) => MyPendingActivationChargeCardListSelectorView;
59
73
  export declare const getMyRequestOnHoldChargeCardListWithShippingAddress: (state: RootState) => ChargeCardListWithShippingAddressSelectorView;
60
74
  /**
@@ -3,7 +3,7 @@ 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.getChargeCardBulkActionView = exports.getChargeCardRowActionView = exports.getChargeCardRecurringExpensesByCardIds = 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.getAllChargeCardsWithUser = exports.getChargeCardListView = void 0;
7
7
  const toolkit_1 = require("@reduxjs/toolkit");
8
8
  const orderBy_1 = __importDefault(require("lodash/orderBy"));
9
9
  const sortOrderPayload_1 = require("../../../../commonPayloadTypes/sortOrderPayload");
@@ -94,6 +94,32 @@ const getChargeCardListView = (state, includeCreditAccountDebitSummaryAndCashbac
94
94
  };
95
95
  };
96
96
  exports.getChargeCardListView = getChargeCardListView;
97
+ /**
98
+ * Returns every enriched `ChargeCardWithUser` for the tenant, without
99
+ * applying the cards-list screen's `searchText` filter or its column
100
+ * `sortKey/sortOrder`. Used by surfaces that need the raw card universe
101
+ * decoupled from whatever the user has typed/sorted on the cards list
102
+ * (e.g. the Card Policy "Apply to Cards" picker, which owns its own
103
+ * search + sort UI). The list-screen's filter/sort state is intentionally
104
+ * left untouched so revisits to the cards list still restore the user's
105
+ * search.
106
+ */
107
+ const getAllChargeCardsWithUser = (state) => {
108
+ const { chargeCardListState, chargeCardState, chargeCardConfigState } = state;
109
+ const cards = (0, chargeCardSelector_1.getChargeCardsByIds)(chargeCardState, chargeCardListState.cardIds);
110
+ const chargeCardsWithUser = getChargeCardsWithUser(cards, state);
111
+ const fetchState = (0, reduceFetchState_1.reduceFetchState)([
112
+ chargeCardListState,
113
+ chargeCardConfigState,
114
+ ]).fetchState;
115
+ return {
116
+ fetchState,
117
+ error: chargeCardListState.error,
118
+ cards: chargeCardsWithUser,
119
+ version: '1.0',
120
+ };
121
+ };
122
+ exports.getAllChargeCardsWithUser = getAllChargeCardsWithUser;
97
123
  const getMyPendingActivationChargeCardListView = (state) => {
98
124
  const { tenantState, chargeCardListState, chargeCardState } = state;
99
125
  const cards = (0, chargeCardSelector_1.getChargeCardsByIds)(chargeCardState, chargeCardListState.cardIds);
@@ -0,0 +1,79 @@
1
+ import { ID } from '../../../../commonStateTypes/common';
2
+ import { CardsCardKind, CardsCreationInitialData } from '../../../../entity/aiCfo/aiCfoState';
3
+ import { User } from '../../../../entity/user/userState';
4
+ /**
5
+ * AI CFO card-creation form draft state — the canonical source of
6
+ * truth for the `CardsCreationInteractiveForm` component (rule #4).
7
+ *
8
+ * The web-components form is a pure renderer that hydrates from
9
+ * `IssueChargeCardState.aiCardCreationFormDraft` and emits every
10
+ * change back via `onFormChange` → `updateAiCardCreationFormDraft`.
11
+ *
12
+ * The AI-payload-side types (`CardsCardKind`, `CardsCardOption`,
13
+ * `CardNameOption`, `CardsCreationInitialData`, etc.) are defined on
14
+ * `entity/aiCfo/aiCfoState.ts` and consumed directly from there — this
15
+ * file only declares the FE-side form draft shapes and the companion
16
+ * seed context the reducer keeps for re-derivation.
17
+ */
18
+ /**
19
+ * Step-1 row: a single team the user can opt in/out of via a checkbox.
20
+ *
21
+ * Mirrors the AI's `teamRows[i]` payload field-for-field plus the
22
+ * `isChecked` toggle, with FE display strings (`value`, `rightLabel`)
23
+ * resolved from the AI's `avgMonthlySpend` / `recommendedLimit`.
24
+ */
25
+ export interface CardsTeamRow {
26
+ cardKind: CardsCardKind;
27
+ id: string;
28
+ isChecked: boolean;
29
+ label: string;
30
+ /** Right column primary value, e.g. "$20,000". */
31
+ rightLabel: string;
32
+ /** Middle column primary value, e.g. "$18,400". */
33
+ value: string;
34
+ rightSubLabel?: string;
35
+ subLabel?: string;
36
+ subValue?: string;
37
+ }
38
+ /**
39
+ * Owner field value held in the form state. Mirrors `UserSingleSelectField`
40
+ * which wants both the universe of users and the currently selected user
41
+ * collocated with the field value.
42
+ */
43
+ export interface CardsOwnerFieldValue {
44
+ allUsers: User[];
45
+ selectedUser?: User;
46
+ }
47
+ /**
48
+ * Step-2 row: the configured card for one of the teams the user kept
49
+ * in step 1. `cardOptionId` references one of the
50
+ * `CardsCreationInitialData.cardOptions`.
51
+ */
52
+ export interface CardsCardRow {
53
+ cardKind: CardsCardKind;
54
+ cardOptionId: string;
55
+ id: string;
56
+ label: string;
57
+ owner: CardsOwnerFieldValue;
58
+ recommendedLimit?: number;
59
+ }
60
+ /**
61
+ * Canonical CES shape for the AI card-creation form. The web-components
62
+ * `CardsCreationInteractiveForm` hydrates RHF from this object and emits
63
+ * every change back through `onFormChange`.
64
+ */
65
+ export interface CardsFormDraft {
66
+ cardRows: CardsCardRow[];
67
+ teamRows: CardsTeamRow[];
68
+ }
69
+ /**
70
+ * Seed context retained on the slice so subsequent `updateAiCardCreationFormDraft`
71
+ * dispatches can re-derive step-2 rows from step-1 selections without the
72
+ * component re-passing the full universe each time.
73
+ */
74
+ export interface AiCardCreationFormDraftSeedContext {
75
+ allUsers: User[];
76
+ mode: CardsCreationInitialData['mode'];
77
+ suggestedOwnerUserIdByTeamId: Record<ID, string | undefined>;
78
+ defaultCardOptionId?: string;
79
+ }