@zeniai/client-epic-state 5.0.96 → 5.0.97
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/common/aiCfo/aiCfoSuggestedQuestionsPageContext.d.ts +1 -1
- package/lib/commonStateTypes/amount.d.ts +1 -0
- package/lib/commonStateTypes/amount.js +9 -1
- package/lib/commonStateTypes/workingDayHelper.d.ts +9 -0
- package/lib/commonStateTypes/workingDayHelper.js +28 -1
- package/lib/entity/aiCfo/aiCfoPayload.d.ts +63 -5
- package/lib/entity/aiCfo/aiCfoReducer.d.ts +23 -2
- package/lib/entity/aiCfo/aiCfoReducer.js +249 -9
- package/lib/entity/aiCfo/aiCfoSelector.d.ts +4 -1
- package/lib/entity/aiCfo/aiCfoSelector.js +19 -1
- package/lib/entity/aiCfo/aiCfoState.d.ts +97 -4
- package/lib/entity/aiCfo/aiCfoState.js +18 -1
- package/lib/entity/cardPolicy/cardPolicyPayload.d.ts +277 -0
- package/lib/entity/cardPolicy/cardPolicyPayload.js +143 -0
- package/lib/entity/cardPolicy/cardPolicyReducer.d.ts +19 -0
- package/lib/entity/cardPolicy/cardPolicyReducer.js +175 -0
- package/lib/entity/cardPolicy/cardPolicySelector.d.ts +32 -0
- package/lib/entity/cardPolicy/cardPolicySelector.js +99 -0
- package/lib/entity/cardPolicy/cardPolicyState.d.ts +205 -0
- package/lib/entity/cardPolicy/cardPolicyState.js +14 -0
- package/lib/entity/cardPolicy/extractPolicyDocumentEpic.d.ts +18 -0
- package/lib/entity/cardPolicy/extractPolicyDocumentEpic.js +68 -0
- package/lib/entity/cardPolicy/fetchCardPolicyVendorOptionsEpic.d.ts +26 -0
- package/lib/entity/cardPolicy/fetchCardPolicyVendorOptionsEpic.js +47 -0
- package/lib/entity/cardPolicy/policyDocumentExtractionToRecommendationBridgeEpic.d.ts +25 -0
- package/lib/entity/cardPolicy/policyDocumentExtractionToRecommendationBridgeEpic.js +39 -0
- package/lib/entity/cardPolicy/policyRecommendationFromUploadEpic.d.ts +24 -0
- package/lib/entity/cardPolicy/policyRecommendationFromUploadEpic.js +105 -0
- package/lib/entity/jeSchedules/jeSchedulesPayload.d.ts +1 -0
- package/lib/entity/jeSchedules/jeSchedulesPayload.js +7 -0
- package/lib/entity/jeSchedules/jeSchedulesState.d.ts +2 -0
- package/lib/entity/jeSchedules/jeSchedulesTypes.d.ts +1 -1
- package/lib/entity/monthEndCloseChecks/monthEndCloseChecksState.d.ts +1 -1
- package/lib/entity/snackbar/snackbarTypes.d.ts +1 -1
- package/lib/entity/snackbar/snackbarTypes.js +3 -0
- package/lib/entity/task/taskPayload.d.ts +3 -1
- package/lib/entity/task/taskPayload.js +2 -0
- package/lib/entity/task/taskState.d.ts +2 -0
- package/lib/entity/tenant/clearAllEpic.d.ts +8 -2
- package/lib/entity/tenant/clearAllEpic.js +12 -0
- package/lib/epic.d.ts +24 -3
- package/lib/epic.js +24 -3
- package/lib/esm/commonStateTypes/amount.js +7 -0
- package/lib/esm/commonStateTypes/workingDayHelper.js +26 -0
- package/lib/esm/entity/aiCfo/aiCfoReducer.js +249 -9
- package/lib/esm/entity/aiCfo/aiCfoSelector.js +17 -1
- package/lib/esm/entity/aiCfo/aiCfoState.js +15 -0
- package/lib/esm/entity/cardPolicy/cardPolicyPayload.js +130 -0
- package/lib/esm/entity/cardPolicy/cardPolicyReducer.js +171 -0
- package/lib/esm/entity/cardPolicy/cardPolicySelector.js +75 -0
- package/lib/esm/entity/cardPolicy/cardPolicyState.js +9 -0
- package/lib/esm/entity/cardPolicy/extractPolicyDocumentEpic.js +64 -0
- package/lib/esm/entity/cardPolicy/fetchCardPolicyVendorOptionsEpic.js +43 -0
- package/lib/esm/entity/cardPolicy/policyDocumentExtractionToRecommendationBridgeEpic.js +35 -0
- package/lib/esm/entity/cardPolicy/policyRecommendationFromUploadEpic.js +101 -0
- package/lib/esm/entity/jeSchedules/jeSchedulesPayload.js +7 -0
- package/lib/esm/entity/snackbar/snackbarTypes.js +3 -0
- package/lib/esm/entity/task/taskPayload.js +2 -0
- package/lib/esm/entity/tenant/clearAllEpic.js +12 -0
- package/lib/esm/epic.js +24 -3
- package/lib/esm/index.js +47 -12
- package/lib/esm/reducer.js +18 -0
- package/lib/esm/view/aiCfoView/aiCfoViewReducer.js +6 -3
- package/lib/esm/view/aiCfoView/epics/createSessionAndSubmitEpic.js +5 -2
- package/lib/esm/view/aiCfoView/epics/createSessionEpic.js +2 -1
- package/lib/esm/view/aiCfoView/epics/fetchSuggestedQuestionsEpic.js +12 -2
- package/lib/esm/view/companyTaskManagerView/companyTaskManagerViewReducer.js +39 -11
- package/lib/esm/view/companyTaskManagerView/companyTaskManagerViewSelector.js +14 -4
- package/lib/esm/view/companyTaskManagerView/epics/fetchCockpitContextEpic.js +38 -0
- package/lib/esm/view/companyTaskManagerView/epics/fetchCompanyTaskManagerViewEpic.js +37 -28
- package/lib/esm/view/companyTaskManagerView/epics/updateCompanyTaskManagerViewFiltersEpic.js +16 -0
- package/lib/esm/view/companyView/epic/fetchAllCockpitViewsEpic.js +2 -2
- package/lib/esm/view/spendManagement/autotransferRules/autoTransferRulesSelector.js +22 -2
- package/lib/esm/view/spendManagement/cashManagement/autoSweepFlow/autoSweepFlowPayload.js +29 -0
- package/lib/esm/view/spendManagement/cashManagement/autoSweepFlow/autoSweepFlowReducer.js +78 -0
- package/lib/esm/view/spendManagement/cashManagement/autoSweepFlow/autoSweepFlowSelector.js +47 -0
- package/lib/esm/view/spendManagement/cashManagement/autoSweepFlow/autoSweepFlowState.js +47 -0
- package/lib/esm/view/spendManagement/cashManagement/autoSweepFlow/epics/fetchCashManagementSettingsEpic.js +34 -0
- package/lib/esm/view/spendManagement/cashManagement/autoSweepFlow/epics/saveAutoSweepSettingsEpic.js +32 -0
- package/lib/esm/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewPayload.js +54 -0
- package/lib/esm/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewReducer.js +92 -0
- package/lib/esm/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewSelector.js +225 -0
- package/lib/esm/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewState.js +10 -0
- package/lib/esm/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchCashManagementBannerEpic.js +23 -0
- package/lib/esm/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchCashManagementOverviewPageEpic.js +36 -0
- package/lib/esm/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchCashManagementRecommendationEpic.js +27 -0
- package/lib/esm/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchRecentTransferEpic.js +28 -0
- package/lib/esm/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/cardPolicyDetailReducer.js +52 -0
- package/lib/esm/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/cardPolicyDetailSelector.js +22 -0
- package/lib/esm/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/cardPolicyDetailState.js +1 -0
- package/lib/esm/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/fetchCardPolicyDetailEpic.js +36 -0
- package/lib/esm/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/updateCardPolicyEpic.js +39 -0
- package/lib/esm/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/archiveCardPolicyEpic.js +34 -0
- package/lib/esm/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/cardPolicyListReducer.js +58 -0
- package/lib/esm/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/cardPolicyListSelector.js +21 -0
- package/lib/esm/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/cardPolicyListState.js +1 -0
- package/lib/esm/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/fetchCardPolicyListEpic.js +38 -0
- package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/applyAiCardPolicyFormDraftUpdate.js +289 -0
- package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/applyExtractedPolicyToAiCardPolicyDraft.js +109 -0
- package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/applyExtractedPolicyToDraftEpic.js +44 -0
- package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/applyExtractedPolicyToManualCardPolicyDraft.js +111 -0
- package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/applyUploadPlanToAiCardPolicyDraft.js +25 -0
- package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/buildAiCardPolicyFormDraftSeed.js +363 -0
- package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/buildManualCardPolicyFormDraftSeed.js +36 -0
- package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/cardPolicyChipIds.js +19 -0
- package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/cardPolicyFormDraftTypes.js +6 -0
- package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/cardPolicyRequestParts.js +119 -0
- package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/createCardPolicyReducer.js +154 -0
- package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/createCardPolicySelector.js +22 -0
- package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/createCardPolicyState.js +1 -0
- package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/createCardPolicyTemplateEpic.js +39 -0
- package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/deriveAiPolicyReviewRowsFromInputs.js +140 -0
- package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/fetchCardPolicyMccCategoriesEpic.js +20 -0
- package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/seedAiCardPolicyFormDraftEpic.js +100 -0
- package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/toBulkCardPolicyTemplateRequestsFromDraft.js +96 -0
- package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/toCardPolicyTemplateRequestFromDraft.js +59 -0
- package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/toManualCardPolicyTemplateRequestFromDraft.js +24 -0
- package/lib/esm/view/spendManagement/chargeCards/chargeCardList/chargeCardListSelector.js +25 -0
- package/lib/esm/view/spendManagement/chargeCards/issueChargeCard/aiCardCreationFormDraftTypes.js +1 -0
- package/lib/esm/view/spendManagement/chargeCards/issueChargeCard/applyAiCardCreationFormDraftUpdate.js +34 -0
- package/lib/esm/view/spendManagement/chargeCards/issueChargeCard/buildAiCardCreationFormDraftSeed.js +57 -0
- package/lib/esm/view/spendManagement/chargeCards/issueChargeCard/deriveAiCardRowsFromTeams.js +35 -0
- package/lib/esm/view/spendManagement/chargeCards/issueChargeCard/issueChargeCardEpic.js +2 -2
- package/lib/esm/view/spendManagement/chargeCards/issueChargeCard/issueChargeCardReducer.js +42 -4
- package/lib/esm/view/spendManagement/chargeCards/issueChargeCard/issueChargeCardSelector.js +35 -0
- package/lib/esm/view/spendManagement/chargeCards/issueChargeCard/seedAiCardCreationFormDraftEpic.js +62 -0
- package/lib/esm/view/spendManagement/chargeCards/issueChargeCard/toIssueChargeCardLocalDataFromDraft.js +44 -0
- package/lib/index.d.ts +59 -15
- package/lib/index.js +213 -22
- package/lib/reducer.d.ts +18 -0
- package/lib/reducer.js +18 -0
- package/lib/view/aiCfoView/aiCfoViewReducer.d.ts +11 -2
- package/lib/view/aiCfoView/aiCfoViewReducer.js +6 -3
- package/lib/view/aiCfoView/epics/createSessionAndSubmitEpic.js +5 -2
- package/lib/view/aiCfoView/epics/createSessionEpic.js +2 -1
- package/lib/view/aiCfoView/epics/fetchSuggestedQuestionsEpic.d.ts +8 -1
- package/lib/view/aiCfoView/epics/fetchSuggestedQuestionsEpic.js +12 -2
- package/lib/view/companyTaskManagerView/companyTaskManagerViewPayload.d.ts +19 -11
- package/lib/view/companyTaskManagerView/companyTaskManagerViewReducer.d.ts +10 -4
- package/lib/view/companyTaskManagerView/companyTaskManagerViewReducer.js +40 -12
- package/lib/view/companyTaskManagerView/companyTaskManagerViewSelector.d.ts +2 -0
- package/lib/view/companyTaskManagerView/companyTaskManagerViewSelector.js +13 -3
- package/lib/view/companyTaskManagerView/companyTaskManagerViewState.d.ts +11 -3
- package/lib/view/companyTaskManagerView/epics/fetchCockpitContextEpic.d.ts +10 -0
- package/lib/view/companyTaskManagerView/epics/fetchCockpitContextEpic.js +42 -0
- package/lib/view/companyTaskManagerView/epics/fetchCompanyTaskManagerViewEpic.d.ts +1 -3
- package/lib/view/companyTaskManagerView/epics/fetchCompanyTaskManagerViewEpic.js +37 -28
- package/lib/view/companyTaskManagerView/epics/updateCompanyTaskManagerViewFiltersEpic.d.ts +6 -0
- package/lib/view/companyTaskManagerView/epics/updateCompanyTaskManagerViewFiltersEpic.js +20 -0
- package/lib/view/companyView/epic/fetchAllCockpitViewsEpic.js +2 -2
- package/lib/view/companyView/types/cockpitTypes.d.ts +2 -1
- package/lib/view/expenseAutomationView/helpers/transactionCategorizationLocalDataHelper.d.ts +1 -1
- package/lib/view/expenseAutomationView/types/reconciliationViewState.d.ts +1 -1
- package/lib/view/people/peopleTypes.d.ts +1 -1
- package/lib/view/scheduleView/scheduleListView/scheduleListTypes.d.ts +1 -1
- package/lib/view/spendManagement/autotransferRules/autoTransferRulesSelector.d.ts +8 -1
- package/lib/view/spendManagement/autotransferRules/autoTransferRulesSelector.js +21 -1
- package/lib/view/spendManagement/autotransferRules/autoTransferRulesState.d.ts +22 -0
- package/lib/view/spendManagement/cashManagement/autoSweepFlow/autoSweepFlowPayload.d.ts +47 -0
- package/lib/view/spendManagement/cashManagement/autoSweepFlow/autoSweepFlowPayload.js +34 -0
- package/lib/view/spendManagement/cashManagement/autoSweepFlow/autoSweepFlowReducer.d.ts +23 -0
- package/lib/view/spendManagement/cashManagement/autoSweepFlow/autoSweepFlowReducer.js +82 -0
- package/lib/view/spendManagement/cashManagement/autoSweepFlow/autoSweepFlowSelector.d.ts +40 -0
- package/lib/view/spendManagement/cashManagement/autoSweepFlow/autoSweepFlowSelector.js +51 -0
- package/lib/view/spendManagement/cashManagement/autoSweepFlow/autoSweepFlowState.d.ts +37 -0
- package/lib/view/spendManagement/cashManagement/autoSweepFlow/autoSweepFlowState.js +53 -0
- package/lib/view/spendManagement/cashManagement/autoSweepFlow/epics/fetchCashManagementSettingsEpic.d.ts +14 -0
- package/lib/view/spendManagement/cashManagement/autoSweepFlow/epics/fetchCashManagementSettingsEpic.js +38 -0
- package/lib/view/spendManagement/cashManagement/autoSweepFlow/epics/saveAutoSweepSettingsEpic.d.ts +7 -0
- package/lib/view/spendManagement/cashManagement/autoSweepFlow/epics/saveAutoSweepSettingsEpic.js +36 -0
- package/lib/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewPayload.d.ts +56 -0
- package/lib/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewPayload.js +60 -0
- package/lib/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewReducer.d.ts +22 -0
- package/lib/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewReducer.js +96 -0
- package/lib/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewSelector.d.ts +59 -0
- package/lib/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewSelector.js +230 -0
- package/lib/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewState.d.ts +122 -0
- package/lib/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewState.js +13 -0
- package/lib/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchCashManagementBannerEpic.d.ts +7 -0
- package/lib/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchCashManagementBannerEpic.js +27 -0
- package/lib/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchCashManagementOverviewPageEpic.d.ts +9 -0
- package/lib/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchCashManagementOverviewPageEpic.js +40 -0
- package/lib/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchCashManagementRecommendationEpic.d.ts +7 -0
- package/lib/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchCashManagementRecommendationEpic.js +31 -0
- package/lib/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchRecentTransferEpic.d.ts +15 -0
- package/lib/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchRecentTransferEpic.js +32 -0
- package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/cardPolicyDetailReducer.d.ts +14 -0
- package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/cardPolicyDetailReducer.js +56 -0
- package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/cardPolicyDetailSelector.d.ts +15 -0
- package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/cardPolicyDetailSelector.js +28 -0
- package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/cardPolicyDetailState.d.ts +8 -0
- package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/cardPolicyDetailState.js +2 -0
- package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/fetchCardPolicyDetailEpic.d.ts +8 -0
- package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/fetchCardPolicyDetailEpic.js +40 -0
- package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/updateCardPolicyEpic.d.ts +8 -0
- package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/updateCardPolicyEpic.js +43 -0
- package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/archiveCardPolicyEpic.d.ts +8 -0
- package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/archiveCardPolicyEpic.js +38 -0
- package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/cardPolicyListReducer.d.ts +15 -0
- package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/cardPolicyListReducer.js +62 -0
- package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/cardPolicyListSelector.d.ts +15 -0
- package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/cardPolicyListSelector.js +27 -0
- package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/cardPolicyListState.d.ts +7 -0
- package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/cardPolicyListState.js +2 -0
- package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/fetchCardPolicyListEpic.d.ts +8 -0
- package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/fetchCardPolicyListEpic.js +42 -0
- package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/applyAiCardPolicyFormDraftUpdate.d.ts +8 -0
- package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/applyAiCardPolicyFormDraftUpdate.js +294 -0
- package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/applyExtractedPolicyToAiCardPolicyDraft.d.ts +8 -0
- package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/applyExtractedPolicyToAiCardPolicyDraft.js +113 -0
- package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/applyExtractedPolicyToDraftEpic.d.ts +9 -0
- package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/applyExtractedPolicyToDraftEpic.js +48 -0
- package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/applyExtractedPolicyToManualCardPolicyDraft.d.ts +8 -0
- package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/applyExtractedPolicyToManualCardPolicyDraft.js +115 -0
- package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/applyUploadPlanToAiCardPolicyDraft.d.ts +13 -0
- package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/applyUploadPlanToAiCardPolicyDraft.js +29 -0
- package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/buildAiCardPolicyFormDraftSeed.d.ts +14 -0
- package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/buildAiCardPolicyFormDraftSeed.js +369 -0
- package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/buildManualCardPolicyFormDraftSeed.d.ts +6 -0
- package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/buildManualCardPolicyFormDraftSeed.js +40 -0
- package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/cardPolicyChipIds.d.ts +7 -0
- package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/cardPolicyChipIds.js +26 -0
- package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/cardPolicyFormDraftTypes.d.ts +116 -0
- package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/cardPolicyFormDraftTypes.js +10 -0
- package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/cardPolicyRequestParts.d.ts +33 -0
- package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/cardPolicyRequestParts.js +126 -0
- package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/createCardPolicyReducer.d.ts +52 -0
- package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/createCardPolicyReducer.js +158 -0
- package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/createCardPolicySelector.d.ts +11 -0
- package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/createCardPolicySelector.js +31 -0
- package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/createCardPolicyState.d.ts +12 -0
- package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/createCardPolicyState.js +2 -0
- package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/createCardPolicyTemplateEpic.d.ts +8 -0
- package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/createCardPolicyTemplateEpic.js +43 -0
- package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/deriveAiPolicyReviewRowsFromInputs.d.ts +10 -0
- package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/deriveAiPolicyReviewRowsFromInputs.js +144 -0
- package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/fetchCardPolicyMccCategoriesEpic.d.ts +7 -0
- package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/fetchCardPolicyMccCategoriesEpic.js +24 -0
- package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/seedAiCardPolicyFormDraftEpic.d.ts +11 -0
- package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/seedAiCardPolicyFormDraftEpic.js +104 -0
- package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/toBulkCardPolicyTemplateRequestsFromDraft.d.ts +22 -0
- package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/toBulkCardPolicyTemplateRequestsFromDraft.js +100 -0
- package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/toCardPolicyTemplateRequestFromDraft.d.ts +8 -0
- package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/toCardPolicyTemplateRequestFromDraft.js +63 -0
- package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/toManualCardPolicyTemplateRequestFromDraft.d.ts +3 -0
- package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/toManualCardPolicyTemplateRequestFromDraft.js +28 -0
- package/lib/view/spendManagement/chargeCards/chargeCardList/chargeCardList.d.ts +1 -1
- package/lib/view/spendManagement/chargeCards/chargeCardList/chargeCardListSelector.d.ts +14 -0
- package/lib/view/spendManagement/chargeCards/chargeCardList/chargeCardListSelector.js +27 -1
- package/lib/view/spendManagement/chargeCards/issueChargeCard/aiCardCreationFormDraftTypes.d.ts +34 -0
- package/lib/view/spendManagement/chargeCards/issueChargeCard/aiCardCreationFormDraftTypes.js +2 -0
- package/lib/view/spendManagement/chargeCards/issueChargeCard/applyAiCardCreationFormDraftUpdate.d.ts +7 -0
- package/lib/view/spendManagement/chargeCards/issueChargeCard/applyAiCardCreationFormDraftUpdate.js +38 -0
- package/lib/view/spendManagement/chargeCards/issueChargeCard/buildAiCardCreationFormDraftSeed.d.ts +12 -0
- package/lib/view/spendManagement/chargeCards/issueChargeCard/buildAiCardCreationFormDraftSeed.js +61 -0
- package/lib/view/spendManagement/chargeCards/issueChargeCard/deriveAiCardRowsFromTeams.d.ts +9 -0
- package/lib/view/spendManagement/chargeCards/issueChargeCard/deriveAiCardRowsFromTeams.js +39 -0
- package/lib/view/spendManagement/chargeCards/issueChargeCard/issueChargeCardEpic.d.ts +2 -2
- package/lib/view/spendManagement/chargeCards/issueChargeCard/issueChargeCardEpic.js +1 -1
- package/lib/view/spendManagement/chargeCards/issueChargeCard/issueChargeCardReducer.d.ts +12 -2
- package/lib/view/spendManagement/chargeCards/issueChargeCard/issueChargeCardReducer.js +43 -5
- package/lib/view/spendManagement/chargeCards/issueChargeCard/issueChargeCardSelector.d.ts +7 -0
- package/lib/view/spendManagement/chargeCards/issueChargeCard/issueChargeCardSelector.js +42 -1
- package/lib/view/spendManagement/chargeCards/issueChargeCard/issueChargeCardState.d.ts +5 -0
- package/lib/view/spendManagement/chargeCards/issueChargeCard/seedAiCardCreationFormDraftEpic.d.ts +11 -0
- package/lib/view/spendManagement/chargeCards/issueChargeCard/seedAiCardCreationFormDraftEpic.js +66 -0
- package/lib/view/spendManagement/chargeCards/issueChargeCard/toIssueChargeCardLocalDataFromDraft.d.ts +3 -0
- package/lib/view/spendManagement/chargeCards/issueChargeCard/toIssueChargeCardLocalDataFromDraft.js +48 -0
- package/lib/view/taskManager/taskListView/taskListReducer.d.ts +1 -1
- package/lib/view/transactionDetail/journalEntryLinesViewModel.d.ts +1 -1
- package/lib/zeniAPI.d.ts +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { ActionsObservable, StateObservable } from 'redux-observable';
|
|
2
|
+
import { Observable } from 'rxjs';
|
|
3
|
+
import { upsertAnswerPayload, upsertOrAddQuestionAnswerPayload } from '../../../../../entity/aiCfo/aiCfoReducer';
|
|
4
|
+
import { fetchCardPolicyMccCategories } from '../../../../../entity/cardPolicy/cardPolicyReducer';
|
|
5
|
+
import { RootState } from '../../../../../reducer';
|
|
6
|
+
import { clearAiCardPolicyFormDraft, createCardPolicyTemplates, seedAiCardPolicyFormDraft, updateCreateCardPolicyTemplateRequestState } from './createCardPolicyReducer';
|
|
7
|
+
export type ActionType = ReturnType<typeof fetchCardPolicyMccCategories> | ReturnType<typeof seedAiCardPolicyFormDraft> | ReturnType<typeof clearAiCardPolicyFormDraft>;
|
|
8
|
+
type SeedTriggerAction = ReturnType<typeof upsertAnswerPayload> | ReturnType<typeof upsertOrAddQuestionAnswerPayload>;
|
|
9
|
+
type InboundAction = SeedTriggerAction | ReturnType<typeof createCardPolicyTemplates> | ReturnType<typeof updateCreateCardPolicyTemplateRequestState>;
|
|
10
|
+
export declare const seedAiCardPolicyFormDraftEpic: (actions$: ActionsObservable<InboundAction>, state$: StateObservable<RootState>) => Observable<ActionType>;
|
|
11
|
+
export {};
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.seedAiCardPolicyFormDraftEpic = void 0;
|
|
4
|
+
const rxjs_1 = require("rxjs");
|
|
5
|
+
const operators_1 = require("rxjs/operators");
|
|
6
|
+
const aiCfoReducer_1 = require("../../../../../entity/aiCfo/aiCfoReducer");
|
|
7
|
+
const aiCfoSelector_1 = require("../../../../../entity/aiCfo/aiCfoSelector");
|
|
8
|
+
const cardPolicyReducer_1 = require("../../../../../entity/cardPolicy/cardPolicyReducer");
|
|
9
|
+
const chargeCardListSelector_1 = require("../../chargeCardList/chargeCardListSelector");
|
|
10
|
+
const createCardPolicyReducer_1 = require("./createCardPolicyReducer");
|
|
11
|
+
const isClosedChargeCardStatusCode = (code) => code === 'closed' || code === 'closed_by_customer';
|
|
12
|
+
const toCardPolicyCardSelectionRow = (card) => {
|
|
13
|
+
const user = card.cardHolderUser;
|
|
14
|
+
const displayName = `${user.firstName ?? ''} ${user.lastName ?? ''}`.trim() ||
|
|
15
|
+
user.email ||
|
|
16
|
+
user.userId;
|
|
17
|
+
return {
|
|
18
|
+
id: card.id,
|
|
19
|
+
isChecked: false,
|
|
20
|
+
cardName: card.cardName,
|
|
21
|
+
last4: card.accountLast4,
|
|
22
|
+
limitAmount: card.limit?.amount ?? 0,
|
|
23
|
+
limitCadence: card.creditLimitFrequency?.code,
|
|
24
|
+
owner: {
|
|
25
|
+
userId: user.userId,
|
|
26
|
+
displayName,
|
|
27
|
+
roleLabel: card.cardHolderRoles?.titleAtCompany,
|
|
28
|
+
},
|
|
29
|
+
utilizationAmount: (card.limit?.amount ?? 0) - (card.available?.amount ?? 0),
|
|
30
|
+
};
|
|
31
|
+
};
|
|
32
|
+
const readCardsMasterList = (state) => {
|
|
33
|
+
const view = (0, chargeCardListSelector_1.getAllChargeCardsWithUser)(state);
|
|
34
|
+
return view.cards
|
|
35
|
+
.filter((card) => !isClosedChargeCardStatusCode(card.status?.code))
|
|
36
|
+
.map(toCardPolicyCardSelectionRow);
|
|
37
|
+
};
|
|
38
|
+
const readMccCategoriesAvailable = (state) => state.cardPolicyState.mccCategoriesFetchState === 'Completed';
|
|
39
|
+
const readCardPolicyPayload = (state, chatSessionId, questionAnswerId) => {
|
|
40
|
+
const qa = (0, aiCfoSelector_1.getQuestionAnswerByIdForChatSession)(state.aiCfoState, chatSessionId, questionAnswerId);
|
|
41
|
+
const visualization = qa?.responses.answer?.content.visualization;
|
|
42
|
+
if (visualization?.type !== 'interactive_form') {
|
|
43
|
+
return undefined;
|
|
44
|
+
}
|
|
45
|
+
const data = visualization.data;
|
|
46
|
+
if (!('formType' in data) || data.formType !== 'card_policy') {
|
|
47
|
+
return undefined;
|
|
48
|
+
}
|
|
49
|
+
return data.payload;
|
|
50
|
+
};
|
|
51
|
+
const resolveQuestionAnswerId = (state, action) => {
|
|
52
|
+
if (action.payload.questionAnswerId != null) {
|
|
53
|
+
return action.payload.questionAnswerId;
|
|
54
|
+
}
|
|
55
|
+
const session = state.aiCfoState.aiCfoByChatSessionId[action.payload.chatSessionId];
|
|
56
|
+
return session?.questionAnswers.slice(-1)[0]?.questionAnswerId;
|
|
57
|
+
};
|
|
58
|
+
const isSeedTrigger = (action) => aiCfoReducer_1.upsertAnswerPayload.match(action) ||
|
|
59
|
+
aiCfoReducer_1.upsertOrAddQuestionAnswerPayload.match(action);
|
|
60
|
+
const isCreateSuccess = (action) => createCardPolicyReducer_1.updateCreateCardPolicyTemplateRequestState.match(action) &&
|
|
61
|
+
action.payload.fetchState === 'Completed';
|
|
62
|
+
const buildSeedAction = (state, payload) => {
|
|
63
|
+
const cardsMasterList = readCardsMasterList(state);
|
|
64
|
+
const mccCategories = state.cardPolicyState.mccCategories;
|
|
65
|
+
return (0, createCardPolicyReducer_1.seedAiCardPolicyFormDraft)({
|
|
66
|
+
initialData: payload,
|
|
67
|
+
cardsMasterList,
|
|
68
|
+
mccCategories,
|
|
69
|
+
suggestedAllowMerchants: state.cardPolicyState.suggestedAllowMerchants,
|
|
70
|
+
suggestedBlockMerchants: state.cardPolicyState.suggestedBlockMerchants,
|
|
71
|
+
suggestedAllowCategories: state.cardPolicyState.suggestedAllowCategories,
|
|
72
|
+
suggestedBlockCategories: state.cardPolicyState.suggestedBlockCategories,
|
|
73
|
+
});
|
|
74
|
+
};
|
|
75
|
+
// Seeds the AI card-policy draft from `interactive_form` answers with
|
|
76
|
+
// `formType === "card_policy"`, clearing on bulk-create success. Defers seeding
|
|
77
|
+
// until MCC categories load so category chips can resolve to human labels.
|
|
78
|
+
const seedAiCardPolicyFormDraftEpic = (actions$, state$) => actions$.pipe((0, operators_1.mergeMap)((action) => {
|
|
79
|
+
if (isCreateSuccess(action)) {
|
|
80
|
+
return (0, rxjs_1.of)((0, createCardPolicyReducer_1.clearAiCardPolicyFormDraft)());
|
|
81
|
+
}
|
|
82
|
+
if (!isSeedTrigger(action)) {
|
|
83
|
+
return rxjs_1.EMPTY;
|
|
84
|
+
}
|
|
85
|
+
const state = state$.value;
|
|
86
|
+
const questionAnswerId = resolveQuestionAnswerId(state, action);
|
|
87
|
+
if (questionAnswerId == null) {
|
|
88
|
+
return rxjs_1.EMPTY;
|
|
89
|
+
}
|
|
90
|
+
const payload = readCardPolicyPayload(state, action.payload.chatSessionId, questionAnswerId);
|
|
91
|
+
if (payload == null) {
|
|
92
|
+
return rxjs_1.EMPTY;
|
|
93
|
+
}
|
|
94
|
+
if (readMccCategoriesAvailable(state)) {
|
|
95
|
+
return (0, rxjs_1.of)(buildSeedAction(state, payload));
|
|
96
|
+
}
|
|
97
|
+
const seedWhenMccLoaded$ = state$.pipe((0, operators_1.map)((rs) => readMccCategoriesAvailable(rs)), (0, operators_1.distinctUntilChanged)(), (0, operators_1.filter)((available) => available), (0, operators_1.take)(1), (0, operators_1.map)(() => buildSeedAction(state$.value, payload)));
|
|
98
|
+
const mccFetchState = state.cardPolicyState.mccCategoriesFetchState;
|
|
99
|
+
if (mccFetchState === 'In-Progress') {
|
|
100
|
+
return seedWhenMccLoaded$;
|
|
101
|
+
}
|
|
102
|
+
return (0, rxjs_1.concat)((0, rxjs_1.of)((0, cardPolicyReducer_1.fetchCardPolicyMccCategories)()), seedWhenMccLoaded$);
|
|
103
|
+
}));
|
|
104
|
+
exports.seedAiCardPolicyFormDraftEpic = seedAiCardPolicyFormDraftEpic;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { ID } from '../../../../../commonStateTypes/common';
|
|
2
|
+
import { CardPolicyTemplateEntityList } from '../../../../../entity/cardPolicy/cardPolicyState';
|
|
3
|
+
import { CardPolicyFormDraft, CardPolicyModeValue } from './cardPolicyFormDraftTypes';
|
|
4
|
+
export type CardPolicyBulkSubmitKind = 'auto' | 'guided' | 'upload';
|
|
5
|
+
export interface BulkCreateCardPolicyTemplateEntry {
|
|
6
|
+
allowedEntity: CardPolicyTemplateEntityList;
|
|
7
|
+
applyToCards: ID[];
|
|
8
|
+
blockedEntity: CardPolicyTemplateEntityList;
|
|
9
|
+
description: string;
|
|
10
|
+
name: string;
|
|
11
|
+
mode?: CardPolicyModeValue;
|
|
12
|
+
requiredReceiptThreshold?: number | null;
|
|
13
|
+
spendLimits?: {
|
|
14
|
+
transaction: number | null;
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
export interface ToBulkCardPolicyTemplateRequestsFromDraftArgs {
|
|
18
|
+
draft: CardPolicyFormDraft;
|
|
19
|
+
description?: string;
|
|
20
|
+
guidedMode?: CardPolicyModeValue;
|
|
21
|
+
}
|
|
22
|
+
export declare const toBulkCardPolicyTemplateRequestsFromDraft: ({ draft, description, guidedMode, }: ToBulkCardPolicyTemplateRequestsFromDraftArgs) => BulkCreateCardPolicyTemplateEntry[];
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.toBulkCardPolicyTemplateRequestsFromDraft = void 0;
|
|
4
|
+
const cardPolicyFormDraftTypes_1 = require("./cardPolicyFormDraftTypes");
|
|
5
|
+
const cardPolicyRequestParts_1 = require("./cardPolicyRequestParts");
|
|
6
|
+
const isSelectedChip = (chip) => chip.isSelected !== false;
|
|
7
|
+
const chipsInGroup = (row, groupId) => {
|
|
8
|
+
const group = row.chipGroups.find((g) => g.id === groupId);
|
|
9
|
+
if (group == null) {
|
|
10
|
+
return [];
|
|
11
|
+
}
|
|
12
|
+
return group.chips.filter(isSelectedChip);
|
|
13
|
+
};
|
|
14
|
+
const collectVendorLabelsFromReviewRow = (row, groupId) => chipsInGroup(row, groupId).map((chip) => chip.label);
|
|
15
|
+
const collectCategoryCodesFromReviewRow = (row, groupId) => chipsInGroup(row, groupId).map((chip) => chip.optionalCode ?? chip.id);
|
|
16
|
+
const collectCardIdsFromReviewRow = (row) => chipsInGroup(row, cardPolicyRequestParts_1.REVIEW_GROUP_IDS.appliedToCards).flatMap((chip) => chip.cardIds ?? []);
|
|
17
|
+
const limitValueFromReviewRow = (row, chipId) => {
|
|
18
|
+
const group = row.chipGroups.find((g) => g.id === cardPolicyRequestParts_1.REVIEW_GROUP_IDS.limits);
|
|
19
|
+
if (group == null) {
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
const chip = group.chips.find((c) => c.id === chipId && isSelectedChip(c));
|
|
23
|
+
if (chip == null) {
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
if (chip.optionalCode != null) {
|
|
27
|
+
const parsed = Number(chip.optionalCode);
|
|
28
|
+
return Number.isFinite(parsed) ? parsed : null;
|
|
29
|
+
}
|
|
30
|
+
const labelDigits = chip.label.match(/\d+(?:\.\d+)?/);
|
|
31
|
+
if (labelDigits == null) {
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
const parsed = Number(labelDigits[0]);
|
|
35
|
+
return Number.isFinite(parsed) ? parsed : null;
|
|
36
|
+
};
|
|
37
|
+
const buildGuidedEntry = (row, draft, guidedMode, description) => ({
|
|
38
|
+
allowedEntity: {
|
|
39
|
+
categoryCodes: (0, cardPolicyRequestParts_1.collectCategoryCodes)(draft.categoryPolicy, 'allow'),
|
|
40
|
+
merchantNames: (0, cardPolicyRequestParts_1.collectMerchantNames)(draft.vendorPolicy, 'allow'),
|
|
41
|
+
},
|
|
42
|
+
applyToCards: draft.cardSelections
|
|
43
|
+
.filter((card) => card.isChecked)
|
|
44
|
+
.map((card) => card.id),
|
|
45
|
+
blockedEntity: {
|
|
46
|
+
categoryCodes: (0, cardPolicyRequestParts_1.collectCategoryCodes)(draft.categoryPolicy, 'block'),
|
|
47
|
+
merchantNames: (0, cardPolicyRequestParts_1.collectMerchantNames)(draft.vendorPolicy, 'block'),
|
|
48
|
+
},
|
|
49
|
+
description: description.trim(),
|
|
50
|
+
mode: guidedMode,
|
|
51
|
+
name: row.name.trim(),
|
|
52
|
+
requiredReceiptThreshold: (0, cardPolicyRequestParts_1.amountFromLimitRow)(draft.limits, cardPolicyFormDraftTypes_1.CARD_POLICY_LIMIT_ROW_ID_REQUIRE_RECEIPT),
|
|
53
|
+
spendLimits: {
|
|
54
|
+
transaction: (0, cardPolicyRequestParts_1.amountFromLimitRow)(draft.limits, cardPolicyFormDraftTypes_1.CARD_POLICY_LIMIT_ROW_ID_TRANSACTION),
|
|
55
|
+
},
|
|
56
|
+
});
|
|
57
|
+
const buildAutoEntry = (row, description) => ({
|
|
58
|
+
allowedEntity: {
|
|
59
|
+
categoryCodes: collectCategoryCodesFromReviewRow(row, cardPolicyRequestParts_1.REVIEW_GROUP_IDS.allowedCategories),
|
|
60
|
+
merchantNames: collectVendorLabelsFromReviewRow(row, cardPolicyRequestParts_1.REVIEW_GROUP_IDS.allowedVendors),
|
|
61
|
+
},
|
|
62
|
+
applyToCards: collectCardIdsFromReviewRow(row),
|
|
63
|
+
blockedEntity: {
|
|
64
|
+
categoryCodes: collectCategoryCodesFromReviewRow(row, cardPolicyRequestParts_1.REVIEW_GROUP_IDS.restrictedCategories),
|
|
65
|
+
merchantNames: collectVendorLabelsFromReviewRow(row, cardPolicyRequestParts_1.REVIEW_GROUP_IDS.blockedVendors),
|
|
66
|
+
},
|
|
67
|
+
description: description.trim(),
|
|
68
|
+
name: row.name.trim(),
|
|
69
|
+
});
|
|
70
|
+
const buildUploadEntry = (row, draft, description) => ({
|
|
71
|
+
allowedEntity: {
|
|
72
|
+
categoryCodes: collectCategoryCodesFromReviewRow(row, cardPolicyRequestParts_1.REVIEW_GROUP_IDS.allowedCategories),
|
|
73
|
+
merchantNames: collectVendorLabelsFromReviewRow(row, cardPolicyRequestParts_1.REVIEW_GROUP_IDS.allowedVendors),
|
|
74
|
+
},
|
|
75
|
+
applyToCards: draft.cardSelections
|
|
76
|
+
.filter((card) => card.isChecked)
|
|
77
|
+
.map((card) => card.id),
|
|
78
|
+
blockedEntity: {
|
|
79
|
+
categoryCodes: collectCategoryCodesFromReviewRow(row, cardPolicyRequestParts_1.REVIEW_GROUP_IDS.restrictedCategories),
|
|
80
|
+
merchantNames: collectVendorLabelsFromReviewRow(row, cardPolicyRequestParts_1.REVIEW_GROUP_IDS.blockedVendors),
|
|
81
|
+
},
|
|
82
|
+
description: description.trim(),
|
|
83
|
+
name: row.name.trim(),
|
|
84
|
+
requiredReceiptThreshold: limitValueFromReviewRow(row, cardPolicyRequestParts_1.REVIEW_LIMIT_CHIP_IDS.receipt),
|
|
85
|
+
spendLimits: {
|
|
86
|
+
transaction: limitValueFromReviewRow(row, cardPolicyRequestParts_1.REVIEW_LIMIT_CHIP_IDS.transaction),
|
|
87
|
+
},
|
|
88
|
+
});
|
|
89
|
+
// One entry per checked review row; per-mode key contract enforced internally.
|
|
90
|
+
const toBulkCardPolicyTemplateRequestsFromDraft = ({ draft, description = '', guidedMode = 'strict', }) => {
|
|
91
|
+
const checkedRows = draft.policiesReview.filter((row) => row.isChecked);
|
|
92
|
+
if (draft.policyKind === 'guided') {
|
|
93
|
+
return checkedRows.map((row) => buildGuidedEntry(row, draft, guidedMode, description));
|
|
94
|
+
}
|
|
95
|
+
if (draft.policyKind === 'upload') {
|
|
96
|
+
return checkedRows.map((row) => buildUploadEntry(row, draft, description));
|
|
97
|
+
}
|
|
98
|
+
return checkedRows.map((row) => buildAutoEntry(row, description));
|
|
99
|
+
};
|
|
100
|
+
exports.toBulkCardPolicyTemplateRequestsFromDraft = toBulkCardPolicyTemplateRequestsFromDraft;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { CreateCardPolicyTemplateRequest } from '../../../../../entity/cardPolicy/cardPolicyPayload';
|
|
2
|
+
import { CardPolicyFormDraft, CardPolicyModeValue } from './cardPolicyFormDraftTypes';
|
|
3
|
+
export interface ToCardPolicyTemplateRequestFromDraftArgs {
|
|
4
|
+
draft: CardPolicyFormDraft;
|
|
5
|
+
description?: string;
|
|
6
|
+
mode?: CardPolicyModeValue;
|
|
7
|
+
}
|
|
8
|
+
export declare const toCardPolicyTemplateRequestFromDraft: ({ draft, description, mode, }: ToCardPolicyTemplateRequestFromDraftArgs) => CreateCardPolicyTemplateRequest;
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.toCardPolicyTemplateRequestFromDraft = void 0;
|
|
4
|
+
const cardPolicyFormDraftTypes_1 = require("./cardPolicyFormDraftTypes");
|
|
5
|
+
const cardPolicyRequestParts_1 = require("./cardPolicyRequestParts");
|
|
6
|
+
// auto/upload project from the active review row's chip groups; guided reads source slices.
|
|
7
|
+
// Active row = first checked, else first; name follows the same rule.
|
|
8
|
+
const toCardPolicyTemplateRequestFromDraft = ({ draft, description = '', mode = 'strict', }) => {
|
|
9
|
+
const name = pickPolicyName(draft);
|
|
10
|
+
const base = {
|
|
11
|
+
description: description.trim(),
|
|
12
|
+
mode,
|
|
13
|
+
name: name.trim(),
|
|
14
|
+
};
|
|
15
|
+
if (draft.policyKind === 'auto' || draft.policyKind === 'upload') {
|
|
16
|
+
const activeRow = draft.policiesReview.find((row) => row.isChecked) ??
|
|
17
|
+
draft.policiesReview[0];
|
|
18
|
+
if (activeRow == null) {
|
|
19
|
+
return {
|
|
20
|
+
...base,
|
|
21
|
+
allowedEntity: { categoryCodes: [], merchantNames: [] },
|
|
22
|
+
applyToCards: [],
|
|
23
|
+
blockedEntity: { categoryCodes: [], merchantNames: [] },
|
|
24
|
+
requiredReceiptThreshold: null,
|
|
25
|
+
spendLimits: { transaction: null },
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
return {
|
|
29
|
+
...base,
|
|
30
|
+
...(0, cardPolicyRequestParts_1.projectAutoReviewRowToCardPolicyRequestParts)(activeRow),
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
// Guided
|
|
34
|
+
return {
|
|
35
|
+
...base,
|
|
36
|
+
allowedEntity: {
|
|
37
|
+
categoryCodes: (0, cardPolicyRequestParts_1.collectCategoryCodes)(draft.categoryPolicy, 'allow'),
|
|
38
|
+
merchantNames: (0, cardPolicyRequestParts_1.collectMerchantNames)(draft.vendorPolicy, 'allow'),
|
|
39
|
+
},
|
|
40
|
+
applyToCards: draft.cardSelections
|
|
41
|
+
.filter((row) => row.isChecked)
|
|
42
|
+
.map((row) => row.id),
|
|
43
|
+
blockedEntity: {
|
|
44
|
+
categoryCodes: (0, cardPolicyRequestParts_1.collectCategoryCodes)(draft.categoryPolicy, 'block'),
|
|
45
|
+
merchantNames: (0, cardPolicyRequestParts_1.collectMerchantNames)(draft.vendorPolicy, 'block'),
|
|
46
|
+
},
|
|
47
|
+
requiredReceiptThreshold: (0, cardPolicyRequestParts_1.amountFromLimitRow)(draft.limits, cardPolicyFormDraftTypes_1.CARD_POLICY_LIMIT_ROW_ID_REQUIRE_RECEIPT),
|
|
48
|
+
spendLimits: {
|
|
49
|
+
transaction: (0, cardPolicyRequestParts_1.amountFromLimitRow)(draft.limits, cardPolicyFormDraftTypes_1.CARD_POLICY_LIMIT_ROW_ID_TRANSACTION),
|
|
50
|
+
},
|
|
51
|
+
};
|
|
52
|
+
};
|
|
53
|
+
exports.toCardPolicyTemplateRequestFromDraft = toCardPolicyTemplateRequestFromDraft;
|
|
54
|
+
const pickPolicyName = (draft) => {
|
|
55
|
+
const checked = draft.policiesReview.find((row) => row.isChecked);
|
|
56
|
+
if (checked != null) {
|
|
57
|
+
return checked.name;
|
|
58
|
+
}
|
|
59
|
+
if (draft.policiesReview.length > 0) {
|
|
60
|
+
return draft.policiesReview[0].name;
|
|
61
|
+
}
|
|
62
|
+
return '';
|
|
63
|
+
};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { CreateCardPolicyTemplateRequest } from '../../../../../entity/cardPolicy/cardPolicyPayload';
|
|
2
|
+
import { CardPolicyCreateFormDraft } from './cardPolicyFormDraftTypes';
|
|
3
|
+
export declare const toManualCardPolicyTemplateRequestFromDraft: (draft: CardPolicyCreateFormDraft) => CreateCardPolicyTemplateRequest;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.toManualCardPolicyTemplateRequestFromDraft = void 0;
|
|
4
|
+
const cardPolicyFormDraftTypes_1 = require("./cardPolicyFormDraftTypes");
|
|
5
|
+
const cardPolicyRequestParts_1 = require("./cardPolicyRequestParts");
|
|
6
|
+
// Mirrors the AI guided builder without the `policiesReview` projection;
|
|
7
|
+
// disabled limit toggles emit `null` (BE: "not configured").
|
|
8
|
+
const toManualCardPolicyTemplateRequestFromDraft = (draft) => ({
|
|
9
|
+
allowedEntity: {
|
|
10
|
+
categoryCodes: (0, cardPolicyRequestParts_1.collectCategoryCodes)(draft.categoryPolicy, 'allow'),
|
|
11
|
+
merchantNames: (0, cardPolicyRequestParts_1.collectMerchantNames)(draft.vendorPolicy, 'allow'),
|
|
12
|
+
},
|
|
13
|
+
applyToCards: draft.cardSelections
|
|
14
|
+
.filter((row) => row.isChecked)
|
|
15
|
+
.map((row) => row.id),
|
|
16
|
+
blockedEntity: {
|
|
17
|
+
categoryCodes: (0, cardPolicyRequestParts_1.collectCategoryCodes)(draft.categoryPolicy, 'block'),
|
|
18
|
+
merchantNames: (0, cardPolicyRequestParts_1.collectMerchantNames)(draft.vendorPolicy, 'block'),
|
|
19
|
+
},
|
|
20
|
+
description: draft.description.trim(),
|
|
21
|
+
mode: draft.mode,
|
|
22
|
+
name: draft.name.trim(),
|
|
23
|
+
requiredReceiptThreshold: (0, cardPolicyRequestParts_1.amountFromLimitRow)(draft.limits, cardPolicyFormDraftTypes_1.CARD_POLICY_LIMIT_ROW_ID_REQUIRE_RECEIPT),
|
|
24
|
+
spendLimits: {
|
|
25
|
+
transaction: (0, cardPolicyRequestParts_1.amountFromLimitRow)(draft.limits, cardPolicyFormDraftTypes_1.CARD_POLICY_LIMIT_ROW_ID_TRANSACTION),
|
|
26
|
+
},
|
|
27
|
+
});
|
|
28
|
+
exports.toManualCardPolicyTemplateRequestFromDraft = toManualCardPolicyTemplateRequestFromDraft;
|
|
@@ -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" | "
|
|
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);
|
package/lib/view/spendManagement/chargeCards/issueChargeCard/aiCardCreationFormDraftTypes.d.ts
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { ID } from '../../../../commonStateTypes/common';
|
|
2
|
+
import { CardsCardKind, CardsCreationInitialData } from '../../../../entity/aiCfo/aiCfoState';
|
|
3
|
+
import { User } from '../../../../entity/user/userState';
|
|
4
|
+
export interface CardsTeamRow {
|
|
5
|
+
cardKind: CardsCardKind;
|
|
6
|
+
id: string;
|
|
7
|
+
isChecked: boolean;
|
|
8
|
+
label: string;
|
|
9
|
+
rightLabel: string;
|
|
10
|
+
value: string;
|
|
11
|
+
rightSubLabel?: string;
|
|
12
|
+
subLabel?: string;
|
|
13
|
+
subValue?: string;
|
|
14
|
+
}
|
|
15
|
+
export interface CardsOwnerFieldValue {
|
|
16
|
+
allUsers: User[];
|
|
17
|
+
selectedUser?: User;
|
|
18
|
+
}
|
|
19
|
+
export interface CardsCardRow {
|
|
20
|
+
cardKind: CardsCardKind;
|
|
21
|
+
id: string;
|
|
22
|
+
label: string;
|
|
23
|
+
owner: CardsOwnerFieldValue;
|
|
24
|
+
recommendedLimit?: number;
|
|
25
|
+
}
|
|
26
|
+
export interface CardsFormDraft {
|
|
27
|
+
cardRows: CardsCardRow[];
|
|
28
|
+
teamRows: CardsTeamRow[];
|
|
29
|
+
}
|
|
30
|
+
export interface AiCardCreationFormDraftSeedContext {
|
|
31
|
+
allUsers: User[];
|
|
32
|
+
mode: CardsCreationInitialData['mode'];
|
|
33
|
+
suggestedOwnerUserIdByTeamId: Record<ID, string | undefined>;
|
|
34
|
+
}
|
package/lib/view/spendManagement/chargeCards/issueChargeCard/applyAiCardCreationFormDraftUpdate.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { AiCardCreationFormDraftSeedContext, CardsFormDraft } from './aiCardCreationFormDraftTypes';
|
|
2
|
+
export interface ApplyAiCardCreationFormDraftUpdateArgs {
|
|
3
|
+
context: AiCardCreationFormDraftSeedContext | undefined;
|
|
4
|
+
next: CardsFormDraft;
|
|
5
|
+
prev: CardsFormDraft | undefined;
|
|
6
|
+
}
|
|
7
|
+
export declare const applyAiCardCreationFormDraftUpdate: ({ next, prev, context, }: ApplyAiCardCreationFormDraftUpdateArgs) => CardsFormDraft;
|
package/lib/view/spendManagement/chargeCards/issueChargeCard/applyAiCardCreationFormDraftUpdate.js
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.applyAiCardCreationFormDraftUpdate = void 0;
|
|
4
|
+
const deriveAiCardRowsFromTeams_1 = require("./deriveAiCardRowsFromTeams");
|
|
5
|
+
// Re-derives step-2 `cardRows` only when step-1 team selection changed.
|
|
6
|
+
// Step-2-only edits must skip the re-derive: `deriveAiCardRowsFromTeams` keys
|
|
7
|
+
// off `cardRow.id`, and a dropdown swap has just mutated it — re-running would
|
|
8
|
+
// revert the edit to the source team's id/label.
|
|
9
|
+
const applyAiCardCreationFormDraftUpdate = ({ next, prev, context, }) => {
|
|
10
|
+
if (context == null || context.mode === 'create') {
|
|
11
|
+
return next;
|
|
12
|
+
}
|
|
13
|
+
if (!haveCheckedTeamRowsChanged(prev?.teamRows, next.teamRows)) {
|
|
14
|
+
return next;
|
|
15
|
+
}
|
|
16
|
+
return {
|
|
17
|
+
teamRows: next.teamRows,
|
|
18
|
+
cardRows: (0, deriveAiCardRowsFromTeams_1.deriveAiCardRowsFromTeams)({
|
|
19
|
+
teamRows: next.teamRows,
|
|
20
|
+
prevCardRows: next.cardRows,
|
|
21
|
+
allUsers: context.allUsers,
|
|
22
|
+
suggestedOwnerUserIdByTeamId: context.suggestedOwnerUserIdByTeamId,
|
|
23
|
+
}),
|
|
24
|
+
};
|
|
25
|
+
};
|
|
26
|
+
exports.applyAiCardCreationFormDraftUpdate = applyAiCardCreationFormDraftUpdate;
|
|
27
|
+
const haveCheckedTeamRowsChanged = (prevTeamRows, nextTeamRows) => {
|
|
28
|
+
const prevCheckedIds = (prevTeamRows ?? [])
|
|
29
|
+
.filter((row) => row.isChecked)
|
|
30
|
+
.map((row) => row.id);
|
|
31
|
+
const nextCheckedIds = nextTeamRows
|
|
32
|
+
.filter((row) => row.isChecked)
|
|
33
|
+
.map((row) => row.id);
|
|
34
|
+
if (prevCheckedIds.length !== nextCheckedIds.length) {
|
|
35
|
+
return true;
|
|
36
|
+
}
|
|
37
|
+
return prevCheckedIds.some((id, idx) => id !== nextCheckedIds[idx]);
|
|
38
|
+
};
|
package/lib/view/spendManagement/chargeCards/issueChargeCard/buildAiCardCreationFormDraftSeed.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { CardsCreationInitialData } from '../../../../entity/aiCfo/aiCfoState';
|
|
2
|
+
import { User } from '../../../../entity/user/userState';
|
|
3
|
+
import { AiCardCreationFormDraftSeedContext, CardsFormDraft } from './aiCardCreationFormDraftTypes';
|
|
4
|
+
export interface BuildAiCardCreationFormDraftSeedArgs {
|
|
5
|
+
allUsers: User[];
|
|
6
|
+
initialData: CardsCreationInitialData;
|
|
7
|
+
}
|
|
8
|
+
export interface BuildAiCardCreationFormDraftSeedResult {
|
|
9
|
+
context: AiCardCreationFormDraftSeedContext;
|
|
10
|
+
draft: CardsFormDraft;
|
|
11
|
+
}
|
|
12
|
+
export declare const buildAiCardCreationFormDraftSeed: ({ initialData, allUsers, }: BuildAiCardCreationFormDraftSeedArgs) => BuildAiCardCreationFormDraftSeedResult;
|
package/lib/view/spendManagement/chargeCards/issueChargeCard/buildAiCardCreationFormDraftSeed.js
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.buildAiCardCreationFormDraftSeed = void 0;
|
|
4
|
+
const deriveAiCardRowsFromTeams_1 = require("./deriveAiCardRowsFromTeams");
|
|
5
|
+
// Branches on `initialData.mode`:
|
|
6
|
+
// - review: step-1 teams start checked; step-2 `cardRows` pre-derived so the
|
|
7
|
+
// happy path (no toggle) lands on a populated table.
|
|
8
|
+
// - create: seed `cardRows` from AI's suggested cards; `teamRows` stays empty.
|
|
9
|
+
const buildAiCardCreationFormDraftSeed = ({ initialData, allUsers, }) => {
|
|
10
|
+
const context = {
|
|
11
|
+
allUsers,
|
|
12
|
+
mode: initialData.mode,
|
|
13
|
+
suggestedOwnerUserIdByTeamId: initialData.suggestedOwnerUserIdByTeamId,
|
|
14
|
+
};
|
|
15
|
+
if (initialData.mode === 'create') {
|
|
16
|
+
return {
|
|
17
|
+
context,
|
|
18
|
+
draft: {
|
|
19
|
+
teamRows: [],
|
|
20
|
+
cardRows: initialData.cardRows.map((seed) => buildCardRowFromSeed(seed, allUsers)),
|
|
21
|
+
},
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
const teamRows = initialData.teamRows.map((row) => ({
|
|
25
|
+
cardKind: row.cardKind,
|
|
26
|
+
id: row.id,
|
|
27
|
+
isChecked: true,
|
|
28
|
+
label: row.label,
|
|
29
|
+
value: row.avgMonthlySpend,
|
|
30
|
+
rightLabel: row.recommendedLimit,
|
|
31
|
+
rightSubLabel: row.recommendedLimitCadence,
|
|
32
|
+
}));
|
|
33
|
+
return {
|
|
34
|
+
context,
|
|
35
|
+
draft: {
|
|
36
|
+
teamRows,
|
|
37
|
+
cardRows: (0, deriveAiCardRowsFromTeams_1.deriveAiCardRowsFromTeams)({
|
|
38
|
+
teamRows,
|
|
39
|
+
prevCardRows: [],
|
|
40
|
+
allUsers,
|
|
41
|
+
suggestedOwnerUserIdByTeamId: initialData.suggestedOwnerUserIdByTeamId,
|
|
42
|
+
}),
|
|
43
|
+
},
|
|
44
|
+
};
|
|
45
|
+
};
|
|
46
|
+
exports.buildAiCardCreationFormDraftSeed = buildAiCardCreationFormDraftSeed;
|
|
47
|
+
const buildCardRowFromSeed = (seed, allUsers) => {
|
|
48
|
+
const selectedUser = seed.suggestedOwnerUserId != null
|
|
49
|
+
? allUsers.find((user) => user.userId === seed.suggestedOwnerUserId)
|
|
50
|
+
: undefined;
|
|
51
|
+
return {
|
|
52
|
+
cardKind: seed.cardKind,
|
|
53
|
+
id: seed.id,
|
|
54
|
+
label: seed.label,
|
|
55
|
+
owner: {
|
|
56
|
+
allUsers,
|
|
57
|
+
selectedUser,
|
|
58
|
+
},
|
|
59
|
+
recommendedLimit: seed.recommendedLimit,
|
|
60
|
+
};
|
|
61
|
+
};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { User } from '../../../../entity/user/userState';
|
|
2
|
+
import { CardsCardRow, CardsTeamRow } from './aiCardCreationFormDraftTypes';
|
|
3
|
+
export interface DeriveAiCardRowsFromTeamsArgs {
|
|
4
|
+
allUsers: User[];
|
|
5
|
+
suggestedOwnerUserIdByTeamId: Record<string, string | undefined>;
|
|
6
|
+
teamRows: CardsTeamRow[];
|
|
7
|
+
prevCardRows?: CardsCardRow[];
|
|
8
|
+
}
|
|
9
|
+
export declare const deriveAiCardRowsFromTeams: ({ teamRows, prevCardRows, allUsers, suggestedOwnerUserIdByTeamId, }: DeriveAiCardRowsFromTeamsArgs) => CardsCardRow[];
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.deriveAiCardRowsFromTeams = void 0;
|
|
4
|
+
// One row per checked team in source order. Existing rows are preserved
|
|
5
|
+
// verbatim so step-2 user edits survive upstream re-derives; new teams seed
|
|
6
|
+
// owner from the suggestion map and `recommendedLimit` by parsing `rightLabel`.
|
|
7
|
+
const deriveAiCardRowsFromTeams = ({ teamRows, prevCardRows = [], allUsers, suggestedOwnerUserIdByTeamId, }) => {
|
|
8
|
+
const prevById = new Map(prevCardRows.map((row) => [row.id, row]));
|
|
9
|
+
const userById = new Map(allUsers.map((user) => [user.userId, user]));
|
|
10
|
+
return teamRows
|
|
11
|
+
.filter((row) => row.isChecked)
|
|
12
|
+
.map((teamRow) => {
|
|
13
|
+
const previous = prevById.get(teamRow.id);
|
|
14
|
+
if (previous != null) {
|
|
15
|
+
return previous;
|
|
16
|
+
}
|
|
17
|
+
const suggestedUserId = suggestedOwnerUserIdByTeamId[teamRow.id];
|
|
18
|
+
const selectedUser = suggestedUserId != null ? userById.get(suggestedUserId) : undefined;
|
|
19
|
+
return {
|
|
20
|
+
cardKind: teamRow.cardKind,
|
|
21
|
+
id: teamRow.id,
|
|
22
|
+
label: teamRow.label,
|
|
23
|
+
owner: {
|
|
24
|
+
allUsers,
|
|
25
|
+
selectedUser,
|
|
26
|
+
},
|
|
27
|
+
recommendedLimit: parseLimitToFloat(teamRow.rightLabel),
|
|
28
|
+
};
|
|
29
|
+
});
|
|
30
|
+
};
|
|
31
|
+
exports.deriveAiCardRowsFromTeams = deriveAiCardRowsFromTeams;
|
|
32
|
+
const parseLimitToFloat = (raw) => {
|
|
33
|
+
const cleaned = raw.replace(/[^0-9.-]/g, '');
|
|
34
|
+
if (cleaned.length === 0) {
|
|
35
|
+
return undefined;
|
|
36
|
+
}
|
|
37
|
+
const parsed = Number(cleaned);
|
|
38
|
+
return Number.isFinite(parsed) ? parsed : undefined;
|
|
39
|
+
};
|