@zeniai/client-epic-state 5.2.23 → 5.2.24-betaAK0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/entity/aiCfo/aiCfoPayload.d.ts +11 -0
- package/lib/entity/aiCfo/aiCfoReducer.js +32 -1
- package/lib/entity/aiCfo/aiCfoState.d.ts +14 -0
- package/lib/entity/file/fileState.d.ts +3 -3
- package/lib/entity/file/fileState.js +2 -0
- package/lib/entity/invoicing/creditNote/creditNotePayload.d.ts +0 -1
- package/lib/entity/invoicing/creditNote/creditNotePayload.js +0 -1
- package/lib/entity/invoicing/creditNote/creditNoteState.d.ts +0 -1
- package/lib/entity/invoicing/invoice/invoicePayload.d.ts +0 -1
- package/lib/entity/invoicing/invoice/invoicePayload.js +0 -1
- package/lib/entity/invoicing/invoice/invoiceState.d.ts +0 -1
- package/lib/entity/invoicing/invoicingCommonPayload.d.ts +2 -0
- package/lib/entity/invoicing/invoicingCustomer/invoicingCustomerPayload.d.ts +0 -1
- package/lib/entity/invoicing/invoicingCustomer/invoicingCustomerPayload.js +0 -1
- package/lib/entity/invoicing/invoicingCustomer/invoicingCustomerState.d.ts +0 -1
- package/lib/entity/invoicing/invoicingSubscription/invoicingSubscriptionPayload.d.ts +1 -2
- package/lib/entity/invoicing/invoicingSubscription/invoicingSubscriptionPayload.js +1 -2
- package/lib/entity/invoicing/invoicingSubscription/invoicingSubscriptionState.d.ts +1 -2
- package/lib/epic.d.ts +2 -1
- package/lib/epic.js +2 -0
- package/lib/esm/entity/aiCfo/aiCfoReducer.js +32 -1
- package/lib/esm/entity/file/fileState.js +2 -0
- package/lib/esm/entity/invoicing/creditNote/creditNotePayload.js +0 -1
- package/lib/esm/entity/invoicing/invoice/invoicePayload.js +0 -1
- package/lib/esm/entity/invoicing/invoicingCustomer/invoicingCustomerPayload.js +0 -1
- package/lib/esm/entity/invoicing/invoicingSubscription/invoicingSubscriptionPayload.js +1 -2
- package/lib/esm/epic.js +2 -0
- package/lib/esm/index.js +2 -2
- package/lib/esm/view/expenseAutomationView/selectors/jeSchedulesViewSelector.js +4 -2
- package/lib/esm/view/invoicing/dataImportView/dataImportViewSelector.js +2 -0
- package/lib/esm/view/invoicing/invoicingConfigView/invoicingConfigViewReducer.js +2 -0
- package/lib/esm/view/invoicing/invoicingOverview/invoicingOverviewPayload.js +0 -1
- package/lib/esm/view/invoicing/invoicingSubscriptionDetailView/invoicingSubscriptionDetailViewSelector.js +2 -1
- package/lib/esm/view/invoicing/invoicingSubscriptionListView/invoicingSubscriptionListViewSelector.js +1 -0
- package/lib/esm/view/invoicing/invoicingSubscriptionListView/invoicingSubscriptionListViewState.js +0 -2
- package/lib/esm/view/invoicing/settingsView/invoicingBrandingFormConfig.js +5 -0
- package/lib/esm/view/invoicing/settingsView/settingsViewSelector.js +5 -1
- package/lib/esm/view/recommendation/recommendationReducer.js +13 -1
- package/lib/esm/view/recommendation/submitRecommendationFeedbackEpic.js +52 -0
- package/lib/esm/view/spendManagement/billPay/billPaySetupApproverView/epic/fetchBillPaySetupApproverViewEpic.js +18 -2
- package/lib/esm/view/spendManagement/billPay/billPaySetupApproverView/epic/initializeBillPaySetupApproverViewUpdateDataEpic.js +0 -1
- package/lib/esm/view/spendManagement/billPay/billPaySetupApproverView/types/commonPayload.js +0 -3
- package/lib/esm/view/spendManagement/reimbursement/remiSetupApproverView/epic/fetchRemiSetupApproverViewEpic.js +18 -2
- package/lib/esm/view/spendManagement/reimbursement/remiSetupApproverView/epic/initializeRemiSetupApproverViewUpdateDataEpic.js +0 -1
- package/lib/index.d.ts +7 -5
- package/lib/index.js +24 -23
- package/lib/view/expenseAutomationView/selectorTypes/jeSchedulesSelectorTypes.d.ts +5 -3
- package/lib/view/expenseAutomationView/selectors/jeSchedulesViewSelector.d.ts +2 -5
- package/lib/view/expenseAutomationView/selectors/jeSchedulesViewSelector.js +4 -2
- package/lib/view/invoicing/dataImportView/dataImportViewSelector.d.ts +2 -0
- package/lib/view/invoicing/dataImportView/dataImportViewSelector.js +2 -0
- package/lib/view/invoicing/invoicingConfigView/invoicingConfigViewPayload.d.ts +1 -0
- package/lib/view/invoicing/invoicingConfigView/invoicingConfigViewReducer.d.ts +1 -1
- package/lib/view/invoicing/invoicingConfigView/invoicingConfigViewReducer.js +2 -0
- package/lib/view/invoicing/invoicingConfigView/invoicingConfigViewState.d.ts +1 -0
- package/lib/view/invoicing/invoicingOverview/invoicingOverviewPayload.d.ts +0 -1
- package/lib/view/invoicing/invoicingOverview/invoicingOverviewPayload.js +0 -1
- package/lib/view/invoicing/invoicingOverview/invoicingOverviewState.d.ts +0 -1
- package/lib/view/invoicing/invoicingSubscriptionDetailView/invoicingSubscriptionDetailViewSelector.d.ts +3 -1
- package/lib/view/invoicing/invoicingSubscriptionDetailView/invoicingSubscriptionDetailViewSelector.js +1 -0
- package/lib/view/invoicing/invoicingSubscriptionListView/invoicingSubscriptionListViewSelector.d.ts +2 -0
- package/lib/view/invoicing/invoicingSubscriptionListView/invoicingSubscriptionListViewSelector.js +1 -0
- package/lib/view/invoicing/invoicingSubscriptionListView/invoicingSubscriptionListViewState.d.ts +2 -2
- package/lib/view/invoicing/invoicingSubscriptionListView/invoicingSubscriptionListViewState.js +0 -2
- package/lib/view/invoicing/issueCreditNote/issueCreditNotePayload.d.ts +0 -1
- package/lib/view/invoicing/settingsView/invoicingBrandingFormConfig.d.ts +1 -0
- package/lib/view/invoicing/settingsView/invoicingBrandingFormConfig.js +5 -0
- package/lib/view/invoicing/settingsView/settingsViewSelector.d.ts +5 -1
- package/lib/view/invoicing/settingsView/settingsViewSelector.js +4 -0
- package/lib/view/invoicing/subscriptionAction/subscriptionActionRequestPayload.d.ts +8 -0
- package/lib/view/recommendation/recommendationPayload.d.ts +34 -0
- package/lib/view/recommendation/recommendationReducer.d.ts +2 -1
- package/lib/view/recommendation/recommendationReducer.js +14 -2
- package/lib/view/recommendation/submitRecommendationFeedbackEpic.d.ts +7 -0
- package/lib/view/recommendation/submitRecommendationFeedbackEpic.js +56 -0
- package/lib/view/spendManagement/billPay/billPaySetupApproverView/epic/fetchBillPaySetupApproverViewEpic.d.ts +2 -1
- package/lib/view/spendManagement/billPay/billPaySetupApproverView/epic/fetchBillPaySetupApproverViewEpic.js +18 -2
- package/lib/view/spendManagement/billPay/billPaySetupApproverView/epic/initializeBillPaySetupApproverViewUpdateDataEpic.js +0 -1
- package/lib/view/spendManagement/billPay/billPaySetupApproverView/types/commonPayload.d.ts +0 -1
- package/lib/view/spendManagement/billPay/billPaySetupApproverView/types/commonPayload.js +0 -3
- package/lib/view/spendManagement/billPay/billPaySetupApproverView/types/commonState.d.ts +0 -1
- package/lib/view/spendManagement/commonHistoryView/commonHistory.d.ts +1 -1
- package/lib/view/spendManagement/reimbursement/remiSetupApproverView/epic/fetchRemiSetupApproverViewEpic.d.ts +2 -1
- package/lib/view/spendManagement/reimbursement/remiSetupApproverView/epic/fetchRemiSetupApproverViewEpic.js +18 -2
- package/lib/view/spendManagement/reimbursement/remiSetupApproverView/epic/initializeRemiSetupApproverViewUpdateDataEpic.js +0 -1
- package/package.json +1 -1
|
@@ -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 { getAllSteps } from './getAllStepsHelper';
|
|
16
15
|
import { ALL_JE_PAGE_TABS, getJESchedulePeriodTabKey, } from '../types/jeSchedulesViewState';
|
|
16
|
+
import { getAllSteps } from './getAllStepsHelper';
|
|
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,7 +330,9 @@ export function getExpenseAutomationJESchedulesView(state) {
|
|
|
330
330
|
*/
|
|
331
331
|
const sumToAmount = (schedules) => {
|
|
332
332
|
const first = schedules[0];
|
|
333
|
-
const currency = first != null
|
|
333
|
+
const currency = first != null
|
|
334
|
+
? getScheduleAmountObject(first)
|
|
335
|
+
: allScheduleAmountFallback;
|
|
334
336
|
return {
|
|
335
337
|
...currency,
|
|
336
338
|
amount: sumAmount(schedules),
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { invoicingFieldHelpForGroup } from '../invoicingConfigView/invoicingConfigViewSelector';
|
|
1
2
|
/**
|
|
2
3
|
* Single bundled view for the invoicing data-import surfaces — consumers read
|
|
3
4
|
* only this. Carries the migration `sessions` list + `sessionsFetch`, the
|
|
@@ -7,6 +8,7 @@
|
|
|
7
8
|
export const getInvoicingDataImportView = (state) => {
|
|
8
9
|
const dataImportState = state.invoicingDataImportViewState;
|
|
9
10
|
return {
|
|
11
|
+
fieldHelp: invoicingFieldHelpForGroup(state, 'data_import'),
|
|
10
12
|
activeMigrationSessionId: dataImportState.activeDetailId,
|
|
11
13
|
sessionDetail: dataImportState.sessionDetail,
|
|
12
14
|
sessionDetailFetch: dataImportState.sessionDetailFetch,
|
|
@@ -34,6 +34,7 @@ export const initialState = {
|
|
|
34
34
|
discountStatusOptions: [],
|
|
35
35
|
dunningCaseStatusOptions: [],
|
|
36
36
|
invoiceStatusOptions: [],
|
|
37
|
+
subscriptionCancelReasonCodeOptions: [],
|
|
37
38
|
subscriptionStatusOptions: [],
|
|
38
39
|
transactionStatusOptions: [],
|
|
39
40
|
transactionTypeOptions: [],
|
|
@@ -103,6 +104,7 @@ export function mapInvoicingConfigPayloadToState(payload) {
|
|
|
103
104
|
discountStatusOptions: (payload.discount_status_options ?? []).map(toInvoicingNamedOption),
|
|
104
105
|
dunningCaseStatusOptions: (payload.dunning_case_status_options ?? []).map(toInvoicingNamedOption),
|
|
105
106
|
invoiceStatusOptions: (payload.invoice_status_options ?? []).map(toInvoicingNamedOption),
|
|
107
|
+
subscriptionCancelReasonCodeOptions: (payload.subscription_cancel_reason_code_options ?? []).map(toInvoicingNamedOption),
|
|
106
108
|
subscriptionStatusOptions: (payload.subscription_status_options ?? []).map(toInvoicingNamedOption),
|
|
107
109
|
transactionStatusOptions: (payload.transaction_status_options ?? []).map(toInvoicingNamedOption),
|
|
108
110
|
transactionTypeOptions: (payload.transaction_type_options ?? []).map(toInvoicingNamedOption),
|
|
@@ -37,7 +37,6 @@ 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,
|
|
41
40
|
});
|
|
42
41
|
export const mapInvoicingDashboardSummaryPayloadToState = (payload) => ({
|
|
43
42
|
customerMovement: {
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { getInvoicingSubscriptionById as getInvoicingSubscriptionByIdFromState } from '../../../entity/invoicing/invoicingSubscription/invoicingSubscriptionSelector';
|
|
2
|
-
import { invoicingFieldHelpForGroup } from '../invoicingConfigView/invoicingConfigViewSelector';
|
|
2
|
+
import { getInvoicingConfigView, 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,
|
|
9
10
|
actionState: getInvoicingSubscriptionActionState(invoicingSubscriptionID)(state),
|
|
10
11
|
subscription: getInvoicingSubscriptionById(state, invoicingSubscriptionID),
|
|
11
12
|
fetchState,
|
|
@@ -28,6 +28,7 @@ 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,
|
|
31
32
|
subscriptionLifecycleActionOptions: configState.subscriptionLifecycleActionOptions,
|
|
32
33
|
subscriptionMetadataEditAllowedFromStatuses: configState.subscriptionMetadataEditAllowedFromStatuses,
|
|
33
34
|
statusOptions,
|
package/lib/esm/view/invoicing/invoicingSubscriptionListView/invoicingSubscriptionListViewState.js
CHANGED
|
@@ -3,7 +3,6 @@ export const ALL_INVOICING_SUBSCRIPTION_SORT_KEYS = [
|
|
|
3
3
|
'subscription',
|
|
4
4
|
'customer',
|
|
5
5
|
'plan',
|
|
6
|
-
'product_code',
|
|
7
6
|
'term_end',
|
|
8
7
|
'next_billing',
|
|
9
8
|
'auto_collect',
|
|
@@ -15,7 +14,6 @@ export const INVOICING_SUBSCRIPTION_COLUMNS = [
|
|
|
15
14
|
{ key: 'subscription', sortable: true },
|
|
16
15
|
{ key: 'customer', sortable: false },
|
|
17
16
|
{ key: 'plan', sortable: true },
|
|
18
|
-
{ key: 'product_code', sortable: true },
|
|
19
17
|
{ key: 'term_end', sortable: true },
|
|
20
18
|
{ key: 'next_billing', sortable: true },
|
|
21
19
|
{ key: 'auto_collect', sortable: true },
|
|
@@ -7,6 +7,7 @@ export const initialInvoicingBrandingFormLocalData = {
|
|
|
7
7
|
dateFormat: '',
|
|
8
8
|
defaultMemo: '',
|
|
9
9
|
email: '',
|
|
10
|
+
invoiceFooterText: '',
|
|
10
11
|
invoicePrefix: '',
|
|
11
12
|
logoFileId: '',
|
|
12
13
|
phone: '',
|
|
@@ -19,6 +20,7 @@ export const entityToInvoicingBrandingFormLocalData = (settings) => ({
|
|
|
19
20
|
dateFormat: settings?.date_format ?? '',
|
|
20
21
|
defaultMemo: settings?.default_memo ?? '',
|
|
21
22
|
email: settings?.email ?? '',
|
|
23
|
+
invoiceFooterText: settings?.invoice_footer_text ?? '',
|
|
22
24
|
invoicePrefix: settings?.invoice_prefix ?? '',
|
|
23
25
|
logoFileId: settings?.logo_file_id ?? '',
|
|
24
26
|
phone: settings?.phone ?? '',
|
|
@@ -39,6 +41,9 @@ export const brandingLocalDataToSettingsPayload = (localData, address) => ({
|
|
|
39
41
|
date_format: trimOrUndefined(localData.dateFormat),
|
|
40
42
|
default_memo: trimOrUndefined(localData.defaultMemo),
|
|
41
43
|
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(),
|
|
42
47
|
invoice_prefix: trimOrUndefined(localData.invoicePrefix),
|
|
43
48
|
logo_file_id: localData.logoFileId,
|
|
44
49
|
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 } from '../invoicingConfigView/invoicingConfigViewSelector';
|
|
3
|
+
import { getInvoicingConfigView, invoicingFieldHelpForGroup, } 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,6 +26,7 @@ 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'),
|
|
29
30
|
error,
|
|
30
31
|
fetchState,
|
|
31
32
|
saveState: saveFetchState,
|
|
@@ -78,6 +79,7 @@ export const getInvoicingSettingsHubView = (state) => {
|
|
|
78
79
|
const { dunningScheduleActionOptions, enableState, error: configError, fetchState: configFetchState, qboAccountMappingKindOptions, qboCustomerMatchingOptions, qboSyncStatusOptions, status, } = getInvoicingConfigView(state);
|
|
79
80
|
const { canEnable, isQboConfigured, isStripeConnected } = deriveInvoicingEnablePrerequisites(state.invoicingSettingsViewState.settings, state.invoicingQboViewState.connection?.connected === true, qboAccountMappingKindOptions);
|
|
80
81
|
return {
|
|
82
|
+
fieldHelp: invoicingFieldHelpForGroup(state, 'settings'),
|
|
81
83
|
// Keeps the onboarding step in the gate: a tenant that has not accepted the
|
|
82
84
|
// terms cannot enable invoicing, whatever the integrations say.
|
|
83
85
|
canEnableInvoicing: status === 'settings' && canEnable,
|
|
@@ -108,6 +110,7 @@ export const getInvoicingQboSettingsFormView = (state) => {
|
|
|
108
110
|
const { fetchState: configFetchState, qboAccountMappingKindOptions, qboCustomerMatchingOptions, qboSyncStatusOptions, } = getInvoicingConfigView(state);
|
|
109
111
|
const qboView = getInvoicingQboView(state);
|
|
110
112
|
return {
|
|
113
|
+
fieldHelp: invoicingFieldHelpForGroup(state, 'settings'),
|
|
111
114
|
accountMappingKindOptions: qboAccountMappingKindOptions,
|
|
112
115
|
accounts: qboView.accounts,
|
|
113
116
|
backfillState: qboView.backfillState,
|
|
@@ -147,6 +150,7 @@ export const getInvoicingBrandingFormView = (state) => {
|
|
|
147
150
|
? getFormattedAddress(newAddress.addressToCreate)
|
|
148
151
|
: undefined;
|
|
149
152
|
return {
|
|
153
|
+
fieldHelp: invoicingFieldHelpForGroup(state, 'settings'),
|
|
150
154
|
addressLabel,
|
|
151
155
|
dateFormatOptions: getInvoicingConfigView(state).dateFormatOptions,
|
|
152
156
|
localData: brandingDraft ?? entityToInvoicingBrandingFormLocalData(settings),
|
|
@@ -131,6 +131,18 @@ 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
|
+
},
|
|
134
146
|
},
|
|
135
147
|
extraReducers: (builder) => {
|
|
136
148
|
builder.addCase(clearAll, (draft) => {
|
|
@@ -138,7 +150,7 @@ const recommendation = createSlice({
|
|
|
138
150
|
});
|
|
139
151
|
},
|
|
140
152
|
});
|
|
141
|
-
export const { fetchEntityRecommendationsByTransactionId, fetchEntityRecommendationsForLineUpdate, fetchRecommendationByEntityName, fetchRecommendationByEntityId, updateRecommendationForEntity, updateRecommendationForEntityFailure, indicateReadyToInitializeRecommendation, } = recommendation.actions;
|
|
153
|
+
export const { fetchEntityRecommendationsByTransactionId, fetchEntityRecommendationsForLineUpdate, fetchRecommendationByEntityName, fetchRecommendationByEntityId, updateRecommendationForEntity, updateRecommendationForEntityFailure, indicateReadyToInitializeRecommendation, submitRecommendationFeedback, } = recommendation.actions;
|
|
142
154
|
export default recommendation.reducer;
|
|
143
155
|
const doUpdateRecommendationForEntity = (draft, entityId, entityType, payload) => {
|
|
144
156
|
const key = getEntityRecommendationKey(entityType, entityId);
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { EMPTY } from 'rxjs';
|
|
2
|
+
import { catchError, filter, mergeMap } from 'rxjs/operators';
|
|
3
|
+
import { isSuccessStatus } from '../../responsePayload';
|
|
4
|
+
import { submitRecommendationFeedback } from './recommendationReducer';
|
|
5
|
+
const toRequestBody = (payload) => ({
|
|
6
|
+
line_id: payload.lineId ?? null,
|
|
7
|
+
dimension: payload.dimension,
|
|
8
|
+
recommendation_set_id: payload.recommendationSetId ?? null,
|
|
9
|
+
top_pick_source: payload.topPickSource ?? null,
|
|
10
|
+
shown_recommendations: (payload.shownRecommendations ?? []).map((recommendation) => ({
|
|
11
|
+
source: recommendation.source,
|
|
12
|
+
rank: recommendation.rank,
|
|
13
|
+
value: {
|
|
14
|
+
name: recommendation.value.name,
|
|
15
|
+
id: recommendation.value.id ?? null,
|
|
16
|
+
integration_id: recommendation.value.integrationId ?? null,
|
|
17
|
+
},
|
|
18
|
+
confidence: recommendation.confidence ?? null,
|
|
19
|
+
reasoning: recommendation.reasoning ?? null,
|
|
20
|
+
cot: recommendation.cot ?? [],
|
|
21
|
+
})),
|
|
22
|
+
selected: {
|
|
23
|
+
name: payload.selected.name,
|
|
24
|
+
id: payload.selected.id ?? null,
|
|
25
|
+
integration_id: payload.selected.integrationId ?? null,
|
|
26
|
+
is_new_entity: payload.selected.isNewEntity ?? false,
|
|
27
|
+
},
|
|
28
|
+
matched_source: payload.matchedSource ?? null,
|
|
29
|
+
matched_rank: payload.matchedRank ?? null,
|
|
30
|
+
outcome: payload.outcome,
|
|
31
|
+
reason_text: payload.reasonText ?? null,
|
|
32
|
+
skipped: payload.skipped ?? false,
|
|
33
|
+
retracts_feedback_id: payload.retractsFeedbackId ?? null,
|
|
34
|
+
features: payload.features ?? null,
|
|
35
|
+
});
|
|
36
|
+
// Fire-and-forget: the epic never re-emits an action. Feedback delivery is a
|
|
37
|
+
// side-effect that must not disrupt the categorization UX, so both the
|
|
38
|
+
// success and error paths complete silently (errors are logged for debugging).
|
|
39
|
+
export const submitRecommendationFeedbackEpic = (actions$, _state$, zeniAPI) => actions$.pipe(filter(submitRecommendationFeedback.match), mergeMap((action) => {
|
|
40
|
+
const { transactionId } = action.payload;
|
|
41
|
+
return zeniAPI
|
|
42
|
+
.postAndGetJSON(`${zeniAPI.apiEndPoints.accountMicroServiceBaseUrl}/1.0/transactions/${transactionId}/recommendation-feedback`, toRequestBody(action.payload))
|
|
43
|
+
.pipe(mergeMap((response) => {
|
|
44
|
+
if (!isSuccessStatus(response)) {
|
|
45
|
+
console.error('submitRecommendationFeedbackEpic: recommendation feedback was not recorded', response.status);
|
|
46
|
+
}
|
|
47
|
+
return EMPTY;
|
|
48
|
+
}), catchError((error) => {
|
|
49
|
+
console.error('submitRecommendationFeedbackEpic: failed to submit recommendation feedback', error);
|
|
50
|
+
return EMPTY;
|
|
51
|
+
}));
|
|
52
|
+
}));
|
|
@@ -2,13 +2,20 @@ 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';
|
|
5
6
|
import { updateAllUsers } from '../../../../../entity/user/userReducer';
|
|
6
7
|
import { createZeniAPIStatus, isSuccessResponse, } from '../../../../../responsePayload';
|
|
8
|
+
import { fetchClassList } from '../../../../classList/classListReducer';
|
|
7
9
|
import { fetchBillPaySetupApproverView, fetchBillPaySetupApproverViewFailure, fetchBillPaySetupApproverViewSuccess, } from '../billPaySetupApproverViewReducer';
|
|
8
10
|
export const fetchBillPaySetupApproverViewEpic = (actions$, state$, zeniAPI) => actions$.pipe(filter(fetchBillPaySetupApproverView.match), switchMap((action) => {
|
|
9
11
|
const { cacheOverride, useV3 } = action.payload;
|
|
10
|
-
const { billPaySetupApproverViewState, approvalRuleState } = state$.value;
|
|
12
|
+
const { billPaySetupApproverViewState, approvalRuleState, classListState } = state$.value;
|
|
13
|
+
const isAccountingClassesEnabled = getIsAccountingClassesEnabled(state$.value);
|
|
11
14
|
const approvalRules = getApprovalRulesByIds(approvalRuleState, billPaySetupApproverViewState.approvalRuleIds);
|
|
15
|
+
const shouldFetchClassList = isAccountingClassesEnabled &&
|
|
16
|
+
(cacheOverride === true ||
|
|
17
|
+
(classListState.hasValidState() === false &&
|
|
18
|
+
classListState.fetchState !== 'In-Progress'));
|
|
12
19
|
if (cacheOverride === true ||
|
|
13
20
|
approvalRules.length !==
|
|
14
21
|
billPaySetupApproverViewState.approvalRuleIds.length ||
|
|
@@ -28,6 +35,9 @@ export const fetchBillPaySetupApproverViewEpic = (actions$, state$, zeniAPI) =>
|
|
|
28
35
|
updateApprovalRules(response.data.approval_rules),
|
|
29
36
|
fetchBillPaySetupApproverViewSuccess(approvalRuleIds),
|
|
30
37
|
];
|
|
38
|
+
if (shouldFetchClassList) {
|
|
39
|
+
actions.push(fetchClassList());
|
|
40
|
+
}
|
|
31
41
|
return from(actions);
|
|
32
42
|
}
|
|
33
43
|
else {
|
|
@@ -37,6 +47,12 @@ export const fetchBillPaySetupApproverViewEpic = (actions$, state$, zeniAPI) =>
|
|
|
37
47
|
}
|
|
38
48
|
else {
|
|
39
49
|
const { approvalRuleIds } = billPaySetupApproverViewState;
|
|
40
|
-
|
|
50
|
+
const actions = [
|
|
51
|
+
fetchBillPaySetupApproverViewSuccess(approvalRuleIds),
|
|
52
|
+
];
|
|
53
|
+
if (shouldFetchClassList) {
|
|
54
|
+
actions.push(fetchClassList());
|
|
55
|
+
}
|
|
56
|
+
return from(actions);
|
|
41
57
|
}
|
|
42
58
|
}));
|
|
@@ -21,7 +21,6 @@ export const initializeBillPaySetupApproverViewUpdateDataEpic = (actions$, state
|
|
|
21
21
|
name: approvalRule.name,
|
|
22
22
|
description: approvalRule.description,
|
|
23
23
|
separationOfDuties: approvalRule.separationOfDuties,
|
|
24
|
-
isFallback: approvalRule.isFallback,
|
|
25
24
|
};
|
|
26
25
|
fetchActions.push(clearBillPaySetupApproverViewUpdateData(), saveBillPaySetupApproverViewUpdateData(billPaySetupApproverViewUpdateData));
|
|
27
26
|
}
|
package/lib/esm/view/spendManagement/billPay/billPaySetupApproverView/types/commonPayload.js
CHANGED
|
@@ -86,9 +86,6 @@ 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
|
-
}
|
|
92
89
|
if (isUpdate) {
|
|
93
90
|
payload.approval_rule_id = approverViewUpdateData.approvalRuleId;
|
|
94
91
|
}
|
|
@@ -2,13 +2,20 @@ 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';
|
|
5
6
|
import { updateAllUsers } from '../../../../../entity/user/userReducer';
|
|
6
7
|
import { createZeniAPIStatus, isSuccessResponse, } from '../../../../../responsePayload';
|
|
8
|
+
import { fetchClassList } from '../../../../classList/classListReducer';
|
|
7
9
|
import { fetchRemiSetupApproverView, fetchRemiSetupApproverViewFailure, fetchRemiSetupApproverViewSuccess, } from '../remiSetupApproverViewReducer';
|
|
8
10
|
export const fetchRemiSetupApproverViewEpic = (actions$, state$, zeniAPI) => actions$.pipe(filter(fetchRemiSetupApproverView.match), switchMap((action) => {
|
|
9
11
|
const { cacheOverride, resolveAttributeToUser, includeImplicitActors, useV3, } = action.payload;
|
|
10
|
-
const { remiSetupApproverViewState, approvalRuleState } = state$.value;
|
|
12
|
+
const { remiSetupApproverViewState, approvalRuleState, classListState } = state$.value;
|
|
13
|
+
const isAccountingClassesEnabled = getIsAccountingClassesEnabled(state$.value);
|
|
11
14
|
const approvalRules = getApprovalRulesByIds(approvalRuleState, remiSetupApproverViewState.approvalRuleIds);
|
|
15
|
+
const shouldFetchClassList = isAccountingClassesEnabled &&
|
|
16
|
+
(cacheOverride === true ||
|
|
17
|
+
(classListState.hasValidState() === false &&
|
|
18
|
+
classListState.fetchState !== 'In-Progress'));
|
|
12
19
|
if (cacheOverride === true ||
|
|
13
20
|
approvalRules.length !==
|
|
14
21
|
remiSetupApproverViewState.approvalRuleIds.length ||
|
|
@@ -30,6 +37,9 @@ export const fetchRemiSetupApproverViewEpic = (actions$, state$, zeniAPI) => act
|
|
|
30
37
|
updateApprovalRules(response.data.approval_rules),
|
|
31
38
|
fetchRemiSetupApproverViewSuccess(approvalRuleIds),
|
|
32
39
|
];
|
|
40
|
+
if (shouldFetchClassList) {
|
|
41
|
+
actions.push(fetchClassList());
|
|
42
|
+
}
|
|
33
43
|
return from(actions);
|
|
34
44
|
}
|
|
35
45
|
else {
|
|
@@ -39,6 +49,12 @@ export const fetchRemiSetupApproverViewEpic = (actions$, state$, zeniAPI) => act
|
|
|
39
49
|
}
|
|
40
50
|
else {
|
|
41
51
|
const { approvalRuleIds } = remiSetupApproverViewState;
|
|
42
|
-
|
|
52
|
+
const actions = [
|
|
53
|
+
fetchRemiSetupApproverViewSuccess(approvalRuleIds),
|
|
54
|
+
];
|
|
55
|
+
if (shouldFetchClassList) {
|
|
56
|
+
actions.push(fetchClassList());
|
|
57
|
+
}
|
|
58
|
+
return from(actions);
|
|
43
59
|
}
|
|
44
60
|
}));
|
|
@@ -21,7 +21,6 @@ export const initializeRemiSetupApproverViewUpdateDataEpic = (actions$, state$)
|
|
|
21
21
|
name: approvalRule.name,
|
|
22
22
|
description: approvalRule.description,
|
|
23
23
|
separationOfDuties: approvalRule.separationOfDuties,
|
|
24
|
-
isFallback: approvalRule.isFallback,
|
|
25
24
|
};
|
|
26
25
|
fetchActions.push(clearRemiSetupApproverViewUpdateData(), saveRemiSetupApproverViewUpdateData(remiSetupApproverViewUpdateData));
|
|
27
26
|
}
|
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 } from './view/expenseAutomationView/selectorTypes/jeSchedulesSelectorTypes';
|
|
314
|
+
import { ExpenseAutomationJESchedulesViewSelector, JEKpiSummary, JEScheduleRow } 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';
|
|
322
321
|
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 } from './view/recommendation/recommendationReducer';
|
|
423
|
+
import { fetchEntityRecommendationsByTransactionId, fetchEntityRecommendationsForLineUpdate, fetchRecommendationByEntityId, fetchRecommendationByEntityName, submitRecommendationFeedback } 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,8 +908,9 @@ 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, };
|
|
911
|
+
export { fetchEntityRecommendationsByTransactionId, fetchEntityRecommendationsForLineUpdate, fetchRecommendationByEntityId, fetchRecommendationByEntityName, submitRecommendationFeedback, };
|
|
912
912
|
export type { FetchEntityRecommendationsForLineUpdatePayload, RecommendationLineUpdateFlowType, } from './view/recommendation/recommendationReducer';
|
|
913
|
+
export type { RecommendationFeedbackDimension, RecommendationFeedbackOutcome, RecommendationFeedbackSource, RecommendationFeedbackValue, ShownRecommendationForFeedback, SubmitRecommendationFeedbackPayload, } from './view/recommendation/recommendationPayload';
|
|
913
914
|
export { fetchOwnerList };
|
|
914
915
|
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, };
|
|
915
916
|
export { CommonHistoryView, HistoricEvent, HistoricEventUpdate, ActivityHistorySelectorView, };
|
|
@@ -983,7 +984,7 @@ export { AiCfoViewSelector, getAiCfoView, getSuggestedQuestionsForPageContext, g
|
|
|
983
984
|
export { MessagePayload, ChatSessionPayload, AiCfoAnswerPayload, } from './entity/aiCfo/aiCfoPayload';
|
|
984
985
|
export { setNewSession, setSessions, updateAiCfoAnswerCardPolicyWizardPlan, upsertAnswerPayload, upsertOrAddQuestionAnswerPayload, addQuestionPayload, clearSession, toAiCfoExports, toAiCfoVisualization, appendSyntheticAiCfoAnswer, updateSyntheticAiCfoAnswer, removeSyntheticAiCfoAnswer, } from './entity/aiCfo/aiCfoReducer';
|
|
985
986
|
export { AiCfoSelectorView, getAllQuestionAnswersForChatSession, getQuestionAnswerByIdForChatSession, getAllQuestionsForChatSession, getAiCfoSelectorView, getSyntheticAiCfoAnswersForChatSession, getSyntheticAiCfoAnswerByQuestionAnswerId, ChatSessionWithOrderedQuestionAnswers, } from './entity/aiCfo/aiCfoSelector';
|
|
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';
|
|
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';
|
|
987
988
|
export { clearPolicyDocumentExtraction, extractPolicyDocument, fetchCardPolicyMccCategories, fetchCardPolicyRecommendationFromUpload, fetchCardPolicyVendorOptions, removeCardPolicyTemplate, updateCardPolicyMccCategories, updateCardPolicyMccCategoriesFailure, updateCardPolicyStats, updateCardPolicyTemplates, updateCardPolicyVendorOptions, updateCardPolicyVendorOptionsFailure, updateCreatedCardPolicyTemplate, updatePolicyDocumentExtractionFailure, updatePolicyDocumentExtractionSuccess, updatePolicyRecommendationFromUploadFailure, updatePolicyRecommendationFromUploadSuccess, } from './entity/cardPolicy/cardPolicyReducer';
|
|
988
989
|
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';
|
|
989
990
|
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';
|
|
@@ -1149,6 +1150,7 @@ export { getInvoicingDiscountActionState } from './view/invoicing/discountAction
|
|
|
1149
1150
|
export { runInvoicingSubscriptionAction } from './view/invoicing/subscriptionAction/subscriptionActionReducer';
|
|
1150
1151
|
export type { InvoicingSubscriptionActionState } from './view/invoicing/subscriptionAction/subscriptionActionState';
|
|
1151
1152
|
export type { RunInvoicingSubscriptionActionPayload } from './view/invoicing/subscriptionAction/subscriptionActionReducer';
|
|
1153
|
+
export type { InvoicingCancelSubscriptionValues } from './view/invoicing/subscriptionAction/subscriptionActionRequestPayload';
|
|
1152
1154
|
export { getInvoicingSubscriptionActionState } from './view/invoicing/subscriptionAction/subscriptionActionSelector';
|
|
1153
1155
|
export { runInvoicingDunningAction } from './view/invoicing/dunningAction/dunningActionReducer';
|
|
1154
1156
|
export type { InvoicingDunningActionState } from './view/invoicing/dunningAction/dunningActionState';
|