@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.
Files changed (36) hide show
  1. package/lib/entity/company/companyPayload.d.ts +4 -0
  2. package/lib/entity/company/companyPayload.js +18 -8
  3. package/lib/entity/company/companyStateTypes.d.ts +4 -0
  4. package/lib/entity/snackbar/snackbarTypes.d.ts +1 -1
  5. package/lib/entity/snackbar/snackbarTypes.js +2 -0
  6. package/lib/entity/tenant/tenantReducer.d.ts +5 -1
  7. package/lib/entity/tenant/tenantReducer.js +21 -2
  8. package/lib/epic.d.ts +3 -1
  9. package/lib/epic.js +3 -1
  10. package/lib/esm/entity/company/companyPayload.js +18 -8
  11. package/lib/esm/entity/snackbar/snackbarTypes.js +2 -0
  12. package/lib/esm/entity/tenant/tenantReducer.js +20 -1
  13. package/lib/esm/epic.js +3 -1
  14. package/lib/esm/index.js +4 -3
  15. package/lib/esm/view/companyView/companyViewReducer.js +58 -1
  16. package/lib/esm/view/companyView/epic/updateCompanyProductServicesEpic.js +91 -0
  17. package/lib/esm/view/companyView/epic/updateCompanyQboRealmIdEpic.js +58 -0
  18. package/lib/esm/view/companyView/selector/companyManagementViewSelector.js +52 -0
  19. package/lib/esm/view/companyView/types/cockpitTypes.js +13 -1
  20. package/lib/esm/view/companyView/types/companyManagementViewState.js +2 -0
  21. package/lib/index.d.ts +5 -3
  22. package/lib/index.js +57 -49
  23. package/lib/view/companyView/companyViewReducer.d.ts +22 -1
  24. package/lib/view/companyView/companyViewReducer.js +60 -3
  25. package/lib/view/companyView/epic/updateCompanyProductServicesEpic.d.ts +10 -0
  26. package/lib/view/companyView/epic/updateCompanyProductServicesEpic.js +95 -0
  27. package/lib/view/companyView/epic/updateCompanyQboRealmIdEpic.d.ts +8 -0
  28. package/lib/view/companyView/epic/updateCompanyQboRealmIdEpic.js +62 -0
  29. package/lib/view/companyView/selector/companyManagementViewSelector.d.ts +3 -0
  30. package/lib/view/companyView/selector/companyManagementViewSelector.js +55 -0
  31. package/lib/view/companyView/types/cockpitTypes.d.ts +7 -3
  32. package/lib/view/companyView/types/cockpitTypes.js +15 -1
  33. package/lib/view/companyView/types/companyManagementViewState.d.ts +2 -0
  34. package/lib/view/companyView/types/companyManagementViewState.js +2 -0
  35. package/lib/view/expenseAutomationView/helpers/transactionCategorizationLocalDataHelper.d.ts +1 -1
  36. package/package.json +1 -1
@@ -10,6 +10,11 @@ import { CompanyDetailsLocalData } from './types/companyPassport/companyDetailsL
10
10
  import { CompanyPassportLocalData } from './types/companyPassport/companyPassportLocalData';
11
11
  import { CompanyOfficerLocalData, CompanyOfficerType, PrimaryContactLocalData } from './types/companyPassport/companyUsersLocalData';
12
12
  import { PortfolioUIState } from './types/companyPortfolioViewState';
13
+ export interface CompanyProductServicesInput {
14
+ isBillPayEnabled?: boolean;
15
+ isBookkeepingEnabled?: boolean;
16
+ isReimbursementEnabled?: boolean;
17
+ }
13
18
  export declare const initialState: CompanyViewState;
14
19
  export declare const fetchCompanyPassportView: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[companyId: string], {
15
20
  companyId: string;
@@ -68,7 +73,23 @@ export declare const fetchCompanyPassportView: import("@reduxjs/toolkit").Action
68
73
  enabled: boolean;
69
74
  }, "companyView/updateAccountingClassesEnabled", never, never>, updateAccountingClassesEnabledSuccess: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<"companyView/updateAccountingClassesEnabledSuccess">, updateAccountingClassesEnabledFailure: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
70
75
  status: ZeniAPIStatus;
71
- }, "companyView/updateAccountingClassesEnabledFailure">, enableAccountingProjects: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[companyId: string], {
76
+ }, "companyView/updateAccountingClassesEnabledFailure">, updateCompanyProductServices: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[companyId: string, services: CompanyProductServicesInput], {
77
+ companyId: string;
78
+ services: CompanyProductServicesInput;
79
+ }, "companyView/updateCompanyProductServices", never, never>, updateCompanyProductServicesSuccess: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
80
+ companyId: ID;
81
+ }, "companyView/updateCompanyProductServicesSuccess">, updateCompanyProductServicesFailure: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[companyId: string, status: ZeniAPIStatus<Record<string, unknown>>], {
82
+ companyId: string;
83
+ status: ZeniAPIStatus<Record<string, unknown>>;
84
+ }, "companyView/updateCompanyProductServicesFailure", never, never>, updateCompanyQboRealmId: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[companyId: string, qboRealmId?: string | undefined], {
85
+ companyId: string;
86
+ qboRealmId: string | undefined;
87
+ }, "companyView/updateCompanyQboRealmId", never, never>, updateCompanyQboRealmIdSuccess: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
88
+ companyId: ID;
89
+ }, "companyView/updateCompanyQboRealmIdSuccess">, updateCompanyQboRealmIdFailure: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[companyId: string, status: ZeniAPIStatus<Record<string, unknown>>], {
90
+ companyId: string;
91
+ status: ZeniAPIStatus<Record<string, unknown>>;
92
+ }, "companyView/updateCompanyQboRealmIdFailure", never, never>, enableAccountingProjects: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[companyId: string], {
72
93
  companyId: string;
73
94
  }, "companyView/enableAccountingProjects", never, never>, resumeEnableAccountingProjects: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[companyId: string], {
74
95
  companyId: string;
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
  var _a;
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.companyPassportCreateCompanyOfficersSuccess = exports.companyPassportCreateCompanyOfficers = exports.companyPassportUpdateCompanyOfficerFailure = exports.companyPassportUpdateCompanyOfficerSuccess = exports.companyPassportUpdateCompanyOfficer = exports.companyPassportUpdatePrimaryContactFailure = exports.companyPassportUpdatePrimaryContactSuccess = exports.companyPassportUpdatePrimaryContact = exports.dismissCapitalizationOnboarding = exports.updateCapitalizationAccountThresholdFailure = exports.updateCapitalizationAccountThresholdSuccess = exports.updateCapitalizationAccountThreshold = exports.clearQboProjectsReconnectRequest = exports.requestQboProjectsReconnect = exports.updateAccountingProjectsEnabledFailure = exports.updateAccountingProjectsEnabledSuccess = exports.disableAccountingProjects = exports.resumeEnableAccountingProjects = exports.enableAccountingProjects = exports.updateAccountingClassesEnabledFailure = exports.updateAccountingClassesEnabledSuccess = exports.updateAccountingClassesEnabled = exports.companyPassportUpdateCompanyDetailsFailure = exports.companyPassportUpdateCompanyDetailsSuccess = exports.companyPassportUpdateCompanyDetails = exports.companyPassportClearDataInLocalStore = exports.deleteCompanyOfficerInLocalStore = exports.companyPassportSaveDataInLocalStore = exports.updateCompanyManagementUIState = exports.updateCompanyPortfolioUIState = exports.clearCompanyView = exports.updateZeniUsersOnFailure = exports.updateZeniUsersOnSuccess = exports.fetchZeniUsers = exports.fetchCompanyPortfolioView = exports.updateCompanyViewOnFailure = exports.updateCompanyViewOnSuccess = exports.companyManagementSaveUpdatesFailure = exports.companyManagementSaveUpdatesSuccess = exports.companyManagementDiscardUpdates = exports.companyManagementSavePendingUpdates = exports.companyManagementSaveUpdates = exports.fetchCompanyManagementView = exports.fetchPortfolioView = exports.fetchSubscriptionView = exports.fetchManagementView = exports.fetchOnboardingView = exports.fetchAllCockpitViews = exports.fetchCompanyPassportView = exports.initialState = void 0;
5
- exports.updateMetaDataOnSendMonthEndReport = exports.updateCompanyMetaDataOnFailure = exports.updateCompanyMetaDataOnSuccess = exports.fetchCompanyMetaData = exports.updateCompanyDownloadState = exports.updateParentSubsidiaryViewOnFailure = exports.updateParentSubsidiaryView = exports.fetchParentSubsidiaryManagementView = exports.saveCompanyPassportDetails = exports.saveIndustryAndIncDateInCompanyPassportLocalStore = exports.updateCompanyPassportLocalStoreData = exports.companyPassportCreateCompanyOfficersFailure = void 0;
4
+ exports.companyPassportUpdatePrimaryContactSuccess = exports.companyPassportUpdatePrimaryContact = exports.dismissCapitalizationOnboarding = exports.updateCapitalizationAccountThresholdFailure = exports.updateCapitalizationAccountThresholdSuccess = exports.updateCapitalizationAccountThreshold = exports.clearQboProjectsReconnectRequest = exports.requestQboProjectsReconnect = exports.updateAccountingProjectsEnabledFailure = exports.updateAccountingProjectsEnabledSuccess = exports.disableAccountingProjects = exports.resumeEnableAccountingProjects = exports.enableAccountingProjects = exports.updateCompanyQboRealmIdFailure = exports.updateCompanyQboRealmIdSuccess = exports.updateCompanyQboRealmId = exports.updateCompanyProductServicesFailure = exports.updateCompanyProductServicesSuccess = exports.updateCompanyProductServices = exports.updateAccountingClassesEnabledFailure = exports.updateAccountingClassesEnabledSuccess = exports.updateAccountingClassesEnabled = exports.companyPassportUpdateCompanyDetailsFailure = exports.companyPassportUpdateCompanyDetailsSuccess = exports.companyPassportUpdateCompanyDetails = exports.companyPassportClearDataInLocalStore = exports.deleteCompanyOfficerInLocalStore = exports.companyPassportSaveDataInLocalStore = exports.updateCompanyManagementUIState = exports.updateCompanyPortfolioUIState = exports.clearCompanyView = exports.updateZeniUsersOnFailure = exports.updateZeniUsersOnSuccess = exports.fetchZeniUsers = exports.fetchCompanyPortfolioView = exports.updateCompanyViewOnFailure = exports.updateCompanyViewOnSuccess = exports.companyManagementSaveUpdatesFailure = exports.companyManagementSaveUpdatesSuccess = exports.companyManagementDiscardUpdates = exports.companyManagementSavePendingUpdates = exports.companyManagementSaveUpdates = exports.fetchCompanyManagementView = exports.fetchPortfolioView = exports.fetchSubscriptionView = exports.fetchManagementView = exports.fetchOnboardingView = exports.fetchAllCockpitViews = exports.fetchCompanyPassportView = exports.initialState = void 0;
5
+ exports.updateMetaDataOnSendMonthEndReport = exports.updateCompanyMetaDataOnFailure = exports.updateCompanyMetaDataOnSuccess = exports.fetchCompanyMetaData = exports.updateCompanyDownloadState = exports.updateParentSubsidiaryViewOnFailure = exports.updateParentSubsidiaryView = exports.fetchParentSubsidiaryManagementView = exports.saveCompanyPassportDetails = exports.saveIndustryAndIncDateInCompanyPassportLocalStore = exports.updateCompanyPassportLocalStoreData = exports.companyPassportCreateCompanyOfficersFailure = exports.companyPassportCreateCompanyOfficersSuccess = exports.companyPassportCreateCompanyOfficers = exports.companyPassportUpdateCompanyOfficerFailure = exports.companyPassportUpdateCompanyOfficerSuccess = exports.companyPassportUpdateCompanyOfficer = exports.companyPassportUpdatePrimaryContactFailure = void 0;
6
6
  const toolkit_1 = require("@reduxjs/toolkit");
7
7
  const rootActions_1 = require("../../rootActions");
8
8
  const parentSubsidiaryViewState_1 = require("./parentSubsidiaryView/parentSubsidiaryViewState");
@@ -382,6 +382,63 @@ const companyView = (0, toolkit_1.createSlice)({
382
382
  clearQboProjectsReconnectRequest(draft) {
383
383
  draft.passportView.needsQboProjectsReconnect = false;
384
384
  },
385
+ updateCompanyProductServices: {
386
+ reducer(draft, action) {
387
+ draft.managementView.productServicesUpdateStatusByCompanyId[action.payload.companyId] = {
388
+ fetchState: 'In-Progress',
389
+ error: undefined,
390
+ };
391
+ },
392
+ prepare(companyId, services) {
393
+ return { payload: { companyId, services } };
394
+ },
395
+ },
396
+ updateCompanyProductServicesSuccess(draft, action) {
397
+ draft.managementView.productServicesUpdateStatusByCompanyId[action.payload.companyId] = {
398
+ fetchState: 'Completed',
399
+ error: undefined,
400
+ };
401
+ },
402
+ updateCompanyProductServicesFailure: {
403
+ reducer(draft, action) {
404
+ draft.managementView.productServicesUpdateStatusByCompanyId[action.payload.companyId] = {
405
+ fetchState: 'Error',
406
+ error: action.payload.status,
407
+ };
408
+ },
409
+ prepare(companyId, status) {
410
+ return { payload: { companyId, status } };
411
+ },
412
+ },
413
+ updateCompanyQboRealmId: {
414
+ reducer(draft, action) {
415
+ draft.managementView.qboRealmIdUpdateStatusByCompanyId[action.payload.companyId] = {
416
+ fetchState: 'In-Progress',
417
+ error: undefined,
418
+ };
419
+ },
420
+ // qboRealmId omitted -> reset (the epic sends null); a value -> update.
421
+ prepare(companyId, qboRealmId) {
422
+ return { payload: { companyId, qboRealmId } };
423
+ },
424
+ },
425
+ updateCompanyQboRealmIdSuccess(draft, action) {
426
+ draft.managementView.qboRealmIdUpdateStatusByCompanyId[action.payload.companyId] = {
427
+ fetchState: 'Completed',
428
+ error: undefined,
429
+ };
430
+ },
431
+ updateCompanyQboRealmIdFailure: {
432
+ reducer(draft, action) {
433
+ draft.managementView.qboRealmIdUpdateStatusByCompanyId[action.payload.companyId] = {
434
+ fetchState: 'Error',
435
+ error: action.payload.status,
436
+ };
437
+ },
438
+ prepare(companyId, status) {
439
+ return { payload: { companyId, status } };
440
+ },
441
+ },
385
442
  updateCapitalizationAccountThreshold: {
386
443
  prepare(companyId, accountId, threshold, dismissOnboardingForAccount, allOverrides) {
387
444
  return {
@@ -705,5 +762,5 @@ const companyView = (0, toolkit_1.createSlice)({
705
762
  });
706
763
  },
707
764
  });
708
- _a = companyView.actions, exports.fetchCompanyPassportView = _a.fetchCompanyPassportView, exports.fetchAllCockpitViews = _a.fetchAllCockpitViews, exports.fetchOnboardingView = _a.fetchOnboardingView, exports.fetchManagementView = _a.fetchManagementView, exports.fetchSubscriptionView = _a.fetchSubscriptionView, exports.fetchPortfolioView = _a.fetchPortfolioView, exports.fetchCompanyManagementView = _a.fetchCompanyManagementView, exports.companyManagementSaveUpdates = _a.companyManagementSaveUpdates, exports.companyManagementSavePendingUpdates = _a.companyManagementSavePendingUpdates, exports.companyManagementDiscardUpdates = _a.companyManagementDiscardUpdates, exports.companyManagementSaveUpdatesSuccess = _a.companyManagementSaveUpdatesSuccess, exports.companyManagementSaveUpdatesFailure = _a.companyManagementSaveUpdatesFailure, exports.updateCompanyViewOnSuccess = _a.updateCompanyViewOnSuccess, exports.updateCompanyViewOnFailure = _a.updateCompanyViewOnFailure, exports.fetchCompanyPortfolioView = _a.fetchCompanyPortfolioView, exports.fetchZeniUsers = _a.fetchZeniUsers, exports.updateZeniUsersOnSuccess = _a.updateZeniUsersOnSuccess, exports.updateZeniUsersOnFailure = _a.updateZeniUsersOnFailure, exports.clearCompanyView = _a.clearCompanyView, exports.updateCompanyPortfolioUIState = _a.updateCompanyPortfolioUIState, exports.updateCompanyManagementUIState = _a.updateCompanyManagementUIState, exports.companyPassportSaveDataInLocalStore = _a.companyPassportSaveDataInLocalStore, exports.deleteCompanyOfficerInLocalStore = _a.deleteCompanyOfficerInLocalStore, exports.companyPassportClearDataInLocalStore = _a.companyPassportClearDataInLocalStore, exports.companyPassportUpdateCompanyDetails = _a.companyPassportUpdateCompanyDetails, exports.companyPassportUpdateCompanyDetailsSuccess = _a.companyPassportUpdateCompanyDetailsSuccess, exports.companyPassportUpdateCompanyDetailsFailure = _a.companyPassportUpdateCompanyDetailsFailure, exports.updateAccountingClassesEnabled = _a.updateAccountingClassesEnabled, exports.updateAccountingClassesEnabledSuccess = _a.updateAccountingClassesEnabledSuccess, exports.updateAccountingClassesEnabledFailure = _a.updateAccountingClassesEnabledFailure, exports.enableAccountingProjects = _a.enableAccountingProjects, exports.resumeEnableAccountingProjects = _a.resumeEnableAccountingProjects, exports.disableAccountingProjects = _a.disableAccountingProjects, exports.updateAccountingProjectsEnabledSuccess = _a.updateAccountingProjectsEnabledSuccess, exports.updateAccountingProjectsEnabledFailure = _a.updateAccountingProjectsEnabledFailure, exports.requestQboProjectsReconnect = _a.requestQboProjectsReconnect, exports.clearQboProjectsReconnectRequest = _a.clearQboProjectsReconnectRequest, exports.updateCapitalizationAccountThreshold = _a.updateCapitalizationAccountThreshold, exports.updateCapitalizationAccountThresholdSuccess = _a.updateCapitalizationAccountThresholdSuccess, exports.updateCapitalizationAccountThresholdFailure = _a.updateCapitalizationAccountThresholdFailure, exports.dismissCapitalizationOnboarding = _a.dismissCapitalizationOnboarding, exports.companyPassportUpdatePrimaryContact = _a.companyPassportUpdatePrimaryContact, exports.companyPassportUpdatePrimaryContactSuccess = _a.companyPassportUpdatePrimaryContactSuccess, exports.companyPassportUpdatePrimaryContactFailure = _a.companyPassportUpdatePrimaryContactFailure, exports.companyPassportUpdateCompanyOfficer = _a.companyPassportUpdateCompanyOfficer, exports.companyPassportUpdateCompanyOfficerSuccess = _a.companyPassportUpdateCompanyOfficerSuccess, exports.companyPassportUpdateCompanyOfficerFailure = _a.companyPassportUpdateCompanyOfficerFailure, exports.companyPassportCreateCompanyOfficers = _a.companyPassportCreateCompanyOfficers, exports.companyPassportCreateCompanyOfficersSuccess = _a.companyPassportCreateCompanyOfficersSuccess, exports.companyPassportCreateCompanyOfficersFailure = _a.companyPassportCreateCompanyOfficersFailure, exports.updateCompanyPassportLocalStoreData = _a.updateCompanyPassportLocalStoreData, exports.saveIndustryAndIncDateInCompanyPassportLocalStore = _a.saveIndustryAndIncDateInCompanyPassportLocalStore, exports.saveCompanyPassportDetails = _a.saveCompanyPassportDetails, exports.fetchParentSubsidiaryManagementView = _a.fetchParentSubsidiaryManagementView, exports.updateParentSubsidiaryView = _a.updateParentSubsidiaryView, exports.updateParentSubsidiaryViewOnFailure = _a.updateParentSubsidiaryViewOnFailure, exports.updateCompanyDownloadState = _a.updateCompanyDownloadState, exports.fetchCompanyMetaData = _a.fetchCompanyMetaData, exports.updateCompanyMetaDataOnSuccess = _a.updateCompanyMetaDataOnSuccess, exports.updateCompanyMetaDataOnFailure = _a.updateCompanyMetaDataOnFailure, exports.updateMetaDataOnSendMonthEndReport = _a.updateMetaDataOnSendMonthEndReport;
765
+ _a = companyView.actions, exports.fetchCompanyPassportView = _a.fetchCompanyPassportView, exports.fetchAllCockpitViews = _a.fetchAllCockpitViews, exports.fetchOnboardingView = _a.fetchOnboardingView, exports.fetchManagementView = _a.fetchManagementView, exports.fetchSubscriptionView = _a.fetchSubscriptionView, exports.fetchPortfolioView = _a.fetchPortfolioView, exports.fetchCompanyManagementView = _a.fetchCompanyManagementView, exports.companyManagementSaveUpdates = _a.companyManagementSaveUpdates, exports.companyManagementSavePendingUpdates = _a.companyManagementSavePendingUpdates, exports.companyManagementDiscardUpdates = _a.companyManagementDiscardUpdates, exports.companyManagementSaveUpdatesSuccess = _a.companyManagementSaveUpdatesSuccess, exports.companyManagementSaveUpdatesFailure = _a.companyManagementSaveUpdatesFailure, exports.updateCompanyViewOnSuccess = _a.updateCompanyViewOnSuccess, exports.updateCompanyViewOnFailure = _a.updateCompanyViewOnFailure, exports.fetchCompanyPortfolioView = _a.fetchCompanyPortfolioView, exports.fetchZeniUsers = _a.fetchZeniUsers, exports.updateZeniUsersOnSuccess = _a.updateZeniUsersOnSuccess, exports.updateZeniUsersOnFailure = _a.updateZeniUsersOnFailure, exports.clearCompanyView = _a.clearCompanyView, exports.updateCompanyPortfolioUIState = _a.updateCompanyPortfolioUIState, exports.updateCompanyManagementUIState = _a.updateCompanyManagementUIState, exports.companyPassportSaveDataInLocalStore = _a.companyPassportSaveDataInLocalStore, exports.deleteCompanyOfficerInLocalStore = _a.deleteCompanyOfficerInLocalStore, exports.companyPassportClearDataInLocalStore = _a.companyPassportClearDataInLocalStore, exports.companyPassportUpdateCompanyDetails = _a.companyPassportUpdateCompanyDetails, exports.companyPassportUpdateCompanyDetailsSuccess = _a.companyPassportUpdateCompanyDetailsSuccess, exports.companyPassportUpdateCompanyDetailsFailure = _a.companyPassportUpdateCompanyDetailsFailure, exports.updateAccountingClassesEnabled = _a.updateAccountingClassesEnabled, exports.updateAccountingClassesEnabledSuccess = _a.updateAccountingClassesEnabledSuccess, exports.updateAccountingClassesEnabledFailure = _a.updateAccountingClassesEnabledFailure, exports.updateCompanyProductServices = _a.updateCompanyProductServices, exports.updateCompanyProductServicesSuccess = _a.updateCompanyProductServicesSuccess, exports.updateCompanyProductServicesFailure = _a.updateCompanyProductServicesFailure, exports.updateCompanyQboRealmId = _a.updateCompanyQboRealmId, exports.updateCompanyQboRealmIdSuccess = _a.updateCompanyQboRealmIdSuccess, exports.updateCompanyQboRealmIdFailure = _a.updateCompanyQboRealmIdFailure, exports.enableAccountingProjects = _a.enableAccountingProjects, exports.resumeEnableAccountingProjects = _a.resumeEnableAccountingProjects, exports.disableAccountingProjects = _a.disableAccountingProjects, exports.updateAccountingProjectsEnabledSuccess = _a.updateAccountingProjectsEnabledSuccess, exports.updateAccountingProjectsEnabledFailure = _a.updateAccountingProjectsEnabledFailure, exports.requestQboProjectsReconnect = _a.requestQboProjectsReconnect, exports.clearQboProjectsReconnectRequest = _a.clearQboProjectsReconnectRequest, exports.updateCapitalizationAccountThreshold = _a.updateCapitalizationAccountThreshold, exports.updateCapitalizationAccountThresholdSuccess = _a.updateCapitalizationAccountThresholdSuccess, exports.updateCapitalizationAccountThresholdFailure = _a.updateCapitalizationAccountThresholdFailure, exports.dismissCapitalizationOnboarding = _a.dismissCapitalizationOnboarding, exports.companyPassportUpdatePrimaryContact = _a.companyPassportUpdatePrimaryContact, exports.companyPassportUpdatePrimaryContactSuccess = _a.companyPassportUpdatePrimaryContactSuccess, exports.companyPassportUpdatePrimaryContactFailure = _a.companyPassportUpdatePrimaryContactFailure, exports.companyPassportUpdateCompanyOfficer = _a.companyPassportUpdateCompanyOfficer, exports.companyPassportUpdateCompanyOfficerSuccess = _a.companyPassportUpdateCompanyOfficerSuccess, exports.companyPassportUpdateCompanyOfficerFailure = _a.companyPassportUpdateCompanyOfficerFailure, exports.companyPassportCreateCompanyOfficers = _a.companyPassportCreateCompanyOfficers, exports.companyPassportCreateCompanyOfficersSuccess = _a.companyPassportCreateCompanyOfficersSuccess, exports.companyPassportCreateCompanyOfficersFailure = _a.companyPassportCreateCompanyOfficersFailure, exports.updateCompanyPassportLocalStoreData = _a.updateCompanyPassportLocalStoreData, exports.saveIndustryAndIncDateInCompanyPassportLocalStore = _a.saveIndustryAndIncDateInCompanyPassportLocalStore, exports.saveCompanyPassportDetails = _a.saveCompanyPassportDetails, exports.fetchParentSubsidiaryManagementView = _a.fetchParentSubsidiaryManagementView, exports.updateParentSubsidiaryView = _a.updateParentSubsidiaryView, exports.updateParentSubsidiaryViewOnFailure = _a.updateParentSubsidiaryViewOnFailure, exports.updateCompanyDownloadState = _a.updateCompanyDownloadState, exports.fetchCompanyMetaData = _a.fetchCompanyMetaData, exports.updateCompanyMetaDataOnSuccess = _a.updateCompanyMetaDataOnSuccess, exports.updateCompanyMetaDataOnFailure = _a.updateCompanyMetaDataOnFailure, exports.updateMetaDataOnSendMonthEndReport = _a.updateMetaDataOnSendMonthEndReport;
709
766
  exports.default = companyView.reducer;
@@ -0,0 +1,10 @@
1
+ import { ActionsObservable, StateObservable } from 'redux-observable';
2
+ import { Observable } from 'rxjs';
3
+ import { updateCompanies } from '../../../entity/company/companyReducer';
4
+ import { openSnackbar } from '../../../entity/snackbar/snackbarReducer';
5
+ import { updateTenantProductSettings } from '../../../entity/tenant/tenantReducer';
6
+ import { RootState } from '../../../reducer';
7
+ import { ZeniAPI } from '../../../zeniAPI';
8
+ import { updateCompanyProductServices, updateCompanyProductServicesFailure, updateCompanyProductServicesSuccess } from '../companyViewReducer';
9
+ export type ActionType = ReturnType<typeof updateCompanies> | ReturnType<typeof updateTenantProductSettings> | ReturnType<typeof openSnackbar> | ReturnType<typeof updateCompanyProductServices> | ReturnType<typeof updateCompanyProductServicesSuccess> | ReturnType<typeof updateCompanyProductServicesFailure>;
10
+ export declare const updateCompanyProductServicesEpic: (actions$: ActionsObservable<ActionType>, state$: StateObservable<RootState>, zeniAPI: ZeniAPI) => Observable<ActionType>;
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.updateCompanyProductServicesEpic = void 0;
4
+ const rxjs_1 = require("rxjs");
5
+ const operators_1 = require("rxjs/operators");
6
+ const companyReducer_1 = require("../../../entity/company/companyReducer");
7
+ const snackbarReducer_1 = require("../../../entity/snackbar/snackbarReducer");
8
+ const tenantReducer_1 = require("../../../entity/tenant/tenantReducer");
9
+ const responsePayload_1 = require("../../../responsePayload");
10
+ const companyViewReducer_1 = require("../companyViewReducer");
11
+ const companyManagementViewSelector_1 = require("../selector/companyManagementViewSelector");
12
+ const updateCompanyProductServicesEpic = (actions$, state$, zeniAPI) => actions$.pipe((0, operators_1.filter)(companyViewReducer_1.updateCompanyProductServices.match),
13
+ // Per-row admin action: an operator can enable services on several
14
+ // companies at once, so each trigger keeps its own request (matches
15
+ // updateCompanyQboRealmIdEpic).
16
+ (0, operators_1.mergeMap)((action) => {
17
+ const { companyId, services } = action.payload;
18
+ const { isBookkeepingEnabled, isBillPayEnabled, isReimbursementEnabled } = services;
19
+ const tenantId = (0, companyManagementViewSelector_1.resolveTenantIdByCompanyId)(state$.value, companyId);
20
+ // Send only the service-enable fields so the backend routes this through
21
+ // its isolated "enable services" path. Bookkeeping is a Tenant product
22
+ // flag and implies spend management; bill pay / reimbursement are Company
23
+ // feature flags.
24
+ const requestBody = {};
25
+ if (isBookkeepingEnabled != null) {
26
+ requestBody.is_book_keeping_enabled = isBookkeepingEnabled;
27
+ requestBody.is_spend_management_enabled = isBookkeepingEnabled;
28
+ }
29
+ if (isBillPayEnabled != null) {
30
+ requestBody.is_bill_pay_feature_enabled = isBillPayEnabled;
31
+ }
32
+ if (isReimbursementEnabled != null) {
33
+ requestBody.is_reimbursement_feature_enabled = isReimbursementEnabled;
34
+ }
35
+ // No fields set would fall through to the normal company PUT on the backend;
36
+ // treat it as an immediate no-op success so the In-Progress status resolves.
37
+ if (Object.keys(requestBody).length === 0) {
38
+ return (0, rxjs_1.from)([(0, companyViewReducer_1.updateCompanyProductServicesSuccess)({ companyId })]);
39
+ }
40
+ return zeniAPI
41
+ .putAndGetJSON(`${zeniAPI.apiEndPoints.tenantMicroServiceBaseUrl}/1.0/companies/${companyId}`, requestBody)
42
+ .pipe((0, operators_1.mergeMap)((response) => {
43
+ if ((0, responsePayload_1.isSuccessResponse)(response)) {
44
+ const companies = response.data?.companies ?? [];
45
+ const actions = [];
46
+ // The response normally carries the updated company; only write
47
+ // company state when it does (a 200 is still a success even with
48
+ // an empty company array).
49
+ if (companies.length > 0) {
50
+ actions.push((0, companyReducer_1.updateCompanies)({
51
+ payload: companies,
52
+ schema: {},
53
+ isUpdate: true,
54
+ }));
55
+ }
56
+ // Independent of the company array: the company PUT is the source
57
+ // of truth and this tenant-state patch is a best-effort optimistic
58
+ // sync, skipped when the tenant isn't loaded (UI relies on the
59
+ // next tenant fetch).
60
+ if (isBookkeepingEnabled != null && tenantId != null) {
61
+ actions.push((0, tenantReducer_1.updateTenantProductSettings)({
62
+ tenantId,
63
+ isBookkeepingEnabled,
64
+ isSpendManagementEnabled: isBookkeepingEnabled,
65
+ }));
66
+ }
67
+ actions.push((0, companyViewReducer_1.updateCompanyProductServicesSuccess)({ companyId }));
68
+ actions.push((0, snackbarReducer_1.openSnackbar)({
69
+ messageSection: 'product_services_update',
70
+ messageText: 'success',
71
+ type: 'success',
72
+ }));
73
+ return (0, rxjs_1.from)(actions);
74
+ }
75
+ return (0, rxjs_1.from)([
76
+ (0, companyViewReducer_1.updateCompanyProductServicesFailure)(companyId, response.status),
77
+ (0, snackbarReducer_1.openSnackbar)({
78
+ messageSection: 'product_services_update',
79
+ messageText: 'failed',
80
+ type: 'error',
81
+ }),
82
+ ]);
83
+ }), (0, operators_1.catchError)((error) => (0, rxjs_1.from)([
84
+ (0, companyViewReducer_1.updateCompanyProductServicesFailure)(companyId, (0, responsePayload_1.createZeniAPIStatus)('Unexpected error', 'Update Company Product Services errored out: ' +
85
+ (error instanceof Error
86
+ ? error.message
87
+ : JSON.stringify(error)))),
88
+ (0, snackbarReducer_1.openSnackbar)({
89
+ messageSection: 'product_services_update',
90
+ messageText: 'failed',
91
+ type: 'error',
92
+ }),
93
+ ])));
94
+ }));
95
+ exports.updateCompanyProductServicesEpic = updateCompanyProductServicesEpic;
@@ -0,0 +1,8 @@
1
+ import { ActionsObservable, StateObservable } from 'redux-observable';
2
+ import { Observable } from 'rxjs';
3
+ import { openSnackbar } from '../../../entity/snackbar/snackbarReducer';
4
+ import { RootState } from '../../../reducer';
5
+ import { ZeniAPI } from '../../../zeniAPI';
6
+ import { updateCompanyQboRealmId, updateCompanyQboRealmIdFailure, updateCompanyQboRealmIdSuccess } from '../companyViewReducer';
7
+ export type ActionType = ReturnType<typeof openSnackbar> | ReturnType<typeof updateCompanyQboRealmId> | ReturnType<typeof updateCompanyQboRealmIdSuccess> | ReturnType<typeof updateCompanyQboRealmIdFailure>;
8
+ export declare const updateCompanyQboRealmIdEpic: (actions$: ActionsObservable<ActionType>, state$: StateObservable<RootState>, zeniAPI: ZeniAPI) => Observable<ActionType>;
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.updateCompanyQboRealmIdEpic = void 0;
4
+ const rxjs_1 = require("rxjs");
5
+ const operators_1 = require("rxjs/operators");
6
+ const snackbarReducer_1 = require("../../../entity/snackbar/snackbarReducer");
7
+ const responsePayload_1 = require("../../../responsePayload");
8
+ const companyViewReducer_1 = require("../companyViewReducer");
9
+ const companyManagementViewSelector_1 = require("../selector/companyManagementViewSelector");
10
+ const updateCompanyQboRealmIdEpic = (actions$, state$, zeniAPI) => actions$.pipe((0, operators_1.filter)(companyViewReducer_1.updateCompanyQboRealmId.match),
11
+ // Per-row admin action: several rows can be in flight at once, so each
12
+ // trigger keeps its own request instead of cancelling the previous one.
13
+ (0, operators_1.mergeMap)((action) => {
14
+ const { companyId, qboRealmId } = action.payload;
15
+ const tenantId = (0, companyManagementViewSelector_1.resolveTenantIdByCompanyId)(state$.value, companyId);
16
+ if (tenantId == null) {
17
+ return (0, rxjs_1.from)([
18
+ (0, companyViewReducer_1.updateCompanyQboRealmIdFailure)(companyId, (0, responsePayload_1.createZeniAPIStatus)('Unexpected error', `No tenant found for companyId: ${companyId}`)),
19
+ (0, snackbarReducer_1.openSnackbar)({
20
+ messageSection: 'qbo_realm_id_update',
21
+ messageText: 'failed',
22
+ type: 'error',
23
+ }),
24
+ ]);
25
+ }
26
+ // The FE route reads the target tenant from the zeni-tenant-id header,
27
+ // which overrides the operator's ambient tenant for this request only.
28
+ // qboRealmId omitted -> null clears the pin; a value overwrites it.
29
+ return zeniAPI
30
+ .putAndGetJSON(`${zeniAPI.apiEndPoints.tenantMicroServiceBaseUrl}/1.0/qbo-realm-id`, { qbo_realm_id: qboRealmId ?? null }, { 'zeni-tenant-id': tenantId })
31
+ .pipe((0, operators_1.mergeMap)((response) => {
32
+ if ((0, responsePayload_1.isSuccessResponse)(response)) {
33
+ return (0, rxjs_1.from)([
34
+ (0, companyViewReducer_1.updateCompanyQboRealmIdSuccess)({ companyId }),
35
+ (0, snackbarReducer_1.openSnackbar)({
36
+ messageSection: 'qbo_realm_id_update',
37
+ messageText: 'success',
38
+ type: 'success',
39
+ }),
40
+ ]);
41
+ }
42
+ return (0, rxjs_1.from)([
43
+ (0, companyViewReducer_1.updateCompanyQboRealmIdFailure)(companyId, response.status),
44
+ (0, snackbarReducer_1.openSnackbar)({
45
+ messageSection: 'qbo_realm_id_update',
46
+ messageText: 'failed',
47
+ type: 'error',
48
+ }),
49
+ ]);
50
+ }), (0, operators_1.catchError)((error) => (0, rxjs_1.from)([
51
+ (0, companyViewReducer_1.updateCompanyQboRealmIdFailure)(companyId, (0, responsePayload_1.createZeniAPIStatus)('Unexpected error', 'Update Company QBO realm id errored out: ' +
52
+ (error instanceof Error
53
+ ? error.message
54
+ : JSON.stringify(error)))),
55
+ (0, snackbarReducer_1.openSnackbar)({
56
+ messageSection: 'qbo_realm_id_update',
57
+ messageText: 'failed',
58
+ type: 'error',
59
+ }),
60
+ ])));
61
+ }));
62
+ exports.updateCompanyQboRealmIdEpic = updateCompanyQboRealmIdEpic;
@@ -38,3 +38,6 @@ export declare const getTotalRecurringRevenue: (companies: CompanyView[]) => {
38
38
  currencySymbol: string;
39
39
  };
40
40
  };
41
+ export declare function getCompanyProductServicesUpdateStatus(state: RootState, companyId: ID): FetchStateAndError;
42
+ export declare function getCompanyQboRealmIdUpdateStatus(state: RootState, companyId: ID): FetchStateAndError;
43
+ export declare function resolveTenantIdByCompanyId(state: RootState, companyId: ID): ID | undefined;
@@ -4,10 +4,14 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.getTotalRecurringRevenue = exports.getAddonListZeniSku = exports.getPlanListZeniSku = exports.getCompanyManagementView = exports.getManagementViewFromCompanyIds = void 0;
7
+ exports.getCompanyProductServicesUpdateStatus = getCompanyProductServicesUpdateStatus;
8
+ exports.getCompanyQboRealmIdUpdateStatus = getCompanyQboRealmIdUpdateStatus;
9
+ exports.resolveTenantIdByCompanyId = resolveTenantIdByCompanyId;
7
10
  const toolkit_1 = require("@reduxjs/toolkit");
8
11
  const get_1 = __importDefault(require("lodash/get"));
9
12
  const orderBy_1 = __importDefault(require("lodash/orderBy"));
10
13
  const sortOrderPayload_1 = require("../../../commonPayloadTypes/sortOrderPayload");
14
+ const companySelector_1 = require("../../../entity/company/companySelector");
11
15
  const customerSatisfactionState_1 = require("../../../entity/customerSatisfaction/customerSatisfactionState");
12
16
  const userSelector_1 = require("../../../entity/user/userSelector");
13
17
  const zeniDayJS_1 = require("../../../zeniDayJS");
@@ -131,6 +135,29 @@ const getCategoryValueForCompany = (key, company) => {
131
135
  if (key === 'annualRecurringRevenue' || key === 'monthlyRecurringRevenue') {
132
136
  return company.primarySubscription?.summary.summary[key].amount.toString();
133
137
  }
138
+ if (key === 'productVerticals') {
139
+ const featuresActivationInfo = company.company.company.featuresActivationInfo;
140
+ const enabledVerticals = [];
141
+ if (featuresActivationInfo?.isBookkeepingEnabled === true) {
142
+ enabledVerticals.push('bookkeeping');
143
+ }
144
+ if (featuresActivationInfo?.isBillPayFeatureEnabled === true) {
145
+ enabledVerticals.push('billPay');
146
+ }
147
+ if (featuresActivationInfo?.isReimbursementFeatureEnabled === true) {
148
+ enabledVerticals.push('reimbursement');
149
+ }
150
+ if (featuresActivationInfo?.isTaxEnabled === true) {
151
+ enabledVerticals.push('tax');
152
+ }
153
+ if (featuresActivationInfo?.isPayrollEnabled === true) {
154
+ enabledVerticals.push('payroll');
155
+ }
156
+ if (featuresActivationInfo?.isCfoEnabled === true) {
157
+ enabledVerticals.push('cfo');
158
+ }
159
+ return enabledVerticals;
160
+ }
134
161
  return company.company.company.managementInfo[key];
135
162
  };
136
163
  const applyAdvancedFiltersOnCompaniesList = (allCompanies, filters, filteredCompanies = [], index = 0) => {
@@ -201,6 +228,8 @@ const sortAndFilterCompanies = (sortKey, sortOrder, filterText, companies, userS
201
228
  updatedCompanies.forEach((company) => {
202
229
  switch (sortKey) {
203
230
  case 'companyName':
231
+ case 'productVerticals':
232
+ case 'realmId':
204
233
  companiesWithSortKeyValue.push(company);
205
234
  break;
206
235
  case 'status':
@@ -436,6 +465,12 @@ const sortAndFilterCompanies = (sortKey, sortOrder, filterText, companies, userS
436
465
  primarySortValue = (company.company.company.companyInfo.bookCloseDate ??
437
466
  (0, zeniDayJS_1.date)('1970-01-01T00:00:00.000Z')).valueOf();
438
467
  break;
468
+ case 'productVerticals':
469
+ case 'realmId':
470
+ // Not a meaningful sort axis (both are cockpit action columns);
471
+ // keep stable order rather than falling through to the status/group
472
+ // default sort.
473
+ break;
439
474
  case 'status':
440
475
  default: {
441
476
  isMultiSortApplicable = true;
@@ -490,3 +525,23 @@ const getTotalRecurringRevenue = (companies) => companies.reduce((prev, curr) =>
490
525
  },
491
526
  });
492
527
  exports.getTotalRecurringRevenue = getTotalRecurringRevenue;
528
+ function getCompanyProductServicesUpdateStatus(state, companyId) {
529
+ return (state.companyViewState.managementView
530
+ .productServicesUpdateStatusByCompanyId[companyId] ?? {
531
+ fetchState: 'Not-Started',
532
+ error: undefined,
533
+ });
534
+ }
535
+ function getCompanyQboRealmIdUpdateStatus(state, companyId) {
536
+ return (state.companyViewState.managementView.qboRealmIdUpdateStatusByCompanyId[companyId] ?? {
537
+ fetchState: 'Not-Started',
538
+ error: undefined,
539
+ });
540
+ }
541
+ // Cockpit populates companyState (with a companyId->tenantId mapping) but not
542
+ // tenantState, so resolve from company first and fall back to tenant.
543
+ function resolveTenantIdByCompanyId(state, companyId) {
544
+ return ((0, companySelector_1.getCompanyByCompanyId)(state.companyState, companyId)?.company.companyInfo
545
+ .tenantId ??
546
+ Object.values(state.tenantState.tenantsById).find((tenant) => tenant?.companyId === companyId)?.tenantId);
547
+ }
@@ -4,9 +4,9 @@ import { SubscriptionViewSortKey } from '../../subscriptionView/types/subscripti
4
4
  import { FilterCategoryValueType } from '../helpers/cockpitHelpers';
5
5
  import { CockpitDownloadTabsID, CockpitTabsFileType } from './cockpitTabsID';
6
6
  export declare const toPortfolioSortKeyType: (v: string) => "expenses" | "companyName" | "runway" | "cashBalance" | "revenues" | "netIncome";
7
- export declare const toManagementSortKeyType: (v: string) => "status" | "bookCloseDate" | "companyName" | "group" | "taxStatus" | "controller" | "preparer" | "reviewer" | "annualRecurringRevenue" | "monthlyRecurringRevenue" | "notes" | "task" | "plans" | "customerSuccessManager" | "apAnalyst" | "reportSent" | "taxLead" | "satisfaction";
7
+ export declare const toManagementSortKeyType: (v: string) => "status" | "bookCloseDate" | "companyName" | "group" | "taxStatus" | "controller" | "preparer" | "reviewer" | "annualRecurringRevenue" | "monthlyRecurringRevenue" | "realmId" | "notes" | "task" | "plans" | "productVerticals" | "customerSuccessManager" | "apAnalyst" | "reportSent" | "taxLead" | "satisfaction";
8
8
  export declare const toOnboardingSortKeyType: (v: string) => "companyName" | "businessVerified" | "identityVerified" | "bankAccountLinked" | "customerCreated" | "groupCreated" | "qboLinked" | "notes" | "enroller" | "invite" | "latestCreated";
9
- export declare const toHealthSortKeyType: (v: string) => "companyName" | "group" | "runway" | "controller" | "monthlyRecurringRevenue" | "companyEngagementMetricsUpdatedAt" | "customerSatisfactionScore" | "externalProductServiceExposure" | "netPromoterScore" | "customerSuccessManager" | "lastReportSent" | "issues" | "productVerticals" | "churnProbability" | "subscriptionDate" | "renewalDate" | "dashboardLastSeen" | "lastEngagement";
9
+ export declare const toHealthSortKeyType: (v: string) => "companyName" | "group" | "runway" | "controller" | "monthlyRecurringRevenue" | "companyEngagementMetricsUpdatedAt" | "customerSatisfactionScore" | "externalProductServiceExposure" | "netPromoterScore" | "productVerticals" | "customerSuccessManager" | "lastReportSent" | "issues" | "churnProbability" | "subscriptionDate" | "renewalDate" | "dashboardLastSeen" | "lastEngagement";
10
10
  export declare const toTaskManagerSortKeyType: (v: string) => "status" | "dueDate" | "name" | "priority" | "createdBy" | "tags" | "taskName" | "assignee";
11
11
  export type PortfolioViewSortKey = ReturnType<typeof toPortfolioSortKeyType>;
12
12
  export type ManagementViewSortKey = ReturnType<typeof toManagementSortKeyType>;
@@ -14,7 +14,7 @@ export type OnboardingViewSortKey = ReturnType<typeof toOnboardingSortKeyType>;
14
14
  export type HealthViewSortKey = ReturnType<typeof toHealthSortKeyType>;
15
15
  export type TaskManagerViewSortKey = ReturnType<typeof toTaskManagerSortKeyType>;
16
16
  export type AiAccountantFilterCategoryField = 'enrollmentStatus';
17
- export type ManagementViewFilterCategoryField = 'controllerUserIds' | 'customerSuccessManagerUserIds' | 'preparerUserIds' | 'reviewerUserIds' | 'apAnalystUserIds' | 'taxLeadUserIds' | 'companyGroupId' | 'taxStatusCode' | 'statusCode' | 'plans' | 'annualRecurringRevenue' | 'monthlyRecurringRevenue' | 'customerSatisfaction' | 'zeniSatisfaction';
17
+ export type ManagementViewFilterCategoryField = 'controllerUserIds' | 'customerSuccessManagerUserIds' | 'preparerUserIds' | 'reviewerUserIds' | 'apAnalystUserIds' | 'taxLeadUserIds' | 'companyGroupId' | 'taxStatusCode' | 'statusCode' | 'plans' | 'productVerticals' | 'annualRecurringRevenue' | 'monthlyRecurringRevenue' | 'customerSatisfaction' | 'zeniSatisfaction';
18
18
  export type SubscriptionViewFilterCategoryField = 'controllerUserIds' | 'statusCode' | 'recommendedActionCode' | 'subscriptionPlans' | 'subscriptionAddOns' | 'avg2MonthExpenses' | 'slabLowerLimit' | 'slabUpperLimit' | 'monthlyRecurringRevenue';
19
19
  export type PortfolioViewFilterCategoryField = 'netBurnOrIncome' | 'cashPosition' | 'income' | 'expenses' | 'runway';
20
20
  export type HealthMonitorViewFilterCategoryField = 'verticalProductServices' | 'runway' | 'netPromoterScore' | 'customerSatisfactionScore' | 'churnProbabilityPercentage' | 'controller' | 'customerSuccessManager' | 'lastReportSent' | 'subscriptionStartDate' | 'subscriptionRenewalDate' | 'externalProductServiceExposure' | 'companyEngagementMetricsUpdatedAt' | 'companyGroupId' | 'monthlyRecurringRevenue';
@@ -35,6 +35,10 @@ export interface CockpitFilters {
35
35
  export declare const MANAGEMENT_STATUS_CODES: string[];
36
36
  export declare const toManagementStatusCodeType: (v: string) => string;
37
37
  export type ManagementStatusCodeType = ReturnType<typeof toManagementStatusCodeType>;
38
+ export declare const ALL_PRODUCT_VERTICALS: readonly ["bookkeeping", "billPay", "reimbursement", "tax", "payroll", "cfo"];
39
+ export declare const toProductVertical: (v: string) => "reimbursement" | "billPay" | "bookkeeping" | "tax" | "payroll" | "cfo";
40
+ export type ProductVertical = ReturnType<typeof toProductVertical>;
41
+ export declare const toProductVerticalStrict: (v: string | null | undefined) => ProductVertical | undefined;
38
42
  export interface FilterCombinationsByTabs {
39
43
  filters: CockpitFilters;
40
44
  filterText: string;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.toManagementStatusCodeType = exports.MANAGEMENT_STATUS_CODES = exports.toTaskManagerSortKeyType = exports.toHealthSortKeyType = exports.toOnboardingSortKeyType = exports.toManagementSortKeyType = exports.toPortfolioSortKeyType = void 0;
3
+ exports.toProductVerticalStrict = exports.toProductVertical = exports.ALL_PRODUCT_VERTICALS = exports.toManagementStatusCodeType = exports.MANAGEMENT_STATUS_CODES = exports.toTaskManagerSortKeyType = exports.toHealthSortKeyType = exports.toOnboardingSortKeyType = exports.toManagementSortKeyType = exports.toPortfolioSortKeyType = void 0;
4
4
  const stringToUnion_1 = require("../../../commonStateTypes/stringToUnion");
5
5
  const ALL_PORTFOLIO_SORT_KEYS = [
6
6
  'companyName',
@@ -16,6 +16,8 @@ const ALL_MANAGEMENT_SORT_KEYS = [
16
16
  'status',
17
17
  'group',
18
18
  'plans',
19
+ 'productVerticals',
20
+ 'realmId',
19
21
  'controller',
20
22
  'customerSuccessManager',
21
23
  'reviewer',
@@ -92,3 +94,15 @@ exports.MANAGEMENT_STATUS_CODES = [
92
94
  ];
93
95
  const toManagementStatusCodeType = (v) => (0, stringToUnion_1.stringToUnion)(v, exports.MANAGEMENT_STATUS_CODES);
94
96
  exports.toManagementStatusCodeType = toManagementStatusCodeType;
97
+ exports.ALL_PRODUCT_VERTICALS = [
98
+ 'bookkeeping',
99
+ 'billPay',
100
+ 'reimbursement',
101
+ 'tax',
102
+ 'payroll',
103
+ 'cfo',
104
+ ];
105
+ const toProductVertical = (v) => (0, stringToUnion_1.stringToUnion)(v, exports.ALL_PRODUCT_VERTICALS);
106
+ exports.toProductVertical = toProductVertical;
107
+ const toProductVerticalStrict = (v) => (0, stringToUnion_1.stringToUnionStrict)(v ?? '', exports.ALL_PRODUCT_VERTICALS);
108
+ exports.toProductVerticalStrict = toProductVerticalStrict;
@@ -4,6 +4,8 @@ import { CompanyManagementInfo } from '../../../entity/company/companyStateTypes
4
4
  import { CockpitFilters, ManagementViewSortKey } from './cockpitTypes';
5
5
  import { CommonState } from './commonState';
6
6
  export interface CompanyManagementViewState extends CommonState {
7
+ productServicesUpdateStatusByCompanyId: Record<ID, FetchStateAndError>;
8
+ qboRealmIdUpdateStatusByCompanyId: Record<ID, FetchStateAndError>;
7
9
  uiState: ManagementUIState;
8
10
  updatesByCompanyId: Record<ID, CompanyManagementUpdateState>;
9
11
  }
@@ -24,6 +24,8 @@ function getCompanyManagementPendingUpdates(companyId, state) {
24
24
  exports.initialCompanyManagementView = {
25
25
  ...commonState_1.initialCommonState,
26
26
  updatesByCompanyId: {},
27
+ productServicesUpdateStatusByCompanyId: {},
28
+ qboRealmIdUpdateStatusByCompanyId: {},
27
29
  uiState: {
28
30
  sortKey: 'status',
29
31
  sortOrder: 'ascending',
@@ -39,7 +39,7 @@ export declare const getLineItemsByTransactionsIdsFromResponse: (transactions: S
39
39
  export declare const getLineItemsByTransactionIdsFromLocalData: (transactionLocalData: TransactionReviewLocalDataSelectorView[], selectedTab: TransactionsTab) => Record<ID, string[]>;
40
40
  export declare const mergeTabSpecificLineItems: (currentTabSpecificLineItems: TabSpecificLineItems, selectedTab: TransactionsTab, newLineItems: TabSpecificLineItems) => TabSpecificLineItems;
41
41
  export declare const getSnackbarMessageForTransactionReview: (updatedCount: number, failedCount: number, categorizedCount: number) => {
42
- messageSection: "reconcile" | "save_reconcile_for_later" | "common" | "transactionDetails_updatingPastTransactions" | "transactionDetails_transactionUpdated" | "cockpit_month_end_email_sent" | "cockpit_month_end_email_save" | "cockpit_month_end_email_attachment_upload" | "je_bill_link" | "je_posted" | "audit_score_updated" | "people_invite_people" | "people_invite_multiple_people" | "people_delete_person" | "people_update_person" | "reimbursement_updated" | "reimbursement_deleted" | "reimbursement_cancelled_deleted" | "reimbursement_cancelled" | "reimbursement_approved" | "reimbursement_rejected" | "reimbursement_sent_for_approval" | "account_added" | "business_verification_save" | "business_verification_submit" | "business_verification_from_bills_submit" | "plaid_connection" | "unlink_deposit_account" | "reimbursement_setup" | "reimbursement_approval_create" | "reimbursement_duplicate_approval_create" | "reimbursement_approval_update" | "reimbursement_duplicate_approval_update" | "reimbursement_approval_delete" | "reimbursement_approval_reorder" | "reimbursement_create_mileage" | "reimbursement_update_mileage" | "reimbursement_accept_term" | "reimbursement_accept_employee_term" | "reimbursement_bulk_submit" | "reimbursement_bulk_processed" | "bill_pay_setup" | "zeni_accounts_setup" | "bill_pay_approval_create" | "bill_pay_duplicate_approval_create" | "bill_pay_approval_update" | "bill_pay_duplicate_approval_update" | "bill_pay_approval_delete" | "bill_pay_approval_reorder" | "bill_pay_updated" | "bill_pay_deleted" | "bill_pay_cancelled_deleted" | "bill_pay_cancelled" | "bill_pay_approved" | "real_time_approver_added" | "bill_pay_rejected" | "bill_pay_sent_for_approval" | "bill_pay_accept_term" | "bill_pay_bulk_submit" | "bill_pay_bulk_processed" | "bill_pay_refund" | "bill_pay_retry" | "bill_pay_marked_as_paid" | "zeni_account_accept_term" | "update_vendor" | "data_refresh_update" | "delete_bank_account" | "create_bank_account" | "create_bank_account_ach" | "create_bank_account_wire" | "create_bank_account_international" | "transfer_money" | "update_zeni_account_nickname" | "create_checking_account" | "deposit_check" | "create_vendor" | "onboarding_customer_view" | "onboarding_customer_view_complete" | "onboarding_customer_identity_verification_save" | "onboarding_customer_identity_verification_submit" | "onboarding_customer_business_verification_save" | "onboarding_customer_business_verification_submit" | "retry_bank_account_connection" | "dashboard_invite_sent" | "onboarding_info_saved" | "approve_original_merchant" | "approve_global_merchant" | "reject_global_merchant" | "create_global_merchant" | "fetch_global_merchant_no_recommendation" | "save_vendor_renamed" | "save_vendor_sent_for_review" | "save_vendor_marked_as_employee" | "save_vendor_marked_as_local_contractor" | "charge_card_setup" | "charge_card_accept_term" | "charge_card_receipt_upload" | "charge_card_resend_invite" | "charge_card_revoke_invite" | "card_policy_created" | "card_policy_updated" | "card_policy_deleted" | "charge_card_update_limit" | "charge_cards_update_limit" | "close_charge_card" | "lock_charge_card" | "lock_charge_card_card_user" | "lock_charge_cards" | "unlock_charge_card" | "unlock_charge_card_card_user" | "unlock_charge_cards" | "close_charge_cards" | "revoke_invite_charge_cards" | "charge_card_express_interest" | "create_schedule" | "save_schedule" | "delete_schedule" | "ignore_schedule" | "save_task_detail" | "fetch_task_detail" | "delete_task" | "archive_task" | "snooze_task" | "unsnooze_task" | "create_tag" | "delete_tag" | "update_charge_card" | "update_charge_card_name" | "update_charge_card_name_card_user" | "issue_charge_card" | "issue_charge_cards" | "notification_settings_saved" | "referral_invite_sent" | "notification_mark_as_read" | "mark_as_complete_schedule" | "cancel_journal_entry" | "settings_accounting_accounts_updated" | "create_card_setup" | "confirm_card_setup" | "add_card_payment_source" | "fetch_payment_sources" | "task_assigned_toast_notification" | "task_due_tomorrow_toast_notification" | "task_deleted_toast_notification" | "task_archived_toast_notification" | "task_overdue_toast_notification" | "task_overdue_toast_notification_creator" | "task_notification_count" | "task_activities_toast_notification" | "task_created_toast_notification" | "task_group_creation_success" | "task_group_deletion_success" | "task_group_update_success" | "primary_funding_account_updated" | "task_time_spent_validation" | "missing_receipts_attachment" | "flux_analysis_unreviewed" | "flux_analysis_reviewed" | "receipt_match" | "receipts_upload" | "receipts_bulk_match" | "billing_address_view" | "express_pay_submit" | "exclude_transaction" | "recon_transaction_categorize" | "recon_transaction_match" | "update_debit_card_pin_attempt" | "set_debit_card_pin" | "ai_cfo_create_session_and_submit" | "ai_cfo_chat_session_deleted" | "charge_card_auto_pay_enable" | "charge_card_auto_pay_disable" | "treasury_setup" | "treasury_accept_term" | "treasury_transfer_money" | "treasury_transfer_money_failed" | "auto_transfer_rule_create" | "auto_transfer_rule_update" | "auto_transfer_rule_delete" | "auto_transfer_rule_pause" | "auto_transfer_rule_resume" | "treasury_update_portfolio_allocation" | "send_email_magic_link_to_user" | "complete_profile_done" | "create_transfer_entry" | "reports_resync" | "invalid_phone_number" | "transactions_categorized_updated_failed" | "transaction_categorized_updated_failed" | "transactionsCategorized_transactionsUpdated" | "transactionsCategorized_transactionUpdated" | "transactionCategorized_transactionsUpdated" | "transactionCategorized_transactionUpdated" | "transactionsCategorized_transactionsFailed" | "transactionsCategorized_transactionFailed" | "transactionCategorized_transactionsFailed" | "transactionCategorized_transactionFailed" | "transactionsUpdated_transactionsFailed" | "transactionsUpdated_transactionFailed" | "transactionUpdated_transactionsFailed" | "transactionUpdated_transactionFailed" | "transactionsCategorized_transactionsUpdated_transactionsFailed" | "transactionsCategorized_transactionsUpdated_transactionFailed" | "transactionsCategorized_transactionUpdated_transactionsFailed" | "transactionCategorized_transactionsUpdated_transactionsFailed" | "transactionsCategorized_transactionUpdated_transactionFailed" | "transactionCategorized_transactionsUpdated_transactionFailed" | "transactionCategorized_transactionUpdated_transactionsFailed" | "transactionCategorized_transactionUpdated_transactionFailed" | "accounting_classes_enabled_update" | "accounting_projects_enabled_update" | "accounting_projects_qbo_not_enabled" | "capitalization_threshold_update" | "account_excluded_from_reconciliation" | "account_included_in_reconciliation" | "statement_parsing_in_progress" | "statement_parsing_complete" | "ai_accountant_trigger_job" | "oauth_consent_approve" | "oauth_consent_invalid_request" | "credit_agent_update_profile" | "credit_agent_save_macro" | "credit_agent_schedule_cron" | "create_sub_task" | "qbo_connection_already_linked" | "qbo_connection_failed" | "accounting_projects_qbo_reconnect_failed" | "invoicing_dunning_case_resolved" | "invoicing_dunning_retry" | "invoicing_dunning_cancel" | "invoicing_dunning_settings_save" | "invoicing_qbo_backfill" | "invoicing_qbo_sync_health_retry" | "invoicing_qbo_settings_save" | "invoicing_branding_save" | "invoicing_discount_archive" | "invoicing_discount_unarchive" | "invoicing_discount_delete" | "invoicing_invoice_reminder_sent" | "invoicing_invoice_regenerated" | "invoicing_invoice_voided" | "invoicing_catalog_item_saved" | "invoicing_customer_saved" | "invoicing_subscription_saved" | "invoicing_coupon_saved" | "invoicing_invoice_saved" | "invoicing_credit_note_saved" | "invoicing_payment_recorded" | "invoicing_subscription_activated" | "invoicing_subscription_cancellation_removed" | "invoicing_subscription_cancelled" | "invoicing_subscription_non_renewing" | "invoicing_subscription_paused" | "invoicing_subscription_reactivated" | "invoicing_subscription_resumed" | "invoicing_subscription_term_end_changed";
42
+ messageSection: "reconcile" | "save_reconcile_for_later" | "common" | "transactionDetails_updatingPastTransactions" | "transactionDetails_transactionUpdated" | "cockpit_month_end_email_sent" | "cockpit_month_end_email_save" | "cockpit_month_end_email_attachment_upload" | "je_bill_link" | "je_posted" | "audit_score_updated" | "people_invite_people" | "people_invite_multiple_people" | "people_delete_person" | "people_update_person" | "reimbursement_updated" | "reimbursement_deleted" | "reimbursement_cancelled_deleted" | "reimbursement_cancelled" | "reimbursement_approved" | "reimbursement_rejected" | "reimbursement_sent_for_approval" | "account_added" | "business_verification_save" | "business_verification_submit" | "business_verification_from_bills_submit" | "plaid_connection" | "unlink_deposit_account" | "reimbursement_setup" | "reimbursement_approval_create" | "reimbursement_duplicate_approval_create" | "reimbursement_approval_update" | "reimbursement_duplicate_approval_update" | "reimbursement_approval_delete" | "reimbursement_approval_reorder" | "reimbursement_create_mileage" | "reimbursement_update_mileage" | "reimbursement_accept_term" | "reimbursement_accept_employee_term" | "reimbursement_bulk_submit" | "reimbursement_bulk_processed" | "bill_pay_setup" | "zeni_accounts_setup" | "bill_pay_approval_create" | "bill_pay_duplicate_approval_create" | "bill_pay_approval_update" | "bill_pay_duplicate_approval_update" | "bill_pay_approval_delete" | "bill_pay_approval_reorder" | "bill_pay_updated" | "bill_pay_deleted" | "bill_pay_cancelled_deleted" | "bill_pay_cancelled" | "bill_pay_approved" | "real_time_approver_added" | "bill_pay_rejected" | "bill_pay_sent_for_approval" | "bill_pay_accept_term" | "bill_pay_bulk_submit" | "bill_pay_bulk_processed" | "bill_pay_refund" | "bill_pay_retry" | "bill_pay_marked_as_paid" | "zeni_account_accept_term" | "update_vendor" | "data_refresh_update" | "delete_bank_account" | "create_bank_account" | "create_bank_account_ach" | "create_bank_account_wire" | "create_bank_account_international" | "transfer_money" | "update_zeni_account_nickname" | "create_checking_account" | "deposit_check" | "create_vendor" | "onboarding_customer_view" | "onboarding_customer_view_complete" | "onboarding_customer_identity_verification_save" | "onboarding_customer_identity_verification_submit" | "onboarding_customer_business_verification_save" | "onboarding_customer_business_verification_submit" | "retry_bank_account_connection" | "dashboard_invite_sent" | "onboarding_info_saved" | "approve_original_merchant" | "approve_global_merchant" | "reject_global_merchant" | "create_global_merchant" | "fetch_global_merchant_no_recommendation" | "save_vendor_renamed" | "save_vendor_sent_for_review" | "save_vendor_marked_as_employee" | "save_vendor_marked_as_local_contractor" | "charge_card_setup" | "charge_card_accept_term" | "charge_card_receipt_upload" | "charge_card_resend_invite" | "charge_card_revoke_invite" | "card_policy_created" | "card_policy_updated" | "card_policy_deleted" | "charge_card_update_limit" | "charge_cards_update_limit" | "close_charge_card" | "lock_charge_card" | "lock_charge_card_card_user" | "lock_charge_cards" | "unlock_charge_card" | "unlock_charge_card_card_user" | "unlock_charge_cards" | "close_charge_cards" | "revoke_invite_charge_cards" | "charge_card_express_interest" | "create_schedule" | "save_schedule" | "delete_schedule" | "ignore_schedule" | "save_task_detail" | "fetch_task_detail" | "delete_task" | "archive_task" | "snooze_task" | "unsnooze_task" | "create_tag" | "delete_tag" | "update_charge_card" | "update_charge_card_name" | "update_charge_card_name_card_user" | "issue_charge_card" | "issue_charge_cards" | "notification_settings_saved" | "referral_invite_sent" | "notification_mark_as_read" | "mark_as_complete_schedule" | "cancel_journal_entry" | "settings_accounting_accounts_updated" | "create_card_setup" | "confirm_card_setup" | "add_card_payment_source" | "fetch_payment_sources" | "task_assigned_toast_notification" | "task_due_tomorrow_toast_notification" | "task_deleted_toast_notification" | "task_archived_toast_notification" | "task_overdue_toast_notification" | "task_overdue_toast_notification_creator" | "task_notification_count" | "task_activities_toast_notification" | "task_created_toast_notification" | "task_group_creation_success" | "task_group_deletion_success" | "task_group_update_success" | "primary_funding_account_updated" | "task_time_spent_validation" | "missing_receipts_attachment" | "flux_analysis_unreviewed" | "flux_analysis_reviewed" | "receipt_match" | "receipts_upload" | "receipts_bulk_match" | "billing_address_view" | "express_pay_submit" | "exclude_transaction" | "recon_transaction_categorize" | "recon_transaction_match" | "update_debit_card_pin_attempt" | "set_debit_card_pin" | "ai_cfo_create_session_and_submit" | "ai_cfo_chat_session_deleted" | "charge_card_auto_pay_enable" | "charge_card_auto_pay_disable" | "treasury_setup" | "treasury_accept_term" | "treasury_transfer_money" | "treasury_transfer_money_failed" | "auto_transfer_rule_create" | "auto_transfer_rule_update" | "auto_transfer_rule_delete" | "auto_transfer_rule_pause" | "auto_transfer_rule_resume" | "treasury_update_portfolio_allocation" | "send_email_magic_link_to_user" | "complete_profile_done" | "create_transfer_entry" | "reports_resync" | "invalid_phone_number" | "transactions_categorized_updated_failed" | "transaction_categorized_updated_failed" | "transactionsCategorized_transactionsUpdated" | "transactionsCategorized_transactionUpdated" | "transactionCategorized_transactionsUpdated" | "transactionCategorized_transactionUpdated" | "transactionsCategorized_transactionsFailed" | "transactionsCategorized_transactionFailed" | "transactionCategorized_transactionsFailed" | "transactionCategorized_transactionFailed" | "transactionsUpdated_transactionsFailed" | "transactionsUpdated_transactionFailed" | "transactionUpdated_transactionsFailed" | "transactionUpdated_transactionFailed" | "transactionsCategorized_transactionsUpdated_transactionsFailed" | "transactionsCategorized_transactionsUpdated_transactionFailed" | "transactionsCategorized_transactionUpdated_transactionsFailed" | "transactionCategorized_transactionsUpdated_transactionsFailed" | "transactionsCategorized_transactionUpdated_transactionFailed" | "transactionCategorized_transactionsUpdated_transactionFailed" | "transactionCategorized_transactionUpdated_transactionsFailed" | "transactionCategorized_transactionUpdated_transactionFailed" | "accounting_classes_enabled_update" | "accounting_projects_enabled_update" | "accounting_projects_qbo_not_enabled" | "capitalization_threshold_update" | "account_excluded_from_reconciliation" | "account_included_in_reconciliation" | "statement_parsing_in_progress" | "statement_parsing_complete" | "ai_accountant_trigger_job" | "oauth_consent_approve" | "oauth_consent_invalid_request" | "credit_agent_update_profile" | "credit_agent_save_macro" | "credit_agent_schedule_cron" | "create_sub_task" | "qbo_connection_already_linked" | "qbo_connection_failed" | "accounting_projects_qbo_reconnect_failed" | "product_services_update" | "qbo_realm_id_update" | "invoicing_dunning_case_resolved" | "invoicing_dunning_retry" | "invoicing_dunning_cancel" | "invoicing_dunning_settings_save" | "invoicing_qbo_backfill" | "invoicing_qbo_sync_health_retry" | "invoicing_qbo_settings_save" | "invoicing_branding_save" | "invoicing_discount_archive" | "invoicing_discount_unarchive" | "invoicing_discount_delete" | "invoicing_invoice_reminder_sent" | "invoicing_invoice_regenerated" | "invoicing_invoice_voided" | "invoicing_catalog_item_saved" | "invoicing_customer_saved" | "invoicing_subscription_saved" | "invoicing_coupon_saved" | "invoicing_invoice_saved" | "invoicing_credit_note_saved" | "invoicing_payment_recorded" | "invoicing_subscription_activated" | "invoicing_subscription_cancellation_removed" | "invoicing_subscription_cancelled" | "invoicing_subscription_non_renewing" | "invoicing_subscription_paused" | "invoicing_subscription_reactivated" | "invoicing_subscription_resumed" | "invoicing_subscription_term_end_changed";
43
43
  messageText: "notification" | "failed" | "success";
44
44
  type: "error" | "success" | "info";
45
45
  variables: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zeniai/client-epic-state",
3
- "version": "5.1.88",
3
+ "version": "5.1.89",
4
4
  "description": "Shared module between Web & Mobile containing required abstractions for state management, async network communication. ",
5
5
  "main": "lib/index.js",
6
6
  "module": "lib/esm/index.js",