@nuskin/ns-product-lib 2.6.1-cx24-3607.1 → 2.6.1-cx24-3607.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,17 @@
1
+ ## [2.6.1-cx24-3607.3](https://code.tls.nuskin.io/ns-am/product/js-libs/ns-product-lib/compare/v2.6.1-cx24-3607.2...v2.6.1-cx24-3607.3) (2023-03-16)
2
+
3
+
4
+ ### Fix
5
+
6
+ * check for imageURL ([5d56bae](https://code.tls.nuskin.io/ns-am/product/js-libs/ns-product-lib/commit/5d56baeb4c148cc667cc3c9321fb72e87216c921))
7
+
8
+ ## [2.6.1-cx24-3607.2](https://code.tls.nuskin.io/ns-am/product/js-libs/ns-product-lib/compare/v2.6.1-cx24-3607.1...v2.6.1-cx24-3607.2) (2023-03-16)
9
+
10
+
11
+ ### Fix
12
+
13
+ * (equinox-enabled) skip product mapping when an error occurs in PLP #CX24-3607 ([49fa749](https://code.tls.nuskin.io/ns-am/product/js-libs/ns-product-lib/commit/49fa7499b390aa84cc887fc631037363421d252a)), closes [#CX24-3607](https://code.tls.nuskin.io/ns-am/product/js-libs/ns-product-lib/issues/CX24-3607)
14
+
1
15
  ## [2.6.1-cx24-3607.1](https://code.tls.nuskin.io/ns-am/product/js-libs/ns-product-lib/compare/v2.6.0...v2.6.1-cx24-3607.1) (2023-03-15)
2
16
 
3
17
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nuskin/ns-product-lib",
3
- "version": "2.6.1-cx24-3607.1",
3
+ "version": "2.6.1-cx24-3607.3",
4
4
  "description": "This project contains shared Product models and code between the backend and frontend.",
5
5
  "main": "src/index.js",
6
6
  "scripts": {
@@ -0,0 +1,31 @@
1
+ /**
2
+ * childSKU maps a product variant. Used mainly in subscription.
3
+ *
4
+ * @param {import('.').KitSKUQuantity[]} kits
5
+ * @param {import('.').EquinoxProduct} product
6
+ */
7
+ function childSKU(kits, product) {
8
+ const sku = product.sku.filter(sku => sku.default)[0];
9
+ if (!sku) {
10
+ throw Error('Unable to find the default SKU.');
11
+ }
12
+
13
+ const kit = kits.filter(k => k.sku === sku.identifier)[0];
14
+ if (!kit) {
15
+ throw Error('SKU kit does not exist in the list of available variants.');
16
+ }
17
+
18
+ return {
19
+ productId: product.identifier,
20
+ skuId: sku.identifier,
21
+ type: 'MANDATORY',
22
+ skuQuantity: kit.qty,
23
+ availableChannels: sku.properties.availableChannels,
24
+ inventory: {
25
+ atpQty: sku.inventoryProperties.atpQty,
26
+ backOrdered: sku.inventoryProperties.backOrdered
27
+ }
28
+ }
29
+ }
30
+
31
+ module.exports = childSKU;
@@ -19,14 +19,18 @@
19
19
  * @description This model represents a product within an Equinox response.
20
20
  * @typedef EquinoxProduct
21
21
  * @type {object}
22
- * @property {EquinoxProduct[]} sku
22
+ * @property {string} identifier
23
+ * @property {EquinoxProductSKU[]} sku
23
24
  * @property {"kit"|"bundle"} [type]
24
25
  *
25
26
  * @typedef EquinoxProductSKU
26
27
  * @type {object}
28
+ * @property {boolean} default
29
+ * For multi-variant products, this indicates that this is the searched SKU
30
+ * when using catalogs/search endpoint.
27
31
  * @property {string} identifier
28
- * @property {EquinoxProductProperties} properties
29
32
  * @property {Inventory} inventoryProperties
33
+ * @property {EquinoxProductProperties} properties
30
34
  *
31
35
  * @typedef EquinoxProductProperties
32
36
  * @type {object}
@@ -49,12 +53,12 @@
49
53
  * @typedef KitSKUQuantity
50
54
  * @type {object}
51
55
  * @property {string} sku
52
- * @property {number} number
56
+ * @property {number} qty
53
57
  */
54
58
  const availableQuantity = require('./availableQuantity');
55
- const childSkus = require('./childSkus');
59
+ const childSKU = require('./childSKU');
56
60
 
57
61
  module.exports = {
58
62
  mapAvailableQuantity: availableQuantity,
59
- mapChildSkus: childSkus
63
+ mapChildSKU: childSKU
60
64
  };
@@ -5,7 +5,7 @@ const contentstack = require('./contentstack/contentstack');
5
5
  const Product = require("./product");
6
6
  const CustomerTypes = require('./models/customerTypes');
7
7
  const ProductStatus = require("./models/productStatus");
8
- const { mapAvailableQuantity, mapChildSkus } = require('./equinox-helpers');
8
+ const { mapAvailableQuantity, mapChildSKU } = require('./equinox-helpers');
9
9
 
10
10
  const productTypes = {
11
11
  kit: 'kit'
@@ -129,15 +129,9 @@ const ProductData = {
129
129
  */
130
130
  eqProductVariantMapper: function (eqVariant) {
131
131
 
132
- let imageURL = eqVariant.properties.imageURL;
133
- const regex = /\d+\.\d+/
134
- let thumbnailImage = ''
132
+ let imageURL = eqVariant.properties.imageURL ? eqVariant.properties.imageURL : '';
133
+ let thumbnailImage = imageURL ? imageURL + '?width=40' : ''
135
134
 
136
- if (imageURL.includes('contentstack')) {
137
- thumbnailImage = imageURL + '?width=40'
138
- } else {
139
- thumbnailImage = imageURL.replace(regex, '40.40')
140
- }
141
135
 
142
136
  const { eventName, eventLabels, computedPrice, defaultProductPrice } = this.getEqProductPromotions(eqVariant);
143
137
  const productPrice = eventName ? defaultProductPrice : eqVariant.priceFacets["Regular Price"];
@@ -351,15 +345,9 @@ const ProductData = {
351
345
  for (const productData of productDataResponse) {
352
346
  try {
353
347
  let product = (productData.type && productData.type === "kit") ? productData : productData.sku[count];
354
- let imageURL = product.properties.imageURL;
355
- const regex = /\d+\.\d+/
356
- let thumbnailImage = ''
357
-
358
- if (imageURL.includes('contentstack')) {
359
- thumbnailImage = imageURL + '?width=40'
360
- } else {
361
- thumbnailImage = imageURL.replace(regex, '40.40')
362
- }
348
+ let imageURL = product.properties.imageURL ? product.properties.imageURL : '';
349
+ let thumbnailImage = imageURL ? imageURL + '?width=40' : ''
350
+
363
351
 
364
352
  if (productData.sku && productData.sku.length > 1) {
365
353
  // exclude base product from variants
@@ -522,7 +510,7 @@ const ProductData = {
522
510
  type: 'SKUKIT',
523
511
  availableChannels: product.properties.availableChannels
524
512
  },
525
- ...res.data.product.map(p => mapChildSkus(kits, p))
513
+ ...res.data.product.map(p => mapChildSKU(kits, p))
526
514
  ];
527
515
 
528
516
  return childSkus;
@@ -1,25 +0,0 @@
1
- /**
2
- * childSkus creates an array of object that contains
3
- * the list of SKUs of a kit.
4
- *
5
- * @param {import('./').KitSKUQuantity[]} kits
6
- * @param {import('./').EquinoxProduct} product
7
- */
8
- function childSkus(kits, product) {
9
- const sku = product.sku[0];
10
- const kit = kits.filter(k => k.sku === sku.identifier)[0];
11
-
12
- return {
13
- productId: product.identifier,
14
- skuId: sku.identifier,
15
- type: 'MANDATORY',
16
- skuQuantity: kit.qty,
17
- availableChannels: sku.properties.availableChannels,
18
- inventory: {
19
- atpQty: sku.inventoryProperties.atpQty,
20
- backOrdered: sku.inventoryProperties.backOrdered
21
- }
22
- }
23
- }
24
-
25
- module.exports = childSkus;