@nuskin/ns-product-lib 2.5.0-cx24-2179.2.15 → 2.5.0-cx24-2179.2.17

Sign up to get free protection for your applications and to get access to all the features.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,17 @@
1
+ # [2.5.0-cx24-2179.2.17](https://code.tls.nuskin.io/ns-am/product/js-libs/ns-product-lib/compare/v2.5.0-cx24-2179.2.16...v2.5.0-cx24-2179.2.17) (2023-01-24)
2
+
3
+
4
+ ### Fix
5
+
6
+ * undefined value of the URL (CX24-3122,CX24-3234) ([e6a9a9d](https://code.tls.nuskin.io/ns-am/product/js-libs/ns-product-lib/commit/e6a9a9de118d2bdfa921a48d1c15f7b2a413e32b))
7
+
8
+ # [2.5.0-cx24-2179.2.16](https://code.tls.nuskin.io/ns-am/product/js-libs/ns-product-lib/compare/v2.5.0-cx24-2179.2.15...v2.5.0-cx24-2179.2.16) (2023-01-24)
9
+
10
+
11
+ ### Update
12
+
13
+ * Re-map changed Equinox properties after data migration (#CX24-3175) ([f20cbc4](https://code.tls.nuskin.io/ns-am/product/js-libs/ns-product-lib/commit/f20cbc4bd63a3e0f810fbd6d0b2c5ad1aa236a8f)), closes [#CX24-3175](https://code.tls.nuskin.io/ns-am/product/js-libs/ns-product-lib/issues/CX24-3175)
14
+
1
15
  # [2.5.0-cx24-2179.2.15](https://code.tls.nuskin.io/ns-am/product/js-libs/ns-product-lib/compare/v2.5.0-cx24-2179.2.14...v2.5.0-cx24-2179.2.15) (2023-01-23)
2
16
 
3
17
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nuskin/ns-product-lib",
3
- "version": "2.5.0-cx24-2179.2.15",
3
+ "version": "2.5.0-cx24-2179.2.17",
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": {
@@ -98,7 +98,7 @@ function getCachedData(key) {
98
98
  * @property {string} checkout_client_secret
99
99
  *
100
100
  * @export
101
- * @return {Promise<null|MarketConfig>}
101
+ * @return {Promise<null|MarketConfig>}
102
102
  */
103
103
  async function getAEMConfig() {
104
104
  try {
@@ -137,7 +137,7 @@ async function getAEMConfig() {
137
137
  * @property {string} market_name
138
138
  * @property {string} country_code
139
139
  * @property {string} store_id
140
- *
140
+ *
141
141
  * @typedef EquinoxEnabledMarkets
142
142
  * @property {EquinoxEnabledMarket[]} [dev_markets]
143
143
  * @property {EquinoxEnabledMarket[]} [test_markets]
@@ -145,7 +145,7 @@ async function getAEMConfig() {
145
145
  * @property {EquinoxEnabledMarket[]} [prod_markets]
146
146
  *
147
147
  * @export
148
- * @return {Promise<EquinoxEnabledMarkets>}
148
+ * @return {Promise<EquinoxEnabledMarkets>}
149
149
  */
150
150
  async function getEquinoxMarkets() {
151
151
  try {
@@ -176,8 +176,8 @@ async function getEquinoxMarkets() {
176
176
  }
177
177
  }
178
178
 
179
- /**getKongUrl gets the URL for Kong in contentstack
180
- *
179
+ /**getKongUrl gets the URL for Kong in contentstack
180
+ *
181
181
  * @returns {string}
182
182
  */
183
183
  async function getKongUrl() {
package/src/index.js CHANGED
@@ -7,10 +7,10 @@
7
7
 
8
8
  const Agelocme = require("./agelocme.js");
9
9
  const Contentstack = require('./contentstack/contentstack');
10
- const PriceType = require("./priceType.js");
10
+ const PriceType = require("./models/priceType.js");
11
11
  const Product = require("./product.js");
12
12
  const ProductContentMapper = require("./productContentMapper.js");
13
- const ProductStatus = require("./productStatus.js");
13
+ const ProductStatus = require("./models/productStatus.js");
14
14
  const ProductStatusMapper = require("./productStatusMapper.js");
15
15
  const ProductUtils = require("./productUtils.js");
16
16
  const ProductData = require("./productData.js");
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+
3
+ const CustomerTypes = {
4
+ BrandAffiliate: "brandaffiliate",
5
+ Preferred: "preferred",
6
+ PreferredCustomer: "preferred customer",
7
+ Retail: "retail",
8
+ properties: {
9
+ BRAND_AFFILIATE: { stringKey: "DIST", code: 10 },
10
+ RETAIL: { stringKey: "CUST", code: 20 },
11
+ PREFERRED: { stringKey: "preferred", code: 30 },
12
+ PREFERRED_CUSTOMER: { stringKey: "PREF", code: 30 }
13
+ }
14
+ };
15
+
16
+ module.exports = CustomerTypes;
File without changes
@@ -17,6 +17,13 @@ const ProductStatus = {
17
17
  STOP_STATUS: { stringKey: "stopStatus", code: 5 },
18
18
  NOT_FOUND: { stringKey: "", code: 0 },
19
19
  NOT_SOLD_SEPERATELY: {stringKey: "notSoldSeperately", code: 4 }
20
+ },
21
+ equinoxStatus: {
22
+ SELLABLE: 'sellable',
23
+ PREVIEW_PRODUCT: 'preview product',
24
+ DISCONTINUED: 'discontinued',
25
+ STOPPED: 'stopped',
26
+ REPLACEMENT: 'Replacement'
20
27
  }
21
28
  };
22
29
 
package/src/product.js CHANGED
@@ -5,8 +5,8 @@ const { isTrue } = require("@nuskin/ns-common-lib");
5
5
  const ProductUtils = require("./productUtils.js");
6
6
 
7
7
  const Agelocme = require("./agelocme.js");
8
- const PriceType = require("./priceType.js");
9
- const ProductStatus = require("./productStatus.js");
8
+ const PriceType = require("./models/priceType.js");
9
+ const ProductStatus = require("./models/productStatus.js");
10
10
 
11
11
  const Product = function(productData) {
12
12
  this.priceMap = {};
@@ -4,7 +4,8 @@ const { getConfiguration } = require('@nuskin/configuration-sdk');
4
4
  const axios = require("axios");
5
5
  const contentstack = require('./contentstack/contentstack');
6
6
  const Product = require("./product");
7
-
7
+ const CustomerTypes = require('./models/customerTypes');
8
+ const ProductStatus = require("./models/productStatus");
8
9
  /** @type {*} */
9
10
  const ProductData = {
10
11
  /**
@@ -15,7 +16,7 @@ const ProductData = {
15
16
  */
16
17
  getProductData: async function (skus, locale, market, isEquinoxEnabled = false) {
17
18
  const localeMarket = `${locale}_${market}`;
18
-
19
+
19
20
  if (isEquinoxEnabled) {
20
21
  let config = (await getConfiguration({
21
22
  configMapNames: ['Equinox_Markets'],
@@ -24,13 +25,13 @@ const ProductData = {
24
25
  clientId: '735b1eb810304bba966af0891ab54053'
25
26
  }));
26
27
 
27
- if (config.country_code != '') {
28
+ if (config.Equinox_Markets.country_code != '') {
28
29
  return await this.getProductFromEquinox(skus, localeMarket, config);
29
30
  }
30
31
  }
31
32
  return await this.getProductFromLegacy(skus, localeMarket);
32
33
  },
33
-
34
+
34
35
  getProductFromEquinox: async function (skus, locale, config) {
35
36
  const filter = `{"filters": [{"field": "index_key_skuId","operation": "IN", "value": "${skus.toString()}"}]}`;
36
37
  axios.defaults.withCredentials = true;
@@ -176,6 +177,7 @@ const ProductData = {
176
177
  "WHL": eqVariant.priceFacets.PV
177
178
  },
178
179
  "orderTypes": this._setOrderType(eqVariant.properties),
180
+ "custTypes": this.switchCustType(eqVariant.properties.customerTypes),
179
181
  "division": eqVariant.properties.division,
180
182
  "backOrderDate": null,
181
183
  "locallyProduced": false,
@@ -186,9 +188,9 @@ const ProductData = {
186
188
  "shade": "",
187
189
  "status": this.switchStatusFromEquinox(eqVariant.properties.status),
188
190
  "variantType": "Other",
189
- "variantDropdownLabel": eqVariant.properties.variantLabel || "",
191
+ "variantDropdownLabel": eqVariant.properties.variantSelectLabel || "",
190
192
  "variantDropdownPlaceholder": "Select Type",
191
- "variantsLabel": eqVariant.properties.variantLabel || "",
193
+ "variantsLabel": eqVariant.properties.variantSelectLabel || "",
192
194
  "groupOffer": false,
193
195
  "personalOffer": false,
194
196
  "savedEventName": eventName,
@@ -197,7 +199,7 @@ const ProductData = {
197
199
  "sizeWeight": '',
198
200
  "nettoWeight": "",
199
201
  "searchScore": 0,
200
- "isExclusive": false,
202
+ "isExclusive": eqVariant.properties.isExclusive || false,
201
203
  "marketAttributes": {
202
204
  "discount": true,
203
205
  "redeem": true,
@@ -355,7 +357,7 @@ const ProductData = {
355
357
  "nettoWeight": "",
356
358
  "variants": variants,
357
359
  "searchScore": 0,
358
- "isExclusive": data.sku[count].properties.isExclusive,
360
+ "isExclusive": data.sku[count].properties.isExclusive || false,
359
361
  "marketAttributes": {
360
362
  "discount": true,
361
363
  "redeem": true,
@@ -384,27 +386,29 @@ const ProductData = {
384
386
  },
385
387
 
386
388
  switchStatusFromEquinox: function (status) {
389
+ const { equinoxStatus } = ProductStatus;
387
390
  let newStatus = '';
388
- switch (status) {
389
- case 'Sellable':
390
- newStatus = 'RELEASED_FOR_SALE';
391
+ switch (status.toLowerCase()) {
392
+ case equinoxStatus.SELLABLE:
393
+ newStatus = ProductStatus.ReleasedForSale;
391
394
  break;
392
- case 'Preview product':
393
- newStatus = 'NOT_RELEASED_FOR_SALE';
395
+ case equinoxStatus.PREVIEW_PRODUCT:
396
+ newStatus = ProductStatus.NotReleasedForSale;
394
397
  break;
395
- case 'Discontinued':
396
- newStatus = 'DISCONTINUED';
398
+ case equinoxStatus.DISCONTINUED:
399
+ newStatus = ProductStatus.Discontinued;
397
400
  break;
398
- case 'Stopped':
399
- newStatus = 'DISCONTINUED';
401
+ case equinoxStatus.STOPPED:
402
+ newStatus = ProductStatus.Discontinued;
400
403
  break;
401
- case 'Replacement':
402
- newStatus = 'NOT_RELEASED_FOR_SALE';
404
+ case equinoxStatus.REPLACEMENT:
405
+ newStatus = ProductStatus.NotReleasedForSale;
403
406
  break;
404
407
  default:
405
- newStatus = 'NOT_RELEASED_FOR_SALE'
408
+ newStatus = ProductStatus.NotReleasedForSale;
406
409
  break;
407
410
  }
411
+
408
412
  return newStatus;
409
413
  },
410
414
 
@@ -413,14 +417,32 @@ const ProductData = {
413
417
  * @param {*} custType
414
418
  *
415
419
  */
416
- switchCustType: function (custType) {
420
+
421
+ /**
422
+ * map customer types from string to code
423
+ * @param {*} eqCustomerTypes
424
+ * @returns
425
+ */
426
+ switchCustType: function (eqCustomerTypes) {
427
+ if (!eqCustomerTypes) {
428
+ return "";
429
+ }
430
+
431
+ const custTypes = eqCustomerTypes.split(',').map(customerType => customerType.trim().toLowerCase());
432
+
417
433
  let newCustType = [];
418
- if (custType.includes('Brand Affiliate - Business Entity') || custType.includes('Brand Affiliate - Individual'))
419
- newCustType.push(10)
420
- if (custType.includes('Retail Customer'))
421
- newCustType.push(20)
422
- if (custType.includes('Preferred Customer/Member'))
423
- newCustType.push(30)
434
+ if (custTypes.includes(CustomerTypes.BrandAffiliate)) {
435
+ newCustType.push(CustomerTypes.properties.BRAND_AFFILIATE.code);
436
+ }
437
+
438
+ if (custTypes.includes(CustomerTypes.Retail)) {
439
+ newCustType.push(CustomerTypes.properties.RETAIL.code);
440
+ }
441
+
442
+ if (custTypes.includes(CustomerTypes.Preferred) || custTypes.includes(CustomerTypes.PreferredCustomer)) {
443
+ newCustType.push(CustomerTypes.properties.PREFERRED.code);
444
+ }
445
+
424
446
  return newCustType.toString()
425
447
  },
426
448