@zeniai/client-epic-state 5.1.88 → 5.1.89
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/entity/company/companyPayload.d.ts +4 -0
- package/lib/entity/company/companyPayload.js +18 -8
- package/lib/entity/company/companyStateTypes.d.ts +4 -0
- package/lib/entity/snackbar/snackbarTypes.d.ts +1 -1
- package/lib/entity/snackbar/snackbarTypes.js +2 -0
- package/lib/entity/tenant/tenantReducer.d.ts +5 -1
- package/lib/entity/tenant/tenantReducer.js +21 -2
- package/lib/epic.d.ts +3 -1
- package/lib/epic.js +3 -1
- package/lib/esm/entity/company/companyPayload.js +18 -8
- package/lib/esm/entity/snackbar/snackbarTypes.js +2 -0
- package/lib/esm/entity/tenant/tenantReducer.js +20 -1
- package/lib/esm/epic.js +3 -1
- package/lib/esm/index.js +4 -3
- package/lib/esm/view/companyView/companyViewReducer.js +58 -1
- package/lib/esm/view/companyView/epic/updateCompanyProductServicesEpic.js +91 -0
- package/lib/esm/view/companyView/epic/updateCompanyQboRealmIdEpic.js +58 -0
- package/lib/esm/view/companyView/selector/companyManagementViewSelector.js +52 -0
- package/lib/esm/view/companyView/types/cockpitTypes.js +13 -1
- package/lib/esm/view/companyView/types/companyManagementViewState.js +2 -0
- package/lib/index.d.ts +5 -3
- package/lib/index.js +57 -49
- package/lib/view/companyView/companyViewReducer.d.ts +22 -1
- package/lib/view/companyView/companyViewReducer.js +60 -3
- package/lib/view/companyView/epic/updateCompanyProductServicesEpic.d.ts +10 -0
- package/lib/view/companyView/epic/updateCompanyProductServicesEpic.js +95 -0
- package/lib/view/companyView/epic/updateCompanyQboRealmIdEpic.d.ts +8 -0
- package/lib/view/companyView/epic/updateCompanyQboRealmIdEpic.js +62 -0
- package/lib/view/companyView/selector/companyManagementViewSelector.d.ts +3 -0
- package/lib/view/companyView/selector/companyManagementViewSelector.js +55 -0
- package/lib/view/companyView/types/cockpitTypes.d.ts +7 -3
- package/lib/view/companyView/types/cockpitTypes.js +15 -1
- package/lib/view/companyView/types/companyManagementViewState.d.ts +2 -0
- package/lib/view/companyView/types/companyManagementViewState.js +2 -0
- package/lib/view/expenseAutomationView/helpers/transactionCategorizationLocalDataHelper.d.ts +1 -1
- package/package.json +1 -1
|
@@ -120,13 +120,23 @@ const toCompanyQuestionarie = (payload, currencyCode, currencySymbol) => ({
|
|
|
120
120
|
referrerType: payload.referrer_type ?? undefined,
|
|
121
121
|
referrerName: payload.referrer_name ?? undefined,
|
|
122
122
|
});
|
|
123
|
-
const toCompanyFeaturesActivationInfo = (payload) =>
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
123
|
+
const toCompanyFeaturesActivationInfo = (payload, companyInStore) => {
|
|
124
|
+
// Tenant-level verticals arrive only on the cockpit management payload; a
|
|
125
|
+
// plain company PUT omits them, so keep the last-known value instead of
|
|
126
|
+
// wiping it to undefined.
|
|
127
|
+
const storedInfo = companyInStore?.featuresActivationInfo;
|
|
128
|
+
return {
|
|
129
|
+
isBillPayFeatureEnabled: payload.is_bill_pay_feature_enabled,
|
|
130
|
+
isBookkeepingEnabled: payload.is_book_keeping_enabled ?? storedInfo?.isBookkeepingEnabled,
|
|
131
|
+
isCfoEnabled: payload.is_cfo_enabled ?? storedInfo?.isCfoEnabled,
|
|
132
|
+
isPayrollEnabled: payload.is_payroll_enabled ?? storedInfo?.isPayrollEnabled,
|
|
133
|
+
isReimbursementFeatureEnabled: payload.is_reimbursement_feature_enabled,
|
|
134
|
+
isTaxEnabled: payload.is_tax_enabled ?? storedInfo?.isTaxEnabled,
|
|
135
|
+
connectedAccountProvider: payload.connected_account_provider,
|
|
136
|
+
isFeatureVendorListingEnabled: payload.is_feature_vendor_listing_enabled,
|
|
137
|
+
isSameDayAchFeatureEnabled: payload.is_same_day_ach_enabled,
|
|
138
|
+
};
|
|
139
|
+
};
|
|
130
140
|
const toCompanyBillPayInfo = (payload) => ({
|
|
131
141
|
billPayTOSAcceptanceUserid: payload.bill_pay_tos_acceptance_user_id ?? undefined,
|
|
132
142
|
billPayTOSAcceptanceUserAgent: payload.bill_pay_tos_acceptance_user_agent ?? undefined,
|
|
@@ -422,7 +432,7 @@ export const toCompany = (payload, companiesPayload, isUpdate, companyInStore, c
|
|
|
422
432
|
companyChargeCardInfo: toCompanyChargeCardInfo(payload.charge_cards_info),
|
|
423
433
|
companyDebitCardInfo: toCompanyDebitCardInfo(payload.debit_cards_info),
|
|
424
434
|
companyOnboardingInfo: toCompanyOnboardingInfo(payload),
|
|
425
|
-
featuresActivationInfo: toCompanyFeaturesActivationInfo(payload),
|
|
435
|
+
featuresActivationInfo: toCompanyFeaturesActivationInfo(payload, companyInStore),
|
|
426
436
|
parentSubsidiaryInfo: isUpdate === true && companyInStore
|
|
427
437
|
? companyInStore.parentSubsidiaryInfo
|
|
428
438
|
: toCompanyParentSubsidiaryInfo(payload, companiesPayload),
|
|
@@ -227,6 +227,8 @@ const ALL_SNACKBAR_MESSAGE_SECTIONS = [
|
|
|
227
227
|
'qbo_connection_already_linked',
|
|
228
228
|
'qbo_connection_failed',
|
|
229
229
|
'accounting_projects_qbo_reconnect_failed',
|
|
230
|
+
'product_services_update',
|
|
231
|
+
'qbo_realm_id_update',
|
|
230
232
|
'invoicing_dunning_case_resolved',
|
|
231
233
|
'invoicing_dunning_retry',
|
|
232
234
|
'invoicing_dunning_cancel',
|
|
@@ -177,6 +177,25 @@ const tenant = createSlice({
|
|
|
177
177
|
draft.tenantsById[tenantId].isAccountingProjectsEnabled = enabled;
|
|
178
178
|
}
|
|
179
179
|
},
|
|
180
|
+
// Optimistic per-key merge of the product-family flags after a cockpit
|
|
181
|
+
// "enable services" write succeeds. Only the provided keys are applied so
|
|
182
|
+
// other product settings are preserved.
|
|
183
|
+
// Bookkeeping/spend only — bill pay & reimbursement are Company feature flags, not tenant product settings.
|
|
184
|
+
updateTenantProductSettings(draft, action) {
|
|
185
|
+
const { tenantId, isBookkeepingEnabled, isSpendManagementEnabled } = action.payload;
|
|
186
|
+
const tenant = draft.tenantsById[tenantId];
|
|
187
|
+
// No-op when productSettings isn't loaded (partial cockpit projection); UI relies on the next tenant fetch.
|
|
188
|
+
if (tenant == null || tenant.productSettings == null) {
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
if (isBookkeepingEnabled != null) {
|
|
192
|
+
tenant.productSettings.isBookkeepingEnabled = isBookkeepingEnabled;
|
|
193
|
+
}
|
|
194
|
+
if (isSpendManagementEnabled != null) {
|
|
195
|
+
tenant.productSettings.isSpendManagementEnabled =
|
|
196
|
+
isSpendManagementEnabled;
|
|
197
|
+
}
|
|
198
|
+
},
|
|
180
199
|
// Optimistic per-key merge: assumes the backend PATCH merges
|
|
181
200
|
// capitalizable_account_overrides by key rather than replacing the whole field.
|
|
182
201
|
updateTenantCapitalizationAccountOverride(draft, action) {
|
|
@@ -918,7 +937,7 @@ const tenant = createSlice({
|
|
|
918
937
|
});
|
|
919
938
|
},
|
|
920
939
|
});
|
|
921
|
-
export const { updateTenants, fetchAllTenants, updateTenantsSuccess, updateTenantsFailure, fetchActiveTenant, updateTenantSuccess, updateTenantFailure, updateCurrentTenant, fetchExcludedResources, updateExcludedResourcesSuccess, updateExcludedResourcesFailure, doSignIn, doMagicLinkSignIn, magicLinkSignInSuccess, magicLinkSignInFailure, sendEmailMagicLinkToUser, sendEmailMagicLinkToUserSuccess, sendEmailMagicLinkToUserFailure, updateSignInState, doSignOut, signOutSuccess, sendSessionHeartbeat, sessionHeartbeatSuccess, sessionHeartbeatFailure, updateLoggedInUser, fetchExternalConnections, saveExternalConnection, saveExternalConnectionSuccess, saveExternalConnectionFailure, fetchExternalConnectionsFailure, fetchExternalConnectionsSuccess, saveAPIKeyConnection, saveAPIKeyConnectionSuccess, saveAPIKeyConnectionFailure, saveOAuthConnection, saveOAuthConnectionSuccess, saveOAuthConnectionFailure, saveConnectorCredentials, saveConnectorCredentialsSuccess, saveConnectorCredentialsFailure, initEmailConnectOAuth, initEmailConnectOAuthSuccess, initEmailConnectOAuthFailure, deleteConnection, deleteConnectionSuccess, deleteConnectionFailure, fetchSubscriptionSummaryForTenant, updateSubscriptionSummaryForTenantSuccess, updateSubscriptionSummaryForTenantFailure, updateOnboardingTenants, removeOnboardingTenant, updateTenantReimbursementInfo, updateReferViewedForLoggedInUser, resetSignInState, trigger2FA, updateTenantAccountingClassesEnabled, updateTenantAccountingProjectsEnabled, updateTenantCapitalizationOnboardingDismissed, updateTenantCapitalizationAccountOverride, updateTenantMasterTOSInfo, verifyDeviceWithTwoFA, verifyDeviceWithTwoFASuccess, verifyDeviceWithTwoFAFailure, updateTreasuryVideoViewedForLoggedInUser, updateTreasuryPromoRemindMeLaterClickedForLoggedInUser, updateTreasuryPromoIntroClosedByOutsideClickForLoggedInUser, resendVerifyDeviceOTP, resendVerifyDeviceOTPSuccess, resendVerifyDeviceOTPFailure, } = tenant.actions;
|
|
940
|
+
export const { updateTenants, fetchAllTenants, updateTenantsSuccess, updateTenantsFailure, fetchActiveTenant, updateTenantSuccess, updateTenantFailure, updateCurrentTenant, fetchExcludedResources, updateExcludedResourcesSuccess, updateExcludedResourcesFailure, doSignIn, doMagicLinkSignIn, magicLinkSignInSuccess, magicLinkSignInFailure, sendEmailMagicLinkToUser, sendEmailMagicLinkToUserSuccess, sendEmailMagicLinkToUserFailure, updateSignInState, doSignOut, signOutSuccess, sendSessionHeartbeat, sessionHeartbeatSuccess, sessionHeartbeatFailure, updateLoggedInUser, fetchExternalConnections, saveExternalConnection, saveExternalConnectionSuccess, saveExternalConnectionFailure, fetchExternalConnectionsFailure, fetchExternalConnectionsSuccess, saveAPIKeyConnection, saveAPIKeyConnectionSuccess, saveAPIKeyConnectionFailure, saveOAuthConnection, saveOAuthConnectionSuccess, saveOAuthConnectionFailure, saveConnectorCredentials, saveConnectorCredentialsSuccess, saveConnectorCredentialsFailure, initEmailConnectOAuth, initEmailConnectOAuthSuccess, initEmailConnectOAuthFailure, deleteConnection, deleteConnectionSuccess, deleteConnectionFailure, fetchSubscriptionSummaryForTenant, updateSubscriptionSummaryForTenantSuccess, updateSubscriptionSummaryForTenantFailure, updateOnboardingTenants, removeOnboardingTenant, updateTenantReimbursementInfo, updateReferViewedForLoggedInUser, resetSignInState, trigger2FA, updateTenantAccountingClassesEnabled, updateTenantAccountingProjectsEnabled, updateTenantProductSettings, updateTenantCapitalizationOnboardingDismissed, updateTenantCapitalizationAccountOverride, updateTenantMasterTOSInfo, verifyDeviceWithTwoFA, verifyDeviceWithTwoFASuccess, verifyDeviceWithTwoFAFailure, updateTreasuryVideoViewedForLoggedInUser, updateTreasuryPromoRemindMeLaterClickedForLoggedInUser, updateTreasuryPromoIntroClosedByOutsideClickForLoggedInUser, resendVerifyDeviceOTP, resendVerifyDeviceOTPSuccess, resendVerifyDeviceOTPFailure, } = tenant.actions;
|
|
922
941
|
export default tenant.reducer;
|
|
923
942
|
/**
|
|
924
943
|
* Applies treasury promo user fields from the tenants API user block when present.
|
package/lib/esm/epic.js
CHANGED
|
@@ -146,6 +146,8 @@ import { fetchOnboardingViewEpic, } from './view/companyView/epic/fetchOnboardin
|
|
|
146
146
|
import { fetchPortfolioViewEpic, } from './view/companyView/epic/fetchPortfolioViewEpic';
|
|
147
147
|
import { fetchSubscriptionViewEpic, } from './view/companyView/epic/fetchSubscriptionViewEpic';
|
|
148
148
|
import { fetchZeniUsersEpic, } from './view/companyView/epic/fetchZeniUsersEpic';
|
|
149
|
+
import { updateCompanyProductServicesEpic, } from './view/companyView/epic/updateCompanyProductServicesEpic';
|
|
150
|
+
import { updateCompanyQboRealmIdEpic, } from './view/companyView/epic/updateCompanyQboRealmIdEpic';
|
|
149
151
|
import { fetchParentSubsidiaryManagementViewEpic, } from './view/companyView/parentSubsidiaryView/fetchParentSubsidiaryManagementViewEpic';
|
|
150
152
|
import { createTransferEntryEpic, } from './view/createTransferEntry/epics/createTransferEntryEpic';
|
|
151
153
|
import { fetchTransferAccountsEpic, } from './view/createTransferEntry/epics/fetchTransferAccountsEpic';
|
|
@@ -704,7 +706,7 @@ import { fetchZeniAccStatementPageEpic, } from './view/zeniAccStatementList/fetc
|
|
|
704
706
|
import { fetchZeniAccountsPromoCardEpic, } from './view/zeniAccountsPromoCard/zeniAccountsPromoCardEpic';
|
|
705
707
|
import { approveOAuthConsentEpic, } from './view/zeniOAuthView/epics/approveOAuthConsentEpic';
|
|
706
708
|
// Note: Please maintain strict alphabetical order
|
|
707
|
-
const combinedEpics = combineEpics(acceptBillPayTermsEpic, acceptBillPayUpdatedTermsEpic, acceptChargeCardTermsEpic, acceptEmployeeRemiTermsEpic, acceptInvoicingTermsEpic, acceptMasterTOSEpic, acceptRemiTermsEpic, acceptTreasuryTermsEpic, acceptZeniAccountTermsEpic, acknowledgeOnboardingAiActivationViewedEpic, acknowledgeOnboardingAiFinanceTeamEpic, addCardPaymentSourceEpic, addPromotionalCreditsEpic, applyExtractedPolicyToDraftEpic, approveOAuthConsentEpic, approveOrRejectBillEpic, approveOrRejectBillsBulkActionEpic, approveOrRejectRemiEpic, approveOrRejectRemisBulkActionEpic, approveVendorGlobalReviewEpic, archiveCardPolicyEpic, archiveInvoicingCatalogSubFamilyEpic, archiveTaskEpic, backgroundRefetchReviewTabEpic, bulkUpdateTaskListEpic, bulkUploadAutomatchingTimeoutEpic, bulkUploadMatchResultToastEpic, bulkUploadReceiptsEpic, cancelAiAccountantOnboardingEpic, cancelAndDeleteBillEpic, cancelAndDeleteRemiEpic, cancelOrDeleteBillsBulkActionEpic, cancelOrDeleteRemisBulkActionEpic, cancelScheduleAccruedJournalEntryEpic, changeZeniPersonRolesEpic, checkDepositEpic, closeChargeCardEpic, closeChargeCardsEpic, companyManagementSavePendingUpdatesEpic, companyManagementSaveUpdatesEpic, confirmBulkUploadMatchEpic, confirmCardSetupIntentEpic, connectInvoicingStripeEpic, convertAmountToHomeCurrencyEpic, createAddressEpic, createAutoTransferRuleEpic, createBankAccountEpic, createCardPolicyTemplatesEpic, createCardSetupIntentEpic, createCheckingAccountEpic, createCompanyAddressEpic, createCompanyOfficersEpic, createCompanyUserAddressEpic, createCreditNoteEpic, createGlobalMerchantEpic, createInternationalBankAccountEpic, createInvoiceEpic, createInvoicingCatalogSubFamilyEpic, createInvoicingSetupIntentEpic, createNewSchedulesAccruedEpic, createNewSchedulesEpic, createNewTaskGroupEpic, createPaymentInstrumentEpic, createSessionAndSubmitEpic, createSessionEpic, createSubTaskEpic, createTagEpic, createTaskFromTaskGroupTemplateEpic, createTransferEntryEpic, createUserBankAccountEpic, deleteAccountStatementEpic, deleteAutoTransferRuleEpic, deleteBankAccountEpic, deleteBillEpic, deleteBillPayApprovalRuleEpic, deleteCannedResponseEpic, deleteChatSessionEpic, deleteConnectionEpic, deleteFileEpic, deleteFileListEpic, deleteInternationalBankAccountEpic, deletePaymentInstrumentEpic, deletePersonEpic, deleteRemiApprovalRuleEpic, deleteRemiEpic, deleteScheduleAccruedDetailEpic, deleteScheduleDetailEpic, deleteTagEpic, deleteTaskEpic, deleteTaskGroupEpic, deleteTransactionAttachmentEpic, deleteUserBankAccountEpic, disableAccountingProjectsEpic, disconnectInvoicingStripeEpic, dismissCapitalizationOnboardingEpic, doMagicLinkSignInEpic, doSignInEpic, doSignOutEpic, downloadAccountingProviderAttachmentEpic, dragNDropTasksEpic, enableAccountingProjectsEpic, enableChargeCardAutoPayEpic, enableInvoicingEpic, enableSetupEpic, establishOnboardingPlaidConnectionEpic, establishPlaidConnectionEpic, excludeAccountFromReconciliationEpic, expressInterestChargeCardEpic, extractPolicyDocumentEpic, fetchAccountListEpic, fetchAccountListForAccountTypesEpic, fetchAccountSettingsListForAccountTypesEpic, fetchAccruedScheduleListEpic, fetchActiveTenantEpic, fetchAddressEpic, fetchAggregatedReportEpic, fetchAiAccountantCustomersEpic, fetchAiAccountantJobsEpic, fetchAiAgentsActivationStatusEpic, fetchAllCockpitViewsEpic, fetchAllExpenseAutomationTabsEpic, fetchAllPeopleRequiredViewsEpic, fetchAllTagsEpic, fetchAllTaskGroupsEpic, fetchAllTenantsEpic, fetchAndUpdateVendorRecommendationsEpic, fetchApAgingDetailEpic, fetchApAgingEpic, fetchArAgingDetailEpic, fetchArAgingEpic, fetchAuditReportGroupViewEpic, fetchAuditRuleGroupViewEpic, fetchAutoTransferReviewDetailEpic, fetchAutoTransferRuleHistoryEpic, fetchAutoTransferRulesEpic, fetchBalanceSheetEpic, fetchBalanceSheetForTimeframeEpic, fetchBankAccountsListEpic, fetchBankConnectionsViewEpic, fetchBankCountryNameByIbanEpic, fetchBankNameByRoutingEpic, fetchBankNameBySwiftEpic, fetchBillAndInitializeLocalStoreEpic, fetchBillDetailEpic, fetchBillingAccountsListEpic, fetchBillListEpic, fetchBillListPerTabEpic, fetchBillPayApproversDetailsEpic, fetchBillPayApproversListEpic, fetchBillPayCardEpic, fetchBillPayConfigEpic, fetchBillPaySetupApproverViewEpic, fetchBillPaySetupViewEpic, fetchBulkUploadBatchDetailsEpic, fetchBulkUploadBatchesEpic, fetchCannedResponsesEpic, fetchCardBalanceEpic, fetchCardPolicyDetailEpic, fetchCardPolicyListEpic, fetchCardPolicyMccCategoriesEpic, fetchCardPolicyVendorOptionsEpic, fetchCardProfilesEpic, fetchCashbackDetailEpic, fetchCashBalanceEpic, fetchCashFlowEpic, fetchCashFlowForTimeframeEpic, fetchCashInCashOutEpic, fetchCashPositionEpic, fetchChargeCardConfigEpic, fetchChargeCardDetailEpic, fetchChargeCardDetailPageEpic, fetchChargeCardListEpic, fetchChargeCardListPageEpic, fetchChargeCardPaymentHistoryEpic, fetchChargeCardPaymentPageEpic, fetchChargeCardRepaymentDetailEpic, fetchChargeCardSetupViewEpic, fetchChargeCardsRecurringExpensesEpic, fetchChargeCardStatementListEpic, fetchChargeCardTransactionAttachmentsEpic, fetchChargeCardTransactionListEpic, fetchChargeCardTransactionStatisticsEpic, fetchChatHistoryEpic, fetchChatSessionsForUserEpic, fetchClassListEpic, fetchCockpitContextEpic, fetchCollaborationAuthTokenEpic, fetchCompanyBillingAddressEpic, fetchCompanyConfigEpic, fetchCompanyHealthMetricConfigEpic, fetchCompanyHealthMetricViewEpic, fetchCompanyManagementViewEpic, fetchCompanyMetaDataEpic, fetchCompanyMonthEndReportHistoricDataEpic, fetchCompanyMonthEndReportHistoricDatesEpic, fetchCompanyMonthEndReportTemplatesEpic, fetchCompanyMonthEndReportViewEpic, fetchCompanyOnboardingViewEpic, fetchCompanyPassportViewEpic, fetchCompanyPortfolioViewEpic, fetchCompanyTaskManagerViewEpic, fetchCompletedTransactionsEpic, fetchCreateInvoiceFormPageEpic, fetchCreditAccountEpic, fetchCreditAccountRepaymentEpic, fetchCreditAgentMacroEpic, fetchCurrencyConversionValueEpic, fetchDashboardEpic, fetchDashboardLayoutEpic, fetchDebitCardSummaryEpic, fetchDepositAccountDetailEpic, fetchDepositAccountEpic, fetchDepositAccountHistoryEpic, fetchDepositAccountLimitEpic, fetchDepositAccountListEpic, fetchDepositAccountListForCardsEpic, fetchDepositAccountTransactionListEpic, fetchDownloadSchedulesEpic, fetchDuplicateBillPayReviewEpic, fetchDuplicateReimbursementEpic, fetchEditBillDetailPageEpic, fetchEditRemiDetailPageEpic, fetchEligibleActionsForBillEpic, fetchEntityAutoCompleteEpic, fetchEntityHistoryEpic, fetchEntityRecommendationsByTransactionIdEpic, fetchEntityRecommendationsForLineUpdateEpic, fetchExcludedResourcesEpic, fetchExpenseAutomationFluxAnalysisViewEpic, fetchExpenseAutomationInitializeTransactionCategorizationViewLocalDataEpic, fetchExpenseAutomationJeSchedulesEpic, fetchExpenseAutomationJESchedulesPageEpic, fetchExpenseAutomationMarkTransactionAsNotMiscategorizedEpic, fetchExpenseAutomationMissingReceiptsEpic, fetchExpenseAutomationReconciliationsViewEpic, fetchExpenseAutomationSaveTransactionCategorizationEpic, fetchExpenseAutomationTransactionCategorizationEpic, fetchExpenseAutomationTransactionCategorizationViewEpic, fetchExpenseAutomationUpdateTransactionCategorizationEpic, fetchExpenseTrendEpic, fetchExpressPayInitialDetailsEpic, fetchExternalConnectionsEpic, fetchFileEpic, fetchFileListEpic, fetchFinanceStatementEpic, fetchForecastListEpic, fetchGlobalMerchantAutoCompleteViewEpic, fetchGlobalMerchantRecommendationEpic, fetchIncomeTrendEpic, fetchInsightsCardEpic, fetchInternationalWireDynamicFormEpic, fetchIntlVerificationFormEpic, fetchInvoiceCountsEpic, fetchInvoiceDetailEpic, fetchInvoiceKPIsEpic, fetchInvoiceListEpic, fetchInvoiceListPageEpic, fetchInvoicingAuditLogEpic, fetchInvoicingCatalogCountsEpic, fetchInvoicingCatalogItemDetailEpic, fetchInvoicingCatalogListPageEpic, fetchInvoicingCatalogPlanListEpic, fetchInvoicingCatalogProductListEpic, fetchInvoicingConfigEpic, fetchInvoicingCouponCountsEpic, fetchInvoicingCouponDetailEpic, fetchInvoicingCouponListEpic, fetchInvoicingCouponListPageEpic, fetchInvoicingCreditNoteCountsEpic, fetchInvoicingCreditNoteDetailEpic, fetchInvoicingCreditNoteListEpic, fetchInvoicingCreditNoteListPageEpic, fetchInvoicingCustomerCountsEpic, fetchInvoicingCustomerDetailEpic, fetchInvoicingCustomerDetailPageEpic, fetchInvoicingCustomerListEpic, fetchInvoicingCustomerListPageEpic, fetchInvoicingDataImportStatusEpic, fetchInvoicingDunningCaseCountsEpic, fetchInvoicingDunningCaseDetailEpic, fetchInvoicingDunningCaseListEpic, fetchInvoicingDunningCaseListPageEpic, fetchInvoicingDunningEmailPreviewEpic, fetchInvoicingDunningEmailPreviewPageEpic, fetchInvoicingMigrationDiagnosticsEpic, fetchInvoicingMigrationSessionEpic, fetchInvoicingMigrationSessionsEpic, fetchInvoicingOverviewChurnEpic, fetchInvoicingOverviewDashboardSummaryEpic, fetchInvoicingOverviewEpic, fetchInvoicingOverviewKPIsEpic, fetchInvoicingOverviewMRREpic, fetchInvoicingOverviewPlanRevenueEpic, fetchInvoicingOverviewRevenueEpic, fetchInvoicingPlaidLinkTokenEpic, fetchInvoicingQboAccountsEpic, fetchInvoicingQboClassesEpic, fetchInvoicingQboConnectionEpic, fetchInvoicingQboSyncHealthEpic, fetchInvoicingSettingsEpic, fetchInvoicingSubscriptionCountsEpic, fetchInvoicingSubscriptionDetailEpic, fetchInvoicingSubscriptionFormPageEpic, fetchInvoicingSubscriptionListEpic, fetchInvoicingSubscriptionListPageEpic, fetchInvoicingTransactionDetailEpic, fetchInvoicingTransactionListEpic, fetchInvoicingTransactionListPageEpic, fetchIssueCardPageEpic, fetchMagicLinkBankNameByRoutingEpic, fetchMagicLinkBankNameBySwiftEpic, fetchMagicLinkBillEpic, fetchMagicLinkTenantEpic, fetchManagementViewEpic, fetchMerchantListEpic, fetchMonthClosePerformanceTrendEpic, fetchMonthEndCloseChecksEpic, fetchMoreBatchDetailsEpic, fetchMultipleBatchDetailsEpic, fetchMyProfileEpic, fetchMyProfileViewEpic, fetchNetBurnOrIncomeClassesViewEpic, fetchNetBurnOrIncomeEpic, fetchNetBurnOrIncomeForTimeframeClassesViewEpic, fetchNetBurnOrIncomeForTimeframeEpic, fetchNetBurnOrIncomeForTimeframeProjectViewEpic, fetchNetBurnOrIncomeProjectViewEpic, fetchNetBurnOrIncomeStoryCardEpic, fetchNetBurnOrIncomeWithForecastEpic, fetchNotificationSettingsEpic, fetchNotificationSettingsViewEpic, fetchNotificationUnreadCountEpic, fetchNotificationViewEpic, fetchOnboardingCompletedCompaniesEpic, fetchOnboardingCustomerSetupViewEpic, fetchOnboardingCustomerViewEpic, fetchOnboardingViewEpic, fetchOpExByVendorEpic, fetchOpExByVendorReportForTimeframeEpic, fetchOpExByVendorReportSummaryEpic, fetchOpExClassesViewEpic, fetchOpExEpic, fetchOpExForTimeframeClassesViewEpic, fetchOpExForTimeframeProjectViewEpic, fetchOpExProjectViewEpic, fetchOpExReportForTimeframeEpic, fetchOpExWithForecastEpic, fetchOwnerListEpic, fetchParentSubsidiaryManagementViewEpic, fetchPaymentAccountBalanceEpic, fetchPaymentAccountListEpic, fetchPaymentSourcesEpic, fetchPeopleEpic, fetchPeoplePageEpic, fetchPortfolioAllocationEpic, fetchPortfolioViewEpic, fetchPreviousBillsEpic, fetchProfitAndLossClassesViewEpic, fetchProfitAndLossEpic, fetchProfitAndLossForTimeframeClassesViewEpic, fetchProfitAndLossForTimeframeEpic, fetchProfitAndLossForTimeframeProjectViewEpic, fetchProfitAndLossProjectViewEpic, fetchProjectListEpic, fetchQBOConnectionPoolEpic, fetchRecommendationByEntityIdEpic, fetchRecommendationByEntityNameEpic, fetchRecommendationForAccountSettingsEpic, fetchRecommendationForAccountTypeEpic, fetchRecommendationsAndUpdateMerchantRecommendationsEpic, fetchRecommendedTransactionRowIndexEpic, fetchReferralsEpic, fetchRegisteredInterestsEpic, fetchReimbursementCardEpic, fetchReimbursementConfigEpic, fetchRemiAndInitializeLocalStoreEpic, fetchRemiApproversDetailsEpic, fetchRemiApproversListEpic, fetchRemiDetailEpic, fetchRemiListEpic, fetchRemiListPerTabEpic, fetchRemiSetupApproverViewEpic, fetchRemiSetupViewEpic, fetchRevenueClassesViewEpic, fetchRevenueEpic, fetchRevenueForTimeframeClassesViewEpic, fetchRevenueForTimeframeEpic, fetchRevenueForTimeframeProjectViewEpic, fetchRevenueProjectViewEpic, fetchRevenueWithForecastEpic, fetchReviewCompanyViewEpic, fetchReviewTransferDetailEpic, fetchRewardsPlanEpic, fetchScheduleAccruedDetailsEpic, fetchScheduleAccruedDetailsPageEpic, fetchScheduleDetailsEpic, fetchScheduleDetailsPageEpic, fetchScheduleListEpic, fetchSchedulesAccountEpic, fetchSkillsEpic, fetchSubscriptionAddOnsEpic, fetchSubscriptionCouponsEpic, fetchSubscriptionCreateEstimateEpic, fetchSubscriptionDetailsEpic, fetchSubscriptionListEpic, fetchSubscriptionPlansEpic, fetchSubscriptionSummaryForTenantEpic, fetchSubscriptionUpdateEstimateEpic, fetchSubscriptionViewEpic, fetchSubTasksEpic, fetchSuggestedQuestionsEpic, fetchTaskDetailEpic, fetchTaskDetailPageEpic, fetchTaskGroupTemplatesEpic, fetchTaskHistoryEpic, fetchTaskListEpic, fetchTaskListPageEpic, fetchTaskManagerMetricsEpic, fetchTasksCardEpic, fetchTopExEpic, fetchTransactionActivityLogEpic, fetchTransactionDetailEpic, fetchTransactionListByAccountEpic, fetchTransactionListByClassEpic, fetchTransactionListByEntityEpic, fetchTransactionListByProjectEpic, fetchTransactionsForEntityEpic, fetchTransactionsListByCategoryTypeEpic, fetchTransferAccountsEpic, fetchTreasuryDetailEpic, fetchTreasuryFundsEpic, fetchTreasuryHistoryEpic, fetchTreasurySetupViewEpic, fetchTreasuryStatementListEpic, fetchTreasuryTaxLetterListEpic, fetchTreasuryTransactionListEpic, fetchTrendForEntityEpic, fetchUserDetailEpic, fetchUserFinancialAccountEpic, fetchUserListByTypeEpic, fetchUserRoleConfigEpic, fetchVendor1099TypeListEpic, fetchVendorAndUpdateBillLocalDataEpic, fetchVendorByNameAndParseInvoiceEpic, fetchVendorDetailsEpic, fetchVendorEpic, fetchVendorFirstReviewAttachmentsEpic, fetchVendorFirstReviewViewEpic, fetchVendorGlobalReviewViewEpic, fetchVendorsFiling1099AllEpic, fetchVendorsFiling1099DownloadEpic, fetchVendorsFiling1099ListEpic, fetchVendorsListEpic, fetchVendorsTabVendorDetailPageViewEpic, fetchVendorsTabVendorDetailsEpic, fetchVendorsTabVendorEpic, fetchVendorTabViewEpic, fetchVendorTypeListEpic, fetchZeniAccountListEpic, fetchZeniAccountsConfigEpic, fetchZeniAccountSetupViewEpic, fetchZeniAccountsPromoCardEpic, fetchZeniAccStatementListEpic, fetchZeniAccStatementPageEpic, fetchZeniUsersEpic, getOnboardingEmailGroupEpic, getOnboardingPlaidLinkTokenEpic, getPaymentAccountsEpic, getPlaidLinkTokenEpic, ignoreExpenseAutomationJEScheduleEpic, improveUsingZeniGPTEpic, includeAccountInReconciliationEpic, initEmailConnectOAuthEpic, initialiseExpenseAutomationReconciliationLocalDataForSelectedAccountIdEpic, initializeAccountMappingViewEpic, initializeAccountSettingsViewEpic, initializeBillPaySetupApproverViewUpdateDataEpic, initializeBillToLocalStoreEpic, initializeCardUserOnboardingLocalDataEpic, initializeCompanyHealthMetricViewLocalDataEpic, initializeDynamicFormEpic, initializeEditPersonEpic, initializeExpenseAutomationJeScheduleLocalDataEpic, initializeInternationalWireLocalDataEpic, initializeIntlVerificationFormEpic, initializeInvoicingBrandingAddressEpic, initializeInvoicingCustomerAddressEpic, initializeInvoicingSubscriptionAddressEpic, initializeMyProfileLocalDataEpic, initializeOnboardingCustomerViewUpdateDataEpic, initializeRemiSetupApproverViewUpdateDataEpic, initializeRemiToLocalStoreEpic, initializeScheduleAccruedDetailLocalDataEpic, initializeScheduleDetailLocalDataEpic, initializeSubscriptionLocalDataEpic, initializeTaskToLocalStoreEpic, initializeTransactionDetailLocalDataEpic, initializeVendorAddressEpic, initiateChargeCardRepaymentEpic, initiateReportsClassViewRefetchingEpic, initiateReportsProjectViewRefetchingEpic, invitePeopleEpic, inviteZeniPeopleEpic, invoicingDataImportActionEpic, issueChargeCardEpic, issueCreditNoteEpic, lockChargeCardEpic, lockChargeCardsEpic, markAsCompleteScheduleDetailEpic, markTransactionAsNotMiscategorizedEpic, notifyMeForFeatureEpic, parallelFetchAccountTransactionListEpic, parallelFetchClassTransactionListEpic, parallelFetchEntityTransactionListEpic, parallelFetchProjectTransactionListEpic, parallelFetchTransactionListByCategoryTypeEpic, parseInvoiceToBillEpic, parseReceiptsToRemiEpic, parseStatementEpic, parseUploadedKybDocumentEpic, parseUploadedKycDocumentEpic, peopleSaveUpdatesEpic, policyDocumentExtractionToRecommendationBridgeEpic, policyRecommendationFromUploadEpic, pollBulkUploadBatchStatusEpic, pusherBatchStatusCompletionEpic, pushToastNotificationEpic, recordPaymentEpic, refetchCompletedTransactionsOnBulkUploadSortEpic, refreshBatchDetailsForBatchIdEpic, refreshExpenseAutomationCurrentTabEpic, refreshIntegrationsDataEpic, refreshOpExByVendorReportEpic, rejectVendorGlobalReviewEpic, reorderBillPayApprovalRulesEpic, reorderRemiApprovalRulesEpic, reparseStatementEpic, reportsResyncEpic, resendCardInviteEpic, resendInviteEpic, resendOtpEpic, resendReferralInviteEpic, resendVerifyDeviceOTPEpic, resetTransactionVendorLocalDataEpic, resetVendorDetailLocalDataEpic, resetVendorsTabVendorDetailLocalDataEpic, restoreBulkUploadAutomatchingOnMountEpic, resumeEnableAccountingProjectsEpic, retryBankAccountConnectionEpic, retryBankAccountConnectionForOnboardingEpic, retryExpenseAutomationJEScheduleEpic, retryInvoicingQboSyncTaskEpic, retryOrRefundBillEpic, reviewDraftRemisBulkActionEpic, reviewExpenseAutomationFluxAnalysisViewEpic, revokeCardInviteEpic, revokeChargeCardsInviteEpic, runInvoicingCatalogPlanActionEpic, runInvoicingCatalogProductActionEpic, runInvoicingDiscountActionEpic, runInvoicingDunningActionEpic, runInvoicingInvoiceActionEpic, runInvoicingPaymentActionEpic, runInvoicingSubscriptionActionEpic, saveAccountMappingViewEpic, saveAccountSettingsViewEpic, saveAPIKeyConnectionEpic, saveBillDetailEpic, saveBillPaySetupApproverViewUpdatesEpic, saveCannedResponseEpic, saveCardOnboardingUserDetailsEpic, saveCompanyBillingAddressEpic, saveCompanyHealthMetricByIdEpic, saveCompanyMonthEndReportEpic, saveCompanyPassportDetailsEpic, saveConnectorCredentialsEpic, saveCreditAgentMacroEpic, saveExpenseAutomationReconciliationDetailsEpic, saveExpenseAutomationReconciliationReviewEpic, saveExternalConnectionEpic, saveInvoicingCatalogItemEpic, saveInvoicingCouponEpic, saveInvoicingCustomerEpic, saveInvoicingPaymentMethodEpic, saveInvoicingSettingsEpic, saveInvoicingSubscriptionEpic, saveMagicLinkBankAccountEpic, saveNewAddressEpic, saveNotificationPreferencesEpic, saveNotificationSettingsEpic, saveOAuthConnectionEpic, saveOnboardingCustomerCompletedStatusEpic, saveOnboardingCustomerNotesEpic, saveOnboardingCustomerViewUpdatesEpic, saveRealTimeApprovalEpic, saveReasonForAuditRuleEpic, saveRemiDetailEpic, saveRemiSetupApproverViewUpdatesEpic, saveScheduleAccruedDetailsEpic, saveScheduleDetailsEpic, saveSubscriptionNotesUpdatesEpic, saveSubscriptionUpdatesEpic, saveTaskDetailEpic, saveTransactionDetailEpic, saveTransactionVendorEpic, saveVendorDetailsViewEpic, saveVendorEpic, saveVendorFirstReviewViewEpic, saveVendorsTabVendorEpic, scheduleTenantCreditScoreCronEpic, searchTransactionsForManualMatchEpic, seedAiCardCreationFormDraftEpic, seedAiCardPolicyFormDraftEpic, sendCompanyMonthEndReportEpic, sendEmailMagicLinkToUserEpic, sendInvoicingPaymentLinkEpic, sendOnboardingCustomerViewInviteEpic, sendOtpEpic, sendReferralInviteEpic, sessionHeartbeatEpic, snoozeTaskEpic, startInvoicingQboBackfillEpic, statementCloseDayEpic, stopSubmitEpic, stopSubmitQuestionEpic, submitDraftBillsBulkActionEpic, submitDraftRemisBulkActionEpic, submitExpressPayEpic, submitFeedbackEpic, submitIntlVerificationEpic, submitInvoicingBrandingFormEpic, submitQuestionEpic, syncInvoicingSubscriptionCouponsEpic, syncTabsAfterAutomatchEpic, toggleReportUIOptionForecastModeEpic, transferMoneyEpic, treasuryTransferMoneyEpic, triggerAiAccountantJobEpic, triggerReviewTabRefetchEpic, unlinkPaymentAccountEpic, unlockChargeCardEpic, unlockChargeCardsEpic, unsnoozeTaskEpic, updateAccountingClassesEnabledEpic, updateAccruedJESchedulesEpic, updateAddressEpic, updateAmountsInScheduleAccruedDetailEpic, updateAmountsInScheduleDetailEpic, updateAutoTransferRuleEpic, updateBusinessVerificationDetailsEpic, updateCapitalizationAccountThresholdEpic, updateCardPolicyEpic, updateCardProfileEpic, updateChargeCardDetailEpic, updateChargeCardLimitEpic, updateChargeCardNameEpic, updateChargeCardsLimitEpic, updateCompanyDetailsEpic, updateCompanyOfficerEpic, updateCompanyPassportLocalStoreDataEpic, updateCompanyTaskManagerViewFiltersEpic, updateDashboardLayoutEpic, updateDebitCardPinAttemptEpic, updateDepositAccountEpic, updateExpenseAutomationReconciliationBalanceLocalDataEpic, updateFileNameEpic, updateFilesMetadataEpic, updateInvoicingInvoiceEpic, updateJESchedulesEpic, updateMappedCashAccountEpic, updateMileageDetailsEpic, updateMyProfileEpic, updateNetBurnOrIncomeStoryCardSettingsEpic, updateNotificationViewAllNotificationsStatusEpic, updateNotificationViewNotificationStatusEpic, updateOnboardingCustomerViewCompleteStatusEpic, updateOnboardingCustomerViewDashboardLoadedEpic, updateOnboardingCustomerViewEpic, updateOnboardingCustomerViewLocalStoreDataEpic, updateOnboardingPaymentAccountLoginStatusEpic, updateOnboardingPaymentAccountStatusEpic, updatePaymentAccountEpic, updatePaymentAccountLoginStatusEpic, updatePaymentAccountStatusEpic, updatePhysicalChargeCardAttemptEpic, updatePortfolioAllocationEpic, updatePrimaryContactEpic, updatePrimaryFundingAccountEpic, updateQBOConnectionPoolExternalConnectionEpic, updateReferViewedEpic, updateRemiSetupViewLocalStoreDataEpic, updateReportUIOptionCOABalancesRangeEpic, updateReportUIOptionIsCompareModeEpic, updateReportUIOptionIsCompareModeOnEpic, updateReportUIOptionThisPeriodEpic, updateReportUIOptionTimeFrameEpic, updateSectionAccountsViewEpic, updateSectionClassesViewEpicV2, updateSectionProjectViewEpic, updateSelectedVendorForCreateFlowEpic, updateSetupViewLocalStoreDataEpic, updateStatementInfoEpic, updateTaskFromListViewEpic, updateTaskGroupNameEpic, updateTransactionDetailEpic, updateTreasuryPromoIntroClosedByOutsideClickEpic, updateTreasuryPromoRemindMeLaterClickedEpic, updateTreasuryVideoViewedEpic, updateVendorContactEpic, uploadAccountStatementEpic, uploadMissingAttachmentSuccessEpic, uploadMissingReceiptSuccessEpic, uploadTransactionReceiptSuccessEpic, validateBillsBulkActionEpic, vendorFiling1099UploadDetailsSaveEpic, verifyDeviceWithTwoFAEpic, verifyOtpEpic, verifyUserEpic, waitForBillDetailThenInitializeLocalStoreEpic, waitForForecastListThenFetchNetBurnOrIncomeWithForecastEpic, waitForForecastListThenFetchOpExWithForecastEpic, waitForForecastListThenFetchRevenueWithForecastEpic, waitForMerchantRecommendationFetchThenUpdateRecommendationInMerchantEpic, waitForVendorByIdThenSaveBillUpdatetoLocalStoreEpic, waitForVendorByNameThenParsetoLocalStoreEpic, waitForVendorByNameThenUpdateBillDetailEpic, waitForVendorRecommendationFetchThenUpdateRecommendationInBillEpic, wiseRedirectEpic);
|
|
709
|
+
const combinedEpics = combineEpics(acceptBillPayTermsEpic, acceptBillPayUpdatedTermsEpic, acceptChargeCardTermsEpic, acceptEmployeeRemiTermsEpic, acceptInvoicingTermsEpic, acceptMasterTOSEpic, acceptRemiTermsEpic, acceptTreasuryTermsEpic, acceptZeniAccountTermsEpic, acknowledgeOnboardingAiActivationViewedEpic, acknowledgeOnboardingAiFinanceTeamEpic, addCardPaymentSourceEpic, addPromotionalCreditsEpic, applyExtractedPolicyToDraftEpic, approveOAuthConsentEpic, approveOrRejectBillEpic, approveOrRejectBillsBulkActionEpic, approveOrRejectRemiEpic, approveOrRejectRemisBulkActionEpic, approveVendorGlobalReviewEpic, archiveCardPolicyEpic, archiveInvoicingCatalogSubFamilyEpic, archiveTaskEpic, backgroundRefetchReviewTabEpic, bulkUpdateTaskListEpic, bulkUploadAutomatchingTimeoutEpic, bulkUploadMatchResultToastEpic, bulkUploadReceiptsEpic, cancelAiAccountantOnboardingEpic, cancelAndDeleteBillEpic, cancelAndDeleteRemiEpic, cancelOrDeleteBillsBulkActionEpic, cancelOrDeleteRemisBulkActionEpic, cancelScheduleAccruedJournalEntryEpic, changeZeniPersonRolesEpic, checkDepositEpic, closeChargeCardEpic, closeChargeCardsEpic, companyManagementSavePendingUpdatesEpic, companyManagementSaveUpdatesEpic, confirmBulkUploadMatchEpic, confirmCardSetupIntentEpic, connectInvoicingStripeEpic, convertAmountToHomeCurrencyEpic, createAddressEpic, createAutoTransferRuleEpic, createBankAccountEpic, createCardPolicyTemplatesEpic, createCardSetupIntentEpic, createCheckingAccountEpic, createCompanyAddressEpic, createCompanyOfficersEpic, createCompanyUserAddressEpic, createCreditNoteEpic, createGlobalMerchantEpic, createInternationalBankAccountEpic, createInvoiceEpic, createInvoicingCatalogSubFamilyEpic, createInvoicingSetupIntentEpic, createNewSchedulesAccruedEpic, createNewSchedulesEpic, createNewTaskGroupEpic, createPaymentInstrumentEpic, createSessionAndSubmitEpic, createSessionEpic, createSubTaskEpic, createTagEpic, createTaskFromTaskGroupTemplateEpic, createTransferEntryEpic, createUserBankAccountEpic, deleteAccountStatementEpic, deleteAutoTransferRuleEpic, deleteBankAccountEpic, deleteBillEpic, deleteBillPayApprovalRuleEpic, deleteCannedResponseEpic, deleteChatSessionEpic, deleteConnectionEpic, deleteFileEpic, deleteFileListEpic, deleteInternationalBankAccountEpic, deletePaymentInstrumentEpic, deletePersonEpic, deleteRemiApprovalRuleEpic, deleteRemiEpic, deleteScheduleAccruedDetailEpic, deleteScheduleDetailEpic, deleteTagEpic, deleteTaskEpic, deleteTaskGroupEpic, deleteTransactionAttachmentEpic, deleteUserBankAccountEpic, disableAccountingProjectsEpic, disconnectInvoicingStripeEpic, dismissCapitalizationOnboardingEpic, doMagicLinkSignInEpic, doSignInEpic, doSignOutEpic, downloadAccountingProviderAttachmentEpic, dragNDropTasksEpic, enableAccountingProjectsEpic, enableChargeCardAutoPayEpic, enableInvoicingEpic, enableSetupEpic, establishOnboardingPlaidConnectionEpic, establishPlaidConnectionEpic, excludeAccountFromReconciliationEpic, expressInterestChargeCardEpic, extractPolicyDocumentEpic, fetchAccountListEpic, fetchAccountListForAccountTypesEpic, fetchAccountSettingsListForAccountTypesEpic, fetchAccruedScheduleListEpic, fetchActiveTenantEpic, fetchAddressEpic, fetchAggregatedReportEpic, fetchAiAccountantCustomersEpic, fetchAiAccountantJobsEpic, fetchAiAgentsActivationStatusEpic, fetchAllCockpitViewsEpic, fetchAllExpenseAutomationTabsEpic, fetchAllPeopleRequiredViewsEpic, fetchAllTagsEpic, fetchAllTaskGroupsEpic, fetchAllTenantsEpic, fetchAndUpdateVendorRecommendationsEpic, fetchApAgingDetailEpic, fetchApAgingEpic, fetchArAgingDetailEpic, fetchArAgingEpic, fetchAuditReportGroupViewEpic, fetchAuditRuleGroupViewEpic, fetchAutoTransferReviewDetailEpic, fetchAutoTransferRuleHistoryEpic, fetchAutoTransferRulesEpic, fetchBalanceSheetEpic, fetchBalanceSheetForTimeframeEpic, fetchBankAccountsListEpic, fetchBankConnectionsViewEpic, fetchBankCountryNameByIbanEpic, fetchBankNameByRoutingEpic, fetchBankNameBySwiftEpic, fetchBillAndInitializeLocalStoreEpic, fetchBillDetailEpic, fetchBillingAccountsListEpic, fetchBillListEpic, fetchBillListPerTabEpic, fetchBillPayApproversDetailsEpic, fetchBillPayApproversListEpic, fetchBillPayCardEpic, fetchBillPayConfigEpic, fetchBillPaySetupApproverViewEpic, fetchBillPaySetupViewEpic, fetchBulkUploadBatchDetailsEpic, fetchBulkUploadBatchesEpic, fetchCannedResponsesEpic, fetchCardBalanceEpic, fetchCardPolicyDetailEpic, fetchCardPolicyListEpic, fetchCardPolicyMccCategoriesEpic, fetchCardPolicyVendorOptionsEpic, fetchCardProfilesEpic, fetchCashbackDetailEpic, fetchCashBalanceEpic, fetchCashFlowEpic, fetchCashFlowForTimeframeEpic, fetchCashInCashOutEpic, fetchCashPositionEpic, fetchChargeCardConfigEpic, fetchChargeCardDetailEpic, fetchChargeCardDetailPageEpic, fetchChargeCardListEpic, fetchChargeCardListPageEpic, fetchChargeCardPaymentHistoryEpic, fetchChargeCardPaymentPageEpic, fetchChargeCardRepaymentDetailEpic, fetchChargeCardSetupViewEpic, fetchChargeCardsRecurringExpensesEpic, fetchChargeCardStatementListEpic, fetchChargeCardTransactionAttachmentsEpic, fetchChargeCardTransactionListEpic, fetchChargeCardTransactionStatisticsEpic, fetchChatHistoryEpic, fetchChatSessionsForUserEpic, fetchClassListEpic, fetchCockpitContextEpic, fetchCollaborationAuthTokenEpic, fetchCompanyBillingAddressEpic, fetchCompanyConfigEpic, fetchCompanyHealthMetricConfigEpic, fetchCompanyHealthMetricViewEpic, fetchCompanyManagementViewEpic, fetchCompanyMetaDataEpic, fetchCompanyMonthEndReportHistoricDataEpic, fetchCompanyMonthEndReportHistoricDatesEpic, fetchCompanyMonthEndReportTemplatesEpic, fetchCompanyMonthEndReportViewEpic, fetchCompanyOnboardingViewEpic, fetchCompanyPassportViewEpic, fetchCompanyPortfolioViewEpic, fetchCompanyTaskManagerViewEpic, fetchCompletedTransactionsEpic, fetchCreateInvoiceFormPageEpic, fetchCreditAccountEpic, fetchCreditAccountRepaymentEpic, fetchCreditAgentMacroEpic, fetchCurrencyConversionValueEpic, fetchDashboardEpic, fetchDashboardLayoutEpic, fetchDebitCardSummaryEpic, fetchDepositAccountDetailEpic, fetchDepositAccountEpic, fetchDepositAccountHistoryEpic, fetchDepositAccountLimitEpic, fetchDepositAccountListEpic, fetchDepositAccountListForCardsEpic, fetchDepositAccountTransactionListEpic, fetchDownloadSchedulesEpic, fetchDuplicateBillPayReviewEpic, fetchDuplicateReimbursementEpic, fetchEditBillDetailPageEpic, fetchEditRemiDetailPageEpic, fetchEligibleActionsForBillEpic, fetchEntityAutoCompleteEpic, fetchEntityHistoryEpic, fetchEntityRecommendationsByTransactionIdEpic, fetchEntityRecommendationsForLineUpdateEpic, fetchExcludedResourcesEpic, fetchExpenseAutomationFluxAnalysisViewEpic, fetchExpenseAutomationInitializeTransactionCategorizationViewLocalDataEpic, fetchExpenseAutomationJeSchedulesEpic, fetchExpenseAutomationJESchedulesPageEpic, fetchExpenseAutomationMarkTransactionAsNotMiscategorizedEpic, fetchExpenseAutomationMissingReceiptsEpic, fetchExpenseAutomationReconciliationsViewEpic, fetchExpenseAutomationSaveTransactionCategorizationEpic, fetchExpenseAutomationTransactionCategorizationEpic, fetchExpenseAutomationTransactionCategorizationViewEpic, fetchExpenseAutomationUpdateTransactionCategorizationEpic, fetchExpenseTrendEpic, fetchExpressPayInitialDetailsEpic, fetchExternalConnectionsEpic, fetchFileEpic, fetchFileListEpic, fetchFinanceStatementEpic, fetchForecastListEpic, fetchGlobalMerchantAutoCompleteViewEpic, fetchGlobalMerchantRecommendationEpic, fetchIncomeTrendEpic, fetchInsightsCardEpic, fetchInternationalWireDynamicFormEpic, fetchIntlVerificationFormEpic, fetchInvoiceCountsEpic, fetchInvoiceDetailEpic, fetchInvoiceKPIsEpic, fetchInvoiceListEpic, fetchInvoiceListPageEpic, fetchInvoicingAuditLogEpic, fetchInvoicingCatalogCountsEpic, fetchInvoicingCatalogItemDetailEpic, fetchInvoicingCatalogListPageEpic, fetchInvoicingCatalogPlanListEpic, fetchInvoicingCatalogProductListEpic, fetchInvoicingConfigEpic, fetchInvoicingCouponCountsEpic, fetchInvoicingCouponDetailEpic, fetchInvoicingCouponListEpic, fetchInvoicingCouponListPageEpic, fetchInvoicingCreditNoteCountsEpic, fetchInvoicingCreditNoteDetailEpic, fetchInvoicingCreditNoteListEpic, fetchInvoicingCreditNoteListPageEpic, fetchInvoicingCustomerCountsEpic, fetchInvoicingCustomerDetailEpic, fetchInvoicingCustomerDetailPageEpic, fetchInvoicingCustomerListEpic, fetchInvoicingCustomerListPageEpic, fetchInvoicingDataImportStatusEpic, fetchInvoicingDunningCaseCountsEpic, fetchInvoicingDunningCaseDetailEpic, fetchInvoicingDunningCaseListEpic, fetchInvoicingDunningCaseListPageEpic, fetchInvoicingDunningEmailPreviewEpic, fetchInvoicingDunningEmailPreviewPageEpic, fetchInvoicingMigrationDiagnosticsEpic, fetchInvoicingMigrationSessionEpic, fetchInvoicingMigrationSessionsEpic, fetchInvoicingOverviewChurnEpic, fetchInvoicingOverviewDashboardSummaryEpic, fetchInvoicingOverviewEpic, fetchInvoicingOverviewKPIsEpic, fetchInvoicingOverviewMRREpic, fetchInvoicingOverviewPlanRevenueEpic, fetchInvoicingOverviewRevenueEpic, fetchInvoicingPlaidLinkTokenEpic, fetchInvoicingQboAccountsEpic, fetchInvoicingQboClassesEpic, fetchInvoicingQboConnectionEpic, fetchInvoicingQboSyncHealthEpic, fetchInvoicingSettingsEpic, fetchInvoicingSubscriptionCountsEpic, fetchInvoicingSubscriptionDetailEpic, fetchInvoicingSubscriptionFormPageEpic, fetchInvoicingSubscriptionListEpic, fetchInvoicingSubscriptionListPageEpic, fetchInvoicingTransactionDetailEpic, fetchInvoicingTransactionListEpic, fetchInvoicingTransactionListPageEpic, fetchIssueCardPageEpic, fetchMagicLinkBankNameByRoutingEpic, fetchMagicLinkBankNameBySwiftEpic, fetchMagicLinkBillEpic, fetchMagicLinkTenantEpic, fetchManagementViewEpic, fetchMerchantListEpic, fetchMonthClosePerformanceTrendEpic, fetchMonthEndCloseChecksEpic, fetchMoreBatchDetailsEpic, fetchMultipleBatchDetailsEpic, fetchMyProfileEpic, fetchMyProfileViewEpic, fetchNetBurnOrIncomeClassesViewEpic, fetchNetBurnOrIncomeEpic, fetchNetBurnOrIncomeForTimeframeClassesViewEpic, fetchNetBurnOrIncomeForTimeframeEpic, fetchNetBurnOrIncomeForTimeframeProjectViewEpic, fetchNetBurnOrIncomeProjectViewEpic, fetchNetBurnOrIncomeStoryCardEpic, fetchNetBurnOrIncomeWithForecastEpic, fetchNotificationSettingsEpic, fetchNotificationSettingsViewEpic, fetchNotificationUnreadCountEpic, fetchNotificationViewEpic, fetchOnboardingCompletedCompaniesEpic, fetchOnboardingCustomerSetupViewEpic, fetchOnboardingCustomerViewEpic, fetchOnboardingViewEpic, fetchOpExByVendorEpic, fetchOpExByVendorReportForTimeframeEpic, fetchOpExByVendorReportSummaryEpic, fetchOpExClassesViewEpic, fetchOpExEpic, fetchOpExForTimeframeClassesViewEpic, fetchOpExForTimeframeProjectViewEpic, fetchOpExProjectViewEpic, fetchOpExReportForTimeframeEpic, fetchOpExWithForecastEpic, fetchOwnerListEpic, fetchParentSubsidiaryManagementViewEpic, fetchPaymentAccountBalanceEpic, fetchPaymentAccountListEpic, fetchPaymentSourcesEpic, fetchPeopleEpic, fetchPeoplePageEpic, fetchPortfolioAllocationEpic, fetchPortfolioViewEpic, fetchPreviousBillsEpic, fetchProfitAndLossClassesViewEpic, fetchProfitAndLossEpic, fetchProfitAndLossForTimeframeClassesViewEpic, fetchProfitAndLossForTimeframeEpic, fetchProfitAndLossForTimeframeProjectViewEpic, fetchProfitAndLossProjectViewEpic, fetchProjectListEpic, fetchQBOConnectionPoolEpic, fetchRecommendationByEntityIdEpic, fetchRecommendationByEntityNameEpic, fetchRecommendationForAccountSettingsEpic, fetchRecommendationForAccountTypeEpic, fetchRecommendationsAndUpdateMerchantRecommendationsEpic, fetchRecommendedTransactionRowIndexEpic, fetchReferralsEpic, fetchRegisteredInterestsEpic, fetchReimbursementCardEpic, fetchReimbursementConfigEpic, fetchRemiAndInitializeLocalStoreEpic, fetchRemiApproversDetailsEpic, fetchRemiApproversListEpic, fetchRemiDetailEpic, fetchRemiListEpic, fetchRemiListPerTabEpic, fetchRemiSetupApproverViewEpic, fetchRemiSetupViewEpic, fetchRevenueClassesViewEpic, fetchRevenueEpic, fetchRevenueForTimeframeClassesViewEpic, fetchRevenueForTimeframeEpic, fetchRevenueForTimeframeProjectViewEpic, fetchRevenueProjectViewEpic, fetchRevenueWithForecastEpic, fetchReviewCompanyViewEpic, fetchReviewTransferDetailEpic, fetchRewardsPlanEpic, fetchScheduleAccruedDetailsEpic, fetchScheduleAccruedDetailsPageEpic, fetchScheduleDetailsEpic, fetchScheduleDetailsPageEpic, fetchScheduleListEpic, fetchSchedulesAccountEpic, fetchSkillsEpic, fetchSubscriptionAddOnsEpic, fetchSubscriptionCouponsEpic, fetchSubscriptionCreateEstimateEpic, fetchSubscriptionDetailsEpic, fetchSubscriptionListEpic, fetchSubscriptionPlansEpic, fetchSubscriptionSummaryForTenantEpic, fetchSubscriptionUpdateEstimateEpic, fetchSubscriptionViewEpic, fetchSubTasksEpic, fetchSuggestedQuestionsEpic, fetchTaskDetailEpic, fetchTaskDetailPageEpic, fetchTaskGroupTemplatesEpic, fetchTaskHistoryEpic, fetchTaskListEpic, fetchTaskListPageEpic, fetchTaskManagerMetricsEpic, fetchTasksCardEpic, fetchTopExEpic, fetchTransactionActivityLogEpic, fetchTransactionDetailEpic, fetchTransactionListByAccountEpic, fetchTransactionListByClassEpic, fetchTransactionListByEntityEpic, fetchTransactionListByProjectEpic, fetchTransactionsForEntityEpic, fetchTransactionsListByCategoryTypeEpic, fetchTransferAccountsEpic, fetchTreasuryDetailEpic, fetchTreasuryFundsEpic, fetchTreasuryHistoryEpic, fetchTreasurySetupViewEpic, fetchTreasuryStatementListEpic, fetchTreasuryTaxLetterListEpic, fetchTreasuryTransactionListEpic, fetchTrendForEntityEpic, fetchUserDetailEpic, fetchUserFinancialAccountEpic, fetchUserListByTypeEpic, fetchUserRoleConfigEpic, fetchVendor1099TypeListEpic, fetchVendorAndUpdateBillLocalDataEpic, fetchVendorByNameAndParseInvoiceEpic, fetchVendorDetailsEpic, fetchVendorEpic, fetchVendorFirstReviewAttachmentsEpic, fetchVendorFirstReviewViewEpic, fetchVendorGlobalReviewViewEpic, fetchVendorsFiling1099AllEpic, fetchVendorsFiling1099DownloadEpic, fetchVendorsFiling1099ListEpic, fetchVendorsListEpic, fetchVendorsTabVendorDetailPageViewEpic, fetchVendorsTabVendorDetailsEpic, fetchVendorsTabVendorEpic, fetchVendorTabViewEpic, fetchVendorTypeListEpic, fetchZeniAccountListEpic, fetchZeniAccountsConfigEpic, fetchZeniAccountSetupViewEpic, fetchZeniAccountsPromoCardEpic, fetchZeniAccStatementListEpic, fetchZeniAccStatementPageEpic, fetchZeniUsersEpic, getOnboardingEmailGroupEpic, getOnboardingPlaidLinkTokenEpic, getPaymentAccountsEpic, getPlaidLinkTokenEpic, ignoreExpenseAutomationJEScheduleEpic, improveUsingZeniGPTEpic, includeAccountInReconciliationEpic, initEmailConnectOAuthEpic, initialiseExpenseAutomationReconciliationLocalDataForSelectedAccountIdEpic, initializeAccountMappingViewEpic, initializeAccountSettingsViewEpic, initializeBillPaySetupApproverViewUpdateDataEpic, initializeBillToLocalStoreEpic, initializeCardUserOnboardingLocalDataEpic, initializeCompanyHealthMetricViewLocalDataEpic, initializeDynamicFormEpic, initializeEditPersonEpic, initializeExpenseAutomationJeScheduleLocalDataEpic, initializeInternationalWireLocalDataEpic, initializeIntlVerificationFormEpic, initializeInvoicingBrandingAddressEpic, initializeInvoicingCustomerAddressEpic, initializeInvoicingSubscriptionAddressEpic, initializeMyProfileLocalDataEpic, initializeOnboardingCustomerViewUpdateDataEpic, initializeRemiSetupApproverViewUpdateDataEpic, initializeRemiToLocalStoreEpic, initializeScheduleAccruedDetailLocalDataEpic, initializeScheduleDetailLocalDataEpic, initializeSubscriptionLocalDataEpic, initializeTaskToLocalStoreEpic, initializeTransactionDetailLocalDataEpic, initializeVendorAddressEpic, initiateChargeCardRepaymentEpic, initiateReportsClassViewRefetchingEpic, initiateReportsProjectViewRefetchingEpic, invitePeopleEpic, inviteZeniPeopleEpic, invoicingDataImportActionEpic, issueChargeCardEpic, issueCreditNoteEpic, lockChargeCardEpic, lockChargeCardsEpic, markAsCompleteScheduleDetailEpic, markTransactionAsNotMiscategorizedEpic, notifyMeForFeatureEpic, parallelFetchAccountTransactionListEpic, parallelFetchClassTransactionListEpic, parallelFetchEntityTransactionListEpic, parallelFetchProjectTransactionListEpic, parallelFetchTransactionListByCategoryTypeEpic, parseInvoiceToBillEpic, parseReceiptsToRemiEpic, parseStatementEpic, parseUploadedKybDocumentEpic, parseUploadedKycDocumentEpic, peopleSaveUpdatesEpic, policyDocumentExtractionToRecommendationBridgeEpic, policyRecommendationFromUploadEpic, pollBulkUploadBatchStatusEpic, pusherBatchStatusCompletionEpic, pushToastNotificationEpic, recordPaymentEpic, refetchCompletedTransactionsOnBulkUploadSortEpic, refreshBatchDetailsForBatchIdEpic, refreshExpenseAutomationCurrentTabEpic, refreshIntegrationsDataEpic, refreshOpExByVendorReportEpic, rejectVendorGlobalReviewEpic, reorderBillPayApprovalRulesEpic, reorderRemiApprovalRulesEpic, reparseStatementEpic, reportsResyncEpic, resendCardInviteEpic, resendInviteEpic, resendOtpEpic, resendReferralInviteEpic, resendVerifyDeviceOTPEpic, resetTransactionVendorLocalDataEpic, resetVendorDetailLocalDataEpic, resetVendorsTabVendorDetailLocalDataEpic, restoreBulkUploadAutomatchingOnMountEpic, resumeEnableAccountingProjectsEpic, retryBankAccountConnectionEpic, retryBankAccountConnectionForOnboardingEpic, retryExpenseAutomationJEScheduleEpic, retryInvoicingQboSyncTaskEpic, retryOrRefundBillEpic, reviewDraftRemisBulkActionEpic, reviewExpenseAutomationFluxAnalysisViewEpic, revokeCardInviteEpic, revokeChargeCardsInviteEpic, runInvoicingCatalogPlanActionEpic, runInvoicingCatalogProductActionEpic, runInvoicingDiscountActionEpic, runInvoicingDunningActionEpic, runInvoicingInvoiceActionEpic, runInvoicingPaymentActionEpic, runInvoicingSubscriptionActionEpic, saveAccountMappingViewEpic, saveAccountSettingsViewEpic, saveAPIKeyConnectionEpic, saveBillDetailEpic, saveBillPaySetupApproverViewUpdatesEpic, saveCannedResponseEpic, saveCardOnboardingUserDetailsEpic, saveCompanyBillingAddressEpic, saveCompanyHealthMetricByIdEpic, saveCompanyMonthEndReportEpic, saveCompanyPassportDetailsEpic, saveConnectorCredentialsEpic, saveCreditAgentMacroEpic, saveExpenseAutomationReconciliationDetailsEpic, saveExpenseAutomationReconciliationReviewEpic, saveExternalConnectionEpic, saveInvoicingCatalogItemEpic, saveInvoicingCouponEpic, saveInvoicingCustomerEpic, saveInvoicingPaymentMethodEpic, saveInvoicingSettingsEpic, saveInvoicingSubscriptionEpic, saveMagicLinkBankAccountEpic, saveNewAddressEpic, saveNotificationPreferencesEpic, saveNotificationSettingsEpic, saveOAuthConnectionEpic, saveOnboardingCustomerCompletedStatusEpic, saveOnboardingCustomerNotesEpic, saveOnboardingCustomerViewUpdatesEpic, saveRealTimeApprovalEpic, saveReasonForAuditRuleEpic, saveRemiDetailEpic, saveRemiSetupApproverViewUpdatesEpic, saveScheduleAccruedDetailsEpic, saveScheduleDetailsEpic, saveSubscriptionNotesUpdatesEpic, saveSubscriptionUpdatesEpic, saveTaskDetailEpic, saveTransactionDetailEpic, saveTransactionVendorEpic, saveVendorDetailsViewEpic, saveVendorEpic, saveVendorFirstReviewViewEpic, saveVendorsTabVendorEpic, scheduleTenantCreditScoreCronEpic, searchTransactionsForManualMatchEpic, seedAiCardCreationFormDraftEpic, seedAiCardPolicyFormDraftEpic, sendCompanyMonthEndReportEpic, sendEmailMagicLinkToUserEpic, sendInvoicingPaymentLinkEpic, sendOnboardingCustomerViewInviteEpic, sendOtpEpic, sendReferralInviteEpic, sessionHeartbeatEpic, snoozeTaskEpic, startInvoicingQboBackfillEpic, statementCloseDayEpic, stopSubmitEpic, stopSubmitQuestionEpic, submitDraftBillsBulkActionEpic, submitDraftRemisBulkActionEpic, submitExpressPayEpic, submitFeedbackEpic, submitIntlVerificationEpic, submitInvoicingBrandingFormEpic, submitQuestionEpic, syncInvoicingSubscriptionCouponsEpic, syncTabsAfterAutomatchEpic, toggleReportUIOptionForecastModeEpic, transferMoneyEpic, treasuryTransferMoneyEpic, triggerAiAccountantJobEpic, triggerReviewTabRefetchEpic, unlinkPaymentAccountEpic, unlockChargeCardEpic, unlockChargeCardsEpic, unsnoozeTaskEpic, updateAccountingClassesEnabledEpic, updateAccruedJESchedulesEpic, updateAddressEpic, updateAmountsInScheduleAccruedDetailEpic, updateAmountsInScheduleDetailEpic, updateAutoTransferRuleEpic, updateBusinessVerificationDetailsEpic, updateCapitalizationAccountThresholdEpic, updateCardPolicyEpic, updateCardProfileEpic, updateChargeCardDetailEpic, updateChargeCardLimitEpic, updateChargeCardNameEpic, updateChargeCardsLimitEpic, updateCompanyDetailsEpic, updateCompanyOfficerEpic, updateCompanyPassportLocalStoreDataEpic, updateCompanyProductServicesEpic, updateCompanyQboRealmIdEpic, updateCompanyTaskManagerViewFiltersEpic, updateDashboardLayoutEpic, updateDebitCardPinAttemptEpic, updateDepositAccountEpic, updateExpenseAutomationReconciliationBalanceLocalDataEpic, updateFileNameEpic, updateFilesMetadataEpic, updateInvoicingInvoiceEpic, updateJESchedulesEpic, updateMappedCashAccountEpic, updateMileageDetailsEpic, updateMyProfileEpic, updateNetBurnOrIncomeStoryCardSettingsEpic, updateNotificationViewAllNotificationsStatusEpic, updateNotificationViewNotificationStatusEpic, updateOnboardingCustomerViewCompleteStatusEpic, updateOnboardingCustomerViewDashboardLoadedEpic, updateOnboardingCustomerViewEpic, updateOnboardingCustomerViewLocalStoreDataEpic, updateOnboardingPaymentAccountLoginStatusEpic, updateOnboardingPaymentAccountStatusEpic, updatePaymentAccountEpic, updatePaymentAccountLoginStatusEpic, updatePaymentAccountStatusEpic, updatePhysicalChargeCardAttemptEpic, updatePortfolioAllocationEpic, updatePrimaryContactEpic, updatePrimaryFundingAccountEpic, updateQBOConnectionPoolExternalConnectionEpic, updateReferViewedEpic, updateRemiSetupViewLocalStoreDataEpic, updateReportUIOptionCOABalancesRangeEpic, updateReportUIOptionIsCompareModeEpic, updateReportUIOptionIsCompareModeOnEpic, updateReportUIOptionThisPeriodEpic, updateReportUIOptionTimeFrameEpic, updateSectionAccountsViewEpic, updateSectionClassesViewEpicV2, updateSectionProjectViewEpic, updateSelectedVendorForCreateFlowEpic, updateSetupViewLocalStoreDataEpic, updateStatementInfoEpic, updateTaskFromListViewEpic, updateTaskGroupNameEpic, updateTransactionDetailEpic, updateTreasuryPromoIntroClosedByOutsideClickEpic, updateTreasuryPromoRemindMeLaterClickedEpic, updateTreasuryVideoViewedEpic, updateVendorContactEpic, uploadAccountStatementEpic, uploadMissingAttachmentSuccessEpic, uploadMissingReceiptSuccessEpic, uploadTransactionReceiptSuccessEpic, validateBillsBulkActionEpic, vendorFiling1099UploadDetailsSaveEpic, verifyDeviceWithTwoFAEpic, verifyOtpEpic, verifyUserEpic, waitForBillDetailThenInitializeLocalStoreEpic, waitForForecastListThenFetchNetBurnOrIncomeWithForecastEpic, waitForForecastListThenFetchOpExWithForecastEpic, waitForForecastListThenFetchRevenueWithForecastEpic, waitForMerchantRecommendationFetchThenUpdateRecommendationInMerchantEpic, waitForVendorByIdThenSaveBillUpdatetoLocalStoreEpic, waitForVendorByNameThenParsetoLocalStoreEpic, waitForVendorByNameThenUpdateBillDetailEpic, waitForVendorRecommendationFetchThenUpdateRecommendationInBillEpic, wiseRedirectEpic);
|
|
708
710
|
const rootEpic = (action$, store$, dependencies) => combinedEpics(action$, store$, dependencies).pipe(map(identity), catchError((error, source) => {
|
|
709
711
|
console.error(error);
|
|
710
712
|
return source;
|
package/lib/esm/index.js
CHANGED
|
@@ -154,10 +154,10 @@ import { fetchCompanyMonthEndReportHistoricData, fetchCompanyMonthEndReportHisto
|
|
|
154
154
|
import { getCompanyMonthEndReportHistoricData, getCompanyMonthEndReportSelectorView, } from './view/companyMonthEndReportView/companyMonthEndReportViewSelector';
|
|
155
155
|
import { fetchCockpitContext, fetchCompanyTaskManagerView, fetchTaskManagerMetrics, updateCompanyTaskManagerViewFilters, } from './view/companyTaskManagerView/companyTaskManagerViewReducer';
|
|
156
156
|
import { getCompanyTaskManagerView, } from './view/companyTaskManagerView/companyTaskManagerViewSelector';
|
|
157
|
-
import { clearCompanyView, clearQboProjectsReconnectRequest, companyManagementSaveUpdates, companyPassportClearDataInLocalStore, companyPassportSaveDataInLocalStore, deleteCompanyOfficerInLocalStore, disableAccountingProjects, dismissCapitalizationOnboarding, enableAccountingProjects, fetchAllCockpitViews, fetchCompanyManagementView, fetchCompanyPassportView, fetchCompanyPortfolioView, fetchManagementView, fetchOnboardingView, fetchParentSubsidiaryManagementView, fetchPortfolioView, fetchSubscriptionView, fetchZeniUsers, resumeEnableAccountingProjects, saveCompanyPassportDetails, saveIndustryAndIncDateInCompanyPassportLocalStore, updateAccountingClassesEnabled, updateCapitalizationAccountThreshold, updateCompanyDownloadState, updateCompanyManagementUIState, updateCompanyPassportLocalStoreData, updateCompanyPortfolioUIState, } from './view/companyView/companyViewReducer';
|
|
157
|
+
import { clearCompanyView, clearQboProjectsReconnectRequest, companyManagementSaveUpdates, companyPassportClearDataInLocalStore, companyPassportSaveDataInLocalStore, deleteCompanyOfficerInLocalStore, disableAccountingProjects, dismissCapitalizationOnboarding, enableAccountingProjects, fetchAllCockpitViews, fetchCompanyManagementView, fetchCompanyPassportView, fetchCompanyPortfolioView, fetchManagementView, fetchOnboardingView, fetchParentSubsidiaryManagementView, fetchPortfolioView, fetchSubscriptionView, fetchZeniUsers, resumeEnableAccountingProjects, saveCompanyPassportDetails, saveIndustryAndIncDateInCompanyPassportLocalStore, updateAccountingClassesEnabled, updateCapitalizationAccountThreshold, updateCompanyDownloadState, updateCompanyManagementUIState, updateCompanyPassportLocalStoreData, updateCompanyPortfolioUIState, updateCompanyProductServices, updateCompanyQboRealmId, } from './view/companyView/companyViewReducer';
|
|
158
158
|
import { canSendMonthEndEmailReport, shouldEnableCalendarPickerForLastReportSent, } from './view/companyView/helpers/cockpitHelpers';
|
|
159
159
|
import { getParentSubsidiaryManagementView } from './view/companyView/parentSubsidiaryView/parentSubsidiaryViewSelector';
|
|
160
|
-
import { getAddonListZeniSku, getCompanyManagementView, getPlanListZeniSku, } from './view/companyView/selector/companyManagementViewSelector';
|
|
160
|
+
import { getAddonListZeniSku, getCompanyManagementView, getCompanyProductServicesUpdateStatus, getCompanyQboRealmIdUpdateStatus, getPlanListZeniSku, } from './view/companyView/selector/companyManagementViewSelector';
|
|
161
161
|
import { getCompanyPassportLocalStoreData, getCompanyPassportView, isCompanyPassportDataToBeSaved, } from './view/companyView/selector/companyPassportViewSelector';
|
|
162
162
|
import { getCompanyPortfolioView, isInfiniteRunway, } from './view/companyView/selector/companyPortfolioViewSelector';
|
|
163
163
|
import { getAllCockpitTabsFilterView, } from './view/companyView/selector/getAllCockpitTabsFilterView';
|
|
@@ -456,6 +456,7 @@ export { scheduleTenantCreditScoreCron, fetchCreditAgentMacro, saveCreditAgentMa
|
|
|
456
456
|
export { toCardTenantProfileRow, toMacro, } from './entity/creditAgent/creditAgentPayload';
|
|
457
457
|
export { getCreditAgentView, getCreditAgentEntity, getCreditAgentMacro, getCardProfilesData, } from './view/creditAgentView/creditAgentViewSelector';
|
|
458
458
|
export { getCreditReportDownloadPayload } from './view/creditAgentView/buildCreditReportCsv';
|
|
459
|
+
export { ALL_PRODUCT_VERTICALS, toProductVertical, toProductVerticalStrict, } from './view/companyView/types/cockpitTypes';
|
|
459
460
|
export { clearAllCreditAgent, updateCreditAgentMacro, updateCreditAgentRow, updateCreditAgentRows, } from './entity/creditAgent/creditAgentReducer';
|
|
460
461
|
export { getCreditAgentRows, getCreditAgentMacroEntity, } from './entity/creditAgent/creditAgentSelector';
|
|
461
462
|
export { saveJeAccountSettings, saveJeAccountSettingsLocalData };
|
|
@@ -566,7 +567,7 @@ export { newAddressInLocalStore, getAddress, getNewAddress, getAllNewAddresses,
|
|
|
566
567
|
export { toManagementSortKeyType, toOnboardingSortKeyType, toPortfolioSortKeyType, toHealthSortKeyType, toTaskManagerSortKeyType, updateCompanyTaskManagerViewFilters, };
|
|
567
568
|
export { ALL_COCKPIT_TABS_FILE_TYPES, ALL_COCKPIT_TABS_IDS, toCockpitTabsIDStrict, toCockpitTabsFileTypeStrict, };
|
|
568
569
|
export { isAllowedValueWithCode, isAllowedValueWithID, };
|
|
569
|
-
export { fetchCompanyPassportView, getCompanyPassportView, getCompanyPassportLocalStoreData, isCompanyPassportDataToBeSaved, companyPassportSaveDataInLocalStore, saveIndustryAndIncDateInCompanyPassportLocalStore, deleteCompanyOfficerInLocalStore, companyPassportClearDataInLocalStore, updateCompanyPassportLocalStoreData, saveCompanyPassportDetails, updateAccountingClassesEnabled, enableAccountingProjects, resumeEnableAccountingProjects, disableAccountingProjects, clearQboProjectsReconnectRequest, updateCapitalizationAccountThreshold, dismissCapitalizationOnboarding, clearCompanyView, };
|
|
570
|
+
export { fetchCompanyPassportView, getCompanyPassportView, getCompanyPassportLocalStoreData, isCompanyPassportDataToBeSaved, companyPassportSaveDataInLocalStore, saveIndustryAndIncDateInCompanyPassportLocalStore, deleteCompanyOfficerInLocalStore, companyPassportClearDataInLocalStore, updateCompanyPassportLocalStoreData, saveCompanyPassportDetails, updateAccountingClassesEnabled, enableAccountingProjects, resumeEnableAccountingProjects, disableAccountingProjects, clearQboProjectsReconnectRequest, updateCompanyProductServices, getCompanyProductServicesUpdateStatus, updateCompanyQboRealmId, getCompanyQboRealmIdUpdateStatus, updateCapitalizationAccountThreshold, dismissCapitalizationOnboarding, clearCompanyView, };
|
|
570
571
|
export { toCompanyPassportLocalData, };
|
|
571
572
|
export { COMPANY_ONBOARDING_INDUSTRY_TYPE_CODES, COMPANY_ONBOARDING_SUB_INDUSTRY_CODES_BY_INDUSTRY, COMPANY_PURPOSE_OF_ACCOUNT_CODES, COMPANY_SOURCE_OF_FUNDS_CODES, COMPANY_TRANSACTION_VOLUME_CODES, COMPANY_US_NEXUS_TYPE_CODES, getCompanyOnboardingSubIndustryCodesForIndustry, };
|
|
572
573
|
export { getUncategorizedAccounts, getNestedAccountListHierarchy, };
|
|
@@ -377,6 +377,63 @@ const companyView = createSlice({
|
|
|
377
377
|
clearQboProjectsReconnectRequest(draft) {
|
|
378
378
|
draft.passportView.needsQboProjectsReconnect = false;
|
|
379
379
|
},
|
|
380
|
+
updateCompanyProductServices: {
|
|
381
|
+
reducer(draft, action) {
|
|
382
|
+
draft.managementView.productServicesUpdateStatusByCompanyId[action.payload.companyId] = {
|
|
383
|
+
fetchState: 'In-Progress',
|
|
384
|
+
error: undefined,
|
|
385
|
+
};
|
|
386
|
+
},
|
|
387
|
+
prepare(companyId, services) {
|
|
388
|
+
return { payload: { companyId, services } };
|
|
389
|
+
},
|
|
390
|
+
},
|
|
391
|
+
updateCompanyProductServicesSuccess(draft, action) {
|
|
392
|
+
draft.managementView.productServicesUpdateStatusByCompanyId[action.payload.companyId] = {
|
|
393
|
+
fetchState: 'Completed',
|
|
394
|
+
error: undefined,
|
|
395
|
+
};
|
|
396
|
+
},
|
|
397
|
+
updateCompanyProductServicesFailure: {
|
|
398
|
+
reducer(draft, action) {
|
|
399
|
+
draft.managementView.productServicesUpdateStatusByCompanyId[action.payload.companyId] = {
|
|
400
|
+
fetchState: 'Error',
|
|
401
|
+
error: action.payload.status,
|
|
402
|
+
};
|
|
403
|
+
},
|
|
404
|
+
prepare(companyId, status) {
|
|
405
|
+
return { payload: { companyId, status } };
|
|
406
|
+
},
|
|
407
|
+
},
|
|
408
|
+
updateCompanyQboRealmId: {
|
|
409
|
+
reducer(draft, action) {
|
|
410
|
+
draft.managementView.qboRealmIdUpdateStatusByCompanyId[action.payload.companyId] = {
|
|
411
|
+
fetchState: 'In-Progress',
|
|
412
|
+
error: undefined,
|
|
413
|
+
};
|
|
414
|
+
},
|
|
415
|
+
// qboRealmId omitted -> reset (the epic sends null); a value -> update.
|
|
416
|
+
prepare(companyId, qboRealmId) {
|
|
417
|
+
return { payload: { companyId, qboRealmId } };
|
|
418
|
+
},
|
|
419
|
+
},
|
|
420
|
+
updateCompanyQboRealmIdSuccess(draft, action) {
|
|
421
|
+
draft.managementView.qboRealmIdUpdateStatusByCompanyId[action.payload.companyId] = {
|
|
422
|
+
fetchState: 'Completed',
|
|
423
|
+
error: undefined,
|
|
424
|
+
};
|
|
425
|
+
},
|
|
426
|
+
updateCompanyQboRealmIdFailure: {
|
|
427
|
+
reducer(draft, action) {
|
|
428
|
+
draft.managementView.qboRealmIdUpdateStatusByCompanyId[action.payload.companyId] = {
|
|
429
|
+
fetchState: 'Error',
|
|
430
|
+
error: action.payload.status,
|
|
431
|
+
};
|
|
432
|
+
},
|
|
433
|
+
prepare(companyId, status) {
|
|
434
|
+
return { payload: { companyId, status } };
|
|
435
|
+
},
|
|
436
|
+
},
|
|
380
437
|
updateCapitalizationAccountThreshold: {
|
|
381
438
|
prepare(companyId, accountId, threshold, dismissOnboardingForAccount, allOverrides) {
|
|
382
439
|
return {
|
|
@@ -700,5 +757,5 @@ const companyView = createSlice({
|
|
|
700
757
|
});
|
|
701
758
|
},
|
|
702
759
|
});
|
|
703
|
-
export const { fetchCompanyPassportView, fetchAllCockpitViews, fetchOnboardingView, fetchManagementView, fetchSubscriptionView, fetchPortfolioView, fetchCompanyManagementView, companyManagementSaveUpdates, companyManagementSavePendingUpdates, companyManagementDiscardUpdates, companyManagementSaveUpdatesSuccess, companyManagementSaveUpdatesFailure, updateCompanyViewOnSuccess, updateCompanyViewOnFailure, fetchCompanyPortfolioView, fetchZeniUsers, updateZeniUsersOnSuccess, updateZeniUsersOnFailure, clearCompanyView, updateCompanyPortfolioUIState, updateCompanyManagementUIState, companyPassportSaveDataInLocalStore, deleteCompanyOfficerInLocalStore, companyPassportClearDataInLocalStore, companyPassportUpdateCompanyDetails, companyPassportUpdateCompanyDetailsSuccess, companyPassportUpdateCompanyDetailsFailure, updateAccountingClassesEnabled, updateAccountingClassesEnabledSuccess, updateAccountingClassesEnabledFailure, enableAccountingProjects, resumeEnableAccountingProjects, disableAccountingProjects, updateAccountingProjectsEnabledSuccess, updateAccountingProjectsEnabledFailure, requestQboProjectsReconnect, clearQboProjectsReconnectRequest, updateCapitalizationAccountThreshold, updateCapitalizationAccountThresholdSuccess, updateCapitalizationAccountThresholdFailure, dismissCapitalizationOnboarding, companyPassportUpdatePrimaryContact, companyPassportUpdatePrimaryContactSuccess, companyPassportUpdatePrimaryContactFailure, companyPassportUpdateCompanyOfficer, companyPassportUpdateCompanyOfficerSuccess, companyPassportUpdateCompanyOfficerFailure, companyPassportCreateCompanyOfficers, companyPassportCreateCompanyOfficersSuccess, companyPassportCreateCompanyOfficersFailure, updateCompanyPassportLocalStoreData, saveIndustryAndIncDateInCompanyPassportLocalStore, saveCompanyPassportDetails, fetchParentSubsidiaryManagementView, updateParentSubsidiaryView, updateParentSubsidiaryViewOnFailure, updateCompanyDownloadState, fetchCompanyMetaData, updateCompanyMetaDataOnSuccess, updateCompanyMetaDataOnFailure, updateMetaDataOnSendMonthEndReport, } = companyView.actions;
|
|
760
|
+
export const { fetchCompanyPassportView, fetchAllCockpitViews, fetchOnboardingView, fetchManagementView, fetchSubscriptionView, fetchPortfolioView, fetchCompanyManagementView, companyManagementSaveUpdates, companyManagementSavePendingUpdates, companyManagementDiscardUpdates, companyManagementSaveUpdatesSuccess, companyManagementSaveUpdatesFailure, updateCompanyViewOnSuccess, updateCompanyViewOnFailure, fetchCompanyPortfolioView, fetchZeniUsers, updateZeniUsersOnSuccess, updateZeniUsersOnFailure, clearCompanyView, updateCompanyPortfolioUIState, updateCompanyManagementUIState, companyPassportSaveDataInLocalStore, deleteCompanyOfficerInLocalStore, companyPassportClearDataInLocalStore, companyPassportUpdateCompanyDetails, companyPassportUpdateCompanyDetailsSuccess, companyPassportUpdateCompanyDetailsFailure, updateAccountingClassesEnabled, updateAccountingClassesEnabledSuccess, updateAccountingClassesEnabledFailure, updateCompanyProductServices, updateCompanyProductServicesSuccess, updateCompanyProductServicesFailure, updateCompanyQboRealmId, updateCompanyQboRealmIdSuccess, updateCompanyQboRealmIdFailure, enableAccountingProjects, resumeEnableAccountingProjects, disableAccountingProjects, updateAccountingProjectsEnabledSuccess, updateAccountingProjectsEnabledFailure, requestQboProjectsReconnect, clearQboProjectsReconnectRequest, updateCapitalizationAccountThreshold, updateCapitalizationAccountThresholdSuccess, updateCapitalizationAccountThresholdFailure, dismissCapitalizationOnboarding, companyPassportUpdatePrimaryContact, companyPassportUpdatePrimaryContactSuccess, companyPassportUpdatePrimaryContactFailure, companyPassportUpdateCompanyOfficer, companyPassportUpdateCompanyOfficerSuccess, companyPassportUpdateCompanyOfficerFailure, companyPassportCreateCompanyOfficers, companyPassportCreateCompanyOfficersSuccess, companyPassportCreateCompanyOfficersFailure, updateCompanyPassportLocalStoreData, saveIndustryAndIncDateInCompanyPassportLocalStore, saveCompanyPassportDetails, fetchParentSubsidiaryManagementView, updateParentSubsidiaryView, updateParentSubsidiaryViewOnFailure, updateCompanyDownloadState, fetchCompanyMetaData, updateCompanyMetaDataOnSuccess, updateCompanyMetaDataOnFailure, updateMetaDataOnSendMonthEndReport, } = companyView.actions;
|
|
704
761
|
export default companyView.reducer;
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { from } from 'rxjs';
|
|
2
|
+
import { catchError, filter, mergeMap } from 'rxjs/operators';
|
|
3
|
+
import { updateCompanies } from '../../../entity/company/companyReducer';
|
|
4
|
+
import { openSnackbar } from '../../../entity/snackbar/snackbarReducer';
|
|
5
|
+
import { updateTenantProductSettings } from '../../../entity/tenant/tenantReducer';
|
|
6
|
+
import { createZeniAPIStatus, isSuccessResponse } from '../../../responsePayload';
|
|
7
|
+
import { updateCompanyProductServices, updateCompanyProductServicesFailure, updateCompanyProductServicesSuccess, } from '../companyViewReducer';
|
|
8
|
+
import { resolveTenantIdByCompanyId } from '../selector/companyManagementViewSelector';
|
|
9
|
+
export const updateCompanyProductServicesEpic = (actions$, state$, zeniAPI) => actions$.pipe(filter(updateCompanyProductServices.match),
|
|
10
|
+
// Per-row admin action: an operator can enable services on several
|
|
11
|
+
// companies at once, so each trigger keeps its own request (matches
|
|
12
|
+
// updateCompanyQboRealmIdEpic).
|
|
13
|
+
mergeMap((action) => {
|
|
14
|
+
const { companyId, services } = action.payload;
|
|
15
|
+
const { isBookkeepingEnabled, isBillPayEnabled, isReimbursementEnabled } = services;
|
|
16
|
+
const tenantId = resolveTenantIdByCompanyId(state$.value, companyId);
|
|
17
|
+
// Send only the service-enable fields so the backend routes this through
|
|
18
|
+
// its isolated "enable services" path. Bookkeeping is a Tenant product
|
|
19
|
+
// flag and implies spend management; bill pay / reimbursement are Company
|
|
20
|
+
// feature flags.
|
|
21
|
+
const requestBody = {};
|
|
22
|
+
if (isBookkeepingEnabled != null) {
|
|
23
|
+
requestBody.is_book_keeping_enabled = isBookkeepingEnabled;
|
|
24
|
+
requestBody.is_spend_management_enabled = isBookkeepingEnabled;
|
|
25
|
+
}
|
|
26
|
+
if (isBillPayEnabled != null) {
|
|
27
|
+
requestBody.is_bill_pay_feature_enabled = isBillPayEnabled;
|
|
28
|
+
}
|
|
29
|
+
if (isReimbursementEnabled != null) {
|
|
30
|
+
requestBody.is_reimbursement_feature_enabled = isReimbursementEnabled;
|
|
31
|
+
}
|
|
32
|
+
// No fields set would fall through to the normal company PUT on the backend;
|
|
33
|
+
// treat it as an immediate no-op success so the In-Progress status resolves.
|
|
34
|
+
if (Object.keys(requestBody).length === 0) {
|
|
35
|
+
return from([updateCompanyProductServicesSuccess({ companyId })]);
|
|
36
|
+
}
|
|
37
|
+
return zeniAPI
|
|
38
|
+
.putAndGetJSON(`${zeniAPI.apiEndPoints.tenantMicroServiceBaseUrl}/1.0/companies/${companyId}`, requestBody)
|
|
39
|
+
.pipe(mergeMap((response) => {
|
|
40
|
+
if (isSuccessResponse(response)) {
|
|
41
|
+
const companies = response.data?.companies ?? [];
|
|
42
|
+
const actions = [];
|
|
43
|
+
// The response normally carries the updated company; only write
|
|
44
|
+
// company state when it does (a 200 is still a success even with
|
|
45
|
+
// an empty company array).
|
|
46
|
+
if (companies.length > 0) {
|
|
47
|
+
actions.push(updateCompanies({
|
|
48
|
+
payload: companies,
|
|
49
|
+
schema: {},
|
|
50
|
+
isUpdate: true,
|
|
51
|
+
}));
|
|
52
|
+
}
|
|
53
|
+
// Independent of the company array: the company PUT is the source
|
|
54
|
+
// of truth and this tenant-state patch is a best-effort optimistic
|
|
55
|
+
// sync, skipped when the tenant isn't loaded (UI relies on the
|
|
56
|
+
// next tenant fetch).
|
|
57
|
+
if (isBookkeepingEnabled != null && tenantId != null) {
|
|
58
|
+
actions.push(updateTenantProductSettings({
|
|
59
|
+
tenantId,
|
|
60
|
+
isBookkeepingEnabled,
|
|
61
|
+
isSpendManagementEnabled: isBookkeepingEnabled,
|
|
62
|
+
}));
|
|
63
|
+
}
|
|
64
|
+
actions.push(updateCompanyProductServicesSuccess({ companyId }));
|
|
65
|
+
actions.push(openSnackbar({
|
|
66
|
+
messageSection: 'product_services_update',
|
|
67
|
+
messageText: 'success',
|
|
68
|
+
type: 'success',
|
|
69
|
+
}));
|
|
70
|
+
return from(actions);
|
|
71
|
+
}
|
|
72
|
+
return from([
|
|
73
|
+
updateCompanyProductServicesFailure(companyId, response.status),
|
|
74
|
+
openSnackbar({
|
|
75
|
+
messageSection: 'product_services_update',
|
|
76
|
+
messageText: 'failed',
|
|
77
|
+
type: 'error',
|
|
78
|
+
}),
|
|
79
|
+
]);
|
|
80
|
+
}), catchError((error) => from([
|
|
81
|
+
updateCompanyProductServicesFailure(companyId, createZeniAPIStatus('Unexpected error', 'Update Company Product Services errored out: ' +
|
|
82
|
+
(error instanceof Error
|
|
83
|
+
? error.message
|
|
84
|
+
: JSON.stringify(error)))),
|
|
85
|
+
openSnackbar({
|
|
86
|
+
messageSection: 'product_services_update',
|
|
87
|
+
messageText: 'failed',
|
|
88
|
+
type: 'error',
|
|
89
|
+
}),
|
|
90
|
+
])));
|
|
91
|
+
}));
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { from } from 'rxjs';
|
|
2
|
+
import { catchError, filter, mergeMap } from 'rxjs/operators';
|
|
3
|
+
import { openSnackbar } from '../../../entity/snackbar/snackbarReducer';
|
|
4
|
+
import { createZeniAPIStatus, isSuccessResponse, } from '../../../responsePayload';
|
|
5
|
+
import { updateCompanyQboRealmId, updateCompanyQboRealmIdFailure, updateCompanyQboRealmIdSuccess, } from '../companyViewReducer';
|
|
6
|
+
import { resolveTenantIdByCompanyId } from '../selector/companyManagementViewSelector';
|
|
7
|
+
export const updateCompanyQboRealmIdEpic = (actions$, state$, zeniAPI) => actions$.pipe(filter(updateCompanyQboRealmId.match),
|
|
8
|
+
// Per-row admin action: several rows can be in flight at once, so each
|
|
9
|
+
// trigger keeps its own request instead of cancelling the previous one.
|
|
10
|
+
mergeMap((action) => {
|
|
11
|
+
const { companyId, qboRealmId } = action.payload;
|
|
12
|
+
const tenantId = resolveTenantIdByCompanyId(state$.value, companyId);
|
|
13
|
+
if (tenantId == null) {
|
|
14
|
+
return from([
|
|
15
|
+
updateCompanyQboRealmIdFailure(companyId, createZeniAPIStatus('Unexpected error', `No tenant found for companyId: ${companyId}`)),
|
|
16
|
+
openSnackbar({
|
|
17
|
+
messageSection: 'qbo_realm_id_update',
|
|
18
|
+
messageText: 'failed',
|
|
19
|
+
type: 'error',
|
|
20
|
+
}),
|
|
21
|
+
]);
|
|
22
|
+
}
|
|
23
|
+
// The FE route reads the target tenant from the zeni-tenant-id header,
|
|
24
|
+
// which overrides the operator's ambient tenant for this request only.
|
|
25
|
+
// qboRealmId omitted -> null clears the pin; a value overwrites it.
|
|
26
|
+
return zeniAPI
|
|
27
|
+
.putAndGetJSON(`${zeniAPI.apiEndPoints.tenantMicroServiceBaseUrl}/1.0/qbo-realm-id`, { qbo_realm_id: qboRealmId ?? null }, { 'zeni-tenant-id': tenantId })
|
|
28
|
+
.pipe(mergeMap((response) => {
|
|
29
|
+
if (isSuccessResponse(response)) {
|
|
30
|
+
return from([
|
|
31
|
+
updateCompanyQboRealmIdSuccess({ companyId }),
|
|
32
|
+
openSnackbar({
|
|
33
|
+
messageSection: 'qbo_realm_id_update',
|
|
34
|
+
messageText: 'success',
|
|
35
|
+
type: 'success',
|
|
36
|
+
}),
|
|
37
|
+
]);
|
|
38
|
+
}
|
|
39
|
+
return from([
|
|
40
|
+
updateCompanyQboRealmIdFailure(companyId, response.status),
|
|
41
|
+
openSnackbar({
|
|
42
|
+
messageSection: 'qbo_realm_id_update',
|
|
43
|
+
messageText: 'failed',
|
|
44
|
+
type: 'error',
|
|
45
|
+
}),
|
|
46
|
+
]);
|
|
47
|
+
}), catchError((error) => from([
|
|
48
|
+
updateCompanyQboRealmIdFailure(companyId, createZeniAPIStatus('Unexpected error', 'Update Company QBO realm id errored out: ' +
|
|
49
|
+
(error instanceof Error
|
|
50
|
+
? error.message
|
|
51
|
+
: JSON.stringify(error)))),
|
|
52
|
+
openSnackbar({
|
|
53
|
+
messageSection: 'qbo_realm_id_update',
|
|
54
|
+
messageText: 'failed',
|
|
55
|
+
type: 'error',
|
|
56
|
+
}),
|
|
57
|
+
])));
|
|
58
|
+
}));
|
|
@@ -2,6 +2,7 @@ import { createSelector } from '@reduxjs/toolkit';
|
|
|
2
2
|
import recordGet from 'lodash/get';
|
|
3
3
|
import orderBy from 'lodash/orderBy';
|
|
4
4
|
import { getSortOrder } from '../../../commonPayloadTypes/sortOrderPayload';
|
|
5
|
+
import { getCompanyByCompanyId } from '../../../entity/company/companySelector';
|
|
5
6
|
import { customerRatingValues, teamRatingValues, } from '../../../entity/customerSatisfaction/customerSatisfactionState';
|
|
6
7
|
import { getUserByUserId, getUserName, getUserNameById, } from '../../../entity/user/userSelector';
|
|
7
8
|
import { date as zeniDate } from '../../../zeniDayJS';
|
|
@@ -122,6 +123,29 @@ const getCategoryValueForCompany = (key, company) => {
|
|
|
122
123
|
if (key === 'annualRecurringRevenue' || key === 'monthlyRecurringRevenue') {
|
|
123
124
|
return company.primarySubscription?.summary.summary[key].amount.toString();
|
|
124
125
|
}
|
|
126
|
+
if (key === 'productVerticals') {
|
|
127
|
+
const featuresActivationInfo = company.company.company.featuresActivationInfo;
|
|
128
|
+
const enabledVerticals = [];
|
|
129
|
+
if (featuresActivationInfo?.isBookkeepingEnabled === true) {
|
|
130
|
+
enabledVerticals.push('bookkeeping');
|
|
131
|
+
}
|
|
132
|
+
if (featuresActivationInfo?.isBillPayFeatureEnabled === true) {
|
|
133
|
+
enabledVerticals.push('billPay');
|
|
134
|
+
}
|
|
135
|
+
if (featuresActivationInfo?.isReimbursementFeatureEnabled === true) {
|
|
136
|
+
enabledVerticals.push('reimbursement');
|
|
137
|
+
}
|
|
138
|
+
if (featuresActivationInfo?.isTaxEnabled === true) {
|
|
139
|
+
enabledVerticals.push('tax');
|
|
140
|
+
}
|
|
141
|
+
if (featuresActivationInfo?.isPayrollEnabled === true) {
|
|
142
|
+
enabledVerticals.push('payroll');
|
|
143
|
+
}
|
|
144
|
+
if (featuresActivationInfo?.isCfoEnabled === true) {
|
|
145
|
+
enabledVerticals.push('cfo');
|
|
146
|
+
}
|
|
147
|
+
return enabledVerticals;
|
|
148
|
+
}
|
|
125
149
|
return company.company.company.managementInfo[key];
|
|
126
150
|
};
|
|
127
151
|
const applyAdvancedFiltersOnCompaniesList = (allCompanies, filters, filteredCompanies = [], index = 0) => {
|
|
@@ -192,6 +216,8 @@ const sortAndFilterCompanies = (sortKey, sortOrder, filterText, companies, userS
|
|
|
192
216
|
updatedCompanies.forEach((company) => {
|
|
193
217
|
switch (sortKey) {
|
|
194
218
|
case 'companyName':
|
|
219
|
+
case 'productVerticals':
|
|
220
|
+
case 'realmId':
|
|
195
221
|
companiesWithSortKeyValue.push(company);
|
|
196
222
|
break;
|
|
197
223
|
case 'status':
|
|
@@ -427,6 +453,12 @@ const sortAndFilterCompanies = (sortKey, sortOrder, filterText, companies, userS
|
|
|
427
453
|
primarySortValue = (company.company.company.companyInfo.bookCloseDate ??
|
|
428
454
|
zeniDate('1970-01-01T00:00:00.000Z')).valueOf();
|
|
429
455
|
break;
|
|
456
|
+
case 'productVerticals':
|
|
457
|
+
case 'realmId':
|
|
458
|
+
// Not a meaningful sort axis (both are cockpit action columns);
|
|
459
|
+
// keep stable order rather than falling through to the status/group
|
|
460
|
+
// default sort.
|
|
461
|
+
break;
|
|
430
462
|
case 'status':
|
|
431
463
|
default: {
|
|
432
464
|
isMultiSortApplicable = true;
|
|
@@ -480,3 +512,23 @@ export const getTotalRecurringRevenue = (companies) => companies.reduce((prev, c
|
|
|
480
512
|
currencySymbol: '',
|
|
481
513
|
},
|
|
482
514
|
});
|
|
515
|
+
export function getCompanyProductServicesUpdateStatus(state, companyId) {
|
|
516
|
+
return (state.companyViewState.managementView
|
|
517
|
+
.productServicesUpdateStatusByCompanyId[companyId] ?? {
|
|
518
|
+
fetchState: 'Not-Started',
|
|
519
|
+
error: undefined,
|
|
520
|
+
});
|
|
521
|
+
}
|
|
522
|
+
export function getCompanyQboRealmIdUpdateStatus(state, companyId) {
|
|
523
|
+
return (state.companyViewState.managementView.qboRealmIdUpdateStatusByCompanyId[companyId] ?? {
|
|
524
|
+
fetchState: 'Not-Started',
|
|
525
|
+
error: undefined,
|
|
526
|
+
});
|
|
527
|
+
}
|
|
528
|
+
// Cockpit populates companyState (with a companyId->tenantId mapping) but not
|
|
529
|
+
// tenantState, so resolve from company first and fall back to tenant.
|
|
530
|
+
export function resolveTenantIdByCompanyId(state, companyId) {
|
|
531
|
+
return (getCompanyByCompanyId(state.companyState, companyId)?.company.companyInfo
|
|
532
|
+
.tenantId ??
|
|
533
|
+
Object.values(state.tenantState.tenantsById).find((tenant) => tenant?.companyId === companyId)?.tenantId);
|
|
534
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { stringToUnion } from '../../../commonStateTypes/stringToUnion';
|
|
1
|
+
import { stringToUnion, stringToUnionStrict, } from '../../../commonStateTypes/stringToUnion';
|
|
2
2
|
const ALL_PORTFOLIO_SORT_KEYS = [
|
|
3
3
|
'companyName',
|
|
4
4
|
'cashBalance',
|
|
@@ -13,6 +13,8 @@ const ALL_MANAGEMENT_SORT_KEYS = [
|
|
|
13
13
|
'status',
|
|
14
14
|
'group',
|
|
15
15
|
'plans',
|
|
16
|
+
'productVerticals',
|
|
17
|
+
'realmId',
|
|
16
18
|
'controller',
|
|
17
19
|
'customerSuccessManager',
|
|
18
20
|
'reviewer',
|
|
@@ -83,3 +85,13 @@ export const MANAGEMENT_STATUS_CODES = [
|
|
|
83
85
|
'terminated',
|
|
84
86
|
];
|
|
85
87
|
export const toManagementStatusCodeType = (v) => stringToUnion(v, MANAGEMENT_STATUS_CODES);
|
|
88
|
+
export const ALL_PRODUCT_VERTICALS = [
|
|
89
|
+
'bookkeeping',
|
|
90
|
+
'billPay',
|
|
91
|
+
'reimbursement',
|
|
92
|
+
'tax',
|
|
93
|
+
'payroll',
|
|
94
|
+
'cfo',
|
|
95
|
+
];
|
|
96
|
+
export const toProductVertical = (v) => stringToUnion(v, ALL_PRODUCT_VERTICALS);
|
|
97
|
+
export const toProductVerticalStrict = (v) => stringToUnionStrict(v ?? '', ALL_PRODUCT_VERTICALS);
|
|
@@ -19,6 +19,8 @@ export function getCompanyManagementPendingUpdates(companyId, state) {
|
|
|
19
19
|
export const initialCompanyManagementView = {
|
|
20
20
|
...initialCommonState,
|
|
21
21
|
updatesByCompanyId: {},
|
|
22
|
+
productServicesUpdateStatusByCompanyId: {},
|
|
23
|
+
qboRealmIdUpdateStatusByCompanyId: {},
|
|
22
24
|
uiState: {
|
|
23
25
|
sortKey: 'status',
|
|
24
26
|
sortOrder: 'ascending',
|