@zeniai/client-epic-state 5.0.95 → 5.0.96

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 (219) hide show
  1. package/lib/common/aiCfo/aiCfoSuggestedQuestionsPageContext.d.ts +1 -1
  2. package/lib/entity/aiCfo/aiCfoPayload.d.ts +5 -63
  3. package/lib/entity/aiCfo/aiCfoReducer.d.ts +2 -23
  4. package/lib/entity/aiCfo/aiCfoReducer.js +9 -249
  5. package/lib/entity/aiCfo/aiCfoSelector.d.ts +1 -4
  6. package/lib/entity/aiCfo/aiCfoSelector.js +1 -19
  7. package/lib/entity/aiCfo/aiCfoState.d.ts +4 -97
  8. package/lib/entity/aiCfo/aiCfoState.js +1 -18
  9. package/lib/entity/jeSchedules/jeSchedulesPayload.d.ts +0 -1
  10. package/lib/entity/jeSchedules/jeSchedulesPayload.js +0 -7
  11. package/lib/entity/jeSchedules/jeSchedulesState.d.ts +0 -2
  12. package/lib/entity/jeSchedules/jeSchedulesTypes.d.ts +1 -1
  13. package/lib/entity/monthEndCloseChecks/monthEndCloseChecksState.d.ts +1 -1
  14. package/lib/entity/snackbar/snackbarTypes.d.ts +1 -1
  15. package/lib/entity/snackbar/snackbarTypes.js +0 -3
  16. package/lib/entity/task/taskPayload.d.ts +1 -3
  17. package/lib/entity/task/taskPayload.js +0 -2
  18. package/lib/entity/task/taskState.d.ts +0 -2
  19. package/lib/entity/tenant/clearAllEpic.d.ts +2 -6
  20. package/lib/entity/tenant/clearAllEpic.js +0 -8
  21. package/lib/epic.d.ts +3 -18
  22. package/lib/epic.js +3 -18
  23. package/lib/esm/entity/aiCfo/aiCfoReducer.js +9 -249
  24. package/lib/esm/entity/aiCfo/aiCfoSelector.js +1 -17
  25. package/lib/esm/entity/aiCfo/aiCfoState.js +0 -15
  26. package/lib/esm/entity/jeSchedules/jeSchedulesPayload.js +0 -7
  27. package/lib/esm/entity/snackbar/snackbarTypes.js +0 -3
  28. package/lib/esm/entity/task/taskPayload.js +0 -2
  29. package/lib/esm/entity/tenant/clearAllEpic.js +0 -8
  30. package/lib/esm/epic.js +3 -18
  31. package/lib/esm/index.js +10 -40
  32. package/lib/esm/reducer.js +0 -12
  33. package/lib/esm/view/aiCfoView/aiCfoViewReducer.js +3 -6
  34. package/lib/esm/view/aiCfoView/epics/createSessionAndSubmitEpic.js +2 -5
  35. package/lib/esm/view/aiCfoView/epics/createSessionEpic.js +1 -2
  36. package/lib/esm/view/aiCfoView/epics/fetchSuggestedQuestionsEpic.js +2 -12
  37. package/lib/esm/view/companyTaskManagerView/companyTaskManagerViewReducer.js +11 -39
  38. package/lib/esm/view/companyTaskManagerView/companyTaskManagerViewSelector.js +4 -14
  39. package/lib/esm/view/companyTaskManagerView/epics/fetchCompanyTaskManagerViewEpic.js +28 -37
  40. package/lib/esm/view/companyView/epic/fetchAllCockpitViewsEpic.js +2 -2
  41. package/lib/esm/view/spendManagement/chargeCards/chargeCardList/chargeCardListSelector.js +0 -25
  42. package/lib/esm/view/spendManagement/chargeCards/issueChargeCard/issueChargeCardEpic.js +2 -2
  43. package/lib/esm/view/spendManagement/chargeCards/issueChargeCard/issueChargeCardReducer.js +4 -42
  44. package/lib/esm/view/spendManagement/chargeCards/issueChargeCard/issueChargeCardSelector.js +0 -35
  45. package/lib/index.d.ts +12 -47
  46. package/lib/index.js +22 -193
  47. package/lib/reducer.d.ts +0 -12
  48. package/lib/reducer.js +0 -12
  49. package/lib/view/aiCfoView/aiCfoViewReducer.d.ts +2 -11
  50. package/lib/view/aiCfoView/aiCfoViewReducer.js +3 -6
  51. package/lib/view/aiCfoView/epics/createSessionAndSubmitEpic.js +2 -5
  52. package/lib/view/aiCfoView/epics/createSessionEpic.js +1 -2
  53. package/lib/view/aiCfoView/epics/fetchSuggestedQuestionsEpic.d.ts +1 -8
  54. package/lib/view/aiCfoView/epics/fetchSuggestedQuestionsEpic.js +2 -12
  55. package/lib/view/companyTaskManagerView/companyTaskManagerViewPayload.d.ts +11 -19
  56. package/lib/view/companyTaskManagerView/companyTaskManagerViewReducer.d.ts +4 -10
  57. package/lib/view/companyTaskManagerView/companyTaskManagerViewReducer.js +12 -40
  58. package/lib/view/companyTaskManagerView/companyTaskManagerViewSelector.d.ts +0 -2
  59. package/lib/view/companyTaskManagerView/companyTaskManagerViewSelector.js +3 -13
  60. package/lib/view/companyTaskManagerView/companyTaskManagerViewState.d.ts +3 -11
  61. package/lib/view/companyTaskManagerView/epics/fetchCompanyTaskManagerViewEpic.d.ts +3 -1
  62. package/lib/view/companyTaskManagerView/epics/fetchCompanyTaskManagerViewEpic.js +28 -37
  63. package/lib/view/companyView/epic/fetchAllCockpitViewsEpic.js +2 -2
  64. package/lib/view/companyView/types/cockpitTypes.d.ts +1 -2
  65. package/lib/view/expenseAutomationView/helpers/transactionCategorizationLocalDataHelper.d.ts +1 -1
  66. package/lib/view/expenseAutomationView/types/reconciliationViewState.d.ts +1 -1
  67. package/lib/view/people/peopleTypes.d.ts +1 -1
  68. package/lib/view/scheduleView/scheduleListView/scheduleListTypes.d.ts +1 -1
  69. package/lib/view/spendManagement/chargeCards/chargeCardList/chargeCardList.d.ts +1 -1
  70. package/lib/view/spendManagement/chargeCards/chargeCardList/chargeCardListSelector.d.ts +0 -14
  71. package/lib/view/spendManagement/chargeCards/chargeCardList/chargeCardListSelector.js +1 -27
  72. package/lib/view/spendManagement/chargeCards/issueChargeCard/issueChargeCardEpic.d.ts +2 -2
  73. package/lib/view/spendManagement/chargeCards/issueChargeCard/issueChargeCardEpic.js +1 -1
  74. package/lib/view/spendManagement/chargeCards/issueChargeCard/issueChargeCardReducer.d.ts +2 -12
  75. package/lib/view/spendManagement/chargeCards/issueChargeCard/issueChargeCardReducer.js +5 -43
  76. package/lib/view/spendManagement/chargeCards/issueChargeCard/issueChargeCardSelector.d.ts +0 -7
  77. package/lib/view/spendManagement/chargeCards/issueChargeCard/issueChargeCardSelector.js +1 -42
  78. package/lib/view/spendManagement/chargeCards/issueChargeCard/issueChargeCardState.d.ts +0 -5
  79. package/lib/view/taskManager/taskListView/taskListReducer.d.ts +1 -1
  80. package/lib/view/transactionDetail/journalEntryLinesViewModel.d.ts +1 -1
  81. package/package.json +1 -1
  82. package/lib/entity/cardPolicy/cardPolicyPayload.d.ts +0 -277
  83. package/lib/entity/cardPolicy/cardPolicyPayload.js +0 -143
  84. package/lib/entity/cardPolicy/cardPolicyReducer.d.ts +0 -19
  85. package/lib/entity/cardPolicy/cardPolicyReducer.js +0 -175
  86. package/lib/entity/cardPolicy/cardPolicySelector.d.ts +0 -32
  87. package/lib/entity/cardPolicy/cardPolicySelector.js +0 -99
  88. package/lib/entity/cardPolicy/cardPolicyState.d.ts +0 -205
  89. package/lib/entity/cardPolicy/cardPolicyState.js +0 -14
  90. package/lib/entity/cardPolicy/extractPolicyDocumentEpic.d.ts +0 -18
  91. package/lib/entity/cardPolicy/extractPolicyDocumentEpic.js +0 -68
  92. package/lib/entity/cardPolicy/fetchCardPolicyVendorOptionsEpic.d.ts +0 -26
  93. package/lib/entity/cardPolicy/fetchCardPolicyVendorOptionsEpic.js +0 -47
  94. package/lib/entity/cardPolicy/policyDocumentExtractionToRecommendationBridgeEpic.d.ts +0 -25
  95. package/lib/entity/cardPolicy/policyDocumentExtractionToRecommendationBridgeEpic.js +0 -39
  96. package/lib/entity/cardPolicy/policyRecommendationFromUploadEpic.d.ts +0 -24
  97. package/lib/entity/cardPolicy/policyRecommendationFromUploadEpic.js +0 -105
  98. package/lib/esm/entity/cardPolicy/cardPolicyPayload.js +0 -130
  99. package/lib/esm/entity/cardPolicy/cardPolicyReducer.js +0 -171
  100. package/lib/esm/entity/cardPolicy/cardPolicySelector.js +0 -75
  101. package/lib/esm/entity/cardPolicy/cardPolicyState.js +0 -9
  102. package/lib/esm/entity/cardPolicy/extractPolicyDocumentEpic.js +0 -64
  103. package/lib/esm/entity/cardPolicy/fetchCardPolicyVendorOptionsEpic.js +0 -43
  104. package/lib/esm/entity/cardPolicy/policyDocumentExtractionToRecommendationBridgeEpic.js +0 -35
  105. package/lib/esm/entity/cardPolicy/policyRecommendationFromUploadEpic.js +0 -101
  106. package/lib/esm/view/companyTaskManagerView/epics/fetchCockpitContextEpic.js +0 -38
  107. package/lib/esm/view/companyTaskManagerView/epics/updateCompanyTaskManagerViewFiltersEpic.js +0 -16
  108. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/cardPolicyDetailReducer.js +0 -52
  109. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/cardPolicyDetailSelector.js +0 -22
  110. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/cardPolicyDetailState.js +0 -1
  111. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/fetchCardPolicyDetailEpic.js +0 -36
  112. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/updateCardPolicyEpic.js +0 -39
  113. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/archiveCardPolicyEpic.js +0 -34
  114. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/cardPolicyListReducer.js +0 -58
  115. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/cardPolicyListSelector.js +0 -21
  116. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/cardPolicyListState.js +0 -1
  117. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/fetchCardPolicyListEpic.js +0 -38
  118. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/applyAiCardPolicyFormDraftUpdate.js +0 -289
  119. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/applyExtractedPolicyToAiCardPolicyDraft.js +0 -109
  120. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/applyExtractedPolicyToDraftEpic.js +0 -44
  121. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/applyExtractedPolicyToManualCardPolicyDraft.js +0 -111
  122. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/applyUploadPlanToAiCardPolicyDraft.js +0 -25
  123. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/buildAiCardPolicyFormDraftSeed.js +0 -363
  124. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/buildManualCardPolicyFormDraftSeed.js +0 -36
  125. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/cardPolicyChipIds.js +0 -19
  126. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/cardPolicyFormDraftTypes.js +0 -6
  127. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/cardPolicyRequestParts.js +0 -119
  128. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/createCardPolicyReducer.js +0 -154
  129. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/createCardPolicySelector.js +0 -22
  130. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/createCardPolicyState.js +0 -1
  131. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/createCardPolicyTemplateEpic.js +0 -39
  132. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/deriveAiPolicyReviewRowsFromInputs.js +0 -140
  133. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/fetchCardPolicyMccCategoriesEpic.js +0 -20
  134. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/seedAiCardPolicyFormDraftEpic.js +0 -100
  135. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/toBulkCardPolicyTemplateRequestsFromDraft.js +0 -96
  136. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/toCardPolicyTemplateRequestFromDraft.js +0 -59
  137. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/toManualCardPolicyTemplateRequestFromDraft.js +0 -24
  138. package/lib/esm/view/spendManagement/chargeCards/issueChargeCard/aiCardCreationFormDraftTypes.js +0 -1
  139. package/lib/esm/view/spendManagement/chargeCards/issueChargeCard/applyAiCardCreationFormDraftUpdate.js +0 -34
  140. package/lib/esm/view/spendManagement/chargeCards/issueChargeCard/buildAiCardCreationFormDraftSeed.js +0 -57
  141. package/lib/esm/view/spendManagement/chargeCards/issueChargeCard/deriveAiCardRowsFromTeams.js +0 -35
  142. package/lib/esm/view/spendManagement/chargeCards/issueChargeCard/seedAiCardCreationFormDraftEpic.js +0 -62
  143. package/lib/esm/view/spendManagement/chargeCards/issueChargeCard/toIssueChargeCardLocalDataFromDraft.js +0 -44
  144. package/lib/view/companyTaskManagerView/epics/fetchCockpitContextEpic.d.ts +0 -10
  145. package/lib/view/companyTaskManagerView/epics/fetchCockpitContextEpic.js +0 -42
  146. package/lib/view/companyTaskManagerView/epics/updateCompanyTaskManagerViewFiltersEpic.d.ts +0 -6
  147. package/lib/view/companyTaskManagerView/epics/updateCompanyTaskManagerViewFiltersEpic.js +0 -20
  148. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/cardPolicyDetailReducer.d.ts +0 -14
  149. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/cardPolicyDetailReducer.js +0 -56
  150. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/cardPolicyDetailSelector.d.ts +0 -15
  151. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/cardPolicyDetailSelector.js +0 -28
  152. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/cardPolicyDetailState.d.ts +0 -8
  153. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/cardPolicyDetailState.js +0 -2
  154. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/fetchCardPolicyDetailEpic.d.ts +0 -8
  155. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/fetchCardPolicyDetailEpic.js +0 -40
  156. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/updateCardPolicyEpic.d.ts +0 -8
  157. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/updateCardPolicyEpic.js +0 -43
  158. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/archiveCardPolicyEpic.d.ts +0 -8
  159. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/archiveCardPolicyEpic.js +0 -38
  160. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/cardPolicyListReducer.d.ts +0 -15
  161. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/cardPolicyListReducer.js +0 -62
  162. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/cardPolicyListSelector.d.ts +0 -15
  163. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/cardPolicyListSelector.js +0 -27
  164. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/cardPolicyListState.d.ts +0 -7
  165. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/cardPolicyListState.js +0 -2
  166. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/fetchCardPolicyListEpic.d.ts +0 -8
  167. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/fetchCardPolicyListEpic.js +0 -42
  168. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/applyAiCardPolicyFormDraftUpdate.d.ts +0 -8
  169. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/applyAiCardPolicyFormDraftUpdate.js +0 -294
  170. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/applyExtractedPolicyToAiCardPolicyDraft.d.ts +0 -8
  171. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/applyExtractedPolicyToAiCardPolicyDraft.js +0 -113
  172. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/applyExtractedPolicyToDraftEpic.d.ts +0 -9
  173. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/applyExtractedPolicyToDraftEpic.js +0 -48
  174. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/applyExtractedPolicyToManualCardPolicyDraft.d.ts +0 -8
  175. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/applyExtractedPolicyToManualCardPolicyDraft.js +0 -115
  176. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/applyUploadPlanToAiCardPolicyDraft.d.ts +0 -13
  177. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/applyUploadPlanToAiCardPolicyDraft.js +0 -29
  178. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/buildAiCardPolicyFormDraftSeed.d.ts +0 -14
  179. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/buildAiCardPolicyFormDraftSeed.js +0 -369
  180. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/buildManualCardPolicyFormDraftSeed.d.ts +0 -6
  181. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/buildManualCardPolicyFormDraftSeed.js +0 -40
  182. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/cardPolicyChipIds.d.ts +0 -7
  183. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/cardPolicyChipIds.js +0 -26
  184. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/cardPolicyFormDraftTypes.d.ts +0 -116
  185. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/cardPolicyFormDraftTypes.js +0 -10
  186. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/cardPolicyRequestParts.d.ts +0 -33
  187. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/cardPolicyRequestParts.js +0 -126
  188. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/createCardPolicyReducer.d.ts +0 -52
  189. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/createCardPolicyReducer.js +0 -158
  190. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/createCardPolicySelector.d.ts +0 -11
  191. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/createCardPolicySelector.js +0 -31
  192. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/createCardPolicyState.d.ts +0 -12
  193. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/createCardPolicyState.js +0 -2
  194. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/createCardPolicyTemplateEpic.d.ts +0 -8
  195. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/createCardPolicyTemplateEpic.js +0 -43
  196. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/deriveAiPolicyReviewRowsFromInputs.d.ts +0 -10
  197. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/deriveAiPolicyReviewRowsFromInputs.js +0 -144
  198. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/fetchCardPolicyMccCategoriesEpic.d.ts +0 -7
  199. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/fetchCardPolicyMccCategoriesEpic.js +0 -24
  200. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/seedAiCardPolicyFormDraftEpic.d.ts +0 -11
  201. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/seedAiCardPolicyFormDraftEpic.js +0 -104
  202. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/toBulkCardPolicyTemplateRequestsFromDraft.d.ts +0 -22
  203. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/toBulkCardPolicyTemplateRequestsFromDraft.js +0 -100
  204. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/toCardPolicyTemplateRequestFromDraft.d.ts +0 -8
  205. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/toCardPolicyTemplateRequestFromDraft.js +0 -63
  206. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/toManualCardPolicyTemplateRequestFromDraft.d.ts +0 -3
  207. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/toManualCardPolicyTemplateRequestFromDraft.js +0 -28
  208. package/lib/view/spendManagement/chargeCards/issueChargeCard/aiCardCreationFormDraftTypes.d.ts +0 -34
  209. package/lib/view/spendManagement/chargeCards/issueChargeCard/aiCardCreationFormDraftTypes.js +0 -2
  210. package/lib/view/spendManagement/chargeCards/issueChargeCard/applyAiCardCreationFormDraftUpdate.d.ts +0 -7
  211. package/lib/view/spendManagement/chargeCards/issueChargeCard/applyAiCardCreationFormDraftUpdate.js +0 -38
  212. package/lib/view/spendManagement/chargeCards/issueChargeCard/buildAiCardCreationFormDraftSeed.d.ts +0 -12
  213. package/lib/view/spendManagement/chargeCards/issueChargeCard/buildAiCardCreationFormDraftSeed.js +0 -61
  214. package/lib/view/spendManagement/chargeCards/issueChargeCard/deriveAiCardRowsFromTeams.d.ts +0 -9
  215. package/lib/view/spendManagement/chargeCards/issueChargeCard/deriveAiCardRowsFromTeams.js +0 -39
  216. package/lib/view/spendManagement/chargeCards/issueChargeCard/seedAiCardCreationFormDraftEpic.d.ts +0 -11
  217. package/lib/view/spendManagement/chargeCards/issueChargeCard/seedAiCardCreationFormDraftEpic.js +0 -66
  218. package/lib/view/spendManagement/chargeCards/issueChargeCard/toIssueChargeCardLocalDataFromDraft.d.ts +0 -3
  219. package/lib/view/spendManagement/chargeCards/issueChargeCard/toIssueChargeCardLocalDataFromDraft.js +0 -48
@@ -1,154 +0,0 @@
1
- import { createSlice } from '@reduxjs/toolkit';
2
- import { applyAiCardPolicyFormDraftUpdate } from './applyAiCardPolicyFormDraftUpdate';
3
- import { applyExtractedPolicyToAiCardPolicyDraft as applyExtractedToAiDraftHelper } from './applyExtractedPolicyToAiCardPolicyDraft';
4
- import { applyExtractedPolicyToManualCardPolicyDraft as applyExtractedToManualDraftHelper } from './applyExtractedPolicyToManualCardPolicyDraft';
5
- import { applyUploadPlanToAiCardPolicyDraft as applyUploadPlanToAiDraftHelper } from './applyUploadPlanToAiCardPolicyDraft';
6
- import { buildAiCardPolicyFormDraftSeed } from './buildAiCardPolicyFormDraftSeed';
7
- import { buildManualCardPolicyFormDraftSeed, } from './buildManualCardPolicyFormDraftSeed';
8
- import { toMccCategoryLike, } from './cardPolicyFormDraftTypes';
9
- export const initialState = {
10
- createCardPolicyTemplateRequestState: {
11
- fetchState: 'Not-Started',
12
- error: undefined,
13
- },
14
- lastCreatedCardPolicyTemplateIds: [],
15
- lastCreateCardPolicyTemplateErrors: [],
16
- };
17
- const createCardPolicy = createSlice({
18
- name: 'createCardPolicy',
19
- initialState,
20
- reducers: {
21
- createCardPolicyTemplates: {
22
- reducer(draft, action) {
23
- draft.createCardPolicyTemplateRequestState.fetchState = 'In-Progress';
24
- draft.createCardPolicyTemplateRequestState.error = undefined;
25
- draft.lastCreatedCardPolicyTemplateIds = [];
26
- draft.lastCreateCardPolicyTemplateErrors = [];
27
- // Lets list/drawer attribute the in-flight create to its AI CFO session.
28
- draft.lastCreateCardPolicySourceChatSessionId =
29
- action.payload.sourceChatSessionId;
30
- },
31
- prepare(request) {
32
- return { payload: request };
33
- },
34
- },
35
- updateCreateCardPolicyTemplateRequestState(draft, action) {
36
- draft.createCardPolicyTemplateRequestState.fetchState =
37
- action.payload.fetchState;
38
- draft.createCardPolicyTemplateRequestState.error = action.payload.error;
39
- if (action.payload.templateIds != null) {
40
- draft.lastCreatedCardPolicyTemplateIds = action.payload.templateIds;
41
- }
42
- if (action.payload.perItemErrors != null) {
43
- draft.lastCreateCardPolicyTemplateErrors = action.payload.perItemErrors;
44
- }
45
- },
46
- // Dispatched by `seedAiCardPolicyFormDraftEpic` when the AI answer lands.
47
- seedAiCardPolicyFormDraft: {
48
- reducer(draft, action) {
49
- const { draft: nextDraft, context } = buildAiCardPolicyFormDraftSeed({
50
- initialData: action.payload.initialData,
51
- cardsMasterList: action.payload.cardsMasterList,
52
- categorySearchOptions: action.payload.mccCategories.map(toMccCategoryLike),
53
- suggestedAllowMerchants: action.payload.suggestedAllowMerchants,
54
- suggestedBlockMerchants: action.payload.suggestedBlockMerchants,
55
- suggestedAllowCategories: (action.payload.suggestedAllowCategories ?? []).map(toMccCategoryLike),
56
- suggestedBlockCategories: (action.payload.suggestedBlockCategories ?? []).map(toMccCategoryLike),
57
- });
58
- draft.aiCardPolicyFormDraft = nextDraft;
59
- draft.aiCardPolicyFormDraftContext = context;
60
- },
61
- prepare(payload) {
62
- return { payload };
63
- },
64
- },
65
- // Per-mode behavior lives in `applyAiCardPolicyFormDraftUpdate`.
66
- updateAiCardPolicyFormDraft(draft, action) {
67
- draft.aiCardPolicyFormDraft = applyAiCardPolicyFormDraftUpdate({
68
- prev: draft.aiCardPolicyFormDraft,
69
- next: action.payload,
70
- context: draft.aiCardPolicyFormDraftContext,
71
- });
72
- },
73
- // No-op when the draft isn't in `upload` mode.
74
- updateAiCardPolicyFormDraftFromUploadPlan: {
75
- reducer(draft, action) {
76
- if (draft.aiCardPolicyFormDraft == null ||
77
- draft.aiCardPolicyFormDraftContext == null) {
78
- return;
79
- }
80
- const { draft: nextDraft, context } = applyUploadPlanToAiDraftHelper({
81
- current: draft.aiCardPolicyFormDraft,
82
- context: draft.aiCardPolicyFormDraftContext,
83
- wizardPlan: action.payload.wizardPlan,
84
- source: action.payload.source,
85
- });
86
- draft.aiCardPolicyFormDraft = nextDraft;
87
- draft.aiCardPolicyFormDraftContext = context;
88
- },
89
- prepare(wizardPlan, source) {
90
- return { payload: { wizardPlan, source } };
91
- },
92
- },
93
- // Dispatched by the extract-success bridge when the upload originated from
94
- // inside an AI CFO card-policy form.
95
- applyExtractedPolicyToAiCardPolicyDraft: {
96
- reducer(draft, action) {
97
- if (draft.aiCardPolicyFormDraft == null) {
98
- return;
99
- }
100
- draft.aiCardPolicyFormDraft = applyExtractedToAiDraftHelper({
101
- current: draft.aiCardPolicyFormDraft,
102
- extracted: action.payload.extracted,
103
- vendorSearchOptions: action.payload.vendorSearchOptions,
104
- categorySearchOptions: action.payload.categorySearchOptions,
105
- });
106
- },
107
- prepare(payload) {
108
- return { payload };
109
- },
110
- },
111
- clearAiCardPolicyFormDraft(draft) {
112
- draft.aiCardPolicyFormDraft = undefined;
113
- draft.aiCardPolicyFormDraftContext = undefined;
114
- },
115
- // Dispatched on the manual create-page mount.
116
- seedManualCardPolicyFormDraft: {
117
- reducer(draft, action) {
118
- draft.manualCardPolicyFormDraft = buildManualCardPolicyFormDraftSeed(action.payload);
119
- },
120
- prepare(payload) {
121
- return { payload };
122
- },
123
- },
124
- updateManualCardPolicyFormDraft(draft, action) {
125
- draft.manualCardPolicyFormDraft = action.payload;
126
- },
127
- // Dispatched by the extract-success bridge when the upload originated from
128
- // the manual `CardPolicyCreatePage`.
129
- applyExtractedPolicyToManualCardPolicyDraft: {
130
- reducer(draft, action) {
131
- if (draft.manualCardPolicyFormDraft == null) {
132
- return;
133
- }
134
- draft.manualCardPolicyFormDraft = applyExtractedToManualDraftHelper({
135
- current: draft.manualCardPolicyFormDraft,
136
- extracted: action.payload.extracted,
137
- vendorSearchOptions: action.payload.vendorSearchOptions,
138
- categorySearchOptions: action.payload.categorySearchOptions,
139
- });
140
- },
141
- prepare(payload) {
142
- return { payload };
143
- },
144
- },
145
- clearManualCardPolicyFormDraft(draft) {
146
- draft.manualCardPolicyFormDraft = undefined;
147
- },
148
- clearCreateCardPolicy(draft) {
149
- Object.assign(draft, initialState);
150
- },
151
- },
152
- });
153
- export const { createCardPolicyTemplates, updateCreateCardPolicyTemplateRequestState, seedAiCardPolicyFormDraft, updateAiCardPolicyFormDraft, updateAiCardPolicyFormDraftFromUploadPlan, applyExtractedPolicyToAiCardPolicyDraft, clearAiCardPolicyFormDraft, seedManualCardPolicyFormDraft, updateManualCardPolicyFormDraft, applyExtractedPolicyToManualCardPolicyDraft, clearManualCardPolicyFormDraft, clearCreateCardPolicy, } = createCardPolicy.actions;
154
- export default createCardPolicy.reducer;
@@ -1,22 +0,0 @@
1
- export function getCreateCardPolicyTemplateRequestState(state) {
2
- return state.createCardPolicyTemplateRequestState;
3
- }
4
- export function getLastCreatedCardPolicyTemplateIds(state) {
5
- return state.lastCreatedCardPolicyTemplateIds;
6
- }
7
- // First id; single-create pages use this for navigate-to-detail.
8
- export function getLastCreatedCardPolicyTemplateId(state) {
9
- return state.lastCreatedCardPolicyTemplateIds[0];
10
- }
11
- export function getLastCreateCardPolicyTemplateErrors(state) {
12
- return state.lastCreateCardPolicyTemplateErrors;
13
- }
14
- export function getLastCreateCardPolicySourceChatSessionId(state) {
15
- return state.lastCreateCardPolicySourceChatSessionId;
16
- }
17
- export function getAiCardPolicyFormDraft(state) {
18
- return state.aiCardPolicyFormDraft;
19
- }
20
- export function getManualCardPolicyFormDraft(state) {
21
- return state.manualCardPolicyFormDraft;
22
- }
@@ -1,39 +0,0 @@
1
- import { from, of } from 'rxjs';
2
- import { catchError, filter, mergeMap } from 'rxjs/operators';
3
- import { updateCreatedCardPolicyTemplate } from '../../../../../entity/cardPolicy/cardPolicyReducer';
4
- import { toBulkCreateCardPolicyTemplateError, toCreateCardPolicyTemplatesRequestBody, } from '../../../../../entity/cardPolicy/cardPolicyPayload';
5
- import { createZeniAPIStatus, isSuccessStatus } from '../../../../../responsePayload';
6
- import { createCardPolicyTemplates, updateCreateCardPolicyTemplateRequestState, } from './createCardPolicyReducer';
7
- // `POST /cards/1.0/policy-templates` (bulk). On success fans entity hydrations
8
- // + a single state update with ids + per-item errors. Partial success is
9
- // `Completed`; the UI inspects the slice's per-item errors for partial-success UX.
10
- export const createCardPolicyTemplatesEpic = (actions$, _state$, zeniAPI) => actions$.pipe(filter(createCardPolicyTemplates.match), mergeMap((action) => {
11
- const body = toCreateCardPolicyTemplatesRequestBody(action.payload);
12
- return zeniAPI
13
- .postAndGetJSON(`${zeniAPI.apiEndPoints.cardMicroServiceBaseUrl}/1.0/policy-templates`, body)
14
- .pipe(mergeMap((response) => {
15
- if (isSuccessStatus(response) && response.data != null) {
16
- const { templates_created, errors } = response.data;
17
- const createdTemplates = templates_created.map((row) => row.template);
18
- const actions = [
19
- ...createdTemplates.map((template) => updateCreatedCardPolicyTemplate(template)),
20
- updateCreateCardPolicyTemplateRequestState({
21
- fetchState: 'Completed',
22
- perItemErrors: (errors ?? []).map(toBulkCreateCardPolicyTemplateError),
23
- templateIds: createdTemplates.map((template) => template.template_id),
24
- }),
25
- ];
26
- return from(actions);
27
- }
28
- else {
29
- return of(updateCreateCardPolicyTemplateRequestState({
30
- fetchState: 'Error',
31
- error: response.status,
32
- }));
33
- }
34
- }), catchError((error) => of(updateCreateCardPolicyTemplateRequestState({
35
- fetchState: 'Error',
36
- error: createZeniAPIStatus('Unexpected Error', 'Create card-policy templates REST API call errored out' +
37
- JSON.stringify(error)),
38
- }))));
39
- }));
@@ -1,140 +0,0 @@
1
- // Composes Step 5 review rows from live Step 1–4 form state. Per-row `isChecked`
2
- // and per-chip `isSelected` are merged from `prevPoliciesReview` so user-removed
3
- // chips don't snap back when an upstream slice changes.
4
- export const deriveAiPolicyReviewRowsFromInputs = ({ vendorPolicy, categoryPolicy, cardSelections, limits, suggestedPoliciesSeed, prevPoliciesReview, }) => {
5
- const prevById = new Map(prevPoliciesReview.map((row) => [row.id, row]));
6
- const groups = deriveSharedChipGroups({
7
- vendorPolicy,
8
- categoryPolicy,
9
- cardSelections,
10
- limits,
11
- });
12
- return suggestedPoliciesSeed.map((seed) => {
13
- const previous = prevById.get(seed.id);
14
- return {
15
- id: seed.id,
16
- name: seed.name,
17
- isChecked: previous?.isChecked ?? seed.isChecked,
18
- chipGroups: previous != null
19
- ? mergeChipSelections(groups, previous.chipGroups)
20
- : groups,
21
- };
22
- });
23
- };
24
- const mergeChipSelections = (next, prev) => {
25
- const prevByGroupId = new Map(prev.map((group) => [group.id, group]));
26
- return next.map((group) => {
27
- const prevGroup = prevByGroupId.get(group.id);
28
- if (prevGroup == null) {
29
- return group;
30
- }
31
- const prevSelectedById = new Map(prevGroup.chips.map((chip) => [chip.id, chip.isSelected]));
32
- return {
33
- ...group,
34
- chips: group.chips.map((chip) => {
35
- const prevSelected = prevSelectedById.get(chip.id);
36
- return prevSelected === undefined
37
- ? chip
38
- : { ...chip, isSelected: prevSelected };
39
- }),
40
- };
41
- });
42
- };
43
- const deriveSharedChipGroups = ({ vendorPolicy, categoryPolicy, cardSelections, limits, }) => {
44
- const groups = [];
45
- const vendorChips = chipsFromAllowBlock(vendorPolicy);
46
- if (vendorChips.length > 0) {
47
- groups.push({
48
- id: 'vendors',
49
- label: vendorPolicy.mode === 'allow' ? 'Allowed vendors' : 'Blocked vendors',
50
- chips: vendorChips,
51
- });
52
- }
53
- const categoryChips = chipsFromAllowBlock(categoryPolicy);
54
- if (categoryChips.length > 0) {
55
- groups.push({
56
- id: 'categories',
57
- label: categoryPolicy.mode === 'allow'
58
- ? 'Allowed categories'
59
- : 'Blocked categories',
60
- chips: categoryChips,
61
- });
62
- }
63
- const cardChips = cardSelections
64
- .filter((row) => row.isChecked)
65
- .map((row) => ({
66
- id: row.id,
67
- label: row.owner.displayName,
68
- chipKind: 'avatar',
69
- }));
70
- if (cardChips.length > 0) {
71
- groups.push({ id: 'cardholders', label: 'Cardholders', chips: cardChips });
72
- }
73
- const limitChips = limits.map((row) => ({
74
- id: limitChipIdForRowId(row.id),
75
- label: limitDisplayLabelForRowId(row.id),
76
- helperText: limitHelperTextForRowId(row.id),
77
- placeholder: '$0',
78
- chipKind: 'positive',
79
- isSelected: row.isEnabled,
80
- optionalCode: row.isEnabled && row.amount != null ? String(row.amount) : undefined,
81
- }));
82
- if (limitChips.length > 0) {
83
- groups.push({
84
- id: 'limits',
85
- label: 'Limits',
86
- kind: 'limits',
87
- chips: limitChips,
88
- });
89
- }
90
- return groups;
91
- };
92
- const chipsFromAllowBlock = (field) => {
93
- const items = field.mode === 'allow' ? field.allowItems : field.blockItems;
94
- return items
95
- .filter((item) => item.isSelected)
96
- .map((item) => ({
97
- id: item.id,
98
- label: item.optionalCode != null
99
- ? `${item.label} (${item.optionalCode})`
100
- : item.label,
101
- chipKind: field.mode === 'allow' ? 'positive' : 'negative',
102
- }));
103
- };
104
- const limitChipIdForRowId = (rowId) => {
105
- if (rowId === 'transactionLimit') {
106
- return 'limit-transaction';
107
- }
108
- if (rowId === 'requireReceipt') {
109
- return 'limit-receipt';
110
- }
111
- return rowId;
112
- };
113
- const limitDisplayLabelForRowId = (rowId) => {
114
- if (rowId === 'transactionLimit') {
115
- return 'Transaction Limit';
116
- }
117
- if (rowId === 'requireReceipt') {
118
- return 'Require Receipt';
119
- }
120
- return humanizeLimitId(rowId);
121
- };
122
- const limitHelperTextForRowId = (rowId) => {
123
- if (rowId === 'transactionLimit') {
124
- return 'Maximum amount per single transaction';
125
- }
126
- if (rowId === 'requireReceipt') {
127
- return 'Require a receipt above this amount';
128
- }
129
- return undefined;
130
- };
131
- const humanizeLimitId = (id) => {
132
- const spaced = id
133
- .replace(/([A-Z])/g, ' $1')
134
- .replace(/[_-]+/g, ' ')
135
- .trim();
136
- if (spaced.length === 0) {
137
- return id;
138
- }
139
- return spaced.charAt(0).toUpperCase() + spaced.slice(1).toLowerCase();
140
- };
@@ -1,20 +0,0 @@
1
- import { from, of } from 'rxjs';
2
- import { catchError, exhaustMap, filter, mergeMap } from 'rxjs/operators';
3
- import { fetchCardPolicyMccCategories, updateCardPolicyMccCategories, updateCardPolicyMccCategoriesFailure, } from '../../../../../entity/cardPolicy/cardPolicyReducer';
4
- import { createZeniAPIStatus, isSuccessStatus, } from '../../../../../responsePayload';
5
- export const fetchCardPolicyMccCategoriesEpic = (actions$, _state$, zeniAPI) => actions$.pipe(filter(fetchCardPolicyMccCategories.match),
6
- // `exhaustMap` dedupes the React 18 StrictMode double-mount fetch on
7
- // both Create and Edit screens, which would otherwise yield two HTTP calls.
8
- exhaustMap(() => {
9
- return zeniAPI
10
- .getJSON(`${zeniAPI.apiEndPoints.cardMicroServiceBaseUrl}/1.0/cards/mcc-codes`)
11
- .pipe(mergeMap((response) => {
12
- if (isSuccessStatus(response) && response.data != null) {
13
- return from([updateCardPolicyMccCategories(response.data)]);
14
- }
15
- else {
16
- return of(updateCardPolicyMccCategoriesFailure(response.status));
17
- }
18
- }), catchError((error) => of(updateCardPolicyMccCategoriesFailure(createZeniAPIStatus('Unexpected Error', 'Fetch card policy MCC categories REST API call errored out' +
19
- JSON.stringify(error))))));
20
- }));
@@ -1,100 +0,0 @@
1
- import { EMPTY, concat, of } from 'rxjs';
2
- import { distinctUntilChanged, filter, map, mergeMap, take, } from 'rxjs/operators';
3
- import { upsertAnswerPayload, upsertOrAddQuestionAnswerPayload, } from '../../../../../entity/aiCfo/aiCfoReducer';
4
- import { getQuestionAnswerByIdForChatSession } from '../../../../../entity/aiCfo/aiCfoSelector';
5
- import { fetchCardPolicyMccCategories } from '../../../../../entity/cardPolicy/cardPolicyReducer';
6
- import { getAllChargeCardsWithUser } from '../../chargeCardList/chargeCardListSelector';
7
- import { clearAiCardPolicyFormDraft, seedAiCardPolicyFormDraft, updateCreateCardPolicyTemplateRequestState, } from './createCardPolicyReducer';
8
- const isClosedChargeCardStatusCode = (code) => code === 'closed' || code === 'closed_by_customer';
9
- const toCardPolicyCardSelectionRow = (card) => {
10
- const user = card.cardHolderUser;
11
- const displayName = `${user.firstName ?? ''} ${user.lastName ?? ''}`.trim() ||
12
- user.email ||
13
- user.userId;
14
- return {
15
- id: card.id,
16
- isChecked: false,
17
- cardName: card.cardName,
18
- last4: card.accountLast4,
19
- limitAmount: card.limit?.amount ?? 0,
20
- limitCadence: card.creditLimitFrequency?.code,
21
- owner: {
22
- userId: user.userId,
23
- displayName,
24
- roleLabel: card.cardHolderRoles?.titleAtCompany,
25
- },
26
- utilizationAmount: (card.limit?.amount ?? 0) - (card.available?.amount ?? 0),
27
- };
28
- };
29
- const readCardsMasterList = (state) => {
30
- const view = getAllChargeCardsWithUser(state);
31
- return view.cards
32
- .filter((card) => !isClosedChargeCardStatusCode(card.status?.code))
33
- .map(toCardPolicyCardSelectionRow);
34
- };
35
- const readMccCategoriesAvailable = (state) => state.cardPolicyState.mccCategoriesFetchState === 'Completed';
36
- const readCardPolicyPayload = (state, chatSessionId, questionAnswerId) => {
37
- const qa = getQuestionAnswerByIdForChatSession(state.aiCfoState, chatSessionId, questionAnswerId);
38
- const visualization = qa?.responses.answer?.content.visualization;
39
- if (visualization?.type !== 'interactive_form') {
40
- return undefined;
41
- }
42
- const data = visualization.data;
43
- if (!('formType' in data) || data.formType !== 'card_policy') {
44
- return undefined;
45
- }
46
- return data.payload;
47
- };
48
- const resolveQuestionAnswerId = (state, action) => {
49
- if (action.payload.questionAnswerId != null) {
50
- return action.payload.questionAnswerId;
51
- }
52
- const session = state.aiCfoState.aiCfoByChatSessionId[action.payload.chatSessionId];
53
- return session?.questionAnswers.slice(-1)[0]?.questionAnswerId;
54
- };
55
- const isSeedTrigger = (action) => upsertAnswerPayload.match(action) ||
56
- upsertOrAddQuestionAnswerPayload.match(action);
57
- const isCreateSuccess = (action) => updateCreateCardPolicyTemplateRequestState.match(action) &&
58
- action.payload.fetchState === 'Completed';
59
- const buildSeedAction = (state, payload) => {
60
- const cardsMasterList = readCardsMasterList(state);
61
- const mccCategories = state.cardPolicyState.mccCategories;
62
- return seedAiCardPolicyFormDraft({
63
- initialData: payload,
64
- cardsMasterList,
65
- mccCategories,
66
- suggestedAllowMerchants: state.cardPolicyState.suggestedAllowMerchants,
67
- suggestedBlockMerchants: state.cardPolicyState.suggestedBlockMerchants,
68
- suggestedAllowCategories: state.cardPolicyState.suggestedAllowCategories,
69
- suggestedBlockCategories: state.cardPolicyState.suggestedBlockCategories,
70
- });
71
- };
72
- // Seeds the AI card-policy draft from `interactive_form` answers with
73
- // `formType === "card_policy"`, clearing on bulk-create success. Defers seeding
74
- // until MCC categories load so category chips can resolve to human labels.
75
- export const seedAiCardPolicyFormDraftEpic = (actions$, state$) => actions$.pipe(mergeMap((action) => {
76
- if (isCreateSuccess(action)) {
77
- return of(clearAiCardPolicyFormDraft());
78
- }
79
- if (!isSeedTrigger(action)) {
80
- return EMPTY;
81
- }
82
- const state = state$.value;
83
- const questionAnswerId = resolveQuestionAnswerId(state, action);
84
- if (questionAnswerId == null) {
85
- return EMPTY;
86
- }
87
- const payload = readCardPolicyPayload(state, action.payload.chatSessionId, questionAnswerId);
88
- if (payload == null) {
89
- return EMPTY;
90
- }
91
- if (readMccCategoriesAvailable(state)) {
92
- return of(buildSeedAction(state, payload));
93
- }
94
- const seedWhenMccLoaded$ = state$.pipe(map((rs) => readMccCategoriesAvailable(rs)), distinctUntilChanged(), filter((available) => available), take(1), map(() => buildSeedAction(state$.value, payload)));
95
- const mccFetchState = state.cardPolicyState.mccCategoriesFetchState;
96
- if (mccFetchState === 'In-Progress') {
97
- return seedWhenMccLoaded$;
98
- }
99
- return concat(of(fetchCardPolicyMccCategories()), seedWhenMccLoaded$);
100
- }));
@@ -1,96 +0,0 @@
1
- import { CARD_POLICY_LIMIT_ROW_ID_REQUIRE_RECEIPT, CARD_POLICY_LIMIT_ROW_ID_TRANSACTION, } from './cardPolicyFormDraftTypes';
2
- import { REVIEW_GROUP_IDS, REVIEW_LIMIT_CHIP_IDS, amountFromLimitRow, collectCategoryCodes, collectMerchantNames, } from './cardPolicyRequestParts';
3
- const isSelectedChip = (chip) => chip.isSelected !== false;
4
- const chipsInGroup = (row, groupId) => {
5
- const group = row.chipGroups.find((g) => g.id === groupId);
6
- if (group == null) {
7
- return [];
8
- }
9
- return group.chips.filter(isSelectedChip);
10
- };
11
- const collectVendorLabelsFromReviewRow = (row, groupId) => chipsInGroup(row, groupId).map((chip) => chip.label);
12
- const collectCategoryCodesFromReviewRow = (row, groupId) => chipsInGroup(row, groupId).map((chip) => chip.optionalCode ?? chip.id);
13
- const collectCardIdsFromReviewRow = (row) => chipsInGroup(row, REVIEW_GROUP_IDS.appliedToCards).flatMap((chip) => chip.cardIds ?? []);
14
- const limitValueFromReviewRow = (row, chipId) => {
15
- const group = row.chipGroups.find((g) => g.id === REVIEW_GROUP_IDS.limits);
16
- if (group == null) {
17
- return null;
18
- }
19
- const chip = group.chips.find((c) => c.id === chipId && isSelectedChip(c));
20
- if (chip == null) {
21
- return null;
22
- }
23
- if (chip.optionalCode != null) {
24
- const parsed = Number(chip.optionalCode);
25
- return Number.isFinite(parsed) ? parsed : null;
26
- }
27
- const labelDigits = chip.label.match(/\d+(?:\.\d+)?/);
28
- if (labelDigits == null) {
29
- return null;
30
- }
31
- const parsed = Number(labelDigits[0]);
32
- return Number.isFinite(parsed) ? parsed : null;
33
- };
34
- const buildGuidedEntry = (row, draft, guidedMode, description) => ({
35
- allowedEntity: {
36
- categoryCodes: collectCategoryCodes(draft.categoryPolicy, 'allow'),
37
- merchantNames: collectMerchantNames(draft.vendorPolicy, 'allow'),
38
- },
39
- applyToCards: draft.cardSelections
40
- .filter((card) => card.isChecked)
41
- .map((card) => card.id),
42
- blockedEntity: {
43
- categoryCodes: collectCategoryCodes(draft.categoryPolicy, 'block'),
44
- merchantNames: collectMerchantNames(draft.vendorPolicy, 'block'),
45
- },
46
- description: description.trim(),
47
- mode: guidedMode,
48
- name: row.name.trim(),
49
- requiredReceiptThreshold: amountFromLimitRow(draft.limits, CARD_POLICY_LIMIT_ROW_ID_REQUIRE_RECEIPT),
50
- spendLimits: {
51
- transaction: amountFromLimitRow(draft.limits, CARD_POLICY_LIMIT_ROW_ID_TRANSACTION),
52
- },
53
- });
54
- const buildAutoEntry = (row, description) => ({
55
- allowedEntity: {
56
- categoryCodes: collectCategoryCodesFromReviewRow(row, REVIEW_GROUP_IDS.allowedCategories),
57
- merchantNames: collectVendorLabelsFromReviewRow(row, REVIEW_GROUP_IDS.allowedVendors),
58
- },
59
- applyToCards: collectCardIdsFromReviewRow(row),
60
- blockedEntity: {
61
- categoryCodes: collectCategoryCodesFromReviewRow(row, REVIEW_GROUP_IDS.restrictedCategories),
62
- merchantNames: collectVendorLabelsFromReviewRow(row, REVIEW_GROUP_IDS.blockedVendors),
63
- },
64
- description: description.trim(),
65
- name: row.name.trim(),
66
- });
67
- const buildUploadEntry = (row, draft, description) => ({
68
- allowedEntity: {
69
- categoryCodes: collectCategoryCodesFromReviewRow(row, REVIEW_GROUP_IDS.allowedCategories),
70
- merchantNames: collectVendorLabelsFromReviewRow(row, REVIEW_GROUP_IDS.allowedVendors),
71
- },
72
- applyToCards: draft.cardSelections
73
- .filter((card) => card.isChecked)
74
- .map((card) => card.id),
75
- blockedEntity: {
76
- categoryCodes: collectCategoryCodesFromReviewRow(row, REVIEW_GROUP_IDS.restrictedCategories),
77
- merchantNames: collectVendorLabelsFromReviewRow(row, REVIEW_GROUP_IDS.blockedVendors),
78
- },
79
- description: description.trim(),
80
- name: row.name.trim(),
81
- requiredReceiptThreshold: limitValueFromReviewRow(row, REVIEW_LIMIT_CHIP_IDS.receipt),
82
- spendLimits: {
83
- transaction: limitValueFromReviewRow(row, REVIEW_LIMIT_CHIP_IDS.transaction),
84
- },
85
- });
86
- // One entry per checked review row; per-mode key contract enforced internally.
87
- export const toBulkCardPolicyTemplateRequestsFromDraft = ({ draft, description = '', guidedMode = 'strict', }) => {
88
- const checkedRows = draft.policiesReview.filter((row) => row.isChecked);
89
- if (draft.policyKind === 'guided') {
90
- return checkedRows.map((row) => buildGuidedEntry(row, draft, guidedMode, description));
91
- }
92
- if (draft.policyKind === 'upload') {
93
- return checkedRows.map((row) => buildUploadEntry(row, draft, description));
94
- }
95
- return checkedRows.map((row) => buildAutoEntry(row, description));
96
- };
@@ -1,59 +0,0 @@
1
- import { CARD_POLICY_LIMIT_ROW_ID_REQUIRE_RECEIPT, CARD_POLICY_LIMIT_ROW_ID_TRANSACTION, } from './cardPolicyFormDraftTypes';
2
- import { amountFromLimitRow, collectCategoryCodes, collectMerchantNames, projectAutoReviewRowToCardPolicyRequestParts, } from './cardPolicyRequestParts';
3
- // auto/upload project from the active review row's chip groups; guided reads source slices.
4
- // Active row = first checked, else first; name follows the same rule.
5
- export const toCardPolicyTemplateRequestFromDraft = ({ draft, description = '', mode = 'strict', }) => {
6
- const name = pickPolicyName(draft);
7
- const base = {
8
- description: description.trim(),
9
- mode,
10
- name: name.trim(),
11
- };
12
- if (draft.policyKind === 'auto' || draft.policyKind === 'upload') {
13
- const activeRow = draft.policiesReview.find((row) => row.isChecked) ??
14
- draft.policiesReview[0];
15
- if (activeRow == null) {
16
- return {
17
- ...base,
18
- allowedEntity: { categoryCodes: [], merchantNames: [] },
19
- applyToCards: [],
20
- blockedEntity: { categoryCodes: [], merchantNames: [] },
21
- requiredReceiptThreshold: null,
22
- spendLimits: { transaction: null },
23
- };
24
- }
25
- return {
26
- ...base,
27
- ...projectAutoReviewRowToCardPolicyRequestParts(activeRow),
28
- };
29
- }
30
- // Guided
31
- return {
32
- ...base,
33
- allowedEntity: {
34
- categoryCodes: collectCategoryCodes(draft.categoryPolicy, 'allow'),
35
- merchantNames: collectMerchantNames(draft.vendorPolicy, 'allow'),
36
- },
37
- applyToCards: draft.cardSelections
38
- .filter((row) => row.isChecked)
39
- .map((row) => row.id),
40
- blockedEntity: {
41
- categoryCodes: collectCategoryCodes(draft.categoryPolicy, 'block'),
42
- merchantNames: collectMerchantNames(draft.vendorPolicy, 'block'),
43
- },
44
- requiredReceiptThreshold: amountFromLimitRow(draft.limits, CARD_POLICY_LIMIT_ROW_ID_REQUIRE_RECEIPT),
45
- spendLimits: {
46
- transaction: amountFromLimitRow(draft.limits, CARD_POLICY_LIMIT_ROW_ID_TRANSACTION),
47
- },
48
- };
49
- };
50
- const pickPolicyName = (draft) => {
51
- const checked = draft.policiesReview.find((row) => row.isChecked);
52
- if (checked != null) {
53
- return checked.name;
54
- }
55
- if (draft.policiesReview.length > 0) {
56
- return draft.policiesReview[0].name;
57
- }
58
- return '';
59
- };
@@ -1,24 +0,0 @@
1
- import { CARD_POLICY_LIMIT_ROW_ID_REQUIRE_RECEIPT, CARD_POLICY_LIMIT_ROW_ID_TRANSACTION, } from './cardPolicyFormDraftTypes';
2
- import { amountFromLimitRow, collectCategoryCodes, collectMerchantNames, } from './cardPolicyRequestParts';
3
- // Mirrors the AI guided builder without the `policiesReview` projection;
4
- // disabled limit toggles emit `null` (BE: "not configured").
5
- export const toManualCardPolicyTemplateRequestFromDraft = (draft) => ({
6
- allowedEntity: {
7
- categoryCodes: collectCategoryCodes(draft.categoryPolicy, 'allow'),
8
- merchantNames: collectMerchantNames(draft.vendorPolicy, 'allow'),
9
- },
10
- applyToCards: draft.cardSelections
11
- .filter((row) => row.isChecked)
12
- .map((row) => row.id),
13
- blockedEntity: {
14
- categoryCodes: collectCategoryCodes(draft.categoryPolicy, 'block'),
15
- merchantNames: collectMerchantNames(draft.vendorPolicy, 'block'),
16
- },
17
- description: draft.description.trim(),
18
- mode: draft.mode,
19
- name: draft.name.trim(),
20
- requiredReceiptThreshold: amountFromLimitRow(draft.limits, CARD_POLICY_LIMIT_ROW_ID_REQUIRE_RECEIPT),
21
- spendLimits: {
22
- transaction: amountFromLimitRow(draft.limits, CARD_POLICY_LIMIT_ROW_ID_TRANSACTION),
23
- },
24
- });