@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 +5 -5
- package/package.json +2 -2
- package/src/product.js +4 -4
- package/src/productData.js +141 -11
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-
|
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
|
-
###
|
4
|
+
### Update
|
5
5
|
|
6
|
-
* added
|
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-
|
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
|
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.
|
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
|
75
|
+
//equinox inventory / stock label
|
76
76
|
//@example "IN STOCK"
|
77
|
-
|
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.
|
634
|
+
this.inventory = productData.inventory || "";
|
635
635
|
|
636
636
|
if (data.priceType) {
|
637
637
|
this.addPricing(data.priceType, data.price);
|
package/src/productData.js
CHANGED
@@ -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%\"> </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": 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
|
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":
|
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":
|
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
|
-
|
211
|
-
};
|
340
|
+
"inventory": data.sku[count].inventory || "" //inventory label
|
212
341
|
|
213
|
-
|
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,
|