@nuskin/cs-product-lib 1.1.4-cx12-8656.1 → 1.1.4

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/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "@nuskin/cs-product-lib",
3
- "version": "1.1.4-cx12-8656.1",
3
+ "version": "1.1.4",
4
4
  "description": "Library for pulling and parsing product content (and applying business logic) retrieved from Contentstack",
5
5
  "main": "src/index.js",
6
6
  "scripts": {
7
7
  "audit": "yarn audit --level high",
8
8
  "jsdoc": "node_modules/.bin/jsdoc -a all -c jsdoc.json -r -d jsdocs",
9
9
  "lint": "eslint src __tests__",
10
- "test": "jest --coverage --testPathPattern=__tests__",
10
+ "test": "jest --coverage",
11
11
  "security-check": "yarn audit --groups 'dependencies devDependencies' --level high",
12
12
  "test-integration": "jest --testPathPattern=e2e",
13
13
  "sc": "yarn security-check"
package/src/csProduct.js CHANGED
@@ -150,7 +150,8 @@ const csProduct = (props) => {
150
150
  ...variant,
151
151
  status: varStatus,
152
152
  backorderQuantity: varStatus?.backordered ? varStatus?.availableQuantity : 0,
153
- availableQuantity: varStatus?.backordered ? 0 : varStatus?.availableQuantity,
153
+ atpQuantity: varStatus?.backordered ? 0 : varStatus?.availableQuantity,
154
+ availableQuantity: varStatus?.availableQuantity,
154
155
  backorderedAvailableDate: varStatus?.backorderedAvailableDate || null,
155
156
  marketData
156
157
  })
package/src/formatKit.js CHANGED
@@ -90,6 +90,33 @@ const parsePrice = (product = []) => {
90
90
  return sumOfPriceAndPoints
91
91
  }
92
92
 
93
+ const parseKitAvailableQuantity = (kit) => {
94
+ try {
95
+ return (
96
+ Math.min(
97
+ ...kit.flatMap((a) =>
98
+ a?.sku?.map((s) => s?.inventoryProperties?.atpQty)
99
+ )
100
+ ) || 0
101
+ )
102
+ } catch {
103
+ return 0
104
+ }
105
+ }
106
+
107
+ const parseBundleAvailableQuantity = (product) => {
108
+ try {
109
+ const { requiredProducts = [] } = !isNullOrEmpty(product) ? product : {}
110
+ const quantities = requiredProducts?.flatMap((p) =>
111
+ p?.product?.variants?.map((a) => a?.availableQuantity)
112
+ )
113
+ return Math.min(...quantities) || 0
114
+ } catch {
115
+ console.log('some error in availableQuantity')
116
+ return 0
117
+ }
118
+ }
119
+
93
120
  const getKitOrBundleDetails = (bundle) => {
94
121
  const dateFormat = 'YYYY-MM-DD'
95
122
  let maxQty = null;
@@ -105,7 +132,7 @@ const getKitOrBundleDetails = (bundle) => {
105
132
  prodQty = Number(a?.quantity || 1);
106
133
  a?.product?.variants?.map(s => {
107
134
  const backorderQty = s?.backorderQuantity || 0;
108
- const availableQty = s?.availableQuantity || 0;
135
+ const availableQty = s?.atpQuantity || 0;
109
136
  const backorderDate = s?.status?.backorderedAvailableDate || null;
110
137
  dates.push(moment(backorderDate))
111
138
  quantities.push({maxPurchasable: (backorderQty + availableQty)/prodQty});
@@ -178,10 +205,11 @@ const parseKit = (bundle, market) => {
178
205
  }
179
206
  kits.status = { status: details.status, inventory: inventoryStatus, isBackordered: !!(details.backOrderedQty !== 0 && details.latestBackOrderedDate !== null), backorderedAvailableDate: details.latestBackOrderedDate }
180
207
  kits.maxQuantity = details.maxQty
181
- kits.availableQuantity = details.availableQty
208
+ kits.atpQuantity = details.availableQty
182
209
  kits.backorderQuantity = details.backOrderedQty
183
210
  kits.backorderedAvailableDate = details.latestBackOrderedDate
184
211
  if (type === 'bundle') {
212
+ kits.availableQuantity = parseBundleAvailableQuantity(properties)
185
213
  for (const kit of properties?.requiredProducts || []) {
186
214
  if (kit?.product) {
187
215
  kitProducts?.push({
@@ -201,6 +229,7 @@ const parseKit = (bundle, market) => {
201
229
  }
202
230
  }
203
231
  } else if (type === 'kit') {
232
+ kits.availableQuantity = bundle?.kit ? parseKitAvailableQuantity(bundle?.kit) : parseBundleAvailableQuantity(properties)
204
233
  for (const kit of properties?.requiredProducts || []) {
205
234
  kitProducts.push({
206
235
  product: formatKit(kit?.product, market),
@@ -6,12 +6,13 @@ const formatVariant = (parent) => {
6
6
  const isBackOrdered = _.get(parent, 'defaults.status.backordered', null);
7
7
  const backOrderedDate = _.get(parent, 'defaults.status.backorderedAvailableDate', null);
8
8
  const preliminaryAvailableQty = _.get(parent, 'defaults.status.availableQuantity', 0);
9
- const availableQty = isBackOrdered ? 0 : preliminaryAvailableQty;
9
+ const atpQty = isBackOrdered ? 0 : preliminaryAvailableQty;
10
10
  const backOrderedQty = isBackOrdered ? preliminaryAvailableQty : 0;
11
+ const availableQty = preliminaryAvailableQty;
11
12
  let inventoryStatus = 'inStock';
12
13
  if (isBackOrdered) {
13
14
  inventoryStatus = 'backordered'
14
- } else if (availableQty + backOrderedQty < 1) {
15
+ } else if (atpQty + backOrderedQty < 1) {
15
16
  inventoryStatus = 'outOfStock';
16
17
  }
17
18
 
@@ -42,6 +43,7 @@ const formatVariant = (parent) => {
42
43
  backorderedAvailableDate: backOrderedDate,
43
44
  backorderQuantity: backOrderedQty,
44
45
  availableQuantity: availableQty,
46
+ atpQuantity: atpQty,
45
47
  maxQuantity: _.get(parent, 'defaults.status.maxQuantity', 0), // will be product status overrideMaxQty else its availableQty
46
48
  status: {
47
49
  status: _.get(parent, 'defaults.status.status.retail', null),