@zeniai/client-epic-state 5.1.96 → 5.1.97

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 (33) hide show
  1. package/lib/entity/invoicing/invoicingCommonPayload.d.ts +9 -0
  2. package/lib/entity/invoicing/invoicingCommonPayload.js +7 -0
  3. package/lib/esm/entity/invoicing/invoicingCommonPayload.js +6 -0
  4. package/lib/esm/index.js +2 -2
  5. package/lib/esm/view/invoicing/editInvoicingCatalogItemDetailView/editInvoicingCatalogItemDetailViewPayload.js +1 -1
  6. package/lib/esm/view/invoicing/editInvoicingCatalogItemDetailView/editInvoicingCatalogItemDetailViewSelector.js +2 -0
  7. package/lib/esm/view/invoicing/editInvoicingCatalogItemDetailView/invoicingCatalogItemFormConfig.js +1 -1
  8. package/lib/esm/view/invoicing/editInvoicingSubscriptionDetailView/editInvoicingSubscriptionDetailViewPayload.js +14 -4
  9. package/lib/esm/view/invoicing/editInvoicingSubscriptionDetailView/invoicingSubscriptionFormConfig.js +56 -1
  10. package/lib/esm/view/invoicing/invoicingCatalogItemDetailView/invoicingCatalogItemDetailViewSelector.js +6 -0
  11. package/lib/esm/view/invoicing/invoicingConfigView/invoicingConfigViewReducer.js +5 -1
  12. package/lib/esm/view/invoicing/settingsView/settingsViewSelector.js +0 -1
  13. package/lib/index.d.ts +3 -3
  14. package/lib/index.js +10 -7
  15. package/lib/view/invoicing/editInvoicingCatalogItemDetailView/editInvoicingCatalogItemDetailViewPayload.js +1 -1
  16. package/lib/view/invoicing/editInvoicingCatalogItemDetailView/editInvoicingCatalogItemDetailViewSelector.d.ts +8 -0
  17. package/lib/view/invoicing/editInvoicingCatalogItemDetailView/editInvoicingCatalogItemDetailViewSelector.js +2 -0
  18. package/lib/view/invoicing/editInvoicingCatalogItemDetailView/invoicingCatalogItemFormConfig.d.ts +1 -1
  19. package/lib/view/invoicing/editInvoicingCatalogItemDetailView/invoicingCatalogItemFormConfig.js +1 -1
  20. package/lib/view/invoicing/editInvoicingSubscriptionDetailView/editInvoicingSubscriptionDetailViewPayload.d.ts +4 -0
  21. package/lib/view/invoicing/editInvoicingSubscriptionDetailView/editInvoicingSubscriptionDetailViewPayload.js +13 -3
  22. package/lib/view/invoicing/editInvoicingSubscriptionDetailView/editInvoicingSubscriptionDetailViewState.d.ts +17 -0
  23. package/lib/view/invoicing/editInvoicingSubscriptionDetailView/invoicingSubscriptionFormConfig.d.ts +22 -0
  24. package/lib/view/invoicing/editInvoicingSubscriptionDetailView/invoicingSubscriptionFormConfig.js +60 -2
  25. package/lib/view/invoicing/invoicingCatalogItemDetailView/invoicingCatalogItemDetailViewSelector.d.ts +13 -1
  26. package/lib/view/invoicing/invoicingCatalogItemDetailView/invoicingCatalogItemDetailViewSelector.js +6 -0
  27. package/lib/view/invoicing/invoicingConfigView/invoicingConfigViewPayload.d.ts +2 -1
  28. package/lib/view/invoicing/invoicingConfigView/invoicingConfigViewReducer.d.ts +1 -1
  29. package/lib/view/invoicing/invoicingConfigView/invoicingConfigViewReducer.js +4 -0
  30. package/lib/view/invoicing/invoicingConfigView/invoicingConfigViewState.d.ts +7 -1
  31. package/lib/view/invoicing/settingsView/settingsViewSelector.d.ts +0 -2
  32. package/lib/view/invoicing/settingsView/settingsViewSelector.js +0 -1
  33. package/package.json +1 -1
@@ -210,6 +210,15 @@ export interface InvoicingSubscriptionEditFieldOption {
210
210
  name: string;
211
211
  }
212
212
  export declare function toInvoicingNamedOption(option: InvoicingNamedOptionWire): InvoicingNamedOption;
213
+ /**
214
+ * A config-driven map from some key (a pricing model, a status, …) to the
215
+ * options allowed for it. Lets the backend widen an allowed set without a
216
+ * frontend release, so consumers must branch on what the map returns rather
217
+ * than on a hardcoded list.
218
+ */
219
+ export type InvoicingNamedOptionsByKeyWire = Record<string, InvoicingNamedOptionWire[]>;
220
+ export type InvoicingNamedOptionsByKey = Record<string, InvoicingNamedOption[]>;
221
+ export declare function toInvoicingNamedOptionsByKey(optionsByKey: InvoicingNamedOptionsByKeyWire): InvoicingNamedOptionsByKey;
213
222
  export declare function toInvoicingSubscriptionEditFieldOption(option: InvoicingSubscriptionEditFieldOptionWire): InvoicingSubscriptionEditFieldOption;
214
223
  export declare function toAuditLogEntityRouteOption(option: AuditLogEntityRouteOptionWire): AuditLogEntityRouteOption;
215
224
  /**
@@ -15,6 +15,7 @@ exports.getInvoicingQboAccountMappingId = getInvoicingQboAccountMappingId;
15
15
  exports.withInvoicingQboAccountMappingId = withInvoicingQboAccountMappingId;
16
16
  exports.toInvoicingQboAccountMappingKindOption = toInvoicingQboAccountMappingKindOption;
17
17
  exports.toInvoicingNamedOption = toInvoicingNamedOption;
18
+ exports.toInvoicingNamedOptionsByKey = toInvoicingNamedOptionsByKey;
18
19
  exports.toInvoicingSubscriptionEditFieldOption = toInvoicingSubscriptionEditFieldOption;
19
20
  exports.toAuditLogEntityRouteOption = toAuditLogEntityRouteOption;
20
21
  exports.buildInvoicingEntityPath = buildInvoicingEntityPath;
@@ -200,6 +201,12 @@ function toInvoicingQboAccountMappingKindOption(option) {
200
201
  function toInvoicingNamedOption(option) {
201
202
  return { code: option.code, name: option.name };
202
203
  }
204
+ function toInvoicingNamedOptionsByKey(optionsByKey) {
205
+ return Object.fromEntries(Object.entries(optionsByKey).map(([key, options]) => [
206
+ key,
207
+ (options ?? []).map(toInvoicingNamedOption),
208
+ ]));
209
+ }
203
210
  function toInvoicingSubscriptionEditFieldOption(option) {
204
211
  return {
205
212
  code: option.code,
@@ -179,6 +179,12 @@ export function toInvoicingQboAccountMappingKindOption(option) {
179
179
  export function toInvoicingNamedOption(option) {
180
180
  return { code: option.code, name: option.name };
181
181
  }
182
+ export function toInvoicingNamedOptionsByKey(optionsByKey) {
183
+ return Object.fromEntries(Object.entries(optionsByKey).map(([key, options]) => [
184
+ key,
185
+ (options ?? []).map(toInvoicingNamedOption),
186
+ ]));
187
+ }
182
188
  export function toInvoicingSubscriptionEditFieldOption(option) {
183
189
  return {
184
190
  code: option.code,
package/lib/esm/index.js CHANGED
@@ -759,7 +759,7 @@ export { initializeInvoicingCustomerAddress, resetEditInvoicingCustomerDetailVie
759
759
  export { INVOICING_CUSTOMER_BILLING_ADDRESS_TYPE, INVOICING_CUSTOMER_TYPE_VALUES, INVOICING_NET_TERM_DAY_VALUES, INVOICING_TAXABILITY_VALUES, entityToInvoicingCustomerFormLocalData, initialInvoicingCustomerFormLocalData, } from './view/invoicing/editInvoicingCustomerDetailView/invoicingCustomerFormConfig';
760
760
  export { getInvoicingCustomerFormView } from './view/invoicing/editInvoicingCustomerDetailView/editInvoicingCustomerDetailViewSelector';
761
761
  export { fetchInvoicingSubscriptionFormPage, initializeInvoicingSubscriptionAddress, resetEditInvoicingSubscriptionDetailView, submitInvoicingSubscriptionForm, updateInvoicingSubscriptionFormDraft, } from './view/invoicing/editInvoicingSubscriptionDetailView/editInvoicingSubscriptionDetailViewReducer';
762
- export { INVOICING_SUBSCRIPTION_BILLING_FREQUENCY_VALUES, INVOICING_SUBSCRIPTION_SHIPPING_ADDRESS_TYPE, entityToInvoicingSubscriptionFormLocalData, initialInvoicingSubscriptionFormLocalData, } from './view/invoicing/editInvoicingSubscriptionDetailView/invoicingSubscriptionFormConfig';
762
+ export { INVOICING_SUBSCRIPTION_BILLING_FREQUENCY_VALUES, INVOICING_SUBSCRIPTION_SHIPPING_ADDRESS_TYPE, entityToInvoicingSubscriptionFormLocalData, initialInvoicingSubscriptionFormLocalData, invoicingSubscriptionTodayIso, toInvoicingSubscriptionQuantity, } from './view/invoicing/editInvoicingSubscriptionDetailView/invoicingSubscriptionFormConfig';
763
763
  export { getEditInvoicingSubscriptionDetailViewState, getInvoicingSubscriptionFormView, } from './view/invoicing/editInvoicingSubscriptionDetailView/editInvoicingSubscriptionDetailViewSelector';
764
764
  export { archiveInvoicingCatalogSubFamily, createInvoicingCatalogSubFamily, resetEditInvoicingCatalogItemDetailView, saveInvoicingCatalogItem, submitInvoicingCatalogItemForm, updateInvoicingCatalogItemFormDraft, } from './view/invoicing/editInvoicingCatalogItemDetailView/editInvoicingCatalogItemDetailViewReducer';
765
765
  export { catalogDetailEditValuesToSavePayload, createSubFamilyFormToPayload, planToCatalogDetailEditValues, productToCreateSubFamilyFormValues, } from './view/invoicing/editInvoicingCatalogItemDetailView/catalogDetailEditPayload';
@@ -851,7 +851,7 @@ export { isStripeConnectedFromSettings } from './view/invoicing/settingsView/inv
851
851
  // ── Invoicing: QBO integration ────────────────────────────────────────────────
852
852
  export { clearInvoicingQboView, fetchInvoicingQboAccounts, fetchInvoicingQboClasses, fetchInvoicingQboConnection, fetchInvoicingQboSyncHealth, retryInvoicingQboSyncTask, startInvoicingQboBackfill, } from './view/invoicing/invoicingQboView/invoicingQboViewReducer';
853
853
  export { getInvoicingQboView } from './view/invoicing/invoicingQboView/invoicingQboViewSelector';
854
- export { INVOICING_QBO_CUSTOMER_MATCHING_MODES, getInvoicingQboAccountMappingId, toInvoicingQboCustomerMatchingMode, withInvoicingQboAccountMappingId, } from './entity/invoicing/invoicingCommonPayload';
854
+ export { INVOICING_QBO_CUSTOMER_MATCHING_MODES, getInvoicingQboAccountMappingId, toInvoicingNamedOptionsByKey, toInvoicingQboCustomerMatchingMode, withInvoicingQboAccountMappingId, } from './entity/invoicing/invoicingCommonPayload';
855
855
  // ── Invoicing: config ─────────────────────────────────────────────────────────
856
856
  export { acceptInvoicingTerms, clearInvoicingConfig, enableInvoicing, fetchInvoicingConfig, resetInvoicingConfigActionStates, updateInvoicingConfig, } from './view/invoicing/invoicingConfigView/invoicingConfigViewReducer';
857
857
  export { getInvoicingConfigView } from './view/invoicing/invoicingConfigView/invoicingConfigViewSelector';
@@ -80,7 +80,7 @@ const buildSubFamilyPayload = (localData, subFamily, clearEmptyValues) => {
80
80
  }
81
81
  return payload;
82
82
  };
83
- /** `unit` is the item's unit of measure, not a currency; `CURRENCY_CODE` above prices sub-families. */
83
+ /** `unit` is the item's unit of measure, not a currency; `CURRENCY_CODE` above prices Price points. */
84
84
  const DEFAULT_CATALOG_ITEM_UNIT = 'USD';
85
85
  /**
86
86
  * Build the parent catalog-item request body from the form draft. Creates omit
@@ -1,5 +1,6 @@
1
1
  import { createSelector } from '@reduxjs/toolkit';
2
2
  import { getInvoicingPlanById, getInvoicingPlansByIds, } from '../../../entity/invoicing/plan/planSelector';
3
+ import { getInvoicingConfigView } from '../invoicingConfigView/invoicingConfigViewSelector';
3
4
  import { INVOICING_CATALOG_APPLICABILITY_VALUES, INVOICING_CATALOG_PERIOD_UNIT_VALUES, INVOICING_CATALOG_PRICING_MODEL_VALUES, INVOICING_CATALOG_PRORATION_VALUES, INVOICING_CATALOG_TIER_TYPE_VALUES, INVOICING_CATALOG_TRIAL_END_ACTION_VALUES, INVOICING_CATALOG_TRIAL_UNIT_VALUES, INVOICING_CATALOG_TYPE_VALUES, entityToInvoicingCatalogItemFormLocalData, } from './invoicingCatalogItemFormConfig';
4
5
  export const getEditInvoicingCatalogItemDetailViewState = (state) => ({
5
6
  fetchState: state.editInvoicingCatalogItemDetailViewState.fetchState,
@@ -59,6 +60,7 @@ export const getInvoicingCatalogItemFormView = (state, id) => {
59
60
  trialEndActionValues: INVOICING_CATALOG_TRIAL_END_ACTION_VALUES,
60
61
  trialUnitValues: INVOICING_CATALOG_TRIAL_UNIT_VALUES,
61
62
  typeValues: INVOICING_CATALOG_TYPE_VALUES,
63
+ catalogTierTypeOptionsByPricingModel: getInvoicingConfigView(state).catalogTierTypeOptionsByPricingModel,
62
64
  kind,
63
65
  plan,
64
66
  savedItemId,
@@ -121,7 +121,7 @@ export const initialInvoicingCatalogItemFormLocalData = {
121
121
  unit: '',
122
122
  };
123
123
  /**
124
- * Seed the form draft from a parent catalog item and its embedded sub-families.
124
+ * Seed the form draft from a parent catalog item and its embedded Price points.
125
125
  */
126
126
  export const entityToInvoicingCatalogItemFormLocalData = (item) => {
127
127
  if (item == null) {
@@ -1,9 +1,13 @@
1
1
  import { toAddressUpdatableInfoPayload } from '../../addressView/addressViewPayload';
2
- import { billingFrequencyToPeriod } from './invoicingSubscriptionFormConfig';
2
+ import { billingFrequencyToPeriod, invoicingSubscriptionTodayIso, toInvoicingSubscriptionBillingCycles, toInvoicingSubscriptionQuantity, } from './invoicingSubscriptionFormConfig';
3
3
  /**
4
4
  * Build the create/update subscription request body from the form draft. The
5
5
  * shipping address is sent as an object (captured via the shared Address
6
6
  * screen); the backend persists it — same pattern as the customer save flow.
7
+ *
8
+ * `remaining_billing_cycles` is omitted when the user left the field empty, so
9
+ * the backend applies the plan's own `billing_cycles` (or renews forever when
10
+ * the plan sets no limit) rather than being pinned to a value the form invented.
7
11
  */
8
12
  export const localDataToSaveInvoicingSubscriptionPayload = (localData, shippingAddress) => {
9
13
  const frequency = billingFrequencyToPeriod(localData.billingFrequency);
@@ -11,32 +15,38 @@ export const localDataToSaveInvoicingSubscriptionPayload = (localData, shippingA
11
15
  {
12
16
  item_price_code: localData.planPriceCode,
13
17
  item_type: 'plan',
14
- quantity: Math.max(1, localData.planQuantity || 1),
18
+ quantity: toInvoicingSubscriptionQuantity(localData.planQuantity),
15
19
  },
16
20
  ...localData.addonPriceCodes.map((priceCode) => ({
17
21
  item_price_code: priceCode,
18
22
  item_type: 'addon',
19
- quantity: 1,
23
+ quantity: toInvoicingSubscriptionQuantity(localData.addonQuantities[priceCode]),
20
24
  })),
21
25
  ...localData.chargePriceCodes.map((priceCode) => ({
22
26
  item_price_code: priceCode,
23
27
  item_type: 'charge',
24
- quantity: 1,
28
+ quantity: toInvoicingSubscriptionQuantity(localData.chargeQuantities[priceCode]),
25
29
  })),
26
30
  ];
27
31
  const setupFee = localData.setupFee?.amount;
28
32
  const poNumber = localData.poNumber.trim();
29
33
  const trialEnd = localData.trialEnd.trim();
34
+ const startedAt = localData.startedAt.trim();
35
+ const remainingBillingCycles = toInvoicingSubscriptionBillingCycles(localData.remainingBillingCycles);
30
36
  return {
31
37
  auto_collection: localData.autoCollection ? 'on' : 'off',
32
38
  billing_period: frequency.period,
33
39
  billing_period_unit: frequency.unit,
34
40
  currency_code: localData.preferredCurrencyCode,
35
41
  customer_id: localData.customerId,
42
+ started_at: startedAt !== '' ? startedAt : invoicingSubscriptionTodayIso(),
36
43
  subscription_items: items,
37
44
  ...(setupFee != null ? { setup_fee: setupFee } : {}),
38
45
  ...(poNumber !== '' ? { po_number: poNumber } : {}),
39
46
  ...(trialEnd !== '' ? { trial_end: trialEnd } : {}),
47
+ ...(remainingBillingCycles != null
48
+ ? { remaining_billing_cycles: remainingBillingCycles }
49
+ : {}),
40
50
  ...(localData.couponId !== '' ? { coupon_ids: [localData.couponId] } : {}),
41
51
  ...(shippingAddress != null
42
52
  ? { shipping_address: toAddressUpdatableInfoPayload(shippingAddress) }
@@ -1,3 +1,4 @@
1
+ import { dateNow } from '../../../zeniDayJS';
1
2
  /** `AddressType` key used when the subscription form opens the shared Address screen. */
2
3
  export const INVOICING_SUBSCRIPTION_SHIPPING_ADDRESS_TYPE = 'invoicing_subscription_shipping_address';
3
4
  /**
@@ -33,17 +34,63 @@ const subscriptionItemPriceCodes = (subscription, itemType) => subscription?.sub
33
34
  ?.filter((item) => item.itemType === itemType)
34
35
  .map((item) => item.itemPriceCode)
35
36
  .filter((code) => code != null && code !== '') ?? [];
37
+ const subscriptionItemQuantities = (subscription, itemType) => {
38
+ const quantities = {};
39
+ subscription?.subscriptionItems
40
+ ?.filter((item) => item.itemType === itemType)
41
+ .forEach((item) => {
42
+ if (item.itemPriceCode != null && item.itemPriceCode !== '') {
43
+ quantities[item.itemPriceCode] = toInvoicingSubscriptionQuantity(item.quantity);
44
+ }
45
+ });
46
+ return quantities;
47
+ };
48
+ /**
49
+ * Today as `YYYY-MM-DD`, the default subscription start date. Goes through
50
+ * dayjs (not `toISOString`, which is UTC) so a user in a UTC+ timezone late in
51
+ * their day gets their own calendar date rather than yesterday's.
52
+ */
53
+ export const invoicingSubscriptionTodayIso = () => dateNow().format('YYYY-MM-DD');
54
+ /**
55
+ * Clamp a subscription-item quantity to the minimum the API accepts. Shared by
56
+ * the plan, add-on and charge items so none of them can bill a 0 or a fraction.
57
+ */
58
+ export const toInvoicingSubscriptionQuantity = (quantity) => {
59
+ const whole = Math.floor(Number(quantity));
60
+ return Number.isFinite(whole) && whole > 0 ? whole : 1;
61
+ };
62
+ /**
63
+ * Parse the billing-cycles field into what the API should receive, or
64
+ * `undefined` when the field is empty or unparseable (the payload then omits it
65
+ * so the backend applies the plan's own limit).
66
+ *
67
+ * Deliberately NOT `toInvoicingSubscriptionQuantity`: `0` is a real
68
+ * remaining-cycles value on a subscription serving its last paid term, and edit
69
+ * drafts seed it straight off the entity. Clamping it up to `1` would turn a
70
+ * no-op save of a non-renewing subscription into a one-cycle extension.
71
+ */
72
+ export const toInvoicingSubscriptionBillingCycles = (remainingBillingCycles) => {
73
+ if (remainingBillingCycles.trim() === '') {
74
+ return undefined;
75
+ }
76
+ const whole = Math.floor(Number(remainingBillingCycles));
77
+ return Number.isFinite(whole) && whole >= 0 ? whole : undefined;
78
+ };
36
79
  export const initialInvoicingSubscriptionFormLocalData = {
37
80
  addonPriceCodes: [],
81
+ addonQuantities: {},
38
82
  autoCollection: true,
39
83
  billingFrequency: 'monthly',
40
84
  chargePriceCodes: [],
85
+ chargeQuantities: {},
41
86
  couponId: '',
42
87
  customerId: '',
43
88
  planPriceCode: '',
44
89
  planQuantity: 1,
45
90
  poNumber: '',
46
91
  preferredCurrencyCode: 'USD',
92
+ remainingBillingCycles: '',
93
+ startedAt: '',
47
94
  trialEnd: '',
48
95
  };
49
96
  /** Seed the form draft from an existing subscription entity (edit mode). */
@@ -54,18 +101,26 @@ export const entityToInvoicingSubscriptionFormLocalData = (subscription) => {
54
101
  const planItem = subscription.subscriptionItems?.find((item) => item.itemType === 'plan');
55
102
  return {
56
103
  addonPriceCodes: subscriptionItemPriceCodes(subscription, 'addon'),
104
+ addonQuantities: subscriptionItemQuantities(subscription, 'addon'),
57
105
  autoCollection: (subscription.autoCollection ?? 'on') === 'on',
58
106
  billingFrequency: periodToBillingFrequency(subscription.billingPeriod, subscription.billingPeriodUnit),
59
107
  chargePriceCodes: subscriptionItemPriceCodes(subscription, 'charge'),
108
+ chargeQuantities: subscriptionItemQuantities(subscription, 'charge'),
60
109
  couponId: subscription.coupons?.[0]?.couponCode ??
61
110
  subscription.coupons?.[0]?.couponID ??
62
111
  '',
63
112
  customerId: subscription.customerID ?? '',
64
113
  planPriceCode: subscriptionItemPriceCodes(subscription, 'plan')[0] ?? '',
65
- planQuantity: planItem?.quantity ?? 1,
114
+ planQuantity: toInvoicingSubscriptionQuantity(planItem?.quantity),
66
115
  poNumber: subscription.poNumber ?? '',
67
116
  preferredCurrencyCode: subscription.currencyCode ?? 'USD',
117
+ remainingBillingCycles: subscription.remainingBillingCycles != null
118
+ ? String(subscription.remainingBillingCycles)
119
+ : '',
68
120
  setupFee: subscription.setupFee,
121
+ startedAt: subscription.startedAt != null
122
+ ? subscription.startedAt.format('YYYY-MM-DD')
123
+ : '',
69
124
  trialEnd: subscription.trialEnd != null
70
125
  ? subscription.trialEnd.format('YYYY-MM-DD')
71
126
  : '',
@@ -1,7 +1,13 @@
1
1
  import { getInvoicingPlanById } from '../../../entity/invoicing/plan/planSelector';
2
+ import { getInvoicingConfigView } from '../invoicingConfigView/invoicingConfigViewSelector';
2
3
  export const getInvoicingCatalogItemDetail = (state, _kind, id) => {
3
4
  const { error, fetchState } = state.invoicingCatalogItemDetailViewState;
5
+ const { catalogItemLifecycleActionOptions, catalogProductLifecycleActionOptions, catalogTierTypeOptionsByPricingModel, fetchState: configFetchState, } = getInvoicingConfigView(state);
4
6
  return {
7
+ catalogItemLifecycleActionOptions,
8
+ catalogProductLifecycleActionOptions,
9
+ catalogTierTypeOptionsByPricingModel,
10
+ configFetchState,
5
11
  plan: getInvoicingPlanById(state.invoicingPlanState, id),
6
12
  fetchState,
7
13
  error,
@@ -1,5 +1,5 @@
1
1
  import { createSlice } from '@reduxjs/toolkit';
2
- import { toAuditLogEntityRouteOption, toInvoicingCatalogItemLifecycleActionOption, toInvoicingCatalogProductLifecycleActionOption, toInvoicingDiscountLifecycleActionOption, toInvoicingDunningAction, toInvoicingNamedOption, toInvoicingQboAccountMappingKindOption, toInvoicingSubscriptionEditFieldOption, toInvoicingSubscriptionLifecycleActionOption, } from '../../../entity/invoicing/invoicingCommonPayload';
2
+ import { toAuditLogEntityRouteOption, toInvoicingCatalogItemLifecycleActionOption, toInvoicingCatalogProductLifecycleActionOption, toInvoicingDiscountLifecycleActionOption, toInvoicingDunningAction, toInvoicingNamedOption, toInvoicingNamedOptionsByKey, toInvoicingQboAccountMappingKindOption, toInvoicingSubscriptionEditFieldOption, toInvoicingSubscriptionLifecycleActionOption, } from '../../../entity/invoicing/invoicingCommonPayload';
3
3
  import { clearAll } from '../../../rootActions';
4
4
  export const initialState = {
5
5
  fetchState: 'Not-Started',
@@ -10,6 +10,7 @@ export const initialState = {
10
10
  auditLogSourceLabels: [],
11
11
  autoCollectionOptions: [],
12
12
  billingPeriodUnitOptions: [],
13
+ catalogTierTypeOptionsByPricingModel: undefined,
13
14
  catalogTrialEndActionOptions: [],
14
15
  catalogTrialUnitOptions: [],
15
16
  customerTypeOptions: [],
@@ -61,6 +62,9 @@ export function mapInvoicingConfigPayloadToState(payload) {
61
62
  })),
62
63
  autoCollectionOptions: (payload.auto_collection_options ?? []).map(toInvoicingNamedOption),
63
64
  billingPeriodUnitOptions: (payload.billing_period_unit_options ?? []).map(toInvoicingNamedOption),
65
+ catalogTierTypeOptionsByPricingModel: payload.catalog_tier_type_options_by_pricing_model != null
66
+ ? toInvoicingNamedOptionsByKey(payload.catalog_tier_type_options_by_pricing_model)
67
+ : undefined,
64
68
  catalogTrialEndActionOptions: (payload.catalog_trial_end_action_options ?? []).map(toInvoicingNamedOption),
65
69
  catalogTrialUnitOptions: (payload.catalog_trial_unit_options ?? []).map(toInvoicingNamedOption),
66
70
  customerTypeOptions: (payload.customer_type_options ?? []).map(toInvoicingNamedOption),
@@ -79,7 +79,6 @@ export const getInvoicingSettingsHubView = (state) => {
79
79
  isEnablingInvoicing: enableState.fetchState === 'In-Progress',
80
80
  isQboConfigured,
81
81
  isStripeConnected,
82
- status,
83
82
  };
84
83
  };
85
84
  /**
package/lib/index.d.ts CHANGED
@@ -1096,7 +1096,7 @@ export type { InvoicingCustomerFormView } from './view/invoicing/editInvoicingCu
1096
1096
  export { fetchInvoicingSubscriptionFormPage, initializeInvoicingSubscriptionAddress, resetEditInvoicingSubscriptionDetailView, submitInvoicingSubscriptionForm, updateInvoicingSubscriptionFormDraft, } from './view/invoicing/editInvoicingSubscriptionDetailView/editInvoicingSubscriptionDetailViewReducer';
1097
1097
  export type { SubmitInvoicingSubscriptionFormPayload, UpdateInvoicingSubscriptionFormDraftPayload, } from './view/invoicing/editInvoicingSubscriptionDetailView/editInvoicingSubscriptionDetailViewReducer';
1098
1098
  export type { InvoicingSubscriptionFormLocalData } from './view/invoicing/editInvoicingSubscriptionDetailView/editInvoicingSubscriptionDetailViewState';
1099
- export { INVOICING_SUBSCRIPTION_BILLING_FREQUENCY_VALUES, INVOICING_SUBSCRIPTION_SHIPPING_ADDRESS_TYPE, entityToInvoicingSubscriptionFormLocalData, initialInvoicingSubscriptionFormLocalData, } from './view/invoicing/editInvoicingSubscriptionDetailView/invoicingSubscriptionFormConfig';
1099
+ export { INVOICING_SUBSCRIPTION_BILLING_FREQUENCY_VALUES, INVOICING_SUBSCRIPTION_SHIPPING_ADDRESS_TYPE, entityToInvoicingSubscriptionFormLocalData, initialInvoicingSubscriptionFormLocalData, invoicingSubscriptionTodayIso, toInvoicingSubscriptionQuantity, } from './view/invoicing/editInvoicingSubscriptionDetailView/invoicingSubscriptionFormConfig';
1100
1100
  export { getEditInvoicingSubscriptionDetailViewState, getInvoicingSubscriptionFormView, } from './view/invoicing/editInvoicingSubscriptionDetailView/editInvoicingSubscriptionDetailViewSelector';
1101
1101
  export type { EditInvoicingSubscriptionDetailView, InvoicingSubscriptionFormView, } from './view/invoicing/editInvoicingSubscriptionDetailView/editInvoicingSubscriptionDetailViewSelector';
1102
1102
  export { archiveInvoicingCatalogSubFamily, createInvoicingCatalogSubFamily, resetEditInvoicingCatalogItemDetailView, saveInvoicingCatalogItem, submitInvoicingCatalogItemForm, updateInvoicingCatalogItemFormDraft, } from './view/invoicing/editInvoicingCatalogItemDetailView/editInvoicingCatalogItemDetailViewReducer';
@@ -1230,8 +1230,8 @@ export { clearInvoicingQboView, fetchInvoicingQboAccounts, fetchInvoicingQboClas
1230
1230
  export { getInvoicingQboView } from './view/invoicing/invoicingQboView/invoicingQboViewSelector';
1231
1231
  export type { InvoicingQboView } from './view/invoicing/invoicingQboView/invoicingQboViewSelector';
1232
1232
  export type { InvoicingQboAccountOption, InvoicingQboConnection, InvoicingQboFailedTask, InvoicingQboSyncHealth, } from './view/invoicing/invoicingQboView/invoicingQboViewPayload';
1233
- export { INVOICING_QBO_CUSTOMER_MATCHING_MODES, getInvoicingQboAccountMappingId, toInvoicingQboCustomerMatchingMode, withInvoicingQboAccountMappingId, } from './entity/invoicing/invoicingCommonPayload';
1234
- export type { InvoicingNamedOption, InvoicingQboAccountMappingKindOption, InvoicingQboAccountMappingsPayload, InvoicingQboCustomerMatchingMode, InvoicingQboSettingsPayload, } from './entity/invoicing/invoicingCommonPayload';
1233
+ export { INVOICING_QBO_CUSTOMER_MATCHING_MODES, getInvoicingQboAccountMappingId, toInvoicingNamedOptionsByKey, toInvoicingQboCustomerMatchingMode, withInvoicingQboAccountMappingId, } from './entity/invoicing/invoicingCommonPayload';
1234
+ export type { InvoicingNamedOption, InvoicingNamedOptionsByKey, InvoicingQboAccountMappingKindOption, InvoicingQboAccountMappingsPayload, InvoicingQboCustomerMatchingMode, InvoicingQboSettingsPayload, } from './entity/invoicing/invoicingCommonPayload';
1235
1235
  export { acceptInvoicingTerms, clearInvoicingConfig, enableInvoicing, fetchInvoicingConfig, resetInvoicingConfigActionStates, updateInvoicingConfig, } from './view/invoicing/invoicingConfigView/invoicingConfigViewReducer';
1236
1236
  export { getInvoicingConfigView } from './view/invoicing/invoicingConfigView/invoicingConfigViewSelector';
1237
1237
  export type { InvoicingConfigView } from './view/invoicing/invoicingConfigView/invoicingConfigViewSelector';
package/lib/index.js CHANGED
@@ -79,13 +79,13 @@ exports.seedAiCardPolicyFormDraft = exports.createCardPolicyTemplates = exports.
79
79
  exports.getUpdateCardPolicyFetchState = exports.getCardPolicyFormDraft = exports.getCardPolicyDetailView = exports.getCardPolicyDetailFetchState = exports.updateCardPolicyFormDraft = exports.updateCardPolicyFetchStatus = exports.updateCardPolicyDetailFetchStatus = exports.updateCardPolicy = exports.fetchCardPolicyDetail = exports.clearCardPolicyDetail = exports.getCardPolicyTemplateIds = exports.getCardPolicyListView = exports.getCardPolicyListFetchState = exports.getArchiveCardPolicyFetchState = exports.updateCardPolicyListFetchStatus = exports.updateArchiveCardPolicyFetchStatus = exports.prependCardPolicyTemplateIds = exports.fetchCardPolicyList = exports.clearCardPolicyList = exports.archiveCardPolicy = exports.toManualCardPolicyTemplateRequestFromDraft = exports.toBulkCardPolicyTemplateRequestsFromDraft = exports.toCardPolicyTemplateRequestFromDraft = exports.applyAiCardPolicyFormDraftUpdate = exports.deriveAiPolicyReviewRowsFromInputs = exports.buildManualCardPolicyFormDraftSeed = exports.buildUploadReviewRows = exports.buildEmptyLimitRows = exports.buildAiCardPolicyFormDraftSeed = exports.toVendorChipFieldValue = exports.toMccCategoryChipFieldValue = exports.buildVendorChipId = exports.buildMccCategoryChipId = exports.VENDOR_CHIP_ID_PREFIX = exports.MCC_CHIP_ID_PREFIX = exports.toMccCategoryLike = exports.CARD_POLICY_LIMIT_ROW_ID_TRANSACTION = exports.CARD_POLICY_LIMIT_ROW_ID_REQUIRE_RECEIPT = exports.getManualCardPolicyFormDraft = exports.getLastCreatedCardPolicyTemplateIds = exports.getLastCreatedCardPolicyTemplateId = exports.getLastCreateCardPolicyTemplateErrors = exports.getLastCreateCardPolicySourceChatSessionId = exports.getCreateCardPolicyTemplateRequestState = exports.getAiCardPolicyFormDraft = exports.updateManualCardPolicyFormDraft = exports.updateCreateCardPolicyTemplateRequestState = exports.updateAiCardPolicyFormDraftFromUploadPlan = exports.updateAiCardPolicyFormDraft = exports.seedManualCardPolicyFormDraft = void 0;
80
80
  exports.clearAllInvoices = exports.mapAuditLogEntry = exports.toAuditLogEntityRouteOption = exports.isInvoicingEntityLinkable = exports.buildInvoicingEntityPath = exports.toInvoicingDiscountLifecycleActionOption = exports.toInvoicingDiscountLifecycleAction = exports.toInvoicingCatalogProductLifecycleActionOption = exports.toInvoicingCatalogItemLifecycleActionOption = exports.toInvoicingCatalogProductLifecycleAction = exports.toInvoicingCatalogItemLifecycleAction = exports.toInvoicingSubscriptionLifecycleActionOption = exports.toInvoicingSubscriptionLifecycleAction = exports.toInvoicingDunningAction = exports.INVOICING_DISCOUNT_LIFECYCLE_ACTIONS = exports.INVOICING_CATALOG_PRODUCT_LIFECYCLE_ACTIONS = exports.INVOICING_CATALOG_ITEM_LIFECYCLE_ACTIONS = exports.INVOICING_SUBSCRIPTION_LIFECYCLE_ACTIONS = exports.INVOICING_DUNNING_ACTIONS = exports.toKycProvidedDocumentTypeFromAllowed = exports.toKycProvidedDocumentType = exports.DEFAULT_SESSION_CONFIG = exports.SessionManager = exports.getTransactionActivityLogView = exports.fetchTransactionActivityLog = exports.BULK_UPLOAD_BAR_COMPLETE_HOLD_MS = exports.BULK_UPLOAD_AUTOMATCHING_TIMEOUT_MS = exports.getAutoTransferRuleHistory = exports.getAutoTransferRuleById = exports.getAutoTransferRules = exports.clearRuleUpdateLocalData = exports.updateRuleLocalData = exports.fetchAutoTransferReviewDetail = exports.fetchAutoTransferRuleHistory = exports.deleteAutoTransferRule = exports.updateAutoTransferRule = exports.createAutoTransferRule = exports.fetchAutoTransferRules = exports.getTreasuryTaxLetters = exports.fetchTreasuryTaxLetterList = exports.getTreasuryStatements = exports.fetchTreasuryStatementList = exports.getTreasuryTransferMoney = exports.clearTreasuryTransferMoney = exports.updateTreasuryTransferMoneyLocalData = exports.executeTreasuryTransferMoney = exports.getTreasuryDetail = exports.updateTreasuryTransactionListUIState = exports.fetchTreasuryTransactionList = exports.fetchTreasuryOverviewDetail = void 0;
81
81
  exports.initializeRecordPaymentDraftFromInvoice = exports.getCreateCreditNoteView = exports.getCreateCreditNoteFormView = exports.initialCreateCreditNoteFormLocalData = exports.localDataToCreateCreditNotePayload = exports.updateCreateCreditNoteFormDraft = exports.submitCreateCreditNote = exports.resetCreateCreditNote = exports.createCreditNoteSuccess = exports.createCreditNoteFailure = exports.getIssueCreditNoteView = exports.initialIssueCreditNoteFormLocalData = exports.INVOICING_CREDIT_NOTE_REASON_CODES = exports.localDataToIssueCreditNotePayload = exports.initializeIssueCreditNoteDraftFromInvoice = exports.computeIssueCreditNoteTotal = exports.updateIssueCreditNoteFormDraft = exports.submitIssueCreditNote = exports.resetIssueCreditNote = exports.issueCreditNoteSuccess = exports.issueCreditNoteFailure = exports.initializeIssueCreditNoteDraft = exports.updateRecordPaymentFormDraft = exports.submitRecordPayment = exports.initializeRecordPaymentDraft = exports.resetRecordPayment = exports.initialInvoicingCreateInvoiceFormLocalData = exports.createInvoiceFormLocalDataToRequest = exports.blankInvoicingCreateInvoiceLineItem = exports.updateInvoicingCreateInvoiceFormDraft = exports.resetCreateInvoice = exports.fetchCreateInvoiceFormPage = exports.createInvoice = exports.getInvoiceDetail = exports.fetchInvoiceDetail = exports.clearAllInvoiceDetail = exports.getInvoiceListView = exports.INVOICING_INVOICE_TABS = exports.ALL_INVOICING_INVOICE_TAB_IDS = exports.updateInvoiceListFilters = exports.setInvoiceActiveTab = exports.fetchInvoiceListPage = exports.fetchInvoiceList = exports.fetchInvoiceKPIs = exports.fetchInvoiceCounts = exports.clearInvoiceList = exports.getInvoicesByIds = exports.getInvoiceById = exports.updateInvoices = exports.removeInvoice = void 0;
82
- exports.productToCreateSubFamilyFormValues = exports.planToCatalogDetailEditValues = exports.createSubFamilyFormToPayload = exports.catalogDetailEditValuesToSavePayload = exports.updateInvoicingCatalogItemFormDraft = exports.submitInvoicingCatalogItemForm = exports.saveInvoicingCatalogItem = exports.resetEditInvoicingCatalogItemDetailView = exports.createInvoicingCatalogSubFamily = exports.archiveInvoicingCatalogSubFamily = exports.getInvoicingSubscriptionFormView = exports.getEditInvoicingSubscriptionDetailViewState = exports.initialInvoicingSubscriptionFormLocalData = exports.entityToInvoicingSubscriptionFormLocalData = exports.INVOICING_SUBSCRIPTION_SHIPPING_ADDRESS_TYPE = exports.INVOICING_SUBSCRIPTION_BILLING_FREQUENCY_VALUES = exports.updateInvoicingSubscriptionFormDraft = exports.submitInvoicingSubscriptionForm = exports.resetEditInvoicingSubscriptionDetailView = exports.initializeInvoicingSubscriptionAddress = exports.fetchInvoicingSubscriptionFormPage = exports.getInvoicingCustomerFormView = exports.initialInvoicingCustomerFormLocalData = exports.entityToInvoicingCustomerFormLocalData = exports.INVOICING_TAXABILITY_VALUES = exports.INVOICING_NET_TERM_DAY_VALUES = exports.INVOICING_CUSTOMER_TYPE_VALUES = exports.INVOICING_CUSTOMER_BILLING_ADDRESS_TYPE = exports.updateInvoicingCustomerFormDraft = exports.submitInvoicingCustomerFormSuccess = exports.submitInvoicingCustomerFormFailure = exports.submitInvoicingCustomerForm = exports.resetEditInvoicingCustomerDetailView = exports.initializeInvoicingCustomerAddress = exports.getRecordPaymentView = exports.getRecordPaymentInvoiceOptions = exports.getRecordPaymentFormView = exports.getCreateInvoiceFormView = exports.getInvoicingAuditView = exports.fetchInvoicingAuditLog = exports.clearInvoicingAuditView = exports.getInvoicingOverview = exports.buildPeriodOptions = exports.fetchInvoicingOverview = exports.clearInvoicingOverview = exports.initialRecordPaymentFormLocalData = exports.INVOICING_PAYMENT_METHOD_VALUES = exports.INVOICING_PAYMENT_GATEWAY_VALUES = exports.localDataToRecordPaymentPayload = exports.localDataToInvoiceRecordPaymentBody = void 0;
83
- exports.fetchInvoicingMigrationSession = exports.fetchInvoicingMigrationDiagnostics = exports.fetchInvoicingDataImportStatus = exports.clearInvoicingDataImportView = exports.getInvoicingPaymentActionState = exports.runInvoicingPaymentAction = exports.clearInvoicingPaymentAction = exports.getInvoicingDunningActionState = exports.runInvoicingDunningAction = exports.clearInvoicingDunningAction = exports.getInvoicingSubscriptionActionState = exports.runInvoicingSubscriptionAction = exports.clearInvoicingSubscriptionAction = exports.getInvoicingDiscountActionState = exports.runInvoicingDiscountAction = exports.clearInvoicingDiscountAction = exports.getInvoicingCatalogActionState = exports.runInvoicingCatalogProductAction = exports.runInvoicingCatalogPlanAction = exports.clearInvoicingCatalogAction = exports.getInvoicingInvoiceActionState = exports.updateInvoicingInvoice = exports.runInvoicingInvoiceAction = exports.clearInvoicingInvoiceAction = exports.getInvoicingCouponFormView = exports.getEditInvoicingCouponDetailViewState = exports.initialInvoicingCouponFormLocalData = exports.entityToInvoicingCouponFormLocalData = exports.updateInvoicingCouponFormDraft = exports.submitInvoicingCouponForm = exports.saveInvoicingCoupon = exports.resetEditInvoicingCouponDetailView = exports.getSavedInvoicingCatalogItemKind = exports.getSavedInvoicingCatalogItemId = exports.getInvoicingCatalogItemFormView = exports.getInvoicingApplicableCatalogItemOptions = exports.getEditInvoicingCatalogItemDetailViewState = exports.isTieredCatalogPricingModel = exports.initialInvoicingCatalogItemFormLocalData = exports.entityToInvoicingCatalogItemFormLocalData = exports.blankInvoicingCatalogTier = exports.blankInvoicingCatalogSubFamily = exports.INVOICING_CATALOG_TYPE_VALUES = exports.INVOICING_CATALOG_TRIAL_UNIT_VALUES = exports.INVOICING_CATALOG_TRIAL_END_ACTION_VALUES = exports.INVOICING_CATALOG_TIER_TYPE_VALUES = exports.INVOICING_CATALOG_PRORATION_VALUES = exports.INVOICING_CATALOG_PRICING_MODEL_VALUES = exports.INVOICING_CATALOG_PERIOD_UNIT_VALUES = exports.INVOICING_CATALOG_APPLICABILITY_VALUES = void 0;
84
- 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_TABS = 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 = exports.clearInvoicingCustomerListView = exports.updateInvoicingCustomers = exports.removeInvoicingCustomer = exports.clearAllInvoicingCustomers = exports.INVOICING_LIST_PAGE_SIZE = exports.getInvoicingDataImportActionState = exports.uploadInvoicingMigrationFiles = exports.startInvoicingMigration = exports.rollbackInvoicingMigration = exports.retryInvoicingMigration = exports.connectInvoicingChargebee = exports.clearAllInvoicingDataImportActions = exports.getInvoicingDataImportView = exports.setInvoicingActiveMigrationSessionId = exports.fetchInvoicingMigrationSessions = void 0;
85
- exports.updateInvoicingCoupons = exports.removeInvoicingCoupon = exports.clearAllInvoicingCoupons = exports.getInvoicingCreditNoteDetail = exports.getInvoicingCreditNoteById = exports.fetchInvoicingCreditNoteDetail = exports.clearInvoicingCreditNoteDetailView = exports.getInvoicingCreditNoteListView = exports.INVOICING_CREDIT_NOTE_TABS = 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_TABS = exports.INVOICING_TRANSACTION_COLUMNS = exports.ALL_INVOICING_TRANSACTION_TAB_IDS = exports.ALL_INVOICING_TRANSACTION_SORT_KEYS = exports.updateInvoicingTransactionFilters = exports.setInvoicingTransactionActiveTab = exports.fetchInvoicingTransactionListPage = exports.fetchInvoicingTransactionList = exports.clearInvoicingTransactionListView = exports.updateInvoicingTransactions = exports.removeInvoicingTransaction = exports.clearAllInvoicingTransactions = exports.getInvoicingSubscriptionDetail = exports.getInvoicingSubscriptionById = exports.fetchInvoicingSubscriptionDetail = exports.clearInvoicingSubscriptionDetailView = exports.getInvoicingSubscriptionListView = exports.INVOICING_SUBSCRIPTION_TABS = exports.INVOICING_SUBSCRIPTION_COLUMNS = exports.ALL_INVOICING_SUBSCRIPTION_TAB_IDS = exports.ALL_INVOICING_SUBSCRIPTION_SORT_KEYS = exports.updateInvoicingSubscriptionFilters = exports.setInvoicingSubscriptionActiveTab = exports.fetchInvoicingSubscriptionListPage = void 0;
86
- 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_TABS = 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 = exports.fetchInvoicingCouponDetail = exports.clearInvoicingCouponDetailView = exports.getInvoicingCouponById = exports.getInvoicingCouponListView = exports.getInvoicingCouponListNextCursor = exports.getInvoicingCouponListItems = exports.getInvoicingCouponListHasMore = exports.getInvoicingCouponListFilters = exports.getInvoicingCouponListFetchState = exports.getInvoicingCouponCounts = exports.INVOICING_COUPON_TABS = 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 = void 0;
87
- exports.resetInvoicingConfigActionStates = exports.fetchInvoicingConfig = exports.enableInvoicing = exports.clearInvoicingConfig = exports.acceptInvoicingTerms = exports.withInvoicingQboAccountMappingId = exports.toInvoicingQboCustomerMatchingMode = 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 = 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 = void 0;
88
- exports.getInvoicingConfigView = exports.updateInvoicingConfig = void 0;
82
+ exports.createSubFamilyFormToPayload = exports.catalogDetailEditValuesToSavePayload = exports.updateInvoicingCatalogItemFormDraft = exports.submitInvoicingCatalogItemForm = exports.saveInvoicingCatalogItem = exports.resetEditInvoicingCatalogItemDetailView = exports.createInvoicingCatalogSubFamily = exports.archiveInvoicingCatalogSubFamily = exports.getInvoicingSubscriptionFormView = exports.getEditInvoicingSubscriptionDetailViewState = exports.toInvoicingSubscriptionQuantity = exports.invoicingSubscriptionTodayIso = exports.initialInvoicingSubscriptionFormLocalData = exports.entityToInvoicingSubscriptionFormLocalData = exports.INVOICING_SUBSCRIPTION_SHIPPING_ADDRESS_TYPE = exports.INVOICING_SUBSCRIPTION_BILLING_FREQUENCY_VALUES = exports.updateInvoicingSubscriptionFormDraft = exports.submitInvoicingSubscriptionForm = exports.resetEditInvoicingSubscriptionDetailView = exports.initializeInvoicingSubscriptionAddress = exports.fetchInvoicingSubscriptionFormPage = exports.getInvoicingCustomerFormView = exports.initialInvoicingCustomerFormLocalData = exports.entityToInvoicingCustomerFormLocalData = exports.INVOICING_TAXABILITY_VALUES = exports.INVOICING_NET_TERM_DAY_VALUES = exports.INVOICING_CUSTOMER_TYPE_VALUES = exports.INVOICING_CUSTOMER_BILLING_ADDRESS_TYPE = exports.updateInvoicingCustomerFormDraft = exports.submitInvoicingCustomerFormSuccess = exports.submitInvoicingCustomerFormFailure = exports.submitInvoicingCustomerForm = exports.resetEditInvoicingCustomerDetailView = exports.initializeInvoicingCustomerAddress = exports.getRecordPaymentView = exports.getRecordPaymentInvoiceOptions = exports.getRecordPaymentFormView = exports.getCreateInvoiceFormView = exports.getInvoicingAuditView = exports.fetchInvoicingAuditLog = exports.clearInvoicingAuditView = exports.getInvoicingOverview = exports.buildPeriodOptions = exports.fetchInvoicingOverview = exports.clearInvoicingOverview = exports.initialRecordPaymentFormLocalData = exports.INVOICING_PAYMENT_METHOD_VALUES = exports.INVOICING_PAYMENT_GATEWAY_VALUES = exports.localDataToRecordPaymentPayload = exports.localDataToInvoiceRecordPaymentBody = void 0;
83
+ exports.fetchInvoicingDataImportStatus = exports.clearInvoicingDataImportView = exports.getInvoicingPaymentActionState = exports.runInvoicingPaymentAction = exports.clearInvoicingPaymentAction = exports.getInvoicingDunningActionState = exports.runInvoicingDunningAction = exports.clearInvoicingDunningAction = exports.getInvoicingSubscriptionActionState = exports.runInvoicingSubscriptionAction = exports.clearInvoicingSubscriptionAction = exports.getInvoicingDiscountActionState = exports.runInvoicingDiscountAction = exports.clearInvoicingDiscountAction = exports.getInvoicingCatalogActionState = exports.runInvoicingCatalogProductAction = exports.runInvoicingCatalogPlanAction = exports.clearInvoicingCatalogAction = exports.getInvoicingInvoiceActionState = exports.updateInvoicingInvoice = exports.runInvoicingInvoiceAction = exports.clearInvoicingInvoiceAction = exports.getInvoicingCouponFormView = exports.getEditInvoicingCouponDetailViewState = exports.initialInvoicingCouponFormLocalData = exports.entityToInvoicingCouponFormLocalData = exports.updateInvoicingCouponFormDraft = exports.submitInvoicingCouponForm = exports.saveInvoicingCoupon = exports.resetEditInvoicingCouponDetailView = exports.getSavedInvoicingCatalogItemKind = exports.getSavedInvoicingCatalogItemId = exports.getInvoicingCatalogItemFormView = exports.getInvoicingApplicableCatalogItemOptions = exports.getEditInvoicingCatalogItemDetailViewState = exports.isTieredCatalogPricingModel = exports.initialInvoicingCatalogItemFormLocalData = exports.entityToInvoicingCatalogItemFormLocalData = exports.blankInvoicingCatalogTier = exports.blankInvoicingCatalogSubFamily = exports.INVOICING_CATALOG_TYPE_VALUES = exports.INVOICING_CATALOG_TRIAL_UNIT_VALUES = exports.INVOICING_CATALOG_TRIAL_END_ACTION_VALUES = exports.INVOICING_CATALOG_TIER_TYPE_VALUES = exports.INVOICING_CATALOG_PRORATION_VALUES = exports.INVOICING_CATALOG_PRICING_MODEL_VALUES = exports.INVOICING_CATALOG_PERIOD_UNIT_VALUES = exports.INVOICING_CATALOG_APPLICABILITY_VALUES = exports.productToCreateSubFamilyFormValues = exports.planToCatalogDetailEditValues = void 0;
84
+ 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_TABS = 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 = exports.clearInvoicingCustomerListView = exports.updateInvoicingCustomers = exports.removeInvoicingCustomer = exports.clearAllInvoicingCustomers = exports.INVOICING_LIST_PAGE_SIZE = exports.getInvoicingDataImportActionState = exports.uploadInvoicingMigrationFiles = exports.startInvoicingMigration = exports.rollbackInvoicingMigration = exports.retryInvoicingMigration = exports.connectInvoicingChargebee = exports.clearAllInvoicingDataImportActions = exports.getInvoicingDataImportView = exports.setInvoicingActiveMigrationSessionId = exports.fetchInvoicingMigrationSessions = exports.fetchInvoicingMigrationSession = exports.fetchInvoicingMigrationDiagnostics = void 0;
85
+ exports.clearAllInvoicingCoupons = exports.getInvoicingCreditNoteDetail = exports.getInvoicingCreditNoteById = exports.fetchInvoicingCreditNoteDetail = exports.clearInvoicingCreditNoteDetailView = exports.getInvoicingCreditNoteListView = exports.INVOICING_CREDIT_NOTE_TABS = 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_TABS = exports.INVOICING_TRANSACTION_COLUMNS = exports.ALL_INVOICING_TRANSACTION_TAB_IDS = exports.ALL_INVOICING_TRANSACTION_SORT_KEYS = exports.updateInvoicingTransactionFilters = exports.setInvoicingTransactionActiveTab = exports.fetchInvoicingTransactionListPage = exports.fetchInvoicingTransactionList = exports.clearInvoicingTransactionListView = exports.updateInvoicingTransactions = exports.removeInvoicingTransaction = exports.clearAllInvoicingTransactions = exports.getInvoicingSubscriptionDetail = exports.getInvoicingSubscriptionById = exports.fetchInvoicingSubscriptionDetail = exports.clearInvoicingSubscriptionDetailView = exports.getInvoicingSubscriptionListView = exports.INVOICING_SUBSCRIPTION_TABS = 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 = void 0;
86
+ 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_TABS = 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 = exports.fetchInvoicingCouponDetail = exports.clearInvoicingCouponDetailView = exports.getInvoicingCouponById = exports.getInvoicingCouponListView = exports.getInvoicingCouponListNextCursor = exports.getInvoicingCouponListItems = exports.getInvoicingCouponListHasMore = exports.getInvoicingCouponListFilters = exports.getInvoicingCouponListFetchState = exports.getInvoicingCouponCounts = exports.INVOICING_COUPON_TABS = 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 = void 0;
87
+ 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 = 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 = void 0;
88
+ exports.getInvoicingConfigView = exports.updateInvoicingConfig = exports.resetInvoicingConfigActionStates = exports.fetchInvoicingConfig = exports.enableInvoicing = void 0;
89
89
  const allowedValue_1 = require("./commonStateTypes/allowedValue");
90
90
  Object.defineProperty(exports, "isAllowedValueWithCode", { enumerable: true, get: function () { return allowedValue_1.isAllowedValueWithCode; } });
91
91
  Object.defineProperty(exports, "isAllowedValueWithID", { enumerable: true, get: function () { return allowedValue_1.isAllowedValueWithID; } });
@@ -2837,6 +2837,8 @@ Object.defineProperty(exports, "INVOICING_SUBSCRIPTION_BILLING_FREQUENCY_VALUES"
2837
2837
  Object.defineProperty(exports, "INVOICING_SUBSCRIPTION_SHIPPING_ADDRESS_TYPE", { enumerable: true, get: function () { return invoicingSubscriptionFormConfig_1.INVOICING_SUBSCRIPTION_SHIPPING_ADDRESS_TYPE; } });
2838
2838
  Object.defineProperty(exports, "entityToInvoicingSubscriptionFormLocalData", { enumerable: true, get: function () { return invoicingSubscriptionFormConfig_1.entityToInvoicingSubscriptionFormLocalData; } });
2839
2839
  Object.defineProperty(exports, "initialInvoicingSubscriptionFormLocalData", { enumerable: true, get: function () { return invoicingSubscriptionFormConfig_1.initialInvoicingSubscriptionFormLocalData; } });
2840
+ Object.defineProperty(exports, "invoicingSubscriptionTodayIso", { enumerable: true, get: function () { return invoicingSubscriptionFormConfig_1.invoicingSubscriptionTodayIso; } });
2841
+ Object.defineProperty(exports, "toInvoicingSubscriptionQuantity", { enumerable: true, get: function () { return invoicingSubscriptionFormConfig_1.toInvoicingSubscriptionQuantity; } });
2840
2842
  var editInvoicingSubscriptionDetailViewSelector_1 = require("./view/invoicing/editInvoicingSubscriptionDetailView/editInvoicingSubscriptionDetailViewSelector");
2841
2843
  Object.defineProperty(exports, "getEditInvoicingSubscriptionDetailViewState", { enumerable: true, get: function () { return editInvoicingSubscriptionDetailViewSelector_1.getEditInvoicingSubscriptionDetailViewState; } });
2842
2844
  Object.defineProperty(exports, "getInvoicingSubscriptionFormView", { enumerable: true, get: function () { return editInvoicingSubscriptionDetailViewSelector_1.getInvoicingSubscriptionFormView; } });
@@ -3184,6 +3186,7 @@ Object.defineProperty(exports, "getInvoicingQboView", { enumerable: true, get: f
3184
3186
  var invoicingCommonPayload_2 = require("./entity/invoicing/invoicingCommonPayload");
3185
3187
  Object.defineProperty(exports, "INVOICING_QBO_CUSTOMER_MATCHING_MODES", { enumerable: true, get: function () { return invoicingCommonPayload_2.INVOICING_QBO_CUSTOMER_MATCHING_MODES; } });
3186
3188
  Object.defineProperty(exports, "getInvoicingQboAccountMappingId", { enumerable: true, get: function () { return invoicingCommonPayload_2.getInvoicingQboAccountMappingId; } });
3189
+ Object.defineProperty(exports, "toInvoicingNamedOptionsByKey", { enumerable: true, get: function () { return invoicingCommonPayload_2.toInvoicingNamedOptionsByKey; } });
3187
3190
  Object.defineProperty(exports, "toInvoicingQboCustomerMatchingMode", { enumerable: true, get: function () { return invoicingCommonPayload_2.toInvoicingQboCustomerMatchingMode; } });
3188
3191
  Object.defineProperty(exports, "withInvoicingQboAccountMappingId", { enumerable: true, get: function () { return invoicingCommonPayload_2.withInvoicingQboAccountMappingId; } });
3189
3192
  // ── Invoicing: config ─────────────────────────────────────────────────────────
@@ -83,7 +83,7 @@ const buildSubFamilyPayload = (localData, subFamily, clearEmptyValues) => {
83
83
  }
84
84
  return payload;
85
85
  };
86
- /** `unit` is the item's unit of measure, not a currency; `CURRENCY_CODE` above prices sub-families. */
86
+ /** `unit` is the item's unit of measure, not a currency; `CURRENCY_CODE` above prices Price points. */
87
87
  const DEFAULT_CATALOG_ITEM_UNIT = 'USD';
88
88
  /**
89
89
  * Build the parent catalog-item request body from the form draft. Creates omit
@@ -1,5 +1,6 @@
1
1
  import { FetchStateAndError, ID } from '../../../commonStateTypes/common';
2
2
  import { SelectorView } from '../../../commonStateTypes/viewAndReport/viewAndReport';
3
+ import { InvoicingNamedOptionsByKey } from '../../../entity/invoicing/invoicingCommonPayload';
3
4
  import { InvoicingPlan } from '../../../entity/invoicing/plan/planState';
4
5
  import { RootState } from '../../../reducer';
5
6
  import { InvoicingCatalogItemKind } from '../invoicingCatalogItemDetailView/invoicingCatalogItemDetailViewState';
@@ -38,6 +39,13 @@ export interface InvoicingCatalogItemFormView extends SelectorView {
38
39
  trialEndActionValues: readonly string[];
39
40
  trialUnitValues: readonly string[];
40
41
  typeValues: readonly string[];
42
+ /**
43
+ * Backend tier-type choices per pricing model. Folded in here rather than left
44
+ * for the screen to pull off `getInvoicingConfigView` itself, so the form wires
45
+ * one selector and CES stays the only place that knows which slice each option
46
+ * set lives in.
47
+ */
48
+ catalogTierTypeOptionsByPricingModel?: InvoicingNamedOptionsByKey;
41
49
  kind?: InvoicingCatalogItemKind;
42
50
  plan?: InvoicingPlan;
43
51
  savedItemId?: ID;
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getInvoicingCatalogItemFormView = exports.getInvoicingApplicableCatalogItemOptions = exports.getSavedInvoicingCatalogItemKind = exports.getSavedInvoicingCatalogItemId = exports.getEditInvoicingCatalogItemDetailViewState = void 0;
4
4
  const toolkit_1 = require("@reduxjs/toolkit");
5
5
  const planSelector_1 = require("../../../entity/invoicing/plan/planSelector");
6
+ const invoicingConfigViewSelector_1 = require("../invoicingConfigView/invoicingConfigViewSelector");
6
7
  const invoicingCatalogItemFormConfig_1 = require("./invoicingCatalogItemFormConfig");
7
8
  const getEditInvoicingCatalogItemDetailViewState = (state) => ({
8
9
  fetchState: state.editInvoicingCatalogItemDetailViewState.fetchState,
@@ -65,6 +66,7 @@ const getInvoicingCatalogItemFormView = (state, id) => {
65
66
  trialEndActionValues: invoicingCatalogItemFormConfig_1.INVOICING_CATALOG_TRIAL_END_ACTION_VALUES,
66
67
  trialUnitValues: invoicingCatalogItemFormConfig_1.INVOICING_CATALOG_TRIAL_UNIT_VALUES,
67
68
  typeValues: invoicingCatalogItemFormConfig_1.INVOICING_CATALOG_TYPE_VALUES,
69
+ catalogTierTypeOptionsByPricingModel: (0, invoicingConfigViewSelector_1.getInvoicingConfigView)(state).catalogTierTypeOptionsByPricingModel,
68
70
  kind,
69
71
  plan,
70
72
  savedItemId,
@@ -19,6 +19,6 @@ export declare const blankInvoicingCatalogSubFamily: () => InvoicingCatalogItemF
19
19
  export declare const invoicingProductToCatalogItemFormSubFamily: (product?: InvoicingProduct) => InvoicingCatalogItemFormSubFamily;
20
20
  export declare const initialInvoicingCatalogItemFormLocalData: InvoicingCatalogItemFormLocalData;
21
21
  /**
22
- * Seed the form draft from a parent catalog item and its embedded sub-families.
22
+ * Seed the form draft from a parent catalog item and its embedded Price points.
23
23
  */
24
24
  export declare const entityToInvoicingCatalogItemFormLocalData: (item?: InvoicingPlan) => InvoicingCatalogItemFormLocalData;
@@ -128,7 +128,7 @@ exports.initialInvoicingCatalogItemFormLocalData = {
128
128
  unit: '',
129
129
  };
130
130
  /**
131
- * Seed the form draft from a parent catalog item and its embedded sub-families.
131
+ * Seed the form draft from a parent catalog item and its embedded Price points.
132
132
  */
133
133
  const entityToInvoicingCatalogItemFormLocalData = (item) => {
134
134
  if (item == null) {
@@ -7,5 +7,9 @@ export type SaveInvoicingSubscriptionResponse = ZeniAPIResponse<InvoicingSubscri
7
7
  * Build the create/update subscription request body from the form draft. The
8
8
  * shipping address is sent as an object (captured via the shared Address
9
9
  * screen); the backend persists it — same pattern as the customer save flow.
10
+ *
11
+ * `remaining_billing_cycles` is omitted when the user left the field empty, so
12
+ * the backend applies the plan's own `billing_cycles` (or renews forever when
13
+ * the plan sets no limit) rather than being pinned to a value the form invented.
10
14
  */
11
15
  export declare const localDataToSaveInvoicingSubscriptionPayload: (localData: InvoicingSubscriptionFormLocalData, shippingAddress?: AddressUpdatableInfo) => Record<string, unknown>;
@@ -7,6 +7,10 @@ const invoicingSubscriptionFormConfig_1 = require("./invoicingSubscriptionFormCo
7
7
  * Build the create/update subscription request body from the form draft. The
8
8
  * shipping address is sent as an object (captured via the shared Address
9
9
  * screen); the backend persists it — same pattern as the customer save flow.
10
+ *
11
+ * `remaining_billing_cycles` is omitted when the user left the field empty, so
12
+ * the backend applies the plan's own `billing_cycles` (or renews forever when
13
+ * the plan sets no limit) rather than being pinned to a value the form invented.
10
14
  */
11
15
  const localDataToSaveInvoicingSubscriptionPayload = (localData, shippingAddress) => {
12
16
  const frequency = (0, invoicingSubscriptionFormConfig_1.billingFrequencyToPeriod)(localData.billingFrequency);
@@ -14,32 +18,38 @@ const localDataToSaveInvoicingSubscriptionPayload = (localData, shippingAddress)
14
18
  {
15
19
  item_price_code: localData.planPriceCode,
16
20
  item_type: 'plan',
17
- quantity: Math.max(1, localData.planQuantity || 1),
21
+ quantity: (0, invoicingSubscriptionFormConfig_1.toInvoicingSubscriptionQuantity)(localData.planQuantity),
18
22
  },
19
23
  ...localData.addonPriceCodes.map((priceCode) => ({
20
24
  item_price_code: priceCode,
21
25
  item_type: 'addon',
22
- quantity: 1,
26
+ quantity: (0, invoicingSubscriptionFormConfig_1.toInvoicingSubscriptionQuantity)(localData.addonQuantities[priceCode]),
23
27
  })),
24
28
  ...localData.chargePriceCodes.map((priceCode) => ({
25
29
  item_price_code: priceCode,
26
30
  item_type: 'charge',
27
- quantity: 1,
31
+ quantity: (0, invoicingSubscriptionFormConfig_1.toInvoicingSubscriptionQuantity)(localData.chargeQuantities[priceCode]),
28
32
  })),
29
33
  ];
30
34
  const setupFee = localData.setupFee?.amount;
31
35
  const poNumber = localData.poNumber.trim();
32
36
  const trialEnd = localData.trialEnd.trim();
37
+ const startedAt = localData.startedAt.trim();
38
+ const remainingBillingCycles = (0, invoicingSubscriptionFormConfig_1.toInvoicingSubscriptionBillingCycles)(localData.remainingBillingCycles);
33
39
  return {
34
40
  auto_collection: localData.autoCollection ? 'on' : 'off',
35
41
  billing_period: frequency.period,
36
42
  billing_period_unit: frequency.unit,
37
43
  currency_code: localData.preferredCurrencyCode,
38
44
  customer_id: localData.customerId,
45
+ started_at: startedAt !== '' ? startedAt : (0, invoicingSubscriptionFormConfig_1.invoicingSubscriptionTodayIso)(),
39
46
  subscription_items: items,
40
47
  ...(setupFee != null ? { setup_fee: setupFee } : {}),
41
48
  ...(poNumber !== '' ? { po_number: poNumber } : {}),
42
49
  ...(trialEnd !== '' ? { trial_end: trialEnd } : {}),
50
+ ...(remainingBillingCycles != null
51
+ ? { remaining_billing_cycles: remainingBillingCycles }
52
+ : {}),
43
53
  ...(localData.couponId !== '' ? { coupon_ids: [localData.couponId] } : {}),
44
54
  ...(shippingAddress != null
45
55
  ? { shipping_address: (0, addressViewPayload_1.toAddressUpdatableInfoPayload)(shippingAddress) }
@@ -9,15 +9,32 @@ import { FetchedState, ID } from '../../../commonStateTypes/common';
9
9
  */
10
10
  export interface InvoicingSubscriptionFormLocalData {
11
11
  addonPriceCodes: string[];
12
+ /**
13
+ * Per-add-on quantity, keyed by item price code. Only the codes currently in
14
+ * `addonPriceCodes` are read when the save payload is built, so a code left
15
+ * behind by a deselect is inert; a missing key bills as 1.
16
+ */
17
+ addonQuantities: Record<string, number>;
12
18
  autoCollection: boolean;
13
19
  billingFrequency: string;
14
20
  chargePriceCodes: string[];
21
+ /** Per-charge quantity, keyed by item price code. See `addonQuantities`. */
22
+ chargeQuantities: Record<string, number>;
15
23
  couponId: string;
16
24
  customerId: string;
17
25
  planPriceCode: string;
18
26
  planQuantity: number;
19
27
  poNumber: string;
20
28
  preferredCurrencyCode: string;
29
+ /**
30
+ * Number of paid billing cycles including the first invoice, held as a string
31
+ * so an empty field stays distinguishable from a real 0. Empty means "no
32
+ * limit set here" — the payload omits it and the backend falls back to the
33
+ * plan's `billing_cycles` (renewing forever when the plan has no limit).
34
+ */
35
+ remainingBillingCycles: string;
36
+ /** `YYYY-MM-DD`. Empty falls back to today when the payload is built. */
37
+ startedAt: string;
21
38
  trialEnd: string;
22
39
  /** Unset until the user enters one, so an explicit 0 stays distinguishable. */
23
40
  setupFee?: Amount;
@@ -15,6 +15,28 @@ export declare const billingFrequencyToPeriod: (value: string) => {
15
15
  };
16
16
  /** Map an existing subscription's period/unit back to a billing-frequency value. */
17
17
  export declare const periodToBillingFrequency: (period?: number, unit?: string) => string;
18
+ /**
19
+ * Today as `YYYY-MM-DD`, the default subscription start date. Goes through
20
+ * dayjs (not `toISOString`, which is UTC) so a user in a UTC+ timezone late in
21
+ * their day gets their own calendar date rather than yesterday's.
22
+ */
23
+ export declare const invoicingSubscriptionTodayIso: () => string;
24
+ /**
25
+ * Clamp a subscription-item quantity to the minimum the API accepts. Shared by
26
+ * the plan, add-on and charge items so none of them can bill a 0 or a fraction.
27
+ */
28
+ export declare const toInvoicingSubscriptionQuantity: (quantity?: number) => number;
29
+ /**
30
+ * Parse the billing-cycles field into what the API should receive, or
31
+ * `undefined` when the field is empty or unparseable (the payload then omits it
32
+ * so the backend applies the plan's own limit).
33
+ *
34
+ * Deliberately NOT `toInvoicingSubscriptionQuantity`: `0` is a real
35
+ * remaining-cycles value on a subscription serving its last paid term, and edit
36
+ * drafts seed it straight off the entity. Clamping it up to `1` would turn a
37
+ * no-op save of a non-renewing subscription into a one-cycle extension.
38
+ */
39
+ export declare const toInvoicingSubscriptionBillingCycles: (remainingBillingCycles: string) => number | undefined;
18
40
  export declare const initialInvoicingSubscriptionFormLocalData: InvoicingSubscriptionFormLocalData;
19
41
  /** Seed the form draft from an existing subscription entity (edit mode). */
20
42
  export declare const entityToInvoicingSubscriptionFormLocalData: (subscription?: InvoicingSubscription) => InvoicingSubscriptionFormLocalData;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.entityToInvoicingSubscriptionFormLocalData = exports.initialInvoicingSubscriptionFormLocalData = exports.periodToBillingFrequency = exports.billingFrequencyToPeriod = exports.INVOICING_SUBSCRIPTION_BILLING_FREQUENCY_VALUES = exports.INVOICING_SUBSCRIPTION_SHIPPING_ADDRESS_TYPE = void 0;
3
+ exports.entityToInvoicingSubscriptionFormLocalData = exports.initialInvoicingSubscriptionFormLocalData = exports.toInvoicingSubscriptionBillingCycles = exports.toInvoicingSubscriptionQuantity = exports.invoicingSubscriptionTodayIso = exports.periodToBillingFrequency = exports.billingFrequencyToPeriod = exports.INVOICING_SUBSCRIPTION_BILLING_FREQUENCY_VALUES = exports.INVOICING_SUBSCRIPTION_SHIPPING_ADDRESS_TYPE = void 0;
4
+ const zeniDayJS_1 = require("../../../zeniDayJS");
4
5
  /** `AddressType` key used when the subscription form opens the shared Address screen. */
5
6
  exports.INVOICING_SUBSCRIPTION_SHIPPING_ADDRESS_TYPE = 'invoicing_subscription_shipping_address';
6
7
  /**
@@ -38,17 +39,66 @@ const subscriptionItemPriceCodes = (subscription, itemType) => subscription?.sub
38
39
  ?.filter((item) => item.itemType === itemType)
39
40
  .map((item) => item.itemPriceCode)
40
41
  .filter((code) => code != null && code !== '') ?? [];
42
+ const subscriptionItemQuantities = (subscription, itemType) => {
43
+ const quantities = {};
44
+ subscription?.subscriptionItems
45
+ ?.filter((item) => item.itemType === itemType)
46
+ .forEach((item) => {
47
+ if (item.itemPriceCode != null && item.itemPriceCode !== '') {
48
+ quantities[item.itemPriceCode] = (0, exports.toInvoicingSubscriptionQuantity)(item.quantity);
49
+ }
50
+ });
51
+ return quantities;
52
+ };
53
+ /**
54
+ * Today as `YYYY-MM-DD`, the default subscription start date. Goes through
55
+ * dayjs (not `toISOString`, which is UTC) so a user in a UTC+ timezone late in
56
+ * their day gets their own calendar date rather than yesterday's.
57
+ */
58
+ const invoicingSubscriptionTodayIso = () => (0, zeniDayJS_1.dateNow)().format('YYYY-MM-DD');
59
+ exports.invoicingSubscriptionTodayIso = invoicingSubscriptionTodayIso;
60
+ /**
61
+ * Clamp a subscription-item quantity to the minimum the API accepts. Shared by
62
+ * the plan, add-on and charge items so none of them can bill a 0 or a fraction.
63
+ */
64
+ const toInvoicingSubscriptionQuantity = (quantity) => {
65
+ const whole = Math.floor(Number(quantity));
66
+ return Number.isFinite(whole) && whole > 0 ? whole : 1;
67
+ };
68
+ exports.toInvoicingSubscriptionQuantity = toInvoicingSubscriptionQuantity;
69
+ /**
70
+ * Parse the billing-cycles field into what the API should receive, or
71
+ * `undefined` when the field is empty or unparseable (the payload then omits it
72
+ * so the backend applies the plan's own limit).
73
+ *
74
+ * Deliberately NOT `toInvoicingSubscriptionQuantity`: `0` is a real
75
+ * remaining-cycles value on a subscription serving its last paid term, and edit
76
+ * drafts seed it straight off the entity. Clamping it up to `1` would turn a
77
+ * no-op save of a non-renewing subscription into a one-cycle extension.
78
+ */
79
+ const toInvoicingSubscriptionBillingCycles = (remainingBillingCycles) => {
80
+ if (remainingBillingCycles.trim() === '') {
81
+ return undefined;
82
+ }
83
+ const whole = Math.floor(Number(remainingBillingCycles));
84
+ return Number.isFinite(whole) && whole >= 0 ? whole : undefined;
85
+ };
86
+ exports.toInvoicingSubscriptionBillingCycles = toInvoicingSubscriptionBillingCycles;
41
87
  exports.initialInvoicingSubscriptionFormLocalData = {
42
88
  addonPriceCodes: [],
89
+ addonQuantities: {},
43
90
  autoCollection: true,
44
91
  billingFrequency: 'monthly',
45
92
  chargePriceCodes: [],
93
+ chargeQuantities: {},
46
94
  couponId: '',
47
95
  customerId: '',
48
96
  planPriceCode: '',
49
97
  planQuantity: 1,
50
98
  poNumber: '',
51
99
  preferredCurrencyCode: 'USD',
100
+ remainingBillingCycles: '',
101
+ startedAt: '',
52
102
  trialEnd: '',
53
103
  };
54
104
  /** Seed the form draft from an existing subscription entity (edit mode). */
@@ -59,18 +109,26 @@ const entityToInvoicingSubscriptionFormLocalData = (subscription) => {
59
109
  const planItem = subscription.subscriptionItems?.find((item) => item.itemType === 'plan');
60
110
  return {
61
111
  addonPriceCodes: subscriptionItemPriceCodes(subscription, 'addon'),
112
+ addonQuantities: subscriptionItemQuantities(subscription, 'addon'),
62
113
  autoCollection: (subscription.autoCollection ?? 'on') === 'on',
63
114
  billingFrequency: (0, exports.periodToBillingFrequency)(subscription.billingPeriod, subscription.billingPeriodUnit),
64
115
  chargePriceCodes: subscriptionItemPriceCodes(subscription, 'charge'),
116
+ chargeQuantities: subscriptionItemQuantities(subscription, 'charge'),
65
117
  couponId: subscription.coupons?.[0]?.couponCode ??
66
118
  subscription.coupons?.[0]?.couponID ??
67
119
  '',
68
120
  customerId: subscription.customerID ?? '',
69
121
  planPriceCode: subscriptionItemPriceCodes(subscription, 'plan')[0] ?? '',
70
- planQuantity: planItem?.quantity ?? 1,
122
+ planQuantity: (0, exports.toInvoicingSubscriptionQuantity)(planItem?.quantity),
71
123
  poNumber: subscription.poNumber ?? '',
72
124
  preferredCurrencyCode: subscription.currencyCode ?? 'USD',
125
+ remainingBillingCycles: subscription.remainingBillingCycles != null
126
+ ? String(subscription.remainingBillingCycles)
127
+ : '',
73
128
  setupFee: subscription.setupFee,
129
+ startedAt: subscription.startedAt != null
130
+ ? subscription.startedAt.format('YYYY-MM-DD')
131
+ : '',
74
132
  trialEnd: subscription.trialEnd != null
75
133
  ? subscription.trialEnd.format('YYYY-MM-DD')
76
134
  : '',
@@ -1,5 +1,6 @@
1
- import { ID } from '../../../commonStateTypes/common';
1
+ import { FetchState, ID } from '../../../commonStateTypes/common';
2
2
  import { SelectorView } from '../../../commonStateTypes/viewAndReport/viewAndReport';
3
+ import { InvoicingCatalogItemLifecycleAction, InvoicingCatalogLifecycleActionOption, InvoicingCatalogProductLifecycleAction, InvoicingNamedOptionsByKey } from '../../../entity/invoicing/invoicingCommonPayload';
3
4
  import { InvoicingPlan } from '../../../entity/invoicing/plan/planState';
4
5
  import { RootState } from '../../../reducer';
5
6
  import { InvoicingCatalogItemKind } from './invoicingCatalogItemDetailViewState';
@@ -7,8 +8,19 @@ import { InvoicingCatalogItemKind } from './invoicingCatalogItemDetailViewState'
7
8
  * Read-only view for the catalog item (plan or product) detail page. One screen
8
9
  * serves both kinds, so the bundled view carries the resolved `plan` or
9
10
  * `product` (whichever the `kind` denotes) + the shared fetch state.
11
+ *
12
+ * The lifecycle/tier option sets and `configFetchState` are folded in from the
13
+ * config slice rather than left for the screen to select itself, so the page
14
+ * wires one selector and CES stays the only place that knows which slice each
15
+ * option set lives in. `configFetchState` is named apart from the view's own
16
+ * `fetchState` because they track different requests — the screen gates a config
17
+ * refetch on the former while rendering off the latter.
10
18
  */
11
19
  export interface InvoicingCatalogItemDetailView extends SelectorView {
20
+ catalogItemLifecycleActionOptions: InvoicingCatalogLifecycleActionOption<InvoicingCatalogItemLifecycleAction>[];
21
+ catalogProductLifecycleActionOptions: InvoicingCatalogLifecycleActionOption<InvoicingCatalogProductLifecycleAction>[];
22
+ configFetchState: FetchState;
23
+ catalogTierTypeOptionsByPricingModel?: InvoicingNamedOptionsByKey;
12
24
  plan?: InvoicingPlan;
13
25
  }
14
26
  export declare const getInvoicingCatalogItemDetail: (state: RootState, _kind: InvoicingCatalogItemKind, id: ID) => InvoicingCatalogItemDetailView;
@@ -2,9 +2,15 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getInvoicingCatalogItemDetail = void 0;
4
4
  const planSelector_1 = require("../../../entity/invoicing/plan/planSelector");
5
+ const invoicingConfigViewSelector_1 = require("../invoicingConfigView/invoicingConfigViewSelector");
5
6
  const getInvoicingCatalogItemDetail = (state, _kind, id) => {
6
7
  const { error, fetchState } = state.invoicingCatalogItemDetailViewState;
8
+ const { catalogItemLifecycleActionOptions, catalogProductLifecycleActionOptions, catalogTierTypeOptionsByPricingModel, fetchState: configFetchState, } = (0, invoicingConfigViewSelector_1.getInvoicingConfigView)(state);
7
9
  return {
10
+ catalogItemLifecycleActionOptions,
11
+ catalogProductLifecycleActionOptions,
12
+ catalogTierTypeOptionsByPricingModel,
13
+ configFetchState,
8
14
  plan: (0, planSelector_1.getInvoicingPlanById)(state.invoicingPlanState, id),
9
15
  fetchState,
10
16
  error,
@@ -1,4 +1,4 @@
1
- import { AuditLogEntityRouteOptionWire, AuditLogListSortFieldOptionWire, AuditLogSourceLabelOptionWire, InvoicingCatalogLifecycleActionOptionWire, InvoicingDunningActionOption, InvoicingNamedOptionWire, InvoicingQboAccountMappingKindOptionWire, InvoicingSubscriptionEditFieldOptionWire, InvoicingSubscriptionLifecycleActionOptionWire } from '../../../entity/invoicing/invoicingCommonPayload';
1
+ import { AuditLogEntityRouteOptionWire, AuditLogListSortFieldOptionWire, AuditLogSourceLabelOptionWire, InvoicingCatalogLifecycleActionOptionWire, InvoicingDunningActionOption, InvoicingNamedOptionWire, InvoicingNamedOptionsByKeyWire, InvoicingQboAccountMappingKindOptionWire, InvoicingSubscriptionEditFieldOptionWire, InvoicingSubscriptionLifecycleActionOptionWire } from '../../../entity/invoicing/invoicingCommonPayload';
2
2
  import { ZeniAPIResponse } from '../../../responsePayload';
3
3
  /**
4
4
  * Wire payload of the invoicing config API (GET/PUT `/1.0/config`). Follows
@@ -23,6 +23,7 @@ export interface InvoicingConfigPayload {
23
23
  subscription_metadata_edit_allowed_from_statuses: string[];
24
24
  auto_collection_options?: InvoicingNamedOptionWire[];
25
25
  billing_period_unit_options?: InvoicingNamedOptionWire[];
26
+ catalog_tier_type_options_by_pricing_model?: InvoicingNamedOptionsByKeyWire;
26
27
  catalog_trial_end_action_options?: InvoicingNamedOptionWire[];
27
28
  catalog_trial_unit_options?: InvoicingNamedOptionWire[];
28
29
  created_at?: string | null;
@@ -2,7 +2,7 @@ import { ZeniAPIStatus } from '../../../responsePayload';
2
2
  import { InvoicingConfigPayload } from './invoicingConfigViewPayload';
3
3
  import { InvoicingConfigViewState } from './invoicingConfigViewState';
4
4
  export declare const initialState: InvoicingConfigViewState;
5
- export declare function mapInvoicingConfigPayloadToState(payload: InvoicingConfigPayload): Pick<InvoicingConfigViewState, 'auditLogEntityRouteOptions' | 'auditLogListSortFieldOptions' | 'auditLogSourceLabels' | 'autoCollectionOptions' | 'billingPeriodUnitOptions' | 'catalogTrialEndActionOptions' | 'catalogTrialUnitOptions' | 'customerTypeOptions' | 'dateFormatOptions' | 'discountApplyOnOptions' | 'discountDurationTypeOptions' | 'discountTypeOptions' | 'manualPaymentMethodOptions' | 'netTermDayOptions' | 'paymentGatewayOptions' | 'taxabilityOptions' | 'createdAt' | 'updatedAt' | 'dunningScheduleActionOptions' | 'subscriptionLifecycleActionOptions' | 'subscriptionCommercialEditAllowedFromStatuses' | 'subscriptionMetadataEditAllowedFromStatuses' | 'subscriptionEditFieldOptions' | 'subscriptionCancelTimingOptions' | 'subscriptionChangeOptionOptions' | 'catalogItemLifecycleActionOptions' | 'catalogProductLifecycleActionOptions' | 'discountLifecycleActionOptions' | 'qboAccountMappingKindOptions' | 'qboCustomerMatchingOptions' | 'qboSyncStatusOptions' | 'isInvoicingEnabled' | 'isInvoicingTosAccepted' | 'invoicingTosAcceptanceIp' | 'invoicingTosAcceptanceTime' | 'invoicingTosAcceptanceUserAgent' | 'invoicingTosAcceptanceUserId' | 'isInvoicingSettingsSeeded'>;
5
+ export declare function mapInvoicingConfigPayloadToState(payload: InvoicingConfigPayload): Pick<InvoicingConfigViewState, 'auditLogEntityRouteOptions' | 'auditLogListSortFieldOptions' | 'auditLogSourceLabels' | 'autoCollectionOptions' | 'billingPeriodUnitOptions' | 'catalogTierTypeOptionsByPricingModel' | 'catalogTrialEndActionOptions' | 'catalogTrialUnitOptions' | 'customerTypeOptions' | 'dateFormatOptions' | 'discountApplyOnOptions' | 'discountDurationTypeOptions' | 'discountTypeOptions' | 'manualPaymentMethodOptions' | 'netTermDayOptions' | 'paymentGatewayOptions' | 'taxabilityOptions' | 'createdAt' | 'updatedAt' | 'dunningScheduleActionOptions' | 'subscriptionLifecycleActionOptions' | 'subscriptionCommercialEditAllowedFromStatuses' | 'subscriptionMetadataEditAllowedFromStatuses' | 'subscriptionEditFieldOptions' | 'subscriptionCancelTimingOptions' | 'subscriptionChangeOptionOptions' | 'catalogItemLifecycleActionOptions' | 'catalogProductLifecycleActionOptions' | 'discountLifecycleActionOptions' | 'qboAccountMappingKindOptions' | 'qboCustomerMatchingOptions' | 'qboSyncStatusOptions' | 'isInvoicingEnabled' | 'isInvoicingTosAccepted' | 'invoicingTosAcceptanceIp' | 'invoicingTosAcceptanceTime' | 'invoicingTosAcceptanceUserAgent' | 'invoicingTosAcceptanceUserId' | 'isInvoicingSettingsSeeded'>;
6
6
  export declare const fetchInvoicingConfig: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[payload?: {
7
7
  cacheOverride?: boolean;
8
8
  } | undefined], {
@@ -15,6 +15,7 @@ exports.initialState = {
15
15
  auditLogSourceLabels: [],
16
16
  autoCollectionOptions: [],
17
17
  billingPeriodUnitOptions: [],
18
+ catalogTierTypeOptionsByPricingModel: undefined,
18
19
  catalogTrialEndActionOptions: [],
19
20
  catalogTrialUnitOptions: [],
20
21
  customerTypeOptions: [],
@@ -66,6 +67,9 @@ function mapInvoicingConfigPayloadToState(payload) {
66
67
  })),
67
68
  autoCollectionOptions: (payload.auto_collection_options ?? []).map(invoicingCommonPayload_1.toInvoicingNamedOption),
68
69
  billingPeriodUnitOptions: (payload.billing_period_unit_options ?? []).map(invoicingCommonPayload_1.toInvoicingNamedOption),
70
+ catalogTierTypeOptionsByPricingModel: payload.catalog_tier_type_options_by_pricing_model != null
71
+ ? (0, invoicingCommonPayload_1.toInvoicingNamedOptionsByKey)(payload.catalog_tier_type_options_by_pricing_model)
72
+ : undefined,
69
73
  catalogTrialEndActionOptions: (payload.catalog_trial_end_action_options ?? []).map(invoicingCommonPayload_1.toInvoicingNamedOption),
70
74
  catalogTrialUnitOptions: (payload.catalog_trial_unit_options ?? []).map(invoicingCommonPayload_1.toInvoicingNamedOption),
71
75
  customerTypeOptions: (payload.customer_type_options ?? []).map(invoicingCommonPayload_1.toInvoicingNamedOption),
@@ -1,5 +1,5 @@
1
1
  import { FetchStateAndError, FetchedState } from '../../../commonStateTypes/common';
2
- import type { AuditLogEntityRouteOption, AuditLogListSortFieldOption, AuditLogSourceLabelOption, InvoicingCatalogItemLifecycleAction, InvoicingCatalogLifecycleActionOption, InvoicingCatalogProductLifecycleAction, InvoicingDiscountLifecycleActionOption, InvoicingNamedOption, InvoicingQboAccountMappingKindOption, InvoicingSubscriptionEditFieldOption, InvoicingSubscriptionLifecycleActionOption } from '../../../entity/invoicing/invoicingCommonPayload';
2
+ import type { AuditLogEntityRouteOption, AuditLogListSortFieldOption, AuditLogSourceLabelOption, InvoicingCatalogItemLifecycleAction, InvoicingCatalogLifecycleActionOption, InvoicingCatalogProductLifecycleAction, InvoicingDiscountLifecycleActionOption, InvoicingNamedOption, InvoicingNamedOptionsByKey, InvoicingQboAccountMappingKindOption, InvoicingSubscriptionEditFieldOption, InvoicingSubscriptionLifecycleActionOption } from '../../../entity/invoicing/invoicingCommonPayload';
3
3
  import { InvoicingDunningActionOption } from '../../../entity/invoicing/invoicingCommonPayload';
4
4
  export interface InvoicingConfigViewState extends FetchedState {
5
5
  acceptTermsFetchState: FetchStateAndError;
@@ -33,6 +33,12 @@ export interface InvoicingConfigViewState extends FetchedState {
33
33
  subscriptionLifecycleActionOptions: InvoicingSubscriptionLifecycleActionOption[];
34
34
  subscriptionMetadataEditAllowedFromStatuses: string[];
35
35
  taxabilityOptions: InvoicingNamedOption[];
36
+ /**
37
+ * Allowed tier `Type` options per pricing model. `undefined` means the config
38
+ * has not been loaded yet — consumers disable the tier editor rather than
39
+ * falling back to a hardcoded model-to-type map.
40
+ */
41
+ catalogTierTypeOptionsByPricingModel?: InvoicingNamedOptionsByKey;
36
42
  createdAt?: string;
37
43
  invoicingTosAcceptanceIp?: string;
38
44
  invoicingTosAcceptanceTime?: string;
@@ -2,7 +2,6 @@ import { FetchState, FetchStateAndError } from '../../../commonStateTypes/common
2
2
  import { InvoicingNamedOption, InvoicingQboAccountMappingKindOption, InvoicingSettingsPayload } from '../../../entity/invoicing/invoicingCommonPayload';
3
3
  import { RootState } from '../../../reducer';
4
4
  import { ZeniAPIStatus } from '../../../responsePayload';
5
- import { InvoicingOnboardingStatus } from '../invoicingConfigView/invoicingConfigViewPayload';
6
5
  import { InvoicingBrandingFormLocalData } from './invoicingBrandingFormConfig';
7
6
  /**
8
7
  * Shared primitive: the raw invoicing settings. Consumed internally by other
@@ -50,7 +49,6 @@ export interface InvoicingSettingsHubView {
50
49
  isEnablingInvoicing: boolean;
51
50
  isQboConfigured: boolean;
52
51
  isStripeConnected: boolean;
53
- status?: InvoicingOnboardingStatus;
54
52
  }
55
53
  /**
56
54
  * The settings hub's composite of everything it derives from the store: whether
@@ -86,7 +86,6 @@ const getInvoicingSettingsHubView = (state) => {
86
86
  isEnablingInvoicing: enableState.fetchState === 'In-Progress',
87
87
  isQboConfigured,
88
88
  isStripeConnected,
89
- status,
90
89
  };
91
90
  };
92
91
  exports.getInvoicingSettingsHubView = getInvoicingSettingsHubView;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zeniai/client-epic-state",
3
- "version": "5.1.96",
3
+ "version": "5.1.97",
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",