@zeniai/client-epic-state 5.1.97-betaAK1 → 5.1.97-betaAK3

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 (25) hide show
  1. package/lib/esm/index.js +1 -0
  2. package/lib/esm/view/invoicing/auditView/auditViewSelector.js +4 -0
  3. package/lib/esm/view/invoicing/couponView/couponViewSelector.js +2 -1
  4. package/lib/esm/view/invoicing/editInvoicingCouponDetailView/editInvoicingCouponDetailViewSelector.js +3 -0
  5. package/lib/esm/view/invoicing/editInvoicingSubscriptionDetailView/editInvoicingSubscriptionDetailViewSelector.js +5 -0
  6. package/lib/esm/view/invoicing/invoicingCatalogListView/invoicingCatalogListViewSelector.js +2 -1
  7. package/lib/esm/view/invoicing/invoicingSubscriptionListView/invoicingSubscriptionListViewSelector.js +4 -1
  8. package/lib/esm/view/invoicing/settingsView/settingsViewSelector.js +7 -1
  9. package/lib/index.d.ts +2 -0
  10. package/lib/index.js +3 -1
  11. package/lib/view/invoicing/auditView/auditViewSelector.d.ts +4 -0
  12. package/lib/view/invoicing/auditView/auditViewSelector.js +4 -0
  13. package/lib/view/invoicing/couponView/couponViewSelector.d.ts +3 -1
  14. package/lib/view/invoicing/couponView/couponViewSelector.js +2 -1
  15. package/lib/view/invoicing/editInvoicingCouponDetailView/editInvoicingCouponDetailViewSelector.d.ts +5 -2
  16. package/lib/view/invoicing/editInvoicingCouponDetailView/editInvoicingCouponDetailViewSelector.js +3 -0
  17. package/lib/view/invoicing/editInvoicingSubscriptionDetailView/editInvoicingSubscriptionDetailViewSelector.d.ts +5 -0
  18. package/lib/view/invoicing/editInvoicingSubscriptionDetailView/editInvoicingSubscriptionDetailViewSelector.js +5 -0
  19. package/lib/view/invoicing/invoicingCatalogListView/invoicingCatalogListViewSelector.d.ts +3 -1
  20. package/lib/view/invoicing/invoicingCatalogListView/invoicingCatalogListViewSelector.js +2 -1
  21. package/lib/view/invoicing/invoicingSubscriptionListView/invoicingSubscriptionListViewSelector.d.ts +5 -1
  22. package/lib/view/invoicing/invoicingSubscriptionListView/invoicingSubscriptionListViewSelector.js +4 -1
  23. package/lib/view/invoicing/settingsView/settingsViewSelector.d.ts +11 -1
  24. package/lib/view/invoicing/settingsView/settingsViewSelector.js +7 -1
  25. package/package.json +1 -1
package/lib/esm/index.js CHANGED
@@ -852,3 +852,4 @@ export { INVOICING_QBO_CUSTOMER_MATCHING_MODES, getInvoicingQboAccountMappingId,
852
852
  // ── Invoicing: config ─────────────────────────────────────────────────────────
853
853
  export { acceptInvoicingTerms, clearInvoicingConfig, enableInvoicing, fetchInvoicingConfig, resetInvoicingConfigActionStates, updateInvoicingConfig, } from './view/invoicing/invoicingConfigView/invoicingConfigViewReducer';
854
854
  export { getInvoicingConfigView } from './view/invoicing/invoicingConfigView/invoicingConfigViewSelector';
855
+ export { getInvoicingOnboardingGateView } from './view/invoicing/invoicingConfigView/invoicingConfigViewSelector';
@@ -1,3 +1,4 @@
1
+ import { getInvoicingConfigView } from '../invoicingConfigView/invoicingConfigViewSelector';
1
2
  /**
2
3
  * Single bundled view for the invoicing audit log — consumers read only this.
3
4
  * Carries the log `items`, pagination (`nextCursor` + derived `hasMore`), the
@@ -5,7 +6,10 @@
5
6
  */
6
7
  export const getInvoicingAuditView = (state) => {
7
8
  const auditState = state.invoicingAuditViewState;
9
+ const { auditLogEntityRouteOptions, auditLogListSortFieldOptions } = getInvoicingConfigView(state);
8
10
  return {
11
+ auditLogEntityRouteOptions,
12
+ auditLogListSortFieldOptions,
9
13
  filters: auditState.filters,
10
14
  hasMore: auditState.nextCursor != null,
11
15
  items: auditState.items,
@@ -18,7 +18,7 @@ export const getInvoicingCouponCounts = (state) => state.invoicingCouponViewStat
18
18
  * array (and the wrapping view object) keep referential identity until the
19
19
  * coupon entity slice or the list-view slice actually change.
20
20
  */
21
- export const getInvoicingCouponListView = createSelector((state) => state.invoicingCouponState, (state) => state.invoicingCouponViewState, (state) => state.invoicingConfigViewState.discountStatusOptions, (couponState, listViewState, statusOptions) => {
21
+ export const getInvoicingCouponListView = createSelector((state) => state.invoicingCouponState, (state) => state.invoicingCouponViewState, (state) => state.invoicingConfigViewState.discountStatusOptions, (state) => state.invoicingConfigViewState.discountLifecycleActionOptions, (couponState, listViewState, statusOptions, discountLifecycleActionOptions) => {
22
22
  const { activeTab } = listViewState;
23
23
  const allCoupons = listViewState.ids
24
24
  .map((id) => couponState.couponByID[id])
@@ -39,6 +39,7 @@ export const getInvoicingCouponListView = createSelector((state) => state.invoic
39
39
  countsFetchState: listViewState.countsFetchState,
40
40
  filters: listViewState.filters,
41
41
  nextCursor: listViewState.nextCursor,
42
+ discountLifecycleActionOptions,
42
43
  statusOptions,
43
44
  tabIds: invoicingTabIdsFromConfig({
44
45
  allTabIds: ALL_INVOICING_COUPON_TAB_IDS,
@@ -9,7 +9,10 @@ import { entityToInvoicingCouponFormLocalData, } from './editInvoicingCouponDeta
9
9
  */
10
10
  export const getEditInvoicingCouponDetailViewState = (state, couponId) => {
11
11
  const { error, fetchState, savedCouponId } = state.editInvoicingCouponDetailViewState;
12
+ const { discountLifecycleActionOptions, fetchState: configFetchState } = getInvoicingConfigView(state);
12
13
  return {
14
+ configFetchState,
15
+ discountLifecycleActionOptions,
13
16
  coupon: couponId != null
14
17
  ? getInvoicingCouponById(state.invoicingCouponState, couponId)
15
18
  : undefined,
@@ -1,12 +1,17 @@
1
1
  import { getInvoicingSubscriptionById } from '../../../entity/invoicing/invoicingSubscription/invoicingSubscriptionSelector';
2
2
  import { getFormattedAddress } from '../../addressView/addressViewSelector';
3
3
  import { getInvoicingCouponListItems } from '../couponView/couponViewSelector';
4
+ import { getInvoicingConfigView } from '../invoicingConfigView/invoicingConfigViewSelector';
4
5
  import { getInvoicingCatalogListView, getInvoicingCatalogPrices, } from '../invoicingCatalogListView/invoicingCatalogListViewSelector';
5
6
  import { getInvoicingCustomerListView } from '../invoicingCustomerListView/invoicingCustomerListViewSelector';
6
7
  import { INVOICING_SUBSCRIPTION_BILLING_FREQUENCY_VALUES, INVOICING_SUBSCRIPTION_SHIPPING_ADDRESS_TYPE, entityToInvoicingSubscriptionFormLocalData, } from './invoicingSubscriptionFormConfig';
7
8
  export const getEditInvoicingSubscriptionDetailViewState = (state, invoicingSubscriptionID) => {
8
9
  const { error, fetchState, savedSubscriptionId } = state.editInvoicingSubscriptionDetailViewState;
10
+ const { subscriptionCommercialEditAllowedFromStatuses, subscriptionLifecycleActionOptions, subscriptionMetadataEditAllowedFromStatuses, } = getInvoicingConfigView(state);
9
11
  return {
12
+ subscriptionCommercialEditAllowedFromStatuses,
13
+ subscriptionLifecycleActionOptions,
14
+ subscriptionMetadataEditAllowedFromStatuses,
10
15
  subscription: invoicingSubscriptionID != null
11
16
  ? getInvoicingSubscriptionById(state.invoicingSubscriptionState, invoicingSubscriptionID)
12
17
  : undefined,
@@ -15,7 +15,8 @@ export const getInvoicingCatalogPrices = (items) => items.flatMap((item) => (ite
15
15
  * denormalized arrays keep referential identity. The base `fetchState`/`error`
16
16
  * track the plan list; the product list has its own `productFetchState`.
17
17
  */
18
- export const getInvoicingCatalogListView = createSelector((state) => state.invoicingPlanState, (state) => state.invoicingCatalogListViewState, (planState, listViewState) => ({
18
+ export const getInvoicingCatalogListView = createSelector((state) => state.invoicingPlanState, (state) => state.invoicingCatalogListViewState, (state) => state.invoicingConfigViewState.catalogItemLifecycleActionOptions, (planState, listViewState, catalogItemLifecycleActionOptions) => ({
19
+ catalogItemLifecycleActionOptions,
19
20
  plans: getInvoicingPlansByIds(planState, listViewState.planIds),
20
21
  productColumns: INVOICING_PRODUCT_COLUMNS,
21
22
  products: getInvoicingPlansByIds(planState, listViewState.productIds),
@@ -9,7 +9,7 @@ import { INVOICING_SUBSCRIPTION_COLUMNS, ALL_INVOICING_SUBSCRIPTION_TAB_IDS, } f
9
9
  * re-rendered on every unrelated redux action because a fresh array was built
10
10
  * each call.
11
11
  */
12
- export const getInvoicingSubscriptionListView = createSelector((state) => state.invoicingSubscriptionState, (state) => state.invoicingSubscriptionListViewState, (state) => state.invoicingConfigViewState.subscriptionStatusOptions, (subscriptionState, listViewState, statusOptions) => {
12
+ export const getInvoicingSubscriptionListView = createSelector((state) => state.invoicingSubscriptionState, (state) => state.invoicingSubscriptionListViewState, (state) => state.invoicingConfigViewState.subscriptionStatusOptions, (state) => state.invoicingConfigViewState, (subscriptionState, listViewState, statusOptions, configState) => {
13
13
  const { activeTab } = listViewState;
14
14
  const allSubscriptions = getInvoicingSubscriptionsByIds(subscriptionState, listViewState.ids);
15
15
  // The list API ignores `status`, so it returns every status; filter to the
@@ -27,6 +27,9 @@ export const getInvoicingSubscriptionListView = createSelector((state) => state.
27
27
  filters: listViewState.filters,
28
28
  count: listViewState.counts,
29
29
  countsFetchState: listViewState.countsFetchState,
30
+ subscriptionCommercialEditAllowedFromStatuses: configState.subscriptionCommercialEditAllowedFromStatuses,
31
+ subscriptionLifecycleActionOptions: configState.subscriptionLifecycleActionOptions,
32
+ subscriptionMetadataEditAllowedFromStatuses: configState.subscriptionMetadataEditAllowedFromStatuses,
30
33
  statusOptions,
31
34
  tabIds: invoicingTabIdsFromConfig({
32
35
  allTabIds: ALL_INVOICING_SUBSCRIPTION_TAB_IDS,
@@ -72,11 +72,17 @@ export function deriveInvoicingEnablePrerequisites(settings, isQboConnected, qbo
72
72
  * and QBO slices read here are only fetched once a settings screen is mounted.
73
73
  */
74
74
  export const getInvoicingSettingsHubView = (state) => {
75
- const { enableState, qboAccountMappingKindOptions, status } = getInvoicingConfigView(state);
75
+ const { dunningScheduleActionOptions, enableState, error: configError, fetchState: configFetchState, qboAccountMappingKindOptions, qboCustomerMatchingOptions, qboSyncStatusOptions, status, } = getInvoicingConfigView(state);
76
76
  const { canEnable, isQboConfigured, isStripeConnected } = deriveInvoicingEnablePrerequisites(state.invoicingSettingsViewState.settings, state.invoicingQboViewState.connection?.connected === true, qboAccountMappingKindOptions);
77
77
  return {
78
78
  canEnableInvoicing: status === 'settings' && canEnable,
79
+ configError,
80
+ configFetchState,
81
+ dunningScheduleActionOptions,
79
82
  isEnablingInvoicing: enableState.fetchState === 'In-Progress',
83
+ qboAccountMappingKindOptions,
84
+ qboCustomerMatchingOptions,
85
+ qboSyncStatusOptions,
80
86
  isQboConfigured,
81
87
  isStripeConnected,
82
88
  status,
package/lib/index.d.ts CHANGED
@@ -1229,5 +1229,7 @@ export { INVOICING_QBO_CUSTOMER_MATCHING_MODES, getInvoicingQboAccountMappingId,
1229
1229
  export type { InvoicingNamedOption, InvoicingNamedOptionsByKey, InvoicingQboAccountMappingKindOption, InvoicingQboAccountMappingsPayload, InvoicingQboCustomerMatchingMode, InvoicingQboSettingsPayload, } from './entity/invoicing/invoicingCommonPayload';
1230
1230
  export { acceptInvoicingTerms, clearInvoicingConfig, enableInvoicing, fetchInvoicingConfig, resetInvoicingConfigActionStates, updateInvoicingConfig, } from './view/invoicing/invoicingConfigView/invoicingConfigViewReducer';
1231
1231
  export { getInvoicingConfigView } from './view/invoicing/invoicingConfigView/invoicingConfigViewSelector';
1232
+ export { getInvoicingOnboardingGateView } from './view/invoicing/invoicingConfigView/invoicingConfigViewSelector';
1233
+ export type { InvoicingOnboardingGateView } from './view/invoicing/invoicingConfigView/invoicingConfigViewSelector';
1232
1234
  export type { InvoicingConfigView } from './view/invoicing/invoicingConfigView/invoicingConfigViewSelector';
1233
1235
  export type { InvoicingOnboardingStatus } from './view/invoicing/invoicingConfigView/invoicingConfigViewPayload';
package/lib/index.js CHANGED
@@ -84,7 +84,7 @@ exports.clearInvoicingCustomerListView = exports.updateInvoicingCustomers = expo
84
84
  exports.fetchInvoicingTransactionList = exports.clearInvoicingTransactionListView = exports.updateInvoicingTransactions = exports.removeInvoicingTransaction = exports.clearAllInvoicingTransactions = exports.getInvoicingSubscriptionDetail = exports.getInvoicingSubscriptionById = exports.fetchInvoicingSubscriptionDetail = exports.clearInvoicingSubscriptionDetailView = exports.getInvoicingSubscriptionListView = exports.INVOICING_SUBSCRIPTION_COLUMNS = exports.ALL_INVOICING_SUBSCRIPTION_TAB_IDS = exports.ALL_INVOICING_SUBSCRIPTION_SORT_KEYS = exports.updateInvoicingSubscriptionFilters = exports.setInvoicingSubscriptionActiveTab = exports.fetchInvoicingSubscriptionListPage = exports.fetchInvoicingSubscriptionList = exports.fetchInvoicingSubscriptionCounts = exports.clearInvoicingSubscriptionListView = exports.updateInvoicingSubscriptions = exports.removeInvoicingSubscription = exports.clearAllInvoicingSubscriptions = exports.resetPromotionalCreditAction = exports.submitAddPromotionalCredits = exports.getInvoicingSetupIntentFetchState = exports.getInvoicingSetupIntent = exports.getInvoicingSentPaymentLinkMagicUrl = exports.getInvoicingSentPaymentLinkEmail = exports.getInvoicingPlaidLinkTokenFetchState = exports.getInvoicingPlaidLinkToken = exports.getInvoicingPaymentMethodSaveState = exports.getInvoicingPaymentLinkSendState = exports.sendInvoicingPaymentLink = exports.saveInvoicingPaymentMethod = exports.resetInvoicingCustomerPaymentMethod = exports.fetchInvoicingPlaidLinkToken = exports.createInvoicingSetupIntent = exports.getInvoicingCustomerDetail = exports.fetchInvoicingCustomerDetailPage = exports.fetchInvoicingCustomerDetail = exports.clearInvoicingCustomerDetailView = exports.getInvoicingCustomerListView = exports.INVOICING_CUSTOMER_COLUMNS = exports.ALL_INVOICING_CUSTOMER_TAB_IDS = exports.ALL_INVOICING_CUSTOMER_SORT_KEYS = exports.updateInvoicingCustomerFilters = exports.setInvoicingCustomerActiveTab = exports.fetchInvoicingCustomerListPage = exports.fetchInvoicingCustomerList = exports.fetchInvoicingCustomerCounts = void 0;
85
85
  exports.fetchInvoicingCouponDetail = exports.clearInvoicingCouponDetailView = exports.getInvoicingCouponById = exports.getInvoicingCouponListView = exports.getInvoicingCouponListNextCursor = exports.getInvoicingCouponListItems = exports.getInvoicingCouponListHasMore = exports.getInvoicingCouponListFilters = exports.getInvoicingCouponListFetchState = exports.getInvoicingCouponCounts = exports.INVOICING_COUPON_COLUMNS = exports.ALL_INVOICING_COUPON_TAB_IDS = exports.ALL_INVOICING_COUPON_SORT_KEYS = exports.updateInvoicingCouponFilters = exports.setInvoicingCouponActiveTab = exports.fetchInvoicingCouponListPage = exports.fetchInvoicingCouponList = exports.fetchInvoicingCouponCounts = exports.clearInvoicingCouponView = exports.updateInvoicingCoupons = exports.removeInvoicingCoupon = exports.clearAllInvoicingCoupons = exports.getInvoicingCreditNoteDetail = exports.getInvoicingCreditNoteById = exports.fetchInvoicingCreditNoteDetail = exports.clearInvoicingCreditNoteDetailView = exports.getInvoicingCreditNoteListView = exports.INVOICING_CREDIT_NOTE_COLUMNS = exports.ALL_INVOICING_CREDIT_NOTE_TAB_IDS = exports.ALL_INVOICING_CREDIT_NOTE_SORT_KEYS = exports.updateInvoicingCreditNoteFilters = exports.setInvoicingCreditNoteActiveTab = exports.fetchInvoicingCreditNoteListPage = exports.fetchInvoicingCreditNoteList = exports.fetchInvoicingCreditNoteCounts = exports.clearInvoicingCreditNoteListView = exports.updateInvoicingCreditNotes = exports.removeInvoicingCreditNote = exports.clearAllInvoicingCreditNotes = exports.getInvoicingTransactionDetail = exports.getInvoicingTransactionById = exports.fetchInvoicingTransactionDetail = exports.clearInvoicingTransactionDetailView = exports.getInvoicingTransactionListView = exports.INVOICING_TRANSACTION_COLUMNS = exports.ALL_INVOICING_TRANSACTION_TAB_IDS = exports.ALL_INVOICING_TRANSACTION_SORT_KEYS = exports.updateInvoicingTransactionFilters = exports.setInvoicingTransactionActiveTab = exports.fetchInvoicingTransactionListPage = void 0;
86
86
  exports.saveInvoicingSettings = exports.resetSaveInvoicingSettings = exports.resetInvoicingBrandingFormDraft = exports.fetchInvoicingSettings = exports.disconnectInvoicingStripe = exports.connectInvoicingStripe = exports.clearInvoicingSettings = exports.getInvoicingProductById = exports.getInvoicingPlanById = exports.getInvoicingCatalogItemDetail = exports.fetchInvoicingCatalogItemDetail = exports.clearInvoicingCatalogItemDetailView = exports.getInvoicingCatalogListView = exports.INVOICING_PRODUCT_COLUMNS = exports.ALL_INVOICING_PRODUCT_SORT_KEYS = exports.updateInvoicingCatalogProductFilters = exports.updateInvoicingCatalogPlanFilters = exports.fetchInvoicingCatalogProductList = exports.fetchInvoicingCatalogPlanList = exports.fetchInvoicingCatalogListPage = exports.fetchInvoicingCatalogCounts = exports.clearInvoicingCatalogListView = exports.updateInvoicingProducts = exports.removeInvoicingProduct = exports.clearAllInvoicingProducts = exports.updateInvoicingPlans = exports.removeInvoicingPlan = exports.mergeInvoicingPlanSubFamily = exports.clearAllInvoicingPlans = exports.getInvoicingDunningEmailPreview = exports.getInvoicingDunningCaseDetail = exports.getInvoicingDunningCaseById = exports.invalidateInvoicingDunningEmailPreview = exports.fetchInvoicingDunningEmailPreviewPage = exports.fetchInvoicingDunningCaseDetail = exports.clearInvoicingDunningCaseDetailView = exports.getInvoicingDunningCaseListView = exports.INVOICING_DUNNING_CASE_COLUMNS = exports.ALL_INVOICING_DUNNING_CASE_TAB_IDS = exports.ALL_INVOICING_DUNNING_CASE_SORT_KEYS = exports.updateInvoicingDunningCaseFilters = exports.setInvoicingDunningCaseActiveTab = exports.fetchInvoicingDunningCaseListPage = exports.fetchInvoicingDunningCaseList = exports.fetchInvoicingDunningCaseCounts = exports.clearInvoicingDunningCaseListView = exports.updateInvoicingDunningCases = exports.removeInvoicingDunningCase = exports.clearAllInvoicingDunningCases = exports.getInvoicingCouponDetail = void 0;
87
- exports.getInvoicingConfigView = exports.updateInvoicingConfig = exports.resetInvoicingConfigActionStates = exports.fetchInvoicingConfig = exports.enableInvoicing = exports.clearInvoicingConfig = exports.acceptInvoicingTerms = exports.withInvoicingQboAccountMappingId = exports.toInvoicingQboCustomerMatchingMode = exports.toInvoicingNamedOptionsByKey = exports.getInvoicingQboAccountMappingId = exports.INVOICING_QBO_CUSTOMER_MATCHING_MODES = exports.getInvoicingQboView = exports.startInvoicingQboBackfill = exports.retryInvoicingQboSyncTask = exports.fetchInvoicingQboSyncHealth = exports.fetchInvoicingQboConnection = exports.fetchInvoicingQboClasses = exports.fetchInvoicingQboAccounts = exports.clearInvoicingQboView = exports.isStripeConnectedFromSettings = exports.initialInvoicingBrandingFormLocalData = exports.entityToInvoicingBrandingFormLocalData = exports.INVOICING_BUSINESS_ADDRESS_TYPE = exports.getInvoicingSettingsView = exports.getInvoicingSettingsHubView = exports.getInvoicingSettingsFetchState = exports.getInvoicingSettings = exports.getInvoicingBrandingFormView = exports.updateInvoicingSettings = exports.updateInvoicingBrandingFormDraft = exports.submitInvoicingBrandingForm = void 0;
87
+ exports.getInvoicingOnboardingGateView = exports.getInvoicingConfigView = exports.updateInvoicingConfig = exports.resetInvoicingConfigActionStates = exports.fetchInvoicingConfig = exports.enableInvoicing = exports.clearInvoicingConfig = exports.acceptInvoicingTerms = exports.withInvoicingQboAccountMappingId = exports.toInvoicingQboCustomerMatchingMode = exports.toInvoicingNamedOptionsByKey = exports.getInvoicingQboAccountMappingId = exports.INVOICING_QBO_CUSTOMER_MATCHING_MODES = exports.getInvoicingQboView = exports.startInvoicingQboBackfill = exports.retryInvoicingQboSyncTask = exports.fetchInvoicingQboSyncHealth = exports.fetchInvoicingQboConnection = exports.fetchInvoicingQboClasses = exports.fetchInvoicingQboAccounts = exports.clearInvoicingQboView = exports.isStripeConnectedFromSettings = exports.initialInvoicingBrandingFormLocalData = exports.entityToInvoicingBrandingFormLocalData = exports.INVOICING_BUSINESS_ADDRESS_TYPE = exports.getInvoicingSettingsView = exports.getInvoicingSettingsHubView = exports.getInvoicingSettingsFetchState = exports.getInvoicingSettings = exports.getInvoicingBrandingFormView = exports.updateInvoicingSettings = exports.updateInvoicingBrandingFormDraft = exports.submitInvoicingBrandingForm = void 0;
88
88
  const allowedValue_1 = require("./commonStateTypes/allowedValue");
89
89
  Object.defineProperty(exports, "isAllowedValueWithCode", { enumerable: true, get: function () { return allowedValue_1.isAllowedValueWithCode; } });
90
90
  Object.defineProperty(exports, "isAllowedValueWithID", { enumerable: true, get: function () { return allowedValue_1.isAllowedValueWithID; } });
@@ -3173,3 +3173,5 @@ Object.defineProperty(exports, "resetInvoicingConfigActionStates", { enumerable:
3173
3173
  Object.defineProperty(exports, "updateInvoicingConfig", { enumerable: true, get: function () { return invoicingConfigViewReducer_1.updateInvoicingConfig; } });
3174
3174
  var invoicingConfigViewSelector_1 = require("./view/invoicing/invoicingConfigView/invoicingConfigViewSelector");
3175
3175
  Object.defineProperty(exports, "getInvoicingConfigView", { enumerable: true, get: function () { return invoicingConfigViewSelector_1.getInvoicingConfigView; } });
3176
+ var invoicingConfigViewSelector_2 = require("./view/invoicing/invoicingConfigView/invoicingConfigViewSelector");
3177
+ Object.defineProperty(exports, "getInvoicingOnboardingGateView", { enumerable: true, get: function () { return invoicingConfigViewSelector_2.getInvoicingOnboardingGateView; } });
@@ -1,8 +1,12 @@
1
1
  import { SelectorView } from '../../../commonStateTypes/viewAndReport/viewAndReport';
2
+ import type { AuditLogEntityRouteOption, AuditLogListSortFieldOption } from '../../../entity/invoicing/invoicingCommonPayload';
2
3
  import { RootState } from '../../../reducer';
3
4
  import { InvoicingAuditEntry } from './auditViewPayload';
4
5
  import { InvoicingAuditFilters } from './auditViewState';
5
6
  export interface InvoicingAuditView extends SelectorView {
7
+ /** Config-owned; folded in so the screen reads one selector. */
8
+ auditLogEntityRouteOptions: AuditLogEntityRouteOption[];
9
+ auditLogListSortFieldOptions: AuditLogListSortFieldOption[];
6
10
  filters: InvoicingAuditFilters;
7
11
  hasMore: boolean;
8
12
  items: InvoicingAuditEntry[];
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getInvoicingAuditView = void 0;
4
+ const invoicingConfigViewSelector_1 = require("../invoicingConfigView/invoicingConfigViewSelector");
4
5
  /**
5
6
  * Single bundled view for the invoicing audit log — consumers read only this.
6
7
  * Carries the log `items`, pagination (`nextCursor` + derived `hasMore`), the
@@ -8,7 +9,10 @@ exports.getInvoicingAuditView = void 0;
8
9
  */
9
10
  const getInvoicingAuditView = (state) => {
10
11
  const auditState = state.invoicingAuditViewState;
12
+ const { auditLogEntityRouteOptions, auditLogListSortFieldOptions } = (0, invoicingConfigViewSelector_1.getInvoicingConfigView)(state);
11
13
  return {
14
+ auditLogEntityRouteOptions,
15
+ auditLogListSortFieldOptions,
12
16
  filters: auditState.filters,
13
17
  hasMore: auditState.nextCursor != null,
14
18
  items: auditState.items,
@@ -1,7 +1,7 @@
1
1
  import { FetchStateAndError } from '../../../commonStateTypes/common';
2
2
  import { SelectorView } from '../../../commonStateTypes/viewAndReport/viewAndReport';
3
3
  import { InvoicingCoupon } from '../../../entity/invoicing/coupon/couponState';
4
- import { InvoicingListCounts, InvoicingNamedOption } from '../../../entity/invoicing/invoicingCommonPayload';
4
+ import { InvoicingListCounts, InvoicingNamedOption, InvoicingDiscountLifecycleActionOption } from '../../../entity/invoicing/invoicingCommonPayload';
5
5
  import { RootState } from '../../../reducer';
6
6
  import { InvoicingListSort } from '../invoicingApiHelper';
7
7
  import { InvoicingCouponColumnConfig, InvoicingCouponFilters, InvoicingCouponTabId } from './couponViewState';
@@ -17,6 +17,8 @@ export interface InvoicingCouponListView extends SelectorView {
17
17
  count: InvoicingListCounts;
18
18
  countsFetchState: FetchStateAndError;
19
19
  coupons: InvoicingCoupon[];
20
+ /** Config-owned; folded in so the screen reads one selector. */
21
+ discountLifecycleActionOptions: InvoicingDiscountLifecycleActionOption[];
20
22
  filters: InvoicingCouponFilters;
21
23
  nextCursor: string | null;
22
24
  /** Config status/type list; the page labels tabs and badges from it. */
@@ -27,7 +27,7 @@ exports.getInvoicingCouponCounts = getInvoicingCouponCounts;
27
27
  * array (and the wrapping view object) keep referential identity until the
28
28
  * coupon entity slice or the list-view slice actually change.
29
29
  */
30
- exports.getInvoicingCouponListView = (0, toolkit_1.createSelector)((state) => state.invoicingCouponState, (state) => state.invoicingCouponViewState, (state) => state.invoicingConfigViewState.discountStatusOptions, (couponState, listViewState, statusOptions) => {
30
+ exports.getInvoicingCouponListView = (0, toolkit_1.createSelector)((state) => state.invoicingCouponState, (state) => state.invoicingCouponViewState, (state) => state.invoicingConfigViewState.discountStatusOptions, (state) => state.invoicingConfigViewState.discountLifecycleActionOptions, (couponState, listViewState, statusOptions, discountLifecycleActionOptions) => {
31
31
  const { activeTab } = listViewState;
32
32
  const allCoupons = listViewState.ids
33
33
  .map((id) => couponState.couponByID[id])
@@ -48,6 +48,7 @@ exports.getInvoicingCouponListView = (0, toolkit_1.createSelector)((state) => st
48
48
  countsFetchState: listViewState.countsFetchState,
49
49
  filters: listViewState.filters,
50
50
  nextCursor: listViewState.nextCursor,
51
+ discountLifecycleActionOptions,
51
52
  statusOptions,
52
53
  tabIds: (0, invoicingTabHelper_1.invoicingTabIdsFromConfig)({
53
54
  allTabIds: couponViewState_1.ALL_INVOICING_COUPON_TAB_IDS,
@@ -1,10 +1,13 @@
1
- import { ID } from '../../../commonStateTypes/common';
1
+ import { FetchState, ID } from '../../../commonStateTypes/common';
2
2
  import { SelectorView } from '../../../commonStateTypes/viewAndReport/viewAndReport';
3
3
  import { InvoicingCoupon } from '../../../entity/invoicing/coupon/couponState';
4
- import { InvoicingFormOption } from '../../../entity/invoicing/invoicingCommonPayload';
4
+ import { InvoicingDiscountLifecycleActionOption, InvoicingFormOption } from '../../../entity/invoicing/invoicingCommonPayload';
5
5
  import { RootState } from '../../../reducer';
6
6
  import { InvoicingCouponFormLocalData } from './editInvoicingCouponDetailViewState';
7
7
  export interface EditInvoicingCouponDetailView extends SelectorView {
8
+ /** Config-owned; folded in so the screen reads one selector. */
9
+ configFetchState: FetchState;
10
+ discountLifecycleActionOptions: InvoicingDiscountLifecycleActionOption[];
8
11
  coupon?: InvoicingCoupon;
9
12
  savedCouponId?: ID;
10
13
  }
@@ -12,7 +12,10 @@ const editInvoicingCouponDetailViewState_1 = require("./editInvoicingCouponDetai
12
12
  */
13
13
  const getEditInvoicingCouponDetailViewState = (state, couponId) => {
14
14
  const { error, fetchState, savedCouponId } = state.editInvoicingCouponDetailViewState;
15
+ const { discountLifecycleActionOptions, fetchState: configFetchState } = (0, invoicingConfigViewSelector_1.getInvoicingConfigView)(state);
15
16
  return {
17
+ configFetchState,
18
+ discountLifecycleActionOptions,
16
19
  coupon: couponId != null
17
20
  ? (0, couponSelector_1.getInvoicingCouponById)(state.invoicingCouponState, couponId)
18
21
  : undefined,
@@ -3,6 +3,7 @@ import { SelectorView } from '../../../commonStateTypes/viewAndReport/viewAndRep
3
3
  import { InvoicingCoupon } from '../../../entity/invoicing/coupon/couponState';
4
4
  import { InvoicingCustomer } from '../../../entity/invoicing/invoicingCustomer/invoicingCustomerState';
5
5
  import { InvoicingSubscription } from '../../../entity/invoicing/invoicingSubscription/invoicingSubscriptionState';
6
+ import { InvoicingSubscriptionLifecycleActionOption } from '../../../entity/invoicing/invoicingCommonPayload';
6
7
  import { InvoicingProduct } from '../../../entity/invoicing/product/productState';
7
8
  import { RootState } from '../../../reducer';
8
9
  import { InvoicingSubscriptionFormLocalData } from './editInvoicingSubscriptionDetailViewState';
@@ -13,6 +14,10 @@ import { InvoicingSubscriptionFormLocalData } from './editInvoicingSubscriptionD
13
14
  * prefill the form.
14
15
  */
15
16
  export interface EditInvoicingSubscriptionDetailView extends SelectorView {
17
+ /** Config-owned; folded in so the screen reads one selector. */
18
+ subscriptionCommercialEditAllowedFromStatuses: string[];
19
+ subscriptionLifecycleActionOptions: InvoicingSubscriptionLifecycleActionOption[];
20
+ subscriptionMetadataEditAllowedFromStatuses: string[];
16
21
  savedSubscriptionId?: ID;
17
22
  subscription?: InvoicingSubscription;
18
23
  }
@@ -4,12 +4,17 @@ exports.getInvoicingSubscriptionFormView = exports.getEditInvoicingSubscriptionD
4
4
  const invoicingSubscriptionSelector_1 = require("../../../entity/invoicing/invoicingSubscription/invoicingSubscriptionSelector");
5
5
  const addressViewSelector_1 = require("../../addressView/addressViewSelector");
6
6
  const couponViewSelector_1 = require("../couponView/couponViewSelector");
7
+ const invoicingConfigViewSelector_1 = require("../invoicingConfigView/invoicingConfigViewSelector");
7
8
  const invoicingCatalogListViewSelector_1 = require("../invoicingCatalogListView/invoicingCatalogListViewSelector");
8
9
  const invoicingCustomerListViewSelector_1 = require("../invoicingCustomerListView/invoicingCustomerListViewSelector");
9
10
  const invoicingSubscriptionFormConfig_1 = require("./invoicingSubscriptionFormConfig");
10
11
  const getEditInvoicingSubscriptionDetailViewState = (state, invoicingSubscriptionID) => {
11
12
  const { error, fetchState, savedSubscriptionId } = state.editInvoicingSubscriptionDetailViewState;
13
+ const { subscriptionCommercialEditAllowedFromStatuses, subscriptionLifecycleActionOptions, subscriptionMetadataEditAllowedFromStatuses, } = (0, invoicingConfigViewSelector_1.getInvoicingConfigView)(state);
12
14
  return {
15
+ subscriptionCommercialEditAllowedFromStatuses,
16
+ subscriptionLifecycleActionOptions,
17
+ subscriptionMetadataEditAllowedFromStatuses,
13
18
  subscription: invoicingSubscriptionID != null
14
19
  ? (0, invoicingSubscriptionSelector_1.getInvoicingSubscriptionById)(state.invoicingSubscriptionState, invoicingSubscriptionID)
15
20
  : undefined,
@@ -1,12 +1,14 @@
1
1
  import { FetchStateAndError } from '../../../commonStateTypes/common';
2
2
  import { SelectorView } from '../../../commonStateTypes/viewAndReport/viewAndReport';
3
- import { InvoicingListCounts } from '../../../entity/invoicing/invoicingCommonPayload';
3
+ import { InvoicingCatalogItemLifecycleAction, InvoicingCatalogLifecycleActionOption, InvoicingListCounts } from '../../../entity/invoicing/invoicingCommonPayload';
4
4
  import { InvoicingPlan } from '../../../entity/invoicing/plan/planState';
5
5
  import { InvoicingProduct } from '../../../entity/invoicing/product/productState';
6
6
  import { RootState } from '../../../reducer';
7
7
  import { InvoicingListSort } from '../invoicingApiHelper';
8
8
  import { InvoicingCatalogPlanFilters, InvoicingCatalogProductFilters, InvoicingProductColumnConfig } from './invoicingCatalogListViewState';
9
9
  export interface InvoicingCatalogListView extends SelectorView {
10
+ /** Config-owned; folded in so the screen reads one selector. */
11
+ catalogItemLifecycleActionOptions: InvoicingCatalogLifecycleActionOption<InvoicingCatalogItemLifecycleAction>[];
10
12
  count: InvoicingListCounts;
11
13
  countsFetchState: FetchStateAndError;
12
14
  planFilters: InvoicingCatalogPlanFilters;
@@ -19,7 +19,8 @@ exports.getInvoicingCatalogPrices = getInvoicingCatalogPrices;
19
19
  * denormalized arrays keep referential identity. The base `fetchState`/`error`
20
20
  * track the plan list; the product list has its own `productFetchState`.
21
21
  */
22
- exports.getInvoicingCatalogListView = (0, toolkit_1.createSelector)((state) => state.invoicingPlanState, (state) => state.invoicingCatalogListViewState, (planState, listViewState) => ({
22
+ exports.getInvoicingCatalogListView = (0, toolkit_1.createSelector)((state) => state.invoicingPlanState, (state) => state.invoicingCatalogListViewState, (state) => state.invoicingConfigViewState.catalogItemLifecycleActionOptions, (planState, listViewState, catalogItemLifecycleActionOptions) => ({
23
+ catalogItemLifecycleActionOptions,
23
24
  plans: (0, planSelector_1.getInvoicingPlansByIds)(planState, listViewState.planIds),
24
25
  productColumns: invoicingCatalogListViewState_1.INVOICING_PRODUCT_COLUMNS,
25
26
  products: (0, planSelector_1.getInvoicingPlansByIds)(planState, listViewState.productIds),
@@ -1,6 +1,6 @@
1
1
  import { FetchStateAndError } from '../../../commonStateTypes/common';
2
2
  import { SelectorView } from '../../../commonStateTypes/viewAndReport/viewAndReport';
3
- import { InvoicingListCounts, InvoicingNamedOption } from '../../../entity/invoicing/invoicingCommonPayload';
3
+ import { InvoicingListCounts, InvoicingNamedOption, InvoicingSubscriptionLifecycleActionOption } from '../../../entity/invoicing/invoicingCommonPayload';
4
4
  import { InvoicingSubscription } from '../../../entity/invoicing/invoicingSubscription/invoicingSubscriptionState';
5
5
  import { RootState } from '../../../reducer';
6
6
  import { InvoicingListSort } from '../invoicingApiHelper';
@@ -14,6 +14,10 @@ export interface InvoicingSubscriptionListView extends SelectorView {
14
14
  nextCursor: string | null;
15
15
  /** Config status/type list; the page labels tabs and badges from it. */
16
16
  statusOptions: InvoicingNamedOption[];
17
+ /** Config-owned; folded in so the screen reads one selector. */
18
+ subscriptionCommercialEditAllowedFromStatuses: string[];
19
+ subscriptionLifecycleActionOptions: InvoicingSubscriptionLifecycleActionOption[];
20
+ subscriptionMetadataEditAllowedFromStatuses: string[];
17
21
  subscriptions: InvoicingSubscription[];
18
22
  tabIds: InvoicingSubscriptionTabId[];
19
23
  sort?: InvoicingListSort;
@@ -12,7 +12,7 @@ const invoicingSubscriptionListViewState_1 = require("./invoicingSubscriptionLis
12
12
  * re-rendered on every unrelated redux action because a fresh array was built
13
13
  * each call.
14
14
  */
15
- exports.getInvoicingSubscriptionListView = (0, toolkit_1.createSelector)((state) => state.invoicingSubscriptionState, (state) => state.invoicingSubscriptionListViewState, (state) => state.invoicingConfigViewState.subscriptionStatusOptions, (subscriptionState, listViewState, statusOptions) => {
15
+ exports.getInvoicingSubscriptionListView = (0, toolkit_1.createSelector)((state) => state.invoicingSubscriptionState, (state) => state.invoicingSubscriptionListViewState, (state) => state.invoicingConfigViewState.subscriptionStatusOptions, (state) => state.invoicingConfigViewState, (subscriptionState, listViewState, statusOptions, configState) => {
16
16
  const { activeTab } = listViewState;
17
17
  const allSubscriptions = (0, invoicingSubscriptionSelector_1.getInvoicingSubscriptionsByIds)(subscriptionState, listViewState.ids);
18
18
  // The list API ignores `status`, so it returns every status; filter to the
@@ -30,6 +30,9 @@ exports.getInvoicingSubscriptionListView = (0, toolkit_1.createSelector)((state)
30
30
  filters: listViewState.filters,
31
31
  count: listViewState.counts,
32
32
  countsFetchState: listViewState.countsFetchState,
33
+ subscriptionCommercialEditAllowedFromStatuses: configState.subscriptionCommercialEditAllowedFromStatuses,
34
+ subscriptionLifecycleActionOptions: configState.subscriptionLifecycleActionOptions,
35
+ subscriptionMetadataEditAllowedFromStatuses: configState.subscriptionMetadataEditAllowedFromStatuses,
33
36
  statusOptions,
34
37
  tabIds: (0, invoicingTabHelper_1.invoicingTabIdsFromConfig)({
35
38
  allTabIds: invoicingSubscriptionListViewState_1.ALL_INVOICING_SUBSCRIPTION_TAB_IDS,
@@ -1,5 +1,5 @@
1
1
  import { FetchState, FetchStateAndError } from '../../../commonStateTypes/common';
2
- import { InvoicingNamedOption, InvoicingQboAccountMappingKindOption, InvoicingSettingsPayload } from '../../../entity/invoicing/invoicingCommonPayload';
2
+ import { InvoicingDunningActionOption, InvoicingNamedOption, InvoicingQboAccountMappingKindOption, InvoicingSettingsPayload } from '../../../entity/invoicing/invoicingCommonPayload';
3
3
  import { RootState } from '../../../reducer';
4
4
  import { ZeniAPIStatus } from '../../../responsePayload';
5
5
  import { InvoicingBrandingFormLocalData } from './invoicingBrandingFormConfig';
@@ -46,10 +46,20 @@ export interface InvoicingEnablePrerequisites {
46
46
  export declare function deriveInvoicingEnablePrerequisites(settings: InvoicingSettingsPayload | undefined, isQboConnected: boolean, qboAccountMappingKindOptions: InvoicingQboAccountMappingKindOption[]): InvoicingEnablePrerequisites;
47
47
  export interface InvoicingSettingsHubView {
48
48
  canEnableInvoicing: boolean;
49
+ /**
50
+ * Config-owned lists and fetch state the settings hub renders, folded in so the
51
+ * screen reads this view instead of `getInvoicingConfigView`.
52
+ */
53
+ configFetchState: FetchState;
54
+ dunningScheduleActionOptions: InvoicingDunningActionOption[];
49
55
  isEnablingInvoicing: boolean;
50
56
  isQboConfigured: boolean;
51
57
  isStripeConnected: boolean;
58
+ qboAccountMappingKindOptions: InvoicingQboAccountMappingKindOption[];
59
+ qboCustomerMatchingOptions: InvoicingNamedOption[];
60
+ qboSyncStatusOptions: InvoicingNamedOption[];
52
61
  status: string | undefined;
62
+ configError?: ZeniAPIStatus;
53
63
  }
54
64
  /**
55
65
  * The settings hub's composite of everything it derives from the store: whether
@@ -79,11 +79,17 @@ function deriveInvoicingEnablePrerequisites(settings, isQboConnected, qboAccount
79
79
  * and QBO slices read here are only fetched once a settings screen is mounted.
80
80
  */
81
81
  const getInvoicingSettingsHubView = (state) => {
82
- const { enableState, qboAccountMappingKindOptions, status } = (0, invoicingConfigViewSelector_1.getInvoicingConfigView)(state);
82
+ const { dunningScheduleActionOptions, enableState, error: configError, fetchState: configFetchState, qboAccountMappingKindOptions, qboCustomerMatchingOptions, qboSyncStatusOptions, status, } = (0, invoicingConfigViewSelector_1.getInvoicingConfigView)(state);
83
83
  const { canEnable, isQboConfigured, isStripeConnected } = deriveInvoicingEnablePrerequisites(state.invoicingSettingsViewState.settings, state.invoicingQboViewState.connection?.connected === true, qboAccountMappingKindOptions);
84
84
  return {
85
85
  canEnableInvoicing: status === 'settings' && canEnable,
86
+ configError,
87
+ configFetchState,
88
+ dunningScheduleActionOptions,
86
89
  isEnablingInvoicing: enableState.fetchState === 'In-Progress',
90
+ qboAccountMappingKindOptions,
91
+ qboCustomerMatchingOptions,
92
+ qboSyncStatusOptions,
87
93
  isQboConfigured,
88
94
  isStripeConnected,
89
95
  status,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zeniai/client-epic-state",
3
- "version": "5.1.97-betaAK1",
3
+ "version": "5.1.97-betaAK3",
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",