@nuskin/ns-product-lib 2.3.0-cx24-2186.2 → 2.3.0-cx24-2186.2.2

Sign up to get free protection for your applications and to get access to all the features.
package/CHANGELOG.md CHANGED
@@ -1,16 +1,16 @@
1
- # [2.3.0-cx24-2186.2](https://code.tls.nuskin.io/ns-am/product/js-libs/ns-product-lib/compare/v2.3.0-cx24-2186.1...v2.3.0-cx24-2186.2) (2022-10-17)
1
+ # [2.3.0-cx24-2186.2.2](https://code.tls.nuskin.io/ns-am/product/js-libs/ns-product-lib/compare/v2.3.0-cx24-2186.2.1...v2.3.0-cx24-2186.2.2) (2022-10-19)
2
2
 
3
3
 
4
- ### Fix
4
+ ### Update
5
5
 
6
- * added stable ns-util version (#CX24-2186) ([cb868f1](https://code.tls.nuskin.io/ns-am/product/js-libs/ns-product-lib/commit/cb868f14be7420ea5d70d542a77cf470cdfec40c)), closes [#CX24-2186](https://code.tls.nuskin.io/ns-am/product/js-libs/ns-product-lib/issues/CX24-2186)
6
+ * added support for variant and price (#CX24-2186) ([bf5d224](https://code.tls.nuskin.io/ns-am/product/js-libs/ns-product-lib/commit/bf5d224f6802c4542a3985531b72f7ee340d53bd)), closes [#CX24-2186](https://code.tls.nuskin.io/ns-am/product/js-libs/ns-product-lib/issues/CX24-2186)
7
7
 
8
- # [2.3.0-cx24-2186.1](https://code.tls.nuskin.io/ns-am/product/js-libs/ns-product-lib/compare/v2.2.0...v2.3.0-cx24-2186.1) (2022-10-13)
8
+ # [2.3.0-cx24-2186.2.1](https://code.tls.nuskin.io/ns-am/product/js-libs/ns-product-lib/compare/v2.2.0...v2.3.0-cx24-2186.2.1) (2022-10-18)
9
9
 
10
10
 
11
11
  ### New
12
12
 
13
- * added inventory label in the mapping (#CX24-2186) ([a24fc39](https://code.tls.nuskin.io/ns-am/product/js-libs/ns-product-lib/commit/a24fc39915e3d7e525949a2de8be04727c5226fd)), closes [#CX24-2186](https://code.tls.nuskin.io/ns-am/product/js-libs/ns-product-lib/issues/CX24-2186)
13
+ * added support for inventory label (#CX24-2186) ([469e309](https://code.tls.nuskin.io/ns-am/product/js-libs/ns-product-lib/commit/469e3090e98cf2ff7fb199fbc4c2d85e42e04819)), closes [#CX24-2186](https://code.tls.nuskin.io/ns-am/product/js-libs/ns-product-lib/issues/CX24-2186)
14
14
 
15
15
  # [2.2.0](https://code.tls.nuskin.io/ns-am/product/js-libs/ns-product-lib/compare/v2.1.0...v2.2.0) (2022-10-13)
16
16
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nuskin/ns-product-lib",
3
- "version": "2.3.0-cx24-2186.2",
3
+ "version": "2.3.0-cx24-2186.2.2",
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": {
@@ -30,7 +30,7 @@
30
30
  },
31
31
  "dependencies": {
32
32
  "@nuskin/ns-common-lib": "1.4.5",
33
- "@nuskin/ns-util": "3.105.0-CX24.1",
33
+ "@nuskin/ns-util": "3.107.0",
34
34
  "axios": "0.27.2",
35
35
  "qs": "6.11.0"
36
36
  },
package/src/product.js CHANGED
@@ -72,10 +72,9 @@ const Product = function(productData) {
72
72
  // agelocme stuff
73
73
  this.agelocme = null; // object containing agelocme information (like code, label, name)
74
74
 
75
- //equinox API inventory label
75
+ //equinox inventory / stock label
76
76
  //@example "IN STOCK"
77
- //@string inventoryLabel
78
- this.inventoryLabel = "";
77
+ this.inventory = "";
79
78
 
80
79
  this.setMarketAttributes = function(productStatus) {
81
80
  if (productStatus.marketAttributes) {
@@ -523,6 +522,7 @@ const Product = function(productData) {
523
522
  retData.marketAttributes = this.marketAttributes;
524
523
  retData.restrictedMarkets = this.restrictedMarkets;
525
524
  retData.addOns = this.addOns;
525
+ retData.inventory = this.inventory;
526
526
 
527
527
  return retData;
528
528
  };
@@ -631,7 +631,7 @@ const Product = function(productData) {
631
631
  this.marketAttributes = productData.marketAttributes;
632
632
  this.addOns = productData.addOns || [];
633
633
  this.restrictedMarkets = productData.restrictedMarkets || [];
634
- this.inventoryLabel = productData.inventoryLabel || "";
634
+ this.inventory = productData.inventory || "";
635
635
 
636
636
  if (data.priceType) {
637
637
  this.addPricing(data.priceType, data.price);
@@ -90,10 +90,133 @@ const ProductData = {
90
90
  };
91
91
  },
92
92
 
93
+ /**
94
+ * Map product variant
95
+ * @todo remove unnecessary fields
96
+ * @param {*} eqVariant
97
+ * @returns Array<Product>
98
+ */
99
+ eqProductVariantMapper : function (eqVariant) {
100
+
101
+ let imageURL = eqVariant.properties.imageURL;
102
+ const regex = /\d+.\d+/
103
+ let thumbnailImage = ''
104
+
105
+ if (imageURL.includes('contentstack')) {
106
+ thumbnailImage = imageURL + '?width=40'
107
+ } else {
108
+ thumbnailImage = imageURL.replace(regex,'40.40')
109
+ }
110
+
111
+ return {
112
+ "sku": eqVariant.identifier,
113
+ "globalProductID": eqVariant.identifier,
114
+ "title": eqVariant.properties.name,
115
+ "country": eqVariant.properties.market,
116
+ "language": "en",
117
+ "shortDescr": eqVariant.properties.description,
118
+ "longDescr": eqVariant.properties.productDetailsDescription,
119
+ "fullImage": imageURL,
120
+ "imageAltText": eqVariant.properties.name,
121
+ "productCarouselImages": [
122
+ {
123
+ "contentType": "img",
124
+ "src": "/content/products/24/00/35/24003529/jcr:content/fullImage.imgw.1280.1280.png",
125
+ "alt": ""
126
+ }
127
+ ],
128
+ "thumbnail": thumbnailImage,
129
+ "ingredients": eqVariant.properties.ingredients,
130
+ "benefits": eqVariant.properties.benefits,
131
+ "usage": eqVariant.properties.usage,
132
+ "resources": eqVariant.properties.resources,
133
+ "videos": "",
134
+ "movie": "",
135
+ "youtube": "",
136
+ "salesEventText": "",
137
+ "contentSection": [
138
+ {
139
+ "sectionContent": "<div class=\"contentSections\"><div class=\"contentSection section\"><div>\n<h3>BENEFITS</h3>\n<div>\n<div class=\"sectionContent parsys\"><div class=\"text parbase section\">\n<p>Green tea has been used in China for thousands of years for its health-preserving and revitalizing power. Modern science has identified powerful antioxidants in green tea called polyphenols. One group of polyphenols called catechins is particularly potent and is highly effective at neutralizing free radicals at the cellular level. Catechins support healthy cell function while providing antioxidant protection to critical cell structures such as DNA. Clinical studies show catechins interfere with the production of certain enzymes involved in cell damage. Additionally, catechins have been demonstrated to cause a thermogenic effect that enhances the body s metabolic rate. Tegreen 97<sup>®</sup> from Pharmanex is a proprietary, highly concentrated extract of the catechins found in green tea. Tegreen 97<sup>®</sup> is one of the most potent antioxidant supplements on the market with a 97 percent polyphenol content, 65% catechins. Each Tegreen 97<sup>®</sup> capsule contains the catechin equivalent of approximately seven cups of green tea and is 99.5 percent caffeine free.</p>\r\n\n</div>\n\n</div>\n\n</div>\n</div>\n</div>\n<div class=\"contentSection section\"><div>\n<h3>USAGE</h3>\n<div>\n<div class=\"sectionContent parsys\"><div class=\"text parbase section\">\n<p>As a dietary supplement, take one (1) to four (4) capsules daily; preferably one (1) to two (2) each morning and evening with food. Store in a cool, dry place.</p>\r\n\n</div>\n\n</div>\n\n</div>\n</div>\n</div>\n<div class=\"contentSection section\"><div>\n<h3>INGREDIENTS</h3>\n<div>\n<div class=\"sectionContent parsys\"><div class=\"text parbase section\">\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"0\" width=\"360\"><tbody>\r\n<tr>\r\n<td><b>Nutritional Facts</b></td>\r\n<td><b>Amount</b></td>\r\n<td><b>% Daily Value</b></td>\r\n</tr>\r\n<tr>\r\n<td colspan=\"3\"><b>Serving Size: 1 Capsule<br>\r\nServings Per Container: 120</b></td>\r\n</tr>\r\n<tr>\r\n<td width=\"55%\">Green tea leaf (20:1) Extract (<i>Camellia sinensis</i></td>\r\n<td width=\"20%\">250 mg</td>\r\n<td width=\"25%\">&nbsp;</td>\r\n</tr>\r\n<tr>\r\n<td width=\"55%\" colspan=\"3\">* Daily Value not established</td>\r\n</tr>\r\n<tr>\r\n<td width=\"55%\" colspan=\"3\"><b>Other Ingredients: Gelatin, Silicon Dioxide, Microcrystalline Cellulose, Magnesium Stearate.</b></td>\r\n</tr>\r\n</tbody>\r\n</table>\r\n<p>&nbsp;</p>\r\n\n</div>\n\n</div>\n\n</div>\n</div>\n</div>\n</div>\n"
140
+ }
141
+ ],
142
+ "scanQualified": eqVariant.properties.scanQualifiedCount,
143
+ "availableQuantity": eqVariant.inventoryProperties.atpQty,
144
+ "maxQuantity": 999,
145
+ "points": "",
146
+ "cv": (eqVariant.priceFacets.CV) ? eqVariant.priceFacets.CV : '',
147
+ "pv":eqVariant.priceFacets.PV,
148
+ "priceType": "WRTL",
149
+ "price": eqVariant.priceFacets["Regular Price"],
150
+ "priceMap": {
151
+ "WRTL": eqVariant.priceFacets["Regular Price"],
152
+ "WADW-WRTL": eqVariant.priceFacets["Regular Price"],
153
+ "WADR": 9999.01,
154
+ "RTL": eqVariant.priceFacets["Regular Price"],
155
+ "WWHL": eqVariant.priceFacets["Wholesale Price"],
156
+ "WADW": 9998.01,
157
+ "WHL": eqVariant.priceFacets["Wholesale Price"]
158
+ },
159
+ "cvMap": {
160
+ "WWHL": (eqVariant.priceFacets.CV) ? eqVariant.priceFacets.CV : '',
161
+ "WADW": (eqVariant.priceFacets.CV) ? eqVariant.priceFacets.CV : '',
162
+ "WHL": (eqVariant.priceFacets.CV) ? eqVariant.priceFacets.CV : ''
163
+ },
164
+ "pvMap": {
165
+ "WWHL": eqVariant.priceFacets.PV,
166
+ "WADW": eqVariant.priceFacets.PV,
167
+ "WHL": eqVariant.priceFacets.PV
168
+ },
169
+ "orderTypes": {
170
+ "adr": true,
171
+ "order": true,
172
+ "zpfc": false,
173
+ "zadp": true,
174
+ "ars": true,
175
+ "kiosk": true,
176
+ "mobile": true,
177
+ "preferred customer": true,
178
+ "retail": true,
179
+ "web": true,
180
+ "web display": true
181
+ },
182
+ "division": eqVariant.properties.division,
183
+ "backOrderDate": null,
184
+ "locallyProduced": false,
185
+ "agelocme": null,
186
+ "count": "",
187
+ "flavor": "",
188
+ "size": eqVariant.properties.size,
189
+ "shade": "",
190
+ "status": this.switchStatusFromEquinox(eqVariant.properties.status),
191
+ "variantType": "Other",
192
+ "variantDropdownLabel": "Select Type",
193
+ "variantDropdownPlaceholder": "Select Type",
194
+ "variantsLabel": "Select Type",
195
+ "groupOffer": false,
196
+ "personalOffer": false,
197
+ "savedEventName": null,
198
+ "salesLabel": "",
199
+ "eventName": null,
200
+ "sizeWeight": '',
201
+ "nettoWeight": "",
202
+ "searchScore": 0,
203
+ "isExclusive": false,
204
+ "marketAttributes": {
205
+ "discount": true,
206
+ "redeem": true,
207
+ "earn": true
208
+ },
209
+ "restrictedMarkets": [],
210
+ "addOns": []
211
+ };
212
+ },
213
+
93
214
  eqProductMapper: function (productDataResponse) {
94
215
  let prod = [];
216
+ let count = 0;
217
+ let variants = {};
95
218
 
96
- let prodArr = productDataResponse.map((data, count) => {
219
+ let prodArr = productDataResponse.map((data) => {
97
220
  let imageURL = data.sku[count].properties.imageURL;
98
221
  const regex = /\d+.\d+/
99
222
  let thumbnailImage = ''
@@ -103,6 +226,14 @@ const ProductData = {
103
226
  } else {
104
227
  thumbnailImage = imageURL.replace(regex,'40.40')
105
228
  }
229
+
230
+ if (data.sku && data.sku.length > 1) {
231
+ data.sku.map(variant => {
232
+ variants[variant.identifier] = this.eqProductVariantMapper(variant);
233
+ return variant;
234
+ });
235
+ }
236
+
106
237
  prod = {
107
238
  "sku": data.sku[count].identifier,
108
239
  "globalProductID": data.identifier,
@@ -135,7 +266,7 @@ const ProductData = {
135
266
  }
136
267
  ],
137
268
  "scanQualified": data.properties.scanQualifiedCount,
138
- "availableQuantity": 999,
269
+ "availableQuantity": data.sku[count].inventoryProperties.atpQty,
139
270
  "maxQuantity": 999,
140
271
  "points": "",
141
272
  "cv": (data.sku[count].priceFacets.CV) ? data.sku[count].priceFacets.CV : '',
@@ -147,9 +278,9 @@ const ProductData = {
147
278
  "WADW-WRTL": data.sku[count].priceFacets["Regular Price"],
148
279
  "WADR": 9999.01,
149
280
  "RTL": data.sku[count].priceFacets["Regular Price"],
150
- "WWHL": 9998.01,
151
281
  "WADW": 9998.01,
152
- "WHL": 9998.01
282
+ "WHL": data.sku[count].priceFacets["Wholesale Price"],
283
+ "WWHL": data.sku[count].priceFacets["Wholesale Price"]
153
284
  },
154
285
  "cvMap": {
155
286
  "WWHL": (data.sku[count].priceFacets.CV) ? data.sku[count].priceFacets.CV : '',
@@ -196,8 +327,7 @@ const ProductData = {
196
327
  "eventName": null,
197
328
  "sizeWeight": '',
198
329
  "nettoWeight": "",
199
- "variants": {
200
- },
330
+ "variants": variants,
201
331
  "searchScore": 0,
202
332
  "isExclusive": data.sku[count].properties.isExclusive,
203
333
  "marketAttributes": {
@@ -207,17 +337,17 @@ const ProductData = {
207
337
  },
208
338
  "restrictedMarkets": [],
209
339
  "addOns": [],
210
- inventoryLabel: data.sku[count].inventory || ""
211
- };
340
+ "inventory": data.sku[count].inventory || "" //inventory label
212
341
 
213
- return new Product(prod);
214
- });
342
+ };
343
+ let newProduct = new Product(prod);
344
+ return newProduct
345
+ })
215
346
 
216
347
  let data = {
217
348
  products: prodArr,
218
349
  count: productDataResponse.length
219
350
  };
220
-
221
351
  return {
222
352
  data: {
223
353
  "status": 200,