@unchainedshop/core 5.0.0-alpha.1 → 5.0.0-alpha.11

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 (238) hide show
  1. package/README.md +92 -546
  2. package/lib/bulk-exporter/createBulkExporter.js +1 -1
  3. package/lib/bulk-exporter/handlers/exportProductsHandler.js +2 -2
  4. package/lib/bulk-exporter/handlers/exportUsersHandler.js +1 -0
  5. package/lib/bulk-importer/handlers/assortment/create.js +1 -3
  6. package/lib/bulk-importer/handlers/assortment/update.js +1 -1
  7. package/lib/bulk-importer/handlers/product/create.d.ts +150 -35
  8. package/lib/bulk-importer/handlers/product/create.js +35 -16
  9. package/lib/bulk-importer/handlers/product/update.d.ts +78 -36
  10. package/lib/bulk-importer/handlers/product/update.js +8 -48
  11. package/lib/core-index.d.ts +1 -2
  12. package/lib/core-index.js +2 -18
  13. package/lib/directors/BaseDiscountAdapter.d.ts +3 -0
  14. package/lib/directors/BaseDiscountDirector.d.ts +2 -2
  15. package/lib/directors/BaseDiscountDirector.js +7 -9
  16. package/lib/directors/BasePricingDirector.d.ts +2 -2
  17. package/lib/directors/BasePricingDirector.js +3 -6
  18. package/lib/directors/BasePricingSheet.d.ts +2 -0
  19. package/lib/directors/BaseWorker.js +3 -2
  20. package/lib/directors/DeliveryDirector.d.ts +1 -1
  21. package/lib/directors/DeliveryDirector.js +2 -12
  22. package/lib/directors/DeliveryPricingDirector.js +1 -10
  23. package/lib/directors/DeliveryPricingSheet.js +9 -4
  24. package/lib/directors/EnrollmentAdapter.d.ts +11 -1
  25. package/lib/directors/EnrollmentAdapter.js +7 -2
  26. package/lib/directors/EnrollmentDirector.d.ts +3 -2
  27. package/lib/directors/EnrollmentDirector.js +9 -19
  28. package/lib/directors/FileDirector.d.ts +4 -4
  29. package/lib/directors/FileDirector.js +2 -13
  30. package/lib/directors/FilterDirector.d.ts +1 -1
  31. package/lib/directors/FilterDirector.js +25 -32
  32. package/lib/directors/OrderDiscountDirector.d.ts +1 -15
  33. package/lib/directors/OrderDiscountDirector.js +1 -13
  34. package/lib/directors/OrderPricingDirector.js +1 -10
  35. package/lib/directors/OrderPricingSheet.d.ts +1 -0
  36. package/lib/directors/OrderPricingSheet.js +16 -17
  37. package/lib/directors/PaymentDirector.d.ts +1 -1
  38. package/lib/directors/PaymentDirector.js +2 -12
  39. package/lib/directors/PaymentPricingDirector.js +1 -10
  40. package/lib/directors/PaymentPricingSheet.js +9 -4
  41. package/lib/directors/ProductDiscountDirector.d.ts +1 -15
  42. package/lib/directors/ProductDiscountDirector.js +1 -13
  43. package/lib/directors/ProductPricingAdapter.d.ts +1 -0
  44. package/lib/directors/ProductPricingDirector.js +2 -10
  45. package/lib/directors/ProductPricingSheet.js +7 -4
  46. package/lib/directors/QuotationAdapter.js +5 -2
  47. package/lib/directors/QuotationDirector.d.ts +1 -1
  48. package/lib/directors/QuotationDirector.js +2 -14
  49. package/lib/directors/WarehousingDirector.js +16 -34
  50. package/lib/directors/WorkerDirector.d.ts +7 -1
  51. package/lib/directors/WorkerDirector.js +29 -29
  52. package/lib/directors/registryDirector.d.ts +2 -0
  53. package/lib/directors/registryDirector.js +6 -0
  54. package/lib/errors.d.ts +1 -0
  55. package/lib/errors.js +5 -0
  56. package/lib/factory/index.d.ts +12 -1
  57. package/lib/factory/index.js +12 -1
  58. package/lib/factory/registerAssortmentSearchFilter.d.ts +2 -1
  59. package/lib/factory/registerAssortmentSearchFilter.js +6 -3
  60. package/lib/factory/registerDeliveryPricing.d.ts +7 -0
  61. package/lib/factory/registerDeliveryPricing.js +30 -0
  62. package/lib/factory/registerDeliveryProvider.d.ts +12 -0
  63. package/lib/factory/registerDeliveryProvider.js +46 -0
  64. package/lib/factory/registerEnrollment.d.ts +25 -0
  65. package/lib/factory/registerEnrollment.js +41 -0
  66. package/lib/factory/registerFileAdapter.d.ts +17 -0
  67. package/lib/factory/registerFileAdapter.js +24 -0
  68. package/lib/factory/registerOrderDiscount.d.ts +13 -0
  69. package/lib/factory/registerOrderDiscount.js +39 -0
  70. package/lib/factory/registerOrderPricing.d.ts +7 -0
  71. package/lib/factory/registerOrderPricing.js +30 -0
  72. package/lib/factory/registerPaymentPricing.d.ts +7 -0
  73. package/lib/factory/registerPaymentPricing.js +30 -0
  74. package/lib/factory/registerPaymentProvider.d.ts +15 -0
  75. package/lib/factory/registerPaymentProvider.js +53 -0
  76. package/lib/factory/registerProductDiscount.d.ts +20 -0
  77. package/lib/factory/registerProductDiscount.js +47 -0
  78. package/lib/factory/registerProductDiscoverabilityFilter.d.ts +2 -1
  79. package/lib/factory/registerProductDiscoverabilityFilter.js +6 -3
  80. package/lib/factory/registerProductPricing.d.ts +7 -0
  81. package/lib/factory/registerProductPricing.js +30 -0
  82. package/lib/factory/registerProductSearchFilter.d.ts +2 -1
  83. package/lib/factory/registerProductSearchFilter.js +4 -3
  84. package/lib/factory/registerQuotation.d.ts +13 -0
  85. package/lib/factory/registerQuotation.js +53 -0
  86. package/lib/factory/registerVirtualWarehousing.js +1 -1
  87. package/lib/factory/registerWorker.js +1 -1
  88. package/lib/plugins/PluginRegistry.d.ts +2 -1
  89. package/lib/plugins/PluginRegistry.js +19 -4
  90. package/lib/services/addCartQuotation.d.ts +9 -13
  91. package/lib/services/addCartQuotation.js +43 -38
  92. package/lib/services/addMultipleCartProducts.js +3 -2
  93. package/lib/services/bulkAssignProductsToAssortment.d.ts +8 -0
  94. package/lib/services/bulkAssignProductsToAssortment.js +11 -0
  95. package/lib/services/bulkDeleteUsers.d.ts +7 -0
  96. package/lib/services/bulkDeleteUsers.js +11 -0
  97. package/lib/services/bulkRemoveFilters.d.ts +7 -0
  98. package/lib/services/bulkRemoveFilters.js +10 -0
  99. package/lib/services/bulkRemoveProducts.d.ts +7 -0
  100. package/lib/services/bulkRemoveProducts.js +23 -0
  101. package/lib/services/bulkSetFilterActive.d.ts +8 -0
  102. package/lib/services/bulkSetFilterActive.js +12 -0
  103. package/lib/services/calculateDiscountTotal.d.ts +5 -1
  104. package/lib/services/calculateDiscountTotal.js +36 -28
  105. package/lib/services/checkoutOrder.js +8 -0
  106. package/lib/services/createFilter.d.ts +3 -0
  107. package/lib/services/createFilter.js +6 -0
  108. package/lib/services/createFilterOption.d.ts +5 -0
  109. package/lib/services/createFilterOption.js +8 -0
  110. package/lib/services/createSignedURL.js +2 -1
  111. package/lib/services/deleteCart.d.ts +2 -0
  112. package/lib/services/deleteCart.js +7 -0
  113. package/lib/services/deleteUser.js +2 -5
  114. package/lib/services/index.d.ts +32 -1
  115. package/lib/services/index.js +32 -1
  116. package/lib/services/initCartProviders.js +1 -0
  117. package/lib/services/initializeEnrollment.d.ts +1 -1
  118. package/lib/services/initializeEnrollment.js +11 -0
  119. package/lib/services/isTokenInvalidateable.d.ts +3 -1
  120. package/lib/services/isTokenInvalidateable.js +2 -2
  121. package/lib/services/loadFilterOptions.js +3 -3
  122. package/lib/services/migrateOrderCart.js +2 -2
  123. package/lib/services/migrateUserData.js +3 -0
  124. package/lib/services/processEnrollment.js +8 -4
  125. package/lib/services/processOrder.js +7 -6
  126. package/lib/services/processQuotation.js +11 -13
  127. package/lib/services/proposeQuotation.js +3 -0
  128. package/lib/services/removeFilterOption.d.ts +6 -0
  129. package/lib/services/removeFilterOption.js +8 -0
  130. package/lib/services/removeProduct.js +2 -1
  131. package/lib/services/reserveOrderDiscountsForCheckout.d.ts +5 -0
  132. package/lib/services/reserveOrderDiscountsForCheckout.js +34 -0
  133. package/lib/services/reserveOrderQuotationsForCheckout.d.ts +8 -0
  134. package/lib/services/reserveOrderQuotationsForCheckout.js +49 -0
  135. package/lib/services/simulateConfigurablePriceRange.js +1 -1
  136. package/lib/services/simulateDeliveryPricing.js +1 -1
  137. package/lib/services/simulatePaymentPricing.js +1 -1
  138. package/lib/services/simulateProductDispatching.d.ts +3 -1
  139. package/lib/services/simulateProductDispatching.js +3 -3
  140. package/lib/services/simulateProductInventory.d.ts +3 -1
  141. package/lib/services/simulateProductInventory.js +3 -3
  142. package/lib/services/supportedDeliveryProviders.js +9 -0
  143. package/lib/services/supportedPaymentProviders.js +9 -0
  144. package/lib/services/supportedWarehousingProviders.js +9 -0
  145. package/lib/services/suspendEnrollment.d.ts +5 -0
  146. package/lib/services/suspendEnrollment.js +21 -0
  147. package/lib/services/terminateEnrollment.d.ts +6 -2
  148. package/lib/services/terminateEnrollment.js +27 -7
  149. package/lib/services/updateCalculation.js +2 -1
  150. package/lib/services/updateCartItem.d.ts +7 -7
  151. package/lib/services/updateCartItem.js +28 -25
  152. package/lib/services/updateEnrollmentPlan.d.ts +5 -0
  153. package/lib/services/updateEnrollmentPlan.js +26 -0
  154. package/lib/services/updateFilter.d.ts +3 -0
  155. package/lib/services/updateFilter.js +8 -0
  156. package/lib/services/uploadFileFromStream.js +2 -1
  157. package/lib/services/validateOrder.js +13 -9
  158. package/package.json +29 -23
  159. package/lib/errors/common.d.ts +0 -568
  160. package/lib/errors/common.js +0 -789
  161. package/lib/errors/index.d.ts +0 -1
  162. package/lib/errors/index.js +0 -1
  163. package/lib/services/addCartDiscount.d.ts +0 -10
  164. package/lib/services/addCartDiscount.js +0 -27
  165. package/lib/services/addCartItem.d.ts +0 -15
  166. package/lib/services/addCartItem.js +0 -41
  167. package/lib/services/addEmail.d.ts +0 -7
  168. package/lib/services/addEmail.js +0 -17
  169. package/lib/services/addProductAssignment.d.ts +0 -3
  170. package/lib/services/addProductAssignment.js +0 -63
  171. package/lib/services/authenticateWithPassword.d.ts +0 -15
  172. package/lib/services/authenticateWithPassword.js +0 -34
  173. package/lib/services/changePassword.d.ts +0 -10
  174. package/lib/services/changePassword.js +0 -19
  175. package/lib/services/countOrdersWithFilters.d.ts +0 -3
  176. package/lib/services/countOrdersWithFilters.js +0 -25
  177. package/lib/services/createAssortment.d.ts +0 -7
  178. package/lib/services/createAssortment.js +0 -10
  179. package/lib/services/createBookmark.d.ts +0 -8
  180. package/lib/services/createBookmark.js +0 -21
  181. package/lib/services/createDeliveryProvider.d.ts +0 -6
  182. package/lib/services/createDeliveryProvider.js +0 -19
  183. package/lib/services/createEnrollment.d.ts +0 -17
  184. package/lib/services/createEnrollment.js +0 -33
  185. package/lib/services/createProduct.d.ts +0 -7
  186. package/lib/services/createProduct.js +0 -8
  187. package/lib/services/createProductBundleItem.d.ts +0 -5
  188. package/lib/services/createProductBundleItem.js +0 -25
  189. package/lib/services/createProductReview.d.ts +0 -8
  190. package/lib/services/createProductReview.js +0 -12
  191. package/lib/services/deliverOrder.d.ts +0 -5
  192. package/lib/services/deliverOrder.js +0 -26
  193. package/lib/services/findActiveWorkTypes.d.ts +0 -2
  194. package/lib/services/findActiveWorkTypes.js +0 -6
  195. package/lib/services/findDeliveryInterfaces.d.ts +0 -7
  196. package/lib/services/findDeliveryInterfaces.js +0 -13
  197. package/lib/services/findOrdersWithFilters.d.ts +0 -9
  198. package/lib/services/findOrdersWithFilters.js +0 -25
  199. package/lib/services/findPaymentInterfaces.d.ts +0 -7
  200. package/lib/services/findPaymentInterfaces.js +0 -13
  201. package/lib/services/findWarehousingInterfaces.d.ts +0 -7
  202. package/lib/services/findWarehousingInterfaces.js +0 -13
  203. package/lib/services/getDeliveryDiscounts.d.ts +0 -8
  204. package/lib/services/getDeliveryDiscounts.js +0 -14
  205. package/lib/services/getPaymentDiscounts.d.ts +0 -8
  206. package/lib/services/getPaymentDiscounts.js +0 -14
  207. package/lib/services/getShopInfo.d.ts +0 -25
  208. package/lib/services/getShopInfo.js +0 -47
  209. package/lib/services/impersonateUser.d.ts +0 -8
  210. package/lib/services/impersonateUser.js +0 -20
  211. package/lib/services/loginAsGuest.d.ts +0 -10
  212. package/lib/services/loginAsGuest.js +0 -19
  213. package/lib/services/obfuscateWorkerData.d.ts +0 -4
  214. package/lib/services/obfuscateWorkerData.js +0 -4
  215. package/lib/services/orderPricingAccessors.d.ts +0 -18
  216. package/lib/services/orderPricingAccessors.js +0 -29
  217. package/lib/services/payOrder.d.ts +0 -5
  218. package/lib/services/payOrder.js +0 -25
  219. package/lib/services/registerUser.d.ts +0 -14
  220. package/lib/services/registerUser.js +0 -44
  221. package/lib/services/removeBookmark.d.ts +0 -6
  222. package/lib/services/removeBookmark.js +0 -10
  223. package/lib/services/removeCartItem.d.ts +0 -6
  224. package/lib/services/removeCartItem.js +0 -19
  225. package/lib/services/resetPasswordWithMigration.d.ts +0 -14
  226. package/lib/services/resetPasswordWithMigration.js +0 -31
  227. package/lib/services/resolveWorkType.d.ts +0 -1
  228. package/lib/services/resolveWorkType.js +0 -7
  229. package/lib/services/searchProductsWithAssortment.d.ts +0 -19
  230. package/lib/services/searchProductsWithAssortment.js +0 -17
  231. package/lib/services/toggleBookmark.d.ts +0 -8
  232. package/lib/services/toggleBookmark.js +0 -33
  233. package/lib/services/updateCart.d.ts +0 -15
  234. package/lib/services/updateCart.js +0 -27
  235. package/lib/services/updateEnrollment.d.ts +0 -13
  236. package/lib/services/updateEnrollment.js +0 -36
  237. package/lib/services/verifyEmailWithMigration.d.ts +0 -15
  238. package/lib/services/verifyEmailWithMigration.js +0 -23
@@ -1,18 +1,9 @@
1
1
  import { OrderPricingSheet, } from "./OrderPricingSheet.js";
2
2
  import { OrderPricingAdapter, } from "./OrderPricingAdapter.js";
3
3
  import { BasePricingDirector } from "./BasePricingDirector.js";
4
- import { pluginRegistry } from "../plugins/PluginRegistry.js";
5
- const baseDirector = BasePricingDirector('OrderPricingDirector');
4
+ const baseDirector = BasePricingDirector(OrderPricingAdapter.adapterType);
6
5
  export const OrderPricingDirector = {
7
6
  ...baseDirector,
8
- getAdapter: (key) => {
9
- const adapters = pluginRegistry.getAdapters(OrderPricingAdapter.adapterType);
10
- return adapters.find((adapter) => adapter.key === key) || null;
11
- },
12
- getAdapters: ({ adapterFilter } = {}) => {
13
- const adapters = pluginRegistry.getAdapters(OrderPricingAdapter.adapterType);
14
- return adapters.filter(adapterFilter || (() => true));
15
- },
16
7
  buildPricingContext: async (context, unchainedAPI) => {
17
8
  const { modules } = unchainedAPI;
18
9
  const { order, currencyCode } = context;
@@ -33,5 +33,6 @@ export interface IOrderPricingSheet extends IPricingSheet<OrderPricingCalculatio
33
33
  taxAmount: number;
34
34
  meta?: any;
35
35
  }) => void;
36
+ discountSum: (discountId?: string) => number;
36
37
  }
37
38
  export declare const OrderPricingSheet: (params: PricingSheetParams<OrderPricingCalculation>) => IOrderPricingSheet;
@@ -15,6 +15,7 @@ export const OrderPricingSheet = (params) => {
15
15
  amount: taxAmount,
16
16
  baseCategory: category,
17
17
  discountId,
18
+ isNetPrice: false,
18
19
  meta,
19
20
  });
20
21
  }
@@ -25,6 +26,7 @@ export const OrderPricingSheet = (params) => {
25
26
  basePricingSheet.calculation.push({
26
27
  category: OrderPricingRowCategory.Items,
27
28
  amount,
29
+ isNetPrice: true,
28
30
  meta,
29
31
  });
30
32
  addTaxIfAvailabile(OrderPricingRowCategory.Items, taxAmount, meta);
@@ -34,6 +36,7 @@ export const OrderPricingSheet = (params) => {
34
36
  category: OrderPricingRowCategory.Discounts,
35
37
  amount,
36
38
  discountId,
39
+ isNetPrice: true,
37
40
  meta,
38
41
  });
39
42
  addTaxIfAvailabile(OrderPricingRowCategory.Discounts, taxAmount, meta, discountId);
@@ -42,6 +45,7 @@ export const OrderPricingSheet = (params) => {
42
45
  basePricingSheet.calculation.push({
43
46
  category: OrderPricingRowCategory.Delivery,
44
47
  amount,
48
+ isNetPrice: true,
45
49
  meta,
46
50
  });
47
51
  addTaxIfAvailabile(OrderPricingRowCategory.Delivery, taxAmount, meta);
@@ -50,6 +54,7 @@ export const OrderPricingSheet = (params) => {
50
54
  basePricingSheet.calculation.push({
51
55
  category: OrderPricingRowCategory.Payment,
52
56
  amount,
57
+ isNetPrice: true,
53
58
  meta,
54
59
  });
55
60
  addTaxIfAvailabile(OrderPricingRowCategory.Payment, taxAmount, meta);
@@ -60,20 +65,11 @@ export const OrderPricingSheet = (params) => {
60
65
  ...(filter || {}),
61
66
  });
62
67
  },
63
- gross() {
64
- return basePricingSheet.sum() - this.taxSum();
65
- },
66
- net() {
67
- return basePricingSheet.sum() - this.taxSum() - this.taxSum();
68
- },
69
- total({ category, useNetPrice, discountId } = { useNetPrice: false }) {
70
- const taxAmount = this.taxSum({ baseCategory: category, discountId });
71
- const amount = this.sum({ category, discountId }) - taxAmount;
72
- const netAmount = !category ? amount - taxAmount : amount;
73
- return {
74
- amount: Math.round(useNetPrice ? netAmount : netAmount + taxAmount),
75
- currencyCode: this.currencyCode,
76
- };
68
+ discountSum(discountId) {
69
+ return basePricingSheet.sum({
70
+ category: OrderPricingRowCategory.Discounts,
71
+ discountId,
72
+ });
77
73
  },
78
74
  discountPrices(explicitDiscountId) {
79
75
  const discountIds = pricingSheet
@@ -85,17 +81,20 @@ export const OrderPricingSheet = (params) => {
85
81
  .filter(Boolean);
86
82
  return [...new Set(discountIds)]
87
83
  .map((discountId) => {
88
- const amount = basePricingSheet.sum({
89
- category: OrderPricingRowCategory.Discounts,
84
+ const taxAmount = pricingSheet.taxSum({
85
+ baseCategory: OrderPricingRowCategory.Discounts,
90
86
  discountId,
91
87
  });
88
+ const amount = pricingSheet.sum({ category: OrderPricingRowCategory.Discounts, discountId }) + taxAmount;
92
89
  if (!amount) {
93
90
  return null;
94
91
  }
95
92
  return {
96
93
  discountId,
97
94
  amount: Math.round(amount),
98
- currencyCode: basePricingSheet.currencyCode,
95
+ currencyCode: pricingSheet.currencyCode,
96
+ isTaxable: taxAmount !== 0,
97
+ isNetPrice: false,
99
98
  };
100
99
  })
101
100
  .filter(Boolean);
@@ -1,4 +1,4 @@
1
- import { type IBaseDirector } from '@unchainedshop/utils';
1
+ import type { IBaseDirector } from '@unchainedshop/utils';
2
2
  import { type IPaymentActions, type IPaymentAdapter, type PaymentContext } from './PaymentAdapter.ts';
3
3
  import type { PaymentProvider } from '@unchainedshop/core-payment';
4
4
  import { type Order, type OrderPayment } from '@unchainedshop/core-orders';
@@ -1,8 +1,7 @@
1
- import { BaseDirector } from '@unchainedshop/utils';
2
1
  import { createLogger } from '@unchainedshop/logger';
3
2
  import { PaymentError, PaymentAdapter, } from "./PaymentAdapter.js";
4
3
  import { OrderPaymentStatus } from '@unchainedshop/core-orders';
5
- import { pluginRegistry } from "../plugins/PluginRegistry.js";
4
+ import { registryDirector } from "./registryDirector.js";
6
5
  const buildPaymentProviderActionsContext = (orderPayment, { transactionContext, ...rest }) => ({
7
6
  ...rest,
8
7
  orderPayment,
@@ -12,17 +11,8 @@ const buildPaymentProviderActionsContext = (orderPayment, { transactionContext,
12
11
  },
13
12
  });
14
13
  const logger = createLogger('unchained:core:payment');
15
- const baseDirector = BaseDirector('PaymentDirector');
16
14
  export const PaymentDirector = {
17
- ...baseDirector,
18
- getAdapter: (key) => {
19
- const adapters = pluginRegistry.getAdapters(PaymentAdapter.adapterType);
20
- return adapters.find((adapter) => adapter.key === key) || null;
21
- },
22
- getAdapters: ({ adapterFilter } = {}) => {
23
- const adapters = pluginRegistry.getAdapters(PaymentAdapter.adapterType);
24
- return adapters.filter(adapterFilter || (() => true));
25
- },
15
+ ...registryDirector(PaymentAdapter.adapterType),
26
16
  actions: async (paymentProvider, paymentContext, unchainedAPI) => {
27
17
  const Adapter = PaymentDirector.getAdapter(paymentProvider.adapterKey);
28
18
  if (!Adapter) {
@@ -1,18 +1,9 @@
1
1
  import { BasePricingDirector } from "./BasePricingDirector.js";
2
2
  import { PaymentPricingAdapter, } from "./PaymentPricingAdapter.js";
3
3
  import { PaymentPricingSheet } from "./PaymentPricingSheet.js";
4
- import { pluginRegistry } from "../plugins/PluginRegistry.js";
5
- const baseDirector = BasePricingDirector('PaymentPricingDirector');
4
+ const baseDirector = BasePricingDirector(PaymentPricingAdapter.adapterType);
6
5
  export const PaymentPricingDirector = {
7
6
  ...baseDirector,
8
- getAdapter: (key) => {
9
- const adapters = pluginRegistry.getAdapters(PaymentPricingAdapter.adapterType);
10
- return adapters.find((adapter) => adapter.key === key) || null;
11
- },
12
- getAdapters: ({ adapterFilter } = {}) => {
13
- const adapters = pluginRegistry.getAdapters(PaymentPricingAdapter.adapterType);
14
- return adapters.filter(adapterFilter || (() => true));
15
- },
16
7
  async buildPricingContext(context, unchainedAPI) {
17
8
  const { modules } = unchainedAPI;
18
9
  if ('item' in context) {
@@ -29,10 +29,12 @@ export const PaymentPricingSheet = (params) => {
29
29
  meta,
30
30
  });
31
31
  },
32
- addTax({ amount, rate, meta }) {
32
+ addTax({ amount, rate, baseCategory, discountId, meta }) {
33
33
  basePricingSheet.calculation.push({
34
34
  category: PaymentPricingRowCategory.Tax,
35
35
  amount,
36
+ baseCategory,
37
+ discountId,
36
38
  isTaxable: false,
37
39
  isNetPrice: false,
38
40
  rate,
@@ -55,17 +57,20 @@ export const PaymentPricingSheet = (params) => {
55
57
  .filter(Boolean);
56
58
  return [...new Set(discountIds)]
57
59
  .map((discountId) => {
58
- const amount = basePricingSheet.sum({
59
- category: PaymentPricingRowCategory.Discount,
60
+ const taxAmount = pricingSheet.taxSum({
61
+ baseCategory: PaymentPricingRowCategory.Discount,
60
62
  discountId,
61
63
  });
64
+ const amount = pricingSheet.sum({ category: PaymentPricingRowCategory.Discount, discountId }) + taxAmount;
62
65
  if (!amount) {
63
66
  return null;
64
67
  }
65
68
  return {
66
69
  discountId,
67
70
  amount: Math.round(amount),
68
- currencyCode: basePricingSheet.currencyCode,
71
+ currencyCode: pricingSheet.currencyCode,
72
+ isTaxable: taxAmount !== 0,
73
+ isNetPrice: false,
69
74
  };
70
75
  })
71
76
  .filter(Boolean);
@@ -1,16 +1,2 @@
1
1
  import type { ProductDiscountConfiguration } from './ProductDiscountConfiguration.ts';
2
- import type { IDiscountAdapter } from './BaseDiscountAdapter.ts';
3
- export declare const ProductDiscountDirector: {
4
- getAdapter: (key: string) => IDiscountAdapter<ProductDiscountConfiguration> | null;
5
- getAdapters: (options?: {
6
- adapterFilter?: (adapter: any) => boolean;
7
- }) => IDiscountAdapter<ProductDiscountConfiguration>[];
8
- actions: (discountContext: import("./BaseDiscountAdapter.ts").DiscountContext, unchainedAPI: {
9
- modules: import("../modules.ts").Modules;
10
- }) => Promise<{
11
- resolveDiscountAdapterFromStaticCode: (params: {
12
- code: string;
13
- }) => Promise<IDiscountAdapter<ProductDiscountConfiguration> | null>;
14
- findSystemDiscounts: () => Promise<string[]>;
15
- }>;
16
- };
2
+ export declare const ProductDiscountDirector: import("./BaseDiscountDirector.ts").IDiscountDirector<ProductDiscountConfiguration>;
@@ -1,15 +1,3 @@
1
1
  import { BaseDiscountDirector } from "./BaseDiscountDirector.js";
2
2
  import { ProductDiscountAdapter } from "./ProductDiscountAdapter.js";
3
- import { pluginRegistry } from "../plugins/PluginRegistry.js";
4
- const baseDirector = BaseDiscountDirector('ProductDiscountDirector');
5
- export const ProductDiscountDirector = {
6
- ...baseDirector,
7
- getAdapter: (key) => {
8
- const adapters = pluginRegistry.getAdapters(ProductDiscountAdapter.adapterType);
9
- return adapters.find((adapter) => adapter.key === key) || null;
10
- },
11
- getAdapters: (options) => {
12
- const adapters = pluginRegistry.getAdapters(ProductDiscountAdapter.adapterType);
13
- return adapters.filter(options?.adapterFilter || (() => true));
14
- },
15
- };
3
+ export const ProductDiscountDirector = BaseDiscountDirector(ProductDiscountAdapter.adapterType);
@@ -10,6 +10,7 @@ export interface ProductPricingAdapterContext extends BasePricingAdapterContext
10
10
  product: Product;
11
11
  quantity: number;
12
12
  configuration: ProductConfiguration[] | null;
13
+ quotationId?: string;
13
14
  order?: Order;
14
15
  user?: User;
15
16
  }
@@ -1,18 +1,9 @@
1
1
  import { ProductPricingSheet, } from "./ProductPricingSheet.js";
2
2
  import { ProductPricingAdapter, } from "./ProductPricingAdapter.js";
3
3
  import { BasePricingDirector } from "./BasePricingDirector.js";
4
- import { pluginRegistry } from "../plugins/PluginRegistry.js";
5
- const baseDirector = BasePricingDirector('ProductPricingDirector');
4
+ const baseDirector = BasePricingDirector(ProductPricingAdapter.adapterType);
6
5
  export const ProductPricingDirector = {
7
6
  ...baseDirector,
8
- getAdapter: (key) => {
9
- const adapters = pluginRegistry.getAdapters(ProductPricingAdapter.adapterType);
10
- return adapters.find((adapter) => adapter.key === key) || null;
11
- },
12
- getAdapters: ({ adapterFilter } = {}) => {
13
- const adapters = pluginRegistry.getAdapters(ProductPricingAdapter.adapterType);
14
- return adapters.filter(adapterFilter || (() => true));
15
- },
16
7
  async buildPricingContext(context, unchainedAPI) {
17
8
  const { modules } = unchainedAPI;
18
9
  const { quantity = 1, currencyCode } = context;
@@ -37,6 +28,7 @@ export const ProductPricingDirector = {
37
28
  product: product,
38
29
  quantity,
39
30
  configuration: item.configuration ?? null,
31
+ quotationId: item.quotationId,
40
32
  user: user,
41
33
  };
42
34
  }
@@ -1,4 +1,4 @@
1
- import { BasePricingSheet } from "./BasePricingSheet.js";
1
+ import { BasePricingSheet, } from "./BasePricingSheet.js";
2
2
  export const ProductPricingRowCategory = {
3
3
  Item: 'ITEM',
4
4
  Discount: 'DISCOUNT',
@@ -62,17 +62,20 @@ export const ProductPricingSheet = (params) => {
62
62
  .filter(Boolean);
63
63
  return [...new Set(discountIds)]
64
64
  .map((discountId) => {
65
- const amount = basePricingSheet.sum({
66
- category: ProductPricingRowCategory.Discount,
65
+ const taxAmount = pricingSheet.taxSum({
66
+ baseCategory: ProductPricingRowCategory.Discount,
67
67
  discountId,
68
68
  });
69
+ const amount = pricingSheet.sum({ category: ProductPricingRowCategory.Discount, discountId }) + taxAmount;
69
70
  if (!amount) {
70
71
  return null;
71
72
  }
72
73
  return {
73
74
  discountId,
74
75
  amount: Math.round(amount),
75
- currencyCode: basePricingSheet.currencyCode,
76
+ currencyCode: pricingSheet.currencyCode,
77
+ isTaxable: taxAmount !== 0,
78
+ isNetPrice: false,
76
79
  };
77
80
  })
78
81
  .filter(Boolean);
@@ -12,7 +12,7 @@ export const QuotationAdapter = {
12
12
  isActivatedFor: () => {
13
13
  return false;
14
14
  },
15
- actions: () => {
15
+ actions: (params) => {
16
16
  return {
17
17
  configurationError: () => {
18
18
  return QuotationError.NOT_IMPLEMENTED;
@@ -36,7 +36,10 @@ export const QuotationAdapter = {
36
36
  return true;
37
37
  },
38
38
  transformItemConfiguration: async ({ quantity, configuration }) => {
39
- return { quantity, configuration };
39
+ const quotedQuantity = params?.quotation?.quantity;
40
+ if (quotedQuantity && (!quantity || quantity % quotedQuantity !== 0))
41
+ return null;
42
+ return { quantity, configuration: params?.quotation?.configuration ?? configuration };
40
43
  },
41
44
  };
42
45
  },
@@ -1,4 +1,4 @@
1
- import { type IBaseDirector } from '@unchainedshop/utils';
1
+ import type { IBaseDirector } from '@unchainedshop/utils';
2
2
  import { type IQuotationAdapter, type QuotationAdapterActions, type QuotationContext } from './QuotationAdapter.ts';
3
3
  export type IQuotationDirector = IBaseDirector<IQuotationAdapter> & {
4
4
  actions: (quotationContext: QuotationContext, unchainedAPI: any) => Promise<QuotationAdapterActions>;
@@ -1,11 +1,7 @@
1
- import { BaseDirector } from '@unchainedshop/utils';
2
1
  import { QuotationError, QuotationAdapter, } from "./QuotationAdapter.js";
3
2
  import { createLogger } from '@unchainedshop/logger';
4
- import { pluginRegistry } from "../plugins/PluginRegistry.js";
3
+ import { registryDirector } from "./registryDirector.js";
5
4
  const logger = createLogger('unchained:core');
6
- const baseDirector = BaseDirector('QuotationDirector', {
7
- adapterSortKey: 'orderIndex',
8
- });
9
5
  const findAppropriateAdapters = (quotationContext, unchainedAPI) => QuotationDirector.getAdapters({
10
6
  adapterFilter: (Adapter) => {
11
7
  const activated = Adapter.isActivatedFor(quotationContext, unchainedAPI);
@@ -16,15 +12,7 @@ const findAppropriateAdapters = (quotationContext, unchainedAPI) => QuotationDir
16
12
  },
17
13
  });
18
14
  export const QuotationDirector = {
19
- ...baseDirector,
20
- getAdapter: (key) => {
21
- const adapters = pluginRegistry.getAdapters(QuotationAdapter.adapterType);
22
- return adapters.find((adapter) => adapter.key === key) || null;
23
- },
24
- getAdapters: ({ adapterFilter } = {}) => {
25
- const adapters = pluginRegistry.getAdapters(QuotationAdapter.adapterType);
26
- return adapters.filter(adapterFilter || (() => true));
27
- },
15
+ ...registryDirector(QuotationAdapter.adapterType),
28
16
  actions: async (quotationContext, unchainedAPI) => {
29
17
  const context = { ...quotationContext, ...unchainedAPI };
30
18
  const Adapter = findAppropriateAdapters(quotationContext, unchainedAPI)?.shift();
@@ -1,25 +1,13 @@
1
- import { BaseDirector } from '@unchainedshop/utils';
2
1
  import { createLogger } from '@unchainedshop/logger';
3
2
  const logger = createLogger('unchained:core');
4
3
  import { DeliveryDirector } from "./DeliveryDirector.js";
5
4
  import { WarehousingError, WarehousingAdapter, } from "./WarehousingAdapter.js";
6
- import { pluginRegistry } from "../plugins/PluginRegistry.js";
5
+ import { registryDirector } from "./registryDirector.js";
7
6
  const getReferenceDate = (context) => {
8
7
  return context && context.referenceDate ? context.referenceDate : new Date();
9
8
  };
10
- const baseDirector = BaseDirector('WarehousingDirector', {
11
- adapterSortKey: 'orderIndex',
12
- });
13
9
  export const WarehousingDirector = {
14
- ...baseDirector,
15
- getAdapter: (key) => {
16
- const adapters = pluginRegistry.getAdapters(WarehousingAdapter.adapterType);
17
- return adapters.find((adapter) => adapter.key === key) || null;
18
- },
19
- getAdapters: ({ adapterFilter } = {}) => {
20
- const adapters = pluginRegistry.getAdapters(WarehousingAdapter.adapterType);
21
- return adapters.filter(adapterFilter || (() => true));
22
- },
10
+ ...registryDirector(WarehousingAdapter.adapterType),
23
11
  actions: async (warehousingProvider, warehousingContext, unchainedAPI) => {
24
12
  const Adapter = WarehousingDirector.getAdapter(warehousingProvider.adapterKey);
25
13
  if (!Adapter) {
@@ -145,29 +133,23 @@ export const WarehousingDirector = {
145
133
  };
146
134
  },
147
135
  async tokenMetadata(virtualProviders, warehousingContext, unchainedAPI) {
148
- return virtualProviders.reduce(async (lastPromise, provider) => {
149
- const last = await lastPromise;
150
- if (last)
151
- return last;
152
- const currentDirector = await WarehousingDirector.actions(provider, warehousingContext, unchainedAPI);
153
- const isActive = await currentDirector.isActive();
154
- if (isActive) {
155
- return currentDirector.tokenMetadata(warehousingContext.token.tokenSerialNumber);
156
- }
136
+ const activeActions = await findFirstActiveActions(virtualProviders, warehousingContext, unchainedAPI);
137
+ if (!activeActions)
157
138
  return null;
158
- }, Promise.resolve(null));
139
+ return activeActions.tokenMetadata(warehousingContext.token.tokenSerialNumber);
159
140
  },
160
141
  async isInvalidateable(virtualProviders, warehousingContext, unchainedAPI) {
161
- return virtualProviders.reduce(async (lastPromise, provider) => {
162
- const last = await lastPromise;
163
- if (last)
164
- return last;
165
- const currentDirector = await WarehousingDirector.actions(provider, warehousingContext, unchainedAPI);
166
- const isActive = await currentDirector.isActive();
167
- if (isActive) {
168
- return currentDirector.isInvalidateable(warehousingContext.token.tokenSerialNumber);
169
- }
142
+ const activeActions = await findFirstActiveActions(virtualProviders, warehousingContext, unchainedAPI);
143
+ if (!activeActions)
170
144
  return null;
171
- }, Promise.resolve(null));
145
+ return activeActions.isInvalidateable(warehousingContext.token.tokenSerialNumber);
172
146
  },
173
147
  };
148
+ async function findFirstActiveActions(virtualProviders, warehousingContext, unchainedAPI) {
149
+ for (const provider of virtualProviders) {
150
+ const currentActions = await WarehousingDirector.actions(provider, warehousingContext, unchainedAPI);
151
+ if (currentActions.isActive())
152
+ return currentActions;
153
+ }
154
+ return null;
155
+ }
@@ -1,5 +1,5 @@
1
1
  import type { Work, WorkData, WorkResult } from '@unchainedshop/core-worker';
2
- import { type IBaseDirector } from '@unchainedshop/utils';
2
+ import type { IBaseDirector } from '@unchainedshop/utils';
3
3
  import type { ScheduleData } from '../utils/schedule.ts';
4
4
  import { type IWorkerAdapter } from './WorkerAdapter.ts';
5
5
  import type { Modules } from '../modules.ts';
@@ -18,6 +18,12 @@ export type IWorkerDirector = IBaseDirector<IWorkerAdapter<any, any>> & {
18
18
  configureAutoscheduling: (workScheduleConfiguration: WorkScheduleConfiguration) => void;
19
19
  getAutoSchedules: () => [string, WorkScheduleConfiguration][];
20
20
  doWork: (work: Work, unchainedAPI: any) => Promise<WorkResult>;
21
+ allocateWork: (unchainedAPI: {
22
+ modules: Modules;
23
+ }, options?: {
24
+ types?: string[] | null;
25
+ worker?: string;
26
+ }) => Promise<Work | null>;
21
27
  processNextWork: (unchainedAPI: {
22
28
  modules: Modules;
23
29
  }, workerId?: string) => Promise<Work | null>;
@@ -1,22 +1,10 @@
1
- import { BaseDirector } from '@unchainedshop/utils';
2
1
  import { WorkerAdapter } from "./WorkerAdapter.js";
3
2
  import { createLogger } from '@unchainedshop/logger';
4
- import { pluginRegistry } from "../plugins/PluginRegistry.js";
3
+ import { registryDirector } from "./registryDirector.js";
5
4
  const logger = createLogger('unchained:core');
6
5
  const AutoScheduleMap = new Map();
7
- const baseDirector = BaseDirector('WorkerDirector', {
8
- adapterKeyField: 'key',
9
- });
10
6
  export const WorkerDirector = {
11
- ...baseDirector,
12
- getAdapter: (key) => {
13
- const adapters = pluginRegistry.getAdapters(WorkerAdapter.adapterType);
14
- return adapters.find((adapter) => adapter.key === key) || null;
15
- },
16
- getAdapters: ({ adapterFilter } = {}) => {
17
- const adapters = pluginRegistry.getAdapters(WorkerAdapter.adapterType);
18
- return adapters.filter(adapterFilter || (() => true));
19
- },
7
+ ...registryDirector(WorkerAdapter.adapterType),
20
8
  getActivePluginTypes: ({ external } = {}) => {
21
9
  return WorkerDirector.getAdapters()
22
10
  .filter((adapter) => {
@@ -47,7 +35,7 @@ export const WorkerDirector = {
47
35
  logger.warn(`WorkerDirector: No registered adapter for type: ${type}`);
48
36
  }
49
37
  try {
50
- const output = await adapter.doWork(input, unchainedAPI, workId);
38
+ const output = await adapter.doWork(input ?? {}, unchainedAPI, workId);
51
39
  return output;
52
40
  }
53
41
  catch (error) {
@@ -57,22 +45,34 @@ export const WorkerDirector = {
57
45
  return errorOutput;
58
46
  }
59
47
  },
48
+ allocateWork: async (unchainedAPI, { types: requestedTypes, worker = unchainedAPI.modules.worker.workerId } = {}) => {
49
+ const lock = await unchainedAPI.modules.orders.acquireLock('allocation', 'worker');
50
+ try {
51
+ const adapters = WorkerDirector.getAdapters();
52
+ const allocationMap = await unchainedAPI.modules.worker.allocationMap();
53
+ const types = adapters
54
+ .filter((adapter) => {
55
+ if (requestedTypes && !requestedTypes.includes(adapter.type))
56
+ return false;
57
+ if (adapter.maxParallelAllocations &&
58
+ adapter.maxParallelAllocations <= allocationMap[adapter.type])
59
+ return false;
60
+ return true;
61
+ })
62
+ .map((adapter) => adapter.type);
63
+ return await unchainedAPI.modules.worker.allocateWork({
64
+ types,
65
+ worker,
66
+ });
67
+ }
68
+ finally {
69
+ await lock.release();
70
+ }
71
+ },
60
72
  processNextWork: async (unchainedAPI, workerId) => {
61
- const adapters = WorkerDirector.getAdapters();
62
- const allocationMap = await unchainedAPI.modules.worker.allocationMap();
63
- const types = adapters
64
- .filter((adapter) => {
65
- if (adapter.external)
66
- return false;
67
- if (adapter.maxParallelAllocations &&
68
- adapter.maxParallelAllocations <= allocationMap[adapter.type])
69
- return false;
70
- return true;
71
- })
72
- .map((adapter) => adapter.type);
73
73
  const worker = workerId ?? unchainedAPI.modules.worker.workerId;
74
- const work = await unchainedAPI.modules.worker.allocateWork({
75
- types,
74
+ const work = await WorkerDirector.allocateWork(unchainedAPI, {
75
+ types: WorkerDirector.getActivePluginTypes({ external: false }),
76
76
  worker,
77
77
  });
78
78
  if (work) {
@@ -0,0 +1,2 @@
1
+ import type { IBaseAdapter, IBaseDirector } from '@unchainedshop/utils';
2
+ export declare const registryDirector: <Adapter extends IBaseAdapter>(adapterType: symbol) => IBaseDirector<Adapter>;
@@ -0,0 +1,6 @@
1
+ import { pluginRegistry } from "../plugins/PluginRegistry.js";
2
+ export const registryDirector = (adapterType) => ({
3
+ getAdapter: (key) => pluginRegistry.getAdapters(adapterType).find((adapter) => adapter.key === key) ||
4
+ null,
5
+ getAdapters: ({ adapterFilter } = {}) => pluginRegistry.getAdapters(adapterType).filter(adapterFilter || (() => true)),
6
+ });
@@ -0,0 +1 @@
1
+ export declare const createServiceError: (name: string, message: string) => Error;
package/lib/errors.js ADDED
@@ -0,0 +1,5 @@
1
+ export const createServiceError = (name, message) => {
2
+ const error = new Error(message);
3
+ error.name = name;
4
+ return error;
5
+ };
@@ -7,4 +7,15 @@ import registerVirtualWarehousing from './registerVirtualWarehousing.ts';
7
7
  import registerProductSearchFilter from './registerProductSearchFilter.ts';
8
8
  import registerAssortmentSearchFilter from './registerAssortmentSearchFilter.ts';
9
9
  import registerInvoicePayment from './registerInvoicePayment.ts';
10
- export { registerProductDiscoverabilityFilter, registerPickUpDelivery, registerShippingDelivery, registerInvoicePayment, registerWorker, registerPhysicalWarehousing, registerVirtualWarehousing, registerProductSearchFilter, registerAssortmentSearchFilter, };
10
+ import registerPaymentProvider from './registerPaymentProvider.ts';
11
+ import registerDeliveryProvider from './registerDeliveryProvider.ts';
12
+ import registerProductPricing from './registerProductPricing.ts';
13
+ import registerOrderPricing from './registerOrderPricing.ts';
14
+ import registerPaymentPricing from './registerPaymentPricing.ts';
15
+ import registerDeliveryPricing from './registerDeliveryPricing.ts';
16
+ import registerProductDiscount from './registerProductDiscount.ts';
17
+ import registerOrderDiscount from './registerOrderDiscount.ts';
18
+ import registerFileAdapter from './registerFileAdapter.ts';
19
+ import registerQuotation from './registerQuotation.ts';
20
+ import registerEnrollment from './registerEnrollment.ts';
21
+ export { registerProductDiscoverabilityFilter, registerPickUpDelivery, registerShippingDelivery, registerInvoicePayment, registerWorker, registerPhysicalWarehousing, registerVirtualWarehousing, registerProductSearchFilter, registerAssortmentSearchFilter, registerPaymentProvider, registerDeliveryProvider, registerProductPricing, registerOrderPricing, registerPaymentPricing, registerDeliveryPricing, registerProductDiscount, registerOrderDiscount, registerFileAdapter, registerQuotation, registerEnrollment, };
@@ -7,4 +7,15 @@ import registerVirtualWarehousing from "./registerVirtualWarehousing.js";
7
7
  import registerProductSearchFilter from "./registerProductSearchFilter.js";
8
8
  import registerAssortmentSearchFilter from "./registerAssortmentSearchFilter.js";
9
9
  import registerInvoicePayment from "./registerInvoicePayment.js";
10
- export { registerProductDiscoverabilityFilter, registerPickUpDelivery, registerShippingDelivery, registerInvoicePayment, registerWorker, registerPhysicalWarehousing, registerVirtualWarehousing, registerProductSearchFilter, registerAssortmentSearchFilter, };
10
+ import registerPaymentProvider from "./registerPaymentProvider.js";
11
+ import registerDeliveryProvider from "./registerDeliveryProvider.js";
12
+ import registerProductPricing from "./registerProductPricing.js";
13
+ import registerOrderPricing from "./registerOrderPricing.js";
14
+ import registerPaymentPricing from "./registerPaymentPricing.js";
15
+ import registerDeliveryPricing from "./registerDeliveryPricing.js";
16
+ import registerProductDiscount from "./registerProductDiscount.js";
17
+ import registerOrderDiscount from "./registerOrderDiscount.js";
18
+ import registerFileAdapter from "./registerFileAdapter.js";
19
+ import registerQuotation from "./registerQuotation.js";
20
+ import registerEnrollment from "./registerEnrollment.js";
21
+ export { registerProductDiscoverabilityFilter, registerPickUpDelivery, registerShippingDelivery, registerInvoicePayment, registerWorker, registerPhysicalWarehousing, registerVirtualWarehousing, registerProductSearchFilter, registerAssortmentSearchFilter, registerPaymentProvider, registerDeliveryProvider, registerProductPricing, registerOrderPricing, registerPaymentPricing, registerDeliveryPricing, registerProductDiscount, registerOrderDiscount, registerFileAdapter, registerQuotation, registerEnrollment, };
@@ -1,6 +1,7 @@
1
1
  import type { SearchQuery } from '@unchainedshop/core-filters';
2
2
  import { type IPlugin } from '../core-index.ts';
3
- export default function registerAssortmentSearchFilter({ orderIndex, search, }: {
3
+ export default function registerAssortmentSearchFilter({ adapterId, orderIndex, search, }: {
4
+ adapterId?: string;
4
5
  orderIndex?: number;
5
6
  search: (params: SearchQuery & {
6
7
  queryString: string;
@@ -1,10 +1,13 @@
1
1
  import { FilterAdapter } from "../core-index.js";
2
2
  import { pluginRegistry } from "../plugins/PluginRegistry.js";
3
- export default function registerAssortmentSearchFilter({ orderIndex = 0, search, }) {
3
+ export default function registerAssortmentSearchFilter({ adapterId, orderIndex = 0, search, }) {
4
+ const id = adapterId ?? crypto.randomUUID();
4
5
  const adapter = {
5
6
  ...FilterAdapter,
6
- key: `shop.unchained.filters.assortment-search-${crypto.randomUUID()}`,
7
- label: 'Assortment Search Filter (auto-generated)',
7
+ key: `shop.unchained.filters.assortment-search-${id}`,
8
+ label: adapterId
9
+ ? `Assortment Search Filter: ${adapterId}`
10
+ : 'Assortment Search Filter (auto-generated)',
8
11
  version: '1.0.0',
9
12
  orderIndex,
10
13
  actions: (params) => {