@nuskin/ns-product-lib 2.3.0 → 2.4.0-cx24-2467.2.1
Sign up to get free protection for your applications and to get access to all the features.
- package/CHANGELOG.md +7 -0
- package/package.json +1 -1
- package/src/productData.js +146 -17
package/CHANGELOG.md
CHANGED
@@ -1,3 +1,10 @@
|
|
1
|
+
# [2.4.0-cx24-2467.2.1](https://code.tls.nuskin.io/ns-am/product/js-libs/ns-product-lib/compare/v2.3.0...v2.4.0-cx24-2467.2.1) (2022-10-19)
|
2
|
+
|
3
|
+
|
4
|
+
### New
|
5
|
+
|
6
|
+
* add support for product variant (#CX24-2467) ([3f5ad9e](https://code.tls.nuskin.io/ns-am/product/js-libs/ns-product-lib/commit/3f5ad9e6c0f00bf40470dbb940a234d55a9ef451)), closes [#CX24-2467](https://code.tls.nuskin.io/ns-am/product/js-libs/ns-product-lib/issues/CX24-2467)
|
7
|
+
|
1
8
|
# [2.3.0](https://code.tls.nuskin.io/ns-am/product/js-libs/ns-product-lib/compare/v2.2.0...v2.3.0) (2022-10-14)
|
2
9
|
|
3
10
|
|
package/package.json
CHANGED
package/src/productData.js
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
"use strict";
|
2
2
|
const axios = require("axios");
|
3
3
|
const contentstack = require('./contentstack/contentstack');
|
4
|
-
const
|
4
|
+
const Product = require("./product");
|
5
5
|
|
6
6
|
/** @type {*} */
|
7
7
|
const ProductData = {
|
8
8
|
/**
|
9
|
-
* @param {string[]} skus
|
10
|
-
* @param {string} locale
|
11
|
-
* @param {string} market
|
12
|
-
* @param {boolean} isEquinoxEnabled
|
9
|
+
* @param {string[]} skus
|
10
|
+
* @param {string} locale
|
11
|
+
* @param {string} market
|
12
|
+
* @param {boolean} isEquinoxEnabled
|
13
13
|
*/
|
14
14
|
getProductData: async function (skus, locale, market, isEquinoxEnabled = false) {
|
15
15
|
const localeMarket = `${locale}_${market}`;
|
@@ -28,7 +28,7 @@ const ProductData = {
|
|
28
28
|
getProductFromEquinox: async function (skus, locale, storeID) {
|
29
29
|
const filter = '{"filters":[{"field":"index_key_skuId","operation":"IN","value":"' + skus.toString() + '"}]}';
|
30
30
|
axios.defaults.withCredentials = true;
|
31
|
-
|
31
|
+
|
32
32
|
const url = await contentstack.getKongUrl() + `/orchestrationservices/storefront/catalogs/search/`;
|
33
33
|
console.log("Dynamic URL", url)
|
34
34
|
const href = `${url}?filter=${encodeURI(filter)}`;
|
@@ -78,7 +78,7 @@ const ProductData = {
|
|
78
78
|
responseType: 'json'
|
79
79
|
});
|
80
80
|
},
|
81
|
-
|
81
|
+
|
82
82
|
/**
|
83
83
|
* @param {contentstack.MarketConfig} marketConfig
|
84
84
|
*/
|
@@ -90,20 +90,150 @@ 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%\"> </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> </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": 999,
|
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": 9998.01,
|
156
|
+
"WADW": 9998.01,
|
157
|
+
"WHL": 9998.01
|
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 = [];
|
95
216
|
let count = 0;
|
217
|
+
const variants = {};
|
96
218
|
|
97
219
|
let prodArr = productDataResponse.map((data) => {
|
98
220
|
let imageURL = data.sku[count].properties.imageURL;
|
99
221
|
const regex = /\d+.\d+/
|
100
222
|
let thumbnailImage = ''
|
101
|
-
|
223
|
+
|
102
224
|
if (imageURL.includes('contentstack')) {
|
103
225
|
thumbnailImage = imageURL + '?width=40'
|
104
226
|
} else {
|
105
227
|
thumbnailImage = imageURL.replace(regex,'40.40')
|
106
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
|
+
|
107
237
|
prod = {
|
108
238
|
"sku": data.sku[count].identifier,
|
109
239
|
"globalProductID": data.identifier,
|
@@ -148,9 +278,9 @@ const ProductData = {
|
|
148
278
|
"WADW-WRTL": data.sku[count].priceFacets["Regular Price"],
|
149
279
|
"WADR": 9999.01,
|
150
280
|
"RTL": data.sku[count].priceFacets["Regular Price"],
|
151
|
-
"WWHL":
|
281
|
+
"WWHL": data.sku[count].priceFacets["Regular Price"],
|
152
282
|
"WADW": 9998.01,
|
153
|
-
"WHL":
|
283
|
+
"WHL": data.sku[count].priceFacets["Regular Price"]
|
154
284
|
},
|
155
285
|
"cvMap": {
|
156
286
|
"WWHL": (data.sku[count].priceFacets.CV) ? data.sku[count].priceFacets.CV : '',
|
@@ -197,8 +327,7 @@ const ProductData = {
|
|
197
327
|
"eventName": null,
|
198
328
|
"sizeWeight": '',
|
199
329
|
"nettoWeight": "",
|
200
|
-
"variants":
|
201
|
-
},
|
330
|
+
"variants": variants,
|
202
331
|
"searchScore": 0,
|
203
332
|
"isExclusive": data.sku[count].properties.isExclusive,
|
204
333
|
"marketAttributes": {
|
@@ -209,7 +338,7 @@ const ProductData = {
|
|
209
338
|
"restrictedMarkets": [],
|
210
339
|
"addOns": []
|
211
340
|
};
|
212
|
-
let newProduct = new
|
341
|
+
let newProduct = new Product(prod);
|
213
342
|
return newProduct
|
214
343
|
})
|
215
344
|
|
@@ -252,13 +381,13 @@ const ProductData = {
|
|
252
381
|
},
|
253
382
|
|
254
383
|
/**
|
255
|
-
*
|
256
|
-
* @param {*} custType
|
257
|
-
*
|
384
|
+
*
|
385
|
+
* @param {*} custType
|
386
|
+
*
|
258
387
|
*/
|
259
388
|
switchCustType: function (custType) {
|
260
389
|
let newCustType = [];
|
261
|
-
if (custType.includes('Brand Affiliate - Business Entity') || custType.includes('Brand Affiliate - Individual'))
|
390
|
+
if (custType.includes('Brand Affiliate - Business Entity') || custType.includes('Brand Affiliate - Individual'))
|
262
391
|
newCustType.push(10)
|
263
392
|
if (custType.includes('Retail Customer'))
|
264
393
|
newCustType.push(20)
|