@zeniai/client-epic-state 5.2.25 → 5.2.26

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 (86) hide show
  1. package/lib/entity/aiCfo/aiCfoPayload.d.ts +0 -11
  2. package/lib/entity/aiCfo/aiCfoReducer.js +1 -32
  3. package/lib/entity/aiCfo/aiCfoState.d.ts +0 -14
  4. package/lib/entity/file/fileState.d.ts +3 -3
  5. package/lib/entity/file/fileState.js +0 -2
  6. package/lib/entity/invoicing/creditNote/creditNotePayload.d.ts +1 -0
  7. package/lib/entity/invoicing/creditNote/creditNotePayload.js +1 -0
  8. package/lib/entity/invoicing/creditNote/creditNoteState.d.ts +1 -0
  9. package/lib/entity/invoicing/invoice/invoicePayload.d.ts +1 -0
  10. package/lib/entity/invoicing/invoice/invoicePayload.js +1 -0
  11. package/lib/entity/invoicing/invoice/invoiceState.d.ts +1 -0
  12. package/lib/entity/invoicing/invoicingCommonPayload.d.ts +0 -2
  13. package/lib/entity/invoicing/invoicingCustomer/invoicingCustomerPayload.d.ts +1 -0
  14. package/lib/entity/invoicing/invoicingCustomer/invoicingCustomerPayload.js +1 -0
  15. package/lib/entity/invoicing/invoicingCustomer/invoicingCustomerState.d.ts +1 -0
  16. package/lib/entity/invoicing/invoicingSubscription/invoicingSubscriptionPayload.d.ts +2 -1
  17. package/lib/entity/invoicing/invoicingSubscription/invoicingSubscriptionPayload.js +2 -1
  18. package/lib/entity/invoicing/invoicingSubscription/invoicingSubscriptionState.d.ts +2 -1
  19. package/lib/epic.d.ts +1 -2
  20. package/lib/epic.js +0 -2
  21. package/lib/esm/entity/aiCfo/aiCfoReducer.js +1 -32
  22. package/lib/esm/entity/file/fileState.js +0 -2
  23. package/lib/esm/entity/invoicing/creditNote/creditNotePayload.js +1 -0
  24. package/lib/esm/entity/invoicing/invoice/invoicePayload.js +1 -0
  25. package/lib/esm/entity/invoicing/invoicingCustomer/invoicingCustomerPayload.js +1 -0
  26. package/lib/esm/entity/invoicing/invoicingSubscription/invoicingSubscriptionPayload.js +2 -1
  27. package/lib/esm/epic.js +0 -2
  28. package/lib/esm/index.js +2 -2
  29. package/lib/esm/view/expenseAutomationView/selectors/jeSchedulesViewSelector.js +2 -4
  30. package/lib/esm/view/invoicing/dataImportView/dataImportViewSelector.js +0 -2
  31. package/lib/esm/view/invoicing/invoicingConfigView/invoicingConfigViewReducer.js +0 -2
  32. package/lib/esm/view/invoicing/invoicingOverview/invoicingOverviewPayload.js +1 -0
  33. package/lib/esm/view/invoicing/invoicingSubscriptionDetailView/invoicingSubscriptionDetailViewSelector.js +1 -2
  34. package/lib/esm/view/invoicing/invoicingSubscriptionListView/invoicingSubscriptionListViewSelector.js +0 -1
  35. package/lib/esm/view/invoicing/invoicingSubscriptionListView/invoicingSubscriptionListViewState.js +2 -0
  36. package/lib/esm/view/invoicing/settingsView/invoicingBrandingFormConfig.js +0 -5
  37. package/lib/esm/view/invoicing/settingsView/settingsViewSelector.js +1 -5
  38. package/lib/esm/view/recommendation/recommendationReducer.js +1 -13
  39. package/lib/esm/view/spendManagement/billPay/billPaySetupApproverView/epic/fetchBillPaySetupApproverViewEpic.js +2 -18
  40. package/lib/esm/view/spendManagement/billPay/billPaySetupApproverView/epic/initializeBillPaySetupApproverViewUpdateDataEpic.js +1 -0
  41. package/lib/esm/view/spendManagement/billPay/billPaySetupApproverView/types/commonPayload.js +3 -0
  42. package/lib/esm/view/spendManagement/reimbursement/remiSetupApproverView/epic/fetchRemiSetupApproverViewEpic.js +2 -18
  43. package/lib/esm/view/spendManagement/reimbursement/remiSetupApproverView/epic/initializeRemiSetupApproverViewUpdateDataEpic.js +1 -0
  44. package/lib/index.d.ts +5 -7
  45. package/lib/index.js +23 -24
  46. package/lib/view/expenseAutomationView/selectorTypes/jeSchedulesSelectorTypes.d.ts +3 -5
  47. package/lib/view/expenseAutomationView/selectors/jeSchedulesViewSelector.d.ts +5 -2
  48. package/lib/view/expenseAutomationView/selectors/jeSchedulesViewSelector.js +2 -4
  49. package/lib/view/invoicing/dataImportView/dataImportViewSelector.d.ts +0 -2
  50. package/lib/view/invoicing/dataImportView/dataImportViewSelector.js +0 -2
  51. package/lib/view/invoicing/invoicingConfigView/invoicingConfigViewPayload.d.ts +0 -1
  52. package/lib/view/invoicing/invoicingConfigView/invoicingConfigViewReducer.d.ts +1 -1
  53. package/lib/view/invoicing/invoicingConfigView/invoicingConfigViewReducer.js +0 -2
  54. package/lib/view/invoicing/invoicingConfigView/invoicingConfigViewState.d.ts +0 -1
  55. package/lib/view/invoicing/invoicingOverview/invoicingOverviewPayload.d.ts +1 -0
  56. package/lib/view/invoicing/invoicingOverview/invoicingOverviewPayload.js +1 -0
  57. package/lib/view/invoicing/invoicingOverview/invoicingOverviewState.d.ts +1 -0
  58. package/lib/view/invoicing/invoicingSubscriptionDetailView/invoicingSubscriptionDetailViewSelector.d.ts +1 -3
  59. package/lib/view/invoicing/invoicingSubscriptionDetailView/invoicingSubscriptionDetailViewSelector.js +0 -1
  60. package/lib/view/invoicing/invoicingSubscriptionListView/invoicingSubscriptionListViewSelector.d.ts +0 -2
  61. package/lib/view/invoicing/invoicingSubscriptionListView/invoicingSubscriptionListViewSelector.js +0 -1
  62. package/lib/view/invoicing/invoicingSubscriptionListView/invoicingSubscriptionListViewState.d.ts +2 -2
  63. package/lib/view/invoicing/invoicingSubscriptionListView/invoicingSubscriptionListViewState.js +2 -0
  64. package/lib/view/invoicing/issueCreditNote/issueCreditNotePayload.d.ts +1 -0
  65. package/lib/view/invoicing/settingsView/invoicingBrandingFormConfig.d.ts +0 -1
  66. package/lib/view/invoicing/settingsView/invoicingBrandingFormConfig.js +0 -5
  67. package/lib/view/invoicing/settingsView/settingsViewSelector.d.ts +1 -5
  68. package/lib/view/invoicing/settingsView/settingsViewSelector.js +0 -4
  69. package/lib/view/invoicing/subscriptionAction/subscriptionActionRequestPayload.d.ts +0 -8
  70. package/lib/view/recommendation/recommendationPayload.d.ts +0 -34
  71. package/lib/view/recommendation/recommendationReducer.d.ts +1 -2
  72. package/lib/view/recommendation/recommendationReducer.js +2 -14
  73. package/lib/view/spendManagement/billPay/billPaySetupApproverView/epic/fetchBillPaySetupApproverViewEpic.d.ts +1 -2
  74. package/lib/view/spendManagement/billPay/billPaySetupApproverView/epic/fetchBillPaySetupApproverViewEpic.js +2 -18
  75. package/lib/view/spendManagement/billPay/billPaySetupApproverView/epic/initializeBillPaySetupApproverViewUpdateDataEpic.js +1 -0
  76. package/lib/view/spendManagement/billPay/billPaySetupApproverView/types/commonPayload.d.ts +1 -0
  77. package/lib/view/spendManagement/billPay/billPaySetupApproverView/types/commonPayload.js +3 -0
  78. package/lib/view/spendManagement/billPay/billPaySetupApproverView/types/commonState.d.ts +1 -0
  79. package/lib/view/spendManagement/commonHistoryView/commonHistory.d.ts +1 -1
  80. package/lib/view/spendManagement/reimbursement/remiSetupApproverView/epic/fetchRemiSetupApproverViewEpic.d.ts +1 -2
  81. package/lib/view/spendManagement/reimbursement/remiSetupApproverView/epic/fetchRemiSetupApproverViewEpic.js +2 -18
  82. package/lib/view/spendManagement/reimbursement/remiSetupApproverView/epic/initializeRemiSetupApproverViewUpdateDataEpic.js +1 -0
  83. package/package.json +1 -1
  84. package/lib/esm/view/recommendation/submitRecommendationFeedbackEpic.js +0 -52
  85. package/lib/view/recommendation/submitRecommendationFeedbackEpic.d.ts +0 -7
  86. package/lib/view/recommendation/submitRecommendationFeedbackEpic.js +0 -56
@@ -12,8 +12,8 @@ import { getClassList, getNestedClassListHierarchy, } from '../../classList/clas
12
12
  import { getAccountsTypesForScheduleDetails } from '../../scheduleView/scheduleDetailView/scheduleDetailLocalDataHelper';
13
13
  import { filterNestedAccountHierarchyById } from '../../scheduleView/scheduleDetailView/scheduleDetailSelector';
14
14
  import { getAccountLabelForScheduleType, getAccountsTypesForScheduleList, } from '../../scheduleView/scheduleListView/scheduleListHelper';
15
- import { ALL_JE_PAGE_TABS, getJESchedulePeriodTabKey, } from '../types/jeSchedulesViewState';
16
15
  import { getAllSteps } from './getAllStepsHelper';
16
+ import { ALL_JE_PAGE_TABS, getJESchedulePeriodTabKey, } from '../types/jeSchedulesViewState';
17
17
  import { getJEAccountSettingsView } from './jeAccountSettingsViewSelector';
18
18
  import { getNewScheduleView } from './jeNewScheduleViewSelector';
19
19
  // Matches the AI-automation user addresses webc's schedule list row already
@@ -330,9 +330,7 @@ export function getExpenseAutomationJESchedulesView(state) {
330
330
  */
331
331
  const sumToAmount = (schedules) => {
332
332
  const first = schedules[0];
333
- const currency = first != null
334
- ? getScheduleAmountObject(first)
335
- : allScheduleAmountFallback;
333
+ const currency = first != null ? getScheduleAmountObject(first) : allScheduleAmountFallback;
336
334
  return {
337
335
  ...currency,
338
336
  amount: sumAmount(schedules),
@@ -1,4 +1,3 @@
1
- import { invoicingFieldHelpForGroup } from '../invoicingConfigView/invoicingConfigViewSelector';
2
1
  /**
3
2
  * Single bundled view for the invoicing data-import surfaces — consumers read
4
3
  * only this. Carries the migration `sessions` list + `sessionsFetch`, the
@@ -8,7 +7,6 @@ import { invoicingFieldHelpForGroup } from '../invoicingConfigView/invoicingConf
8
7
  export const getInvoicingDataImportView = (state) => {
9
8
  const dataImportState = state.invoicingDataImportViewState;
10
9
  return {
11
- fieldHelp: invoicingFieldHelpForGroup(state, 'data_import'),
12
10
  activeMigrationSessionId: dataImportState.activeDetailId,
13
11
  sessionDetail: dataImportState.sessionDetail,
14
12
  sessionDetailFetch: dataImportState.sessionDetailFetch,
@@ -34,7 +34,6 @@ export const initialState = {
34
34
  discountStatusOptions: [],
35
35
  dunningCaseStatusOptions: [],
36
36
  invoiceStatusOptions: [],
37
- subscriptionCancelReasonCodeOptions: [],
38
37
  subscriptionStatusOptions: [],
39
38
  transactionStatusOptions: [],
40
39
  transactionTypeOptions: [],
@@ -104,7 +103,6 @@ export function mapInvoicingConfigPayloadToState(payload) {
104
103
  discountStatusOptions: (payload.discount_status_options ?? []).map(toInvoicingNamedOption),
105
104
  dunningCaseStatusOptions: (payload.dunning_case_status_options ?? []).map(toInvoicingNamedOption),
106
105
  invoiceStatusOptions: (payload.invoice_status_options ?? []).map(toInvoicingNamedOption),
107
- subscriptionCancelReasonCodeOptions: (payload.subscription_cancel_reason_code_options ?? []).map(toInvoicingNamedOption),
108
106
  subscriptionStatusOptions: (payload.subscription_status_options ?? []).map(toInvoicingNamedOption),
109
107
  transactionStatusOptions: (payload.transaction_status_options ?? []).map(toInvoicingNamedOption),
110
108
  transactionTypeOptions: (payload.transaction_type_options ?? []).map(toInvoicingNamedOption),
@@ -37,6 +37,7 @@ export const mapInvoicingPlanRevenuePointPayloadToState = (payload) => ({
37
37
  mrr: toAmount(payload.mrr, 'USD', '$'),
38
38
  pct: payload.pct,
39
39
  planID: payload.plan,
40
+ productCode: payload.product_code,
40
41
  });
41
42
  export const mapInvoicingDashboardSummaryPayloadToState = (payload) => ({
42
43
  customerMovement: {
@@ -1,12 +1,11 @@
1
1
  import { getInvoicingSubscriptionById as getInvoicingSubscriptionByIdFromState } from '../../../entity/invoicing/invoicingSubscription/invoicingSubscriptionSelector';
2
- import { getInvoicingConfigView, invoicingFieldHelpForGroup, } from '../invoicingConfigView/invoicingConfigViewSelector';
2
+ import { invoicingFieldHelpForGroup } from '../invoicingConfigView/invoicingConfigViewSelector';
3
3
  import { getInvoicingSubscriptionActionState } from '../subscriptionAction/subscriptionActionSelector';
4
4
  export const getInvoicingSubscriptionById = (state, id) => getInvoicingSubscriptionByIdFromState(state.invoicingSubscriptionState, id);
5
5
  export const getInvoicingSubscriptionDetail = (state, invoicingSubscriptionID) => {
6
6
  const { error, fetchState } = state.invoicingSubscriptionDetailViewState;
7
7
  return {
8
8
  fieldHelp: invoicingFieldHelpForGroup(state, 'subscription'),
9
- cancelReasonCodeOptions: getInvoicingConfigView(state).subscriptionCancelReasonCodeOptions,
10
9
  actionState: getInvoicingSubscriptionActionState(invoicingSubscriptionID)(state),
11
10
  subscription: getInvoicingSubscriptionById(state, invoicingSubscriptionID),
12
11
  fetchState,
@@ -28,7 +28,6 @@ export const getInvoicingSubscriptionListView = createSelector((state) => state.
28
28
  count: listViewState.counts,
29
29
  countsFetchState: listViewState.countsFetchState,
30
30
  subscriptionCommercialEditAllowedFromStatuses: configState.subscriptionCommercialEditAllowedFromStatuses,
31
- cancelReasonCodeOptions: configState.subscriptionCancelReasonCodeOptions,
32
31
  subscriptionLifecycleActionOptions: configState.subscriptionLifecycleActionOptions,
33
32
  subscriptionMetadataEditAllowedFromStatuses: configState.subscriptionMetadataEditAllowedFromStatuses,
34
33
  statusOptions,
@@ -3,6 +3,7 @@ export const ALL_INVOICING_SUBSCRIPTION_SORT_KEYS = [
3
3
  'subscription',
4
4
  'customer',
5
5
  'plan',
6
+ 'product_code',
6
7
  'term_end',
7
8
  'next_billing',
8
9
  'auto_collect',
@@ -14,6 +15,7 @@ export const INVOICING_SUBSCRIPTION_COLUMNS = [
14
15
  { key: 'subscription', sortable: true },
15
16
  { key: 'customer', sortable: false },
16
17
  { key: 'plan', sortable: true },
18
+ { key: 'product_code', sortable: true },
17
19
  { key: 'term_end', sortable: true },
18
20
  { key: 'next_billing', sortable: true },
19
21
  { key: 'auto_collect', sortable: true },
@@ -7,7 +7,6 @@ export const initialInvoicingBrandingFormLocalData = {
7
7
  dateFormat: '',
8
8
  defaultMemo: '',
9
9
  email: '',
10
- invoiceFooterText: '',
11
10
  invoicePrefix: '',
12
11
  logoFileId: '',
13
12
  phone: '',
@@ -20,7 +19,6 @@ export const entityToInvoicingBrandingFormLocalData = (settings) => ({
20
19
  dateFormat: settings?.date_format ?? '',
21
20
  defaultMemo: settings?.default_memo ?? '',
22
21
  email: settings?.email ?? '',
23
- invoiceFooterText: settings?.invoice_footer_text ?? '',
24
22
  invoicePrefix: settings?.invoice_prefix ?? '',
25
23
  logoFileId: settings?.logo_file_id ?? '',
26
24
  phone: settings?.phone ?? '',
@@ -41,9 +39,6 @@ export const brandingLocalDataToSettingsPayload = (localData, address) => ({
41
39
  date_format: trimOrUndefined(localData.dateFormat),
42
40
  default_memo: trimOrUndefined(localData.defaultMemo),
43
41
  email: trimOrUndefined(localData.email),
44
- // Sent even when blank: "" is how the API is told to hide the footer line,
45
- // so this one must not collapse to `undefined` like the fields above.
46
- invoice_footer_text: localData.invoiceFooterText.trim(),
47
42
  invoice_prefix: trimOrUndefined(localData.invoicePrefix),
48
43
  logo_file_id: localData.logoFileId,
49
44
  phone: trimOrUndefined(localData.phone),
@@ -1,6 +1,6 @@
1
1
  import { getInvoicingQboAccountMappingId, } from '../../../entity/invoicing/invoicingCommonPayload';
2
2
  import { getFormattedAddress } from '../../addressView/addressViewSelector';
3
- import { getInvoicingConfigView, invoicingFieldHelpForGroup, } from '../invoicingConfigView/invoicingConfigViewSelector';
3
+ import { getInvoicingConfigView } from '../invoicingConfigView/invoicingConfigViewSelector';
4
4
  import { getInvoicingQboView, isInvoicingAccountingPickerDataLoading, } from '../invoicingQboView/invoicingQboViewSelector';
5
5
  import { INVOICING_BUSINESS_ADDRESS_TYPE, entityToInvoicingBrandingFormLocalData, } from './invoicingBrandingFormConfig';
6
6
  import { initialInvoicingQboSettingsLocalData, } from './invoicingQboSettingsFormConfig';
@@ -26,7 +26,6 @@ export const getInvoicingSettingsFetchState = (state) => ({
26
26
  export const getInvoicingSettingsView = (state) => {
27
27
  const { error, fetchState, saveFetchState, settings, stripeFetchState } = state.invoicingSettingsViewState;
28
28
  return {
29
- fieldHelp: invoicingFieldHelpForGroup(state, 'settings'),
30
29
  error,
31
30
  fetchState,
32
31
  saveState: saveFetchState,
@@ -79,7 +78,6 @@ export const getInvoicingSettingsHubView = (state) => {
79
78
  const { dunningScheduleActionOptions, enableState, error: configError, fetchState: configFetchState, qboAccountMappingKindOptions, qboCustomerMatchingOptions, qboSyncStatusOptions, status, } = getInvoicingConfigView(state);
80
79
  const { canEnable, isQboConfigured, isStripeConnected } = deriveInvoicingEnablePrerequisites(state.invoicingSettingsViewState.settings, state.invoicingQboViewState.connection?.connected === true, qboAccountMappingKindOptions);
81
80
  return {
82
- fieldHelp: invoicingFieldHelpForGroup(state, 'settings'),
83
81
  // Keeps the onboarding step in the gate: a tenant that has not accepted the
84
82
  // terms cannot enable invoicing, whatever the integrations say.
85
83
  canEnableInvoicing: status === 'settings' && canEnable,
@@ -110,7 +108,6 @@ export const getInvoicingQboSettingsFormView = (state) => {
110
108
  const { fetchState: configFetchState, qboAccountMappingKindOptions, qboCustomerMatchingOptions, qboSyncStatusOptions, } = getInvoicingConfigView(state);
111
109
  const qboView = getInvoicingQboView(state);
112
110
  return {
113
- fieldHelp: invoicingFieldHelpForGroup(state, 'settings'),
114
111
  accountMappingKindOptions: qboAccountMappingKindOptions,
115
112
  accounts: qboView.accounts,
116
113
  backfillState: qboView.backfillState,
@@ -150,7 +147,6 @@ export const getInvoicingBrandingFormView = (state) => {
150
147
  ? getFormattedAddress(newAddress.addressToCreate)
151
148
  : undefined;
152
149
  return {
153
- fieldHelp: invoicingFieldHelpForGroup(state, 'settings'),
154
150
  addressLabel,
155
151
  dateFormatOptions: getInvoicingConfigView(state).dateFormatOptions,
156
152
  localData: brandingDraft ?? entityToInvoicingBrandingFormLocalData(settings),
@@ -131,18 +131,6 @@ const recommendation = createSlice({
131
131
  };
132
132
  },
133
133
  },
134
- // Fire-and-forget human feedback on a recommendation (accept, ranked
135
- // override or outside override). Handled by submitRecommendationFeedbackEpic
136
- // which POSTs to the accounting recommendation-feedback endpoint. No state
137
- // mutation: the categorization UX must not depend on the feedback round-trip.
138
- submitRecommendationFeedback: {
139
- reducer() {
140
- // Fire-and-forget: no state mutation; the epic performs the POST.
141
- },
142
- prepare(args) {
143
- return { payload: args };
144
- },
145
- },
146
134
  },
147
135
  extraReducers: (builder) => {
148
136
  builder.addCase(clearAll, (draft) => {
@@ -150,7 +138,7 @@ const recommendation = createSlice({
150
138
  });
151
139
  },
152
140
  });
153
- export const { fetchEntityRecommendationsByTransactionId, fetchEntityRecommendationsForLineUpdate, fetchRecommendationByEntityName, fetchRecommendationByEntityId, updateRecommendationForEntity, updateRecommendationForEntityFailure, indicateReadyToInitializeRecommendation, submitRecommendationFeedback, } = recommendation.actions;
141
+ export const { fetchEntityRecommendationsByTransactionId, fetchEntityRecommendationsForLineUpdate, fetchRecommendationByEntityName, fetchRecommendationByEntityId, updateRecommendationForEntity, updateRecommendationForEntityFailure, indicateReadyToInitializeRecommendation, } = recommendation.actions;
154
142
  export default recommendation.reducer;
155
143
  const doUpdateRecommendationForEntity = (draft, entityId, entityType, payload) => {
156
144
  const key = getEntityRecommendationKey(entityType, entityId);
@@ -2,20 +2,13 @@ import { from, of } from 'rxjs';
2
2
  import { catchError, filter, mergeMap, switchMap } from 'rxjs/operators';
3
3
  import { updateApprovalRules } from '../../../../../entity/approvalRule/approvalRuleReducer';
4
4
  import { getApprovalRulesByIds } from '../../../../../entity/approvalRule/approvalRuleSelector';
5
- import { getIsAccountingClassesEnabled } from '../../../../../entity/tenant/tenantSelector';
6
5
  import { updateAllUsers } from '../../../../../entity/user/userReducer';
7
6
  import { createZeniAPIStatus, isSuccessResponse, } from '../../../../../responsePayload';
8
- import { fetchClassList } from '../../../../classList/classListReducer';
9
7
  import { fetchBillPaySetupApproverView, fetchBillPaySetupApproverViewFailure, fetchBillPaySetupApproverViewSuccess, } from '../billPaySetupApproverViewReducer';
10
8
  export const fetchBillPaySetupApproverViewEpic = (actions$, state$, zeniAPI) => actions$.pipe(filter(fetchBillPaySetupApproverView.match), switchMap((action) => {
11
9
  const { cacheOverride, useV3 } = action.payload;
12
- const { billPaySetupApproverViewState, approvalRuleState, classListState } = state$.value;
13
- const isAccountingClassesEnabled = getIsAccountingClassesEnabled(state$.value);
10
+ const { billPaySetupApproverViewState, approvalRuleState } = state$.value;
14
11
  const approvalRules = getApprovalRulesByIds(approvalRuleState, billPaySetupApproverViewState.approvalRuleIds);
15
- const shouldFetchClassList = isAccountingClassesEnabled &&
16
- (cacheOverride === true ||
17
- (classListState.hasValidState() === false &&
18
- classListState.fetchState !== 'In-Progress'));
19
12
  if (cacheOverride === true ||
20
13
  approvalRules.length !==
21
14
  billPaySetupApproverViewState.approvalRuleIds.length ||
@@ -35,9 +28,6 @@ export const fetchBillPaySetupApproverViewEpic = (actions$, state$, zeniAPI) =>
35
28
  updateApprovalRules(response.data.approval_rules),
36
29
  fetchBillPaySetupApproverViewSuccess(approvalRuleIds),
37
30
  ];
38
- if (shouldFetchClassList) {
39
- actions.push(fetchClassList());
40
- }
41
31
  return from(actions);
42
32
  }
43
33
  else {
@@ -47,12 +37,6 @@ export const fetchBillPaySetupApproverViewEpic = (actions$, state$, zeniAPI) =>
47
37
  }
48
38
  else {
49
39
  const { approvalRuleIds } = billPaySetupApproverViewState;
50
- const actions = [
51
- fetchBillPaySetupApproverViewSuccess(approvalRuleIds),
52
- ];
53
- if (shouldFetchClassList) {
54
- actions.push(fetchClassList());
55
- }
56
- return from(actions);
40
+ return of(fetchBillPaySetupApproverViewSuccess(approvalRuleIds));
57
41
  }
58
42
  }));
@@ -21,6 +21,7 @@ export const initializeBillPaySetupApproverViewUpdateDataEpic = (actions$, state
21
21
  name: approvalRule.name,
22
22
  description: approvalRule.description,
23
23
  separationOfDuties: approvalRule.separationOfDuties,
24
+ isFallback: approvalRule.isFallback,
24
25
  };
25
26
  fetchActions.push(clearBillPaySetupApproverViewUpdateData(), saveBillPaySetupApproverViewUpdateData(billPaySetupApproverViewUpdateData));
26
27
  }
@@ -86,6 +86,9 @@ export const toApprovalChangableInfoPayload = (approverViewUpdateData) => {
86
86
  payload.is_separation_of_duty_enabled =
87
87
  approverViewUpdateData.separationOfDuties;
88
88
  }
89
+ if (approverViewUpdateData.isFallback != null) {
90
+ payload.is_fallback = approverViewUpdateData.isFallback;
91
+ }
89
92
  if (isUpdate) {
90
93
  payload.approval_rule_id = approverViewUpdateData.approvalRuleId;
91
94
  }
@@ -2,20 +2,13 @@ import { from, of } from 'rxjs';
2
2
  import { catchError, filter, mergeMap, switchMap } from 'rxjs/operators';
3
3
  import { updateApprovalRules } from '../../../../../entity/approvalRule/approvalRuleReducer';
4
4
  import { getApprovalRulesByIds } from '../../../../../entity/approvalRule/approvalRuleSelector';
5
- import { getIsAccountingClassesEnabled } from '../../../../../entity/tenant/tenantSelector';
6
5
  import { updateAllUsers } from '../../../../../entity/user/userReducer';
7
6
  import { createZeniAPIStatus, isSuccessResponse, } from '../../../../../responsePayload';
8
- import { fetchClassList } from '../../../../classList/classListReducer';
9
7
  import { fetchRemiSetupApproverView, fetchRemiSetupApproverViewFailure, fetchRemiSetupApproverViewSuccess, } from '../remiSetupApproverViewReducer';
10
8
  export const fetchRemiSetupApproverViewEpic = (actions$, state$, zeniAPI) => actions$.pipe(filter(fetchRemiSetupApproverView.match), switchMap((action) => {
11
9
  const { cacheOverride, resolveAttributeToUser, includeImplicitActors, useV3, } = action.payload;
12
- const { remiSetupApproverViewState, approvalRuleState, classListState } = state$.value;
13
- const isAccountingClassesEnabled = getIsAccountingClassesEnabled(state$.value);
10
+ const { remiSetupApproverViewState, approvalRuleState } = state$.value;
14
11
  const approvalRules = getApprovalRulesByIds(approvalRuleState, remiSetupApproverViewState.approvalRuleIds);
15
- const shouldFetchClassList = isAccountingClassesEnabled &&
16
- (cacheOverride === true ||
17
- (classListState.hasValidState() === false &&
18
- classListState.fetchState !== 'In-Progress'));
19
12
  if (cacheOverride === true ||
20
13
  approvalRules.length !==
21
14
  remiSetupApproverViewState.approvalRuleIds.length ||
@@ -37,9 +30,6 @@ export const fetchRemiSetupApproverViewEpic = (actions$, state$, zeniAPI) => act
37
30
  updateApprovalRules(response.data.approval_rules),
38
31
  fetchRemiSetupApproverViewSuccess(approvalRuleIds),
39
32
  ];
40
- if (shouldFetchClassList) {
41
- actions.push(fetchClassList());
42
- }
43
33
  return from(actions);
44
34
  }
45
35
  else {
@@ -49,12 +39,6 @@ export const fetchRemiSetupApproverViewEpic = (actions$, state$, zeniAPI) => act
49
39
  }
50
40
  else {
51
41
  const { approvalRuleIds } = remiSetupApproverViewState;
52
- const actions = [
53
- fetchRemiSetupApproverViewSuccess(approvalRuleIds),
54
- ];
55
- if (shouldFetchClassList) {
56
- actions.push(fetchClassList());
57
- }
58
- return from(actions);
42
+ return of(fetchRemiSetupApproverViewSuccess(approvalRuleIds));
59
43
  }
60
44
  }));
@@ -21,6 +21,7 @@ export const initializeRemiSetupApproverViewUpdateDataEpic = (actions$, state$)
21
21
  name: approvalRule.name,
22
22
  description: approvalRule.description,
23
23
  separationOfDuties: approvalRule.separationOfDuties,
24
+ isFallback: approvalRule.isFallback,
24
25
  };
25
26
  fetchActions.push(clearRemiSetupApproverViewUpdateData(), saveRemiSetupApproverViewUpdateData(remiSetupApproverViewUpdateData));
26
27
  }
package/lib/index.d.ts CHANGED
@@ -311,15 +311,15 @@ import { ExpenseAutomationStepDetails, ExpenseAutomationViewSelector } from './v
311
311
  import { ExpenseAutomationFluxAnalysisViewSelector, FluxAnalysisOperatingExpenseView, FluxAnalysisVendorView, FluxAnalysisViewSectionReport, FluxVendorAccountsAndClassesView } from './view/expenseAutomationView/selectorTypes/fluxAnalysisViewSelectorTypes';
312
312
  import { JEAccountSettingsView } from './view/expenseAutomationView/selectorTypes/jeAccountSettingsViewSelectorTypes';
313
313
  import { NewAccrualAccountsView, NewScheduleSearchTransactionsView, NewScheduleView } from './view/expenseAutomationView/selectorTypes/jeNewScheduleViewSelectorTypes';
314
- import { ExpenseAutomationJESchedulesViewSelector, JEKpiSummary, JEScheduleRow } from './view/expenseAutomationView/selectorTypes/jeSchedulesSelectorTypes';
314
+ import { ExpenseAutomationJESchedulesViewSelector, JEKpiSummary } from './view/expenseAutomationView/selectorTypes/jeSchedulesSelectorTypes';
315
315
  import { BulkUploadSelectorData, ExpenseAutomationMissingReceiptsViewSelector } from './view/expenseAutomationView/selectorTypes/missingReceiptsSelectorTypes';
316
316
  import { CompletedTransactionsSelectorData, ResolvedBatchDetails, ResolvedBatchFile, ResolvedCandidate } from './view/expenseAutomationView/selectorTypes/missingReceiptsSelectorTypes';
317
317
  import { AccountReconSectionID, AccountReconciliationByAccount, AccountReconciliationBySection, ExpenseAutomationReconciliationViewSelector } from './view/expenseAutomationView/selectorTypes/reconciliationViewSelectorTypes';
318
318
  import { ExpenseAutomationTransactionViewSelector, TransactionReviewLocalDataSelectorView } from './view/expenseAutomationView/selectorTypes/transactionsViewSelectorTypes';
319
319
  import { getExpenseAutomationFluxAnalysisView } from './view/expenseAutomationView/selectors/fluxAnalysisViewSelector';
320
320
  import { getNewAccrualAccountsView as getJeNewAccrualAccountsView, getNewScheduleSearchTransactionsView as getJeNewScheduleSearchTransactionsView, getNewScheduleView as getJeNewScheduleView } from './view/expenseAutomationView/selectors/jeNewScheduleViewSelector';
321
+ import { ExpenseAutomationJEOneTimeAccrualDetailView, JEScheduleRow } from './view/expenseAutomationView/selectors/jeSchedulesViewSelector';
321
322
  import { JEScheduledTransactionWithFailedEntries } from './view/expenseAutomationView/selectors/jeScheduledTransactionWithFailedEntries';
322
- import { ExpenseAutomationJEOneTimeAccrualDetailView } from './view/expenseAutomationView/selectors/jeSchedulesViewSelector';
323
323
  import { getExpenseAutomationReconciliationView, getLedgerAccountIdsWithStatementOverrideWarning, getLedgerAccountsForCombinedStatementMapping, getReparseStatementStatusByAccountId, getUnavailableLedgerAccountIds, isAccountReconReport } from './view/expenseAutomationView/selectors/reconciliationViewSelector';
324
324
  import { getExpenseAutomationTransactionView, getLastTransferEntryReplacement } from './view/expenseAutomationView/selectors/transactionCategorizationSelector';
325
325
  import { applyTransactionFilters } from './view/expenseAutomationView/transactionFilterHelpers';
@@ -420,7 +420,7 @@ import { ProfitAndLossProjectViewReport } from './view/profitAndLossProjectView/
420
420
  import { ProfitAndLossProjectViewUIState } from './view/profitAndLossProjectView/profitAndLossProjectViewState';
421
421
  import { fetchProjectList } from './view/projectList/projectListReducer';
422
422
  import { ProjectListSelectorView, getProjectList } from './view/projectList/projectListSelector';
423
- import { fetchEntityRecommendationsByTransactionId, fetchEntityRecommendationsForLineUpdate, fetchRecommendationByEntityId, fetchRecommendationByEntityName, submitRecommendationFeedback } from './view/recommendation/recommendationReducer';
423
+ import { fetchEntityRecommendationsByTransactionId, fetchEntityRecommendationsForLineUpdate, fetchRecommendationByEntityId, fetchRecommendationByEntityName } from './view/recommendation/recommendationReducer';
424
424
  import { DEFAULT_REFERRER_AMOUNT, clearReferrals, fetchReferrals, fetchRewardsPlan, resendReferralInvite, saveReferralFormDataInLocalStore, sendReferralInvite, updateReferViewed, updateReferralListSortUiState } from './view/referralView/referralReducer';
425
425
  import { ReferralListSelectorView, RewardsPlanCardReport, getInviteFormView, getReferralListView, getRewardsPlanCard } from './view/referralView/referralSelector';
426
426
  import { AmountStatusTypes, InviteCompanyLocalData, ReferralAmountStatus, ReferralInvitation, ReferralListViewSortKey, ReferralStatus, ReferralViewState, ReferralViewUIState, RewardsPlanData, StatusTypes, toReferralListViewSortKeyType } from './view/referralView/referralState';
@@ -908,9 +908,8 @@ export { Filing1099TinType };
908
908
  export { BillPayCardReport };
909
909
  export { ReimbursementCardReport };
910
910
  export { VendorListViewSortKey, VendorViewUIState, VendorListSelectorView, VendorListQuery, getVendorList, VendorListView, updateSortUiState, updatePageToken, updateYTDSelectionUIState, VendorListViewYTDSpendSortKey, isColumnYTDSpend, isVendorsTabVisible, VendorViewType, VendorReportIDType, toVendorReportIDType, VendorFiling1099ListSelectorView, getVendorFiling1099List, VendorFiling1099ListViewSortKey, VendorFiling1099ViewUIState, VendorFiling1099DownloadData, fetchVendorsFiling1099Download, Type1099Download, VendorFiling1099DownloadDataForType, };
911
- export { fetchEntityRecommendationsByTransactionId, fetchEntityRecommendationsForLineUpdate, fetchRecommendationByEntityId, fetchRecommendationByEntityName, submitRecommendationFeedback, };
911
+ export { fetchEntityRecommendationsByTransactionId, fetchEntityRecommendationsForLineUpdate, fetchRecommendationByEntityId, fetchRecommendationByEntityName, };
912
912
  export type { FetchEntityRecommendationsForLineUpdatePayload, RecommendationLineUpdateFlowType, } from './view/recommendation/recommendationReducer';
913
- export type { RecommendationFeedbackDimension, RecommendationFeedbackOutcome, RecommendationFeedbackSource, RecommendationFeedbackValue, ShownRecommendationForFeedback, SubmitRecommendationFeedbackPayload, } from './view/recommendation/recommendationPayload';
914
913
  export { fetchOwnerList };
915
914
  export { ZeniAccountsConfigSelectorView, getZeniAccountsConfigDetail, ZeniAccountListSelectorView, getZeniAccountList, fetchZeniAccountList, fetchAccountList, DepositAccount, createCheckingAccount, fetchPaymentAccountList, unlinkPaymentAccount, getDepositAccountDetail, DepositAccountDetailSelectorView, DepositAccountListSelectorView, getAllDepositAccounts, getDepositAccountDetailForPDF, DepositAccountDetailForPDF, fetchDepositAccount, fetchZeniAccountsConfig, AccountHistoryWithBalances, TransferDetailLocalData, ReviewTransferDetail, updateTransferMoneyLocalData, updateTransferToLocalData, updateDepositToLocalData, transferMoney, getTransferDetail, TransferDetailSelectorView, clearTransferDetail, clearReviewTransferDetail, fetchReviewTransferDetail, fetchDepositAccountDetail, DepositAccountTransaction, DepositAccountWithAutoTransferRules, DepositTransactionStatusCode, DepositTransactionStatus, CheckDepositLocalData, depositCheck, updateCheckDepositLocalData, clearCheckDeposit, CheckDepositSelectorView, getCheckDepositDetail, updateDepositAccount, fetchDepositAccountHistorySuccess, fetchDepositAccountHistoryFailure, DepositAccountUpdateType, ZeniAccountSummaryWithBalance, fetchZeniAccStatementPage, getZeniAccStatements, ZeniAccStatementsSelectorView, ZeniAccountPaymentMethod, };
916
915
  export { CommonHistoryView, HistoricEvent, HistoricEventUpdate, ActivityHistorySelectorView, };
@@ -984,7 +983,7 @@ export { AiCfoViewSelector, getAiCfoView, getSuggestedQuestionsForPageContext, g
984
983
  export { MessagePayload, ChatSessionPayload, AiCfoAnswerPayload, } from './entity/aiCfo/aiCfoPayload';
985
984
  export { setNewSession, setSessions, updateAiCfoAnswerCardPolicyWizardPlan, upsertAnswerPayload, upsertOrAddQuestionAnswerPayload, addQuestionPayload, clearSession, toAiCfoExports, toAiCfoVisualization, appendSyntheticAiCfoAnswer, updateSyntheticAiCfoAnswer, removeSyntheticAiCfoAnswer, } from './entity/aiCfo/aiCfoReducer';
986
985
  export { AiCfoSelectorView, getAllQuestionAnswersForChatSession, getQuestionAnswerByIdForChatSession, getAllQuestionsForChatSession, getAiCfoSelectorView, getSyntheticAiCfoAnswersForChatSession, getSyntheticAiCfoAnswerByQuestionAnswerId, ChatSessionWithOrderedQuestionAnswers, } from './entity/aiCfo/aiCfoSelector';
987
- export { AiCfoQuestionWithAnswer, AiCfoAnswerParagraph, AiCfoAnswerStateType, AiCfoChartType, AiCfoAnswerResponseType, TableVisualization, ChartVisualization, CardNameOption, CardsCardKind, CardsCreationInitialData, CardPolicyDraftPolicy, CardPolicyDraftPolicyEntity, CardPolicyInitialData, CardPolicySpendLimits, CardPolicyStep5Review, CardPolicyUploadSource, CardPolicyWizardPlan, InteractiveFormType, InteractiveFormVisualization, AiCfoCapabilityPromo, AiCfoCapabilityPromoCta, AiCfoCapabilityPromoSurface, AiCfoExport, AiCfoVisualization, AiCfoVisualizationType, AiCfoState, ChatSession, ALL_AI_CFO_CHARTS_TYPES, ALL_AI_CFO_VISUALIZATION_TYPES, ALL_AI_CFO_ANSWER_STATE_TYPES, ALL_AI_CFO_ANSWER_RESPONSE_TYPES, ALL_INTERACTIVE_FORM_TYPES, toAiCfoVisualizationType, toAiCfoVisualizationTypeStrict, toAiCfoChartType, toAiCfoChartTypeStrict, toAiCfoAnswerStateType, toAiCfoAnswerStateTypeStrict, toAiCfoAnswerResponseType, toAiCfoAnswerResponseTypeStrict, toInteractiveFormType, toInteractiveFormTypeStrict, ChatSessionWithMessages, ResponseBlockBase, AnswerContentBlockBase, FileAttachmentMetadata, QuestionContentBlockBase, ResponseBlockType, SyntheticAiCfoAnswer, SyntheticAiCfoAnswerKind, ALL_SYNTHETIC_AI_CFO_ANSWER_KINDS, toMessageSender, toMessageType, MessageSender, MessageType, } from './entity/aiCfo/aiCfoState';
986
+ export { AiCfoQuestionWithAnswer, AiCfoAnswerParagraph, AiCfoAnswerStateType, AiCfoChartType, AiCfoAnswerResponseType, TableVisualization, ChartVisualization, CardNameOption, CardsCardKind, CardsCreationInitialData, CardPolicyDraftPolicy, CardPolicyDraftPolicyEntity, CardPolicyInitialData, CardPolicySpendLimits, CardPolicyStep5Review, CardPolicyUploadSource, CardPolicyWizardPlan, InteractiveFormType, InteractiveFormVisualization, AiCfoExport, AiCfoVisualization, AiCfoVisualizationType, AiCfoState, ChatSession, ALL_AI_CFO_CHARTS_TYPES, ALL_AI_CFO_VISUALIZATION_TYPES, ALL_AI_CFO_ANSWER_STATE_TYPES, ALL_AI_CFO_ANSWER_RESPONSE_TYPES, ALL_INTERACTIVE_FORM_TYPES, toAiCfoVisualizationType, toAiCfoVisualizationTypeStrict, toAiCfoChartType, toAiCfoChartTypeStrict, toAiCfoAnswerStateType, toAiCfoAnswerStateTypeStrict, toAiCfoAnswerResponseType, toAiCfoAnswerResponseTypeStrict, toInteractiveFormType, toInteractiveFormTypeStrict, ChatSessionWithMessages, ResponseBlockBase, AnswerContentBlockBase, FileAttachmentMetadata, QuestionContentBlockBase, ResponseBlockType, SyntheticAiCfoAnswer, SyntheticAiCfoAnswerKind, ALL_SYNTHETIC_AI_CFO_ANSWER_KINDS, toMessageSender, toMessageType, MessageSender, MessageType, } from './entity/aiCfo/aiCfoState';
988
987
  export { clearPolicyDocumentExtraction, extractPolicyDocument, fetchCardPolicyMccCategories, fetchCardPolicyRecommendationFromUpload, fetchCardPolicyVendorOptions, removeCardPolicyTemplate, updateCardPolicyMccCategories, updateCardPolicyMccCategoriesFailure, updateCardPolicyStats, updateCardPolicyTemplates, updateCardPolicyVendorOptions, updateCardPolicyVendorOptionsFailure, updateCreatedCardPolicyTemplate, updatePolicyDocumentExtractionFailure, updatePolicyDocumentExtractionSuccess, updatePolicyRecommendationFromUploadFailure, updatePolicyRecommendationFromUploadSuccess, } from './entity/cardPolicy/cardPolicyReducer';
989
988
  export { getAllCardPolicyTemplates, getCardPolicyMccCategories, getCardPolicyMccCategoriesError, getCardPolicyMccCategoriesFetchState, getCardPolicyStats, getCardPolicySuggestedAllowCategories, getCardPolicySuggestedAllowMerchants, getCardPolicySuggestedBlockCategories, getCardPolicySuggestedBlockMerchants, getCardPolicyTemplateById, getCardPolicyTemplatesByIds, getCardPolicyVendorSearchFetchState, getCardPolicyVendorSearchOptions, getCardPolicyVendorSearchString, getExtractedCardPolicyRules, getPolicyDocumentExtractionError, getPolicyDocumentExtractionFetchState, getPolicyRecommendationFromUploadAnswerId, getPolicyRecommendationFromUploadChatSessionId, getPolicyRecommendationFromUploadError, getPolicyRecommendationFromUploadFetchState, getUploadedPolicyDocumentFileName, } from './entity/cardPolicy/cardPolicySelector';
990
989
  export { ALL_CARD_POLICY_TEMPLATE_MODES, ALL_CARD_POLICY_TEMPLATE_STATUSES, CardPolicyState, CardPolicyStats, CardPolicyTemplate, CardPolicyTemplateEntityList, CardPolicyTemplateMode, CardPolicyTemplateSpendLimits, CardPolicyTemplateStatus, CardPolicyVendorSearchEntry, CardPolicyVendorSearchState, ExtractedCardPolicyRules, MccCategory, PolicyDocumentExtractionState, PolicyRecommendationFromUploadState, toCardPolicyTemplateMode, toCardPolicyTemplateStatus, } from './entity/cardPolicy/cardPolicyState';
@@ -1150,7 +1149,6 @@ export { getInvoicingDiscountActionState } from './view/invoicing/discountAction
1150
1149
  export { runInvoicingSubscriptionAction } from './view/invoicing/subscriptionAction/subscriptionActionReducer';
1151
1150
  export type { InvoicingSubscriptionActionState } from './view/invoicing/subscriptionAction/subscriptionActionState';
1152
1151
  export type { RunInvoicingSubscriptionActionPayload } from './view/invoicing/subscriptionAction/subscriptionActionReducer';
1153
- export type { InvoicingCancelSubscriptionValues } from './view/invoicing/subscriptionAction/subscriptionActionRequestPayload';
1154
1152
  export { getInvoicingSubscriptionActionState } from './view/invoicing/subscriptionAction/subscriptionActionSelector';
1155
1153
  export { runInvoicingDunningAction } from './view/invoicing/dunningAction/dunningActionReducer';
1156
1154
  export type { InvoicingDunningActionState } from './view/invoicing/dunningAction/dunningActionState';