@bonlineza/luxity-lib 2.36.1-beta.4 → 2.36.1

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.
Files changed (90) hide show
  1. package/Accordion.js +116 -76
  2. package/AddInterest.js +777 -440
  3. package/AddProductInterest.js +644 -485
  4. package/BrandSelector.js +336 -176
  5. package/Checkbox.js +101 -68
  6. package/CheckboxButton.js +124 -79
  7. package/CommunicationPreferenceOptionsRenderer.js +169 -159
  8. package/CommunicationPreferenceSection.js +178 -166
  9. package/CommunicationPreferences.js +427 -549
  10. package/ConditionSelector.js +336 -174
  11. package/CountryCodeSelect.js +10 -7
  12. package/CurrencyInputFormatter.js +56 -29
  13. package/CurrencySelect.js +49 -23
  14. package/DropdownSelector.js +92 -68
  15. package/GALink.js +16 -6
  16. package/GenderSelector.js +142 -88
  17. package/GraphQLDropdownSelector.js +1511 -933
  18. package/GraphQLMultiSelector.js +274 -141
  19. package/IconHeader.js +25 -11
  20. package/IconWrapper.js +7 -3
  21. package/InterestCatSelector.js +74 -34
  22. package/InterestItem.js +187 -103
  23. package/Interests.js +1466 -917
  24. package/InterestsSubheading.js +10 -5
  25. package/InvertedTextButton.js +63 -27
  26. package/LuxityAppSideNav.js +22 -19
  27. package/LuxityDesktopHeader.js +663 -549
  28. package/LuxityFooter.js +325 -434
  29. package/LuxityGraphQLDropdownSelector.js +1543 -949
  30. package/LuxityGraphQLMultiselector.js +321 -167
  31. package/LuxityMobileHeader.js +807 -681
  32. package/LuxityPageReady.js +136 -74
  33. package/LuxityProductInterestItem.js +175 -97
  34. package/LuxitySideNav.js +310 -382
  35. package/MaterialSelector.js +1550 -955
  36. package/ModelSelector.js +1550 -955
  37. package/NotificationDropDown.js +221 -122
  38. package/Notify.js +1 -0
  39. package/OutlinePrimaryButton.js +58 -26
  40. package/PriceRangeSelector.js +281 -168
  41. package/PrimaryButton.js +58 -26
  42. package/RadioButtons.js +140 -114
  43. package/RangeSlider.js +242 -152
  44. package/RareStepFooter.js +41 -27
  45. package/RareStepHeader.js +190 -139
  46. package/ReactSelectWrapper.js +1 -0
  47. package/SecondaryButton.js +58 -26
  48. package/ShoeSizeRangeSelector.js +260 -162
  49. package/ShoeSizeSelector.js +263 -158
  50. package/SimpleErrorBoundary.js +106 -59
  51. package/StyleSelector.js +336 -176
  52. package/TextButton.js +58 -26
  53. package/Tooltip.js +39 -17
  54. package/Tracking.js +1 -0
  55. package/WrapperButton.js +43 -20
  56. package/build/bundle.css +1 -1
  57. package/build/bundle.js +2973 -2457
  58. package/package.json +2 -3
  59. package/svg/Accessories.js +13 -6
  60. package/svg/Account.js +13 -6
  61. package/svg/Add.js +13 -6
  62. package/svg/ArrowRight.js +13 -6
  63. package/svg/Bags.js +13 -6
  64. package/svg/BurgerMenu.js +13 -6
  65. package/svg/Calendar.js +13 -6
  66. package/svg/CalendarCircled.js +13 -6
  67. package/svg/CheckCircled.js +13 -6
  68. package/svg/Close.js +13 -6
  69. package/svg/Clothing.js +13 -6
  70. package/svg/Dot.js +13 -6
  71. package/svg/Edit.js +13 -6
  72. package/svg/Eye.js +13 -6
  73. package/svg/FileAttach.js +13 -6
  74. package/svg/FileAttachCircled.js +13 -6
  75. package/svg/LightBulb.js +13 -6
  76. package/svg/Logo.js +13 -6
  77. package/svg/LuxityMenu.js +13 -6
  78. package/svg/Minus.js +13 -6
  79. package/svg/MobileAvatar.js +13 -6
  80. package/svg/MyOrder.js +13 -6
  81. package/svg/MyPayment.js +13 -6
  82. package/svg/MyProfile.js +14 -8
  83. package/svg/MySale.js +13 -6
  84. package/svg/Notification.js +13 -6
  85. package/svg/PointerDown.js +13 -6
  86. package/svg/Search.js +13 -6
  87. package/svg/Shoes.js +13 -6
  88. package/svg/SvgWrapper.js +7 -3
  89. package/svg/Trash.js +13 -6
  90. package/svg/Watches.js +13 -6
@@ -8,267 +8,164 @@
8
8
  axios = axios && Object.prototype.hasOwnProperty.call(axios, 'default') ? axios['default'] : axios;
9
9
  var styled__default = 'default' in styled ? styled['default'] : styled;
10
10
 
11
- function _arrayLikeToArray(r, a) {
12
- (null == a || a > r.length) && (a = r.length);
13
- for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];
14
- return n;
15
- }
16
- function _arrayWithHoles(r) {
17
- if (Array.isArray(r)) return r;
18
- }
19
- function _defineProperty(e, r, t) {
20
- return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, {
21
- value: t,
22
- enumerable: !0,
23
- configurable: !0,
24
- writable: !0
25
- }) : e[r] = t, e;
26
- }
27
- function _extends() {
28
- return _extends = Object.assign ? Object.assign.bind() : function (n) {
29
- for (var e = 1; e < arguments.length; e++) {
30
- var t = arguments[e];
31
- for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);
32
- }
33
- return n;
34
- }, _extends.apply(null, arguments);
35
- }
36
- function _iterableToArrayLimit(r, l) {
37
- var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];
38
- if (null != t) {
39
- var e,
40
- n,
41
- i,
42
- u,
43
- a = [],
44
- f = !0,
45
- o = !1;
46
- try {
47
- if (i = (t = t.call(r)).next, 0 === l) {
48
- if (Object(t) !== t) return;
49
- f = !1;
50
- } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);
51
- } catch (r) {
52
- o = !0, n = r;
53
- } finally {
54
- try {
55
- if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return;
56
- } finally {
57
- if (o) throw n;
58
- }
59
- }
60
- return a;
11
+ function ownKeys(object, enumerableOnly) {
12
+ var keys = Object.keys(object);
13
+
14
+ if (Object.getOwnPropertySymbols) {
15
+ var symbols = Object.getOwnPropertySymbols(object);
16
+ enumerableOnly && (symbols = symbols.filter(function (sym) {
17
+ return Object.getOwnPropertyDescriptor(object, sym).enumerable;
18
+ })), keys.push.apply(keys, symbols);
61
19
  }
20
+
21
+ return keys;
62
22
  }
63
- function _nonIterableRest() {
64
- throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
65
- }
66
- function ownKeys(e, r) {
67
- var t = Object.keys(e);
68
- if (Object.getOwnPropertySymbols) {
69
- var o = Object.getOwnPropertySymbols(e);
70
- r && (o = o.filter(function (r) {
71
- return Object.getOwnPropertyDescriptor(e, r).enumerable;
72
- })), t.push.apply(t, o);
23
+
24
+ function _objectSpread2(target) {
25
+ for (var i = 1; i < arguments.length; i++) {
26
+ var source = null != arguments[i] ? arguments[i] : {};
27
+ i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {
28
+ _defineProperty(target, key, source[key]);
29
+ }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {
30
+ Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
31
+ });
73
32
  }
74
- return t;
33
+
34
+ return target;
75
35
  }
76
- function _objectSpread2(e) {
77
- for (var r = 1; r < arguments.length; r++) {
78
- var t = null != arguments[r] ? arguments[r] : {};
79
- r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {
80
- _defineProperty(e, r, t[r]);
81
- }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {
82
- Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));
36
+
37
+ function _defineProperty(obj, key, value) {
38
+ if (key in obj) {
39
+ Object.defineProperty(obj, key, {
40
+ value: value,
41
+ enumerable: true,
42
+ configurable: true,
43
+ writable: true
83
44
  });
45
+ } else {
46
+ obj[key] = value;
84
47
  }
85
- return e;
48
+
49
+ return obj;
86
50
  }
87
- function _slicedToArray(r, e) {
88
- return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest();
51
+
52
+ function _extends() {
53
+ _extends = Object.assign ? Object.assign.bind() : function (target) {
54
+ for (var i = 1; i < arguments.length; i++) {
55
+ var source = arguments[i];
56
+
57
+ for (var key in source) {
58
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
59
+ target[key] = source[key];
60
+ }
61
+ }
62
+ }
63
+
64
+ return target;
65
+ };
66
+ return _extends.apply(this, arguments);
89
67
  }
90
- function _taggedTemplateLiteral(e, t) {
91
- return t || (t = e.slice(0)), Object.freeze(Object.defineProperties(e, {
68
+
69
+ function _taggedTemplateLiteral(strings, raw) {
70
+ if (!raw) {
71
+ raw = strings.slice(0);
72
+ }
73
+
74
+ return Object.freeze(Object.defineProperties(strings, {
92
75
  raw: {
93
- value: Object.freeze(t)
76
+ value: Object.freeze(raw)
94
77
  }
95
78
  }));
96
79
  }
97
- function _toPrimitive(t, r) {
98
- if ("object" != typeof t || !t) return t;
99
- var e = t[Symbol.toPrimitive];
100
- if (void 0 !== e) {
101
- var i = e.call(t, r || "default");
102
- if ("object" != typeof i) return i;
103
- throw new TypeError("@@toPrimitive must return a primitive value.");
104
- }
105
- return ("string" === r ? String : Number)(t);
106
- }
107
- function _toPropertyKey(t) {
108
- var i = _toPrimitive(t, "string");
109
- return "symbol" == typeof i ? i : i + "";
80
+
81
+ function _slicedToArray(arr, i) {
82
+ return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();
110
83
  }
111
- function _unsupportedIterableToArray(r, a) {
112
- if (r) {
113
- if ("string" == typeof r) return _arrayLikeToArray(r, a);
114
- var t = {}.toString.call(r).slice(8, -1);
115
- return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0;
116
- }
84
+
85
+ function _arrayWithHoles(arr) {
86
+ if (Array.isArray(arr)) return arr;
117
87
  }
118
88
 
119
- var cssUnit = {
120
- cm: true,
121
- mm: true,
122
- in: true,
123
- px: true,
124
- pt: true,
125
- pc: true,
126
- em: true,
127
- ex: true,
128
- ch: true,
129
- rem: true,
130
- vw: true,
131
- vh: true,
132
- vmin: true,
133
- vmax: true,
134
- "%": true,
135
- };
136
- /**
137
- * If size is a number, append px to the value as default unit.
138
- * If size is a string, validate against list of valid units.
139
- * If unit is valid, return size as is.
140
- * If unit is invalid, console warn issue, replace with px as the unit.
141
- *
142
- * @param {(number | string)} size
143
- * @return {LengthObject} LengthObject
144
- */
145
- function parseLengthAndUnit(size) {
146
- if (typeof size === "number") {
147
- return {
148
- value: size,
149
- unit: "px",
150
- };
151
- }
152
- var value;
153
- var valueString = (size.match(/^[0-9.]*/) || "").toString();
154
- if (valueString.includes(".")) {
155
- value = parseFloat(valueString);
156
- }
157
- else {
158
- value = parseInt(valueString, 10);
89
+ function _iterableToArrayLimit(arr, i) {
90
+ var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];
91
+
92
+ if (_i == null) return;
93
+ var _arr = [];
94
+ var _n = true;
95
+ var _d = false;
96
+
97
+ var _s, _e;
98
+
99
+ try {
100
+ for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {
101
+ _arr.push(_s.value);
102
+
103
+ if (i && _arr.length === i) break;
159
104
  }
160
- var unit = (size.match(/[^0-9]*$/) || "").toString();
161
- if (cssUnit[unit]) {
162
- return {
163
- value: value,
164
- unit: unit,
165
- };
105
+ } catch (err) {
106
+ _d = true;
107
+ _e = err;
108
+ } finally {
109
+ try {
110
+ if (!_n && _i["return"] != null) _i["return"]();
111
+ } finally {
112
+ if (_d) throw _e;
166
113
  }
167
- console.warn("React Spinners: ".concat(size, " is not a valid css value. Defaulting to ").concat(value, "px."));
168
- return {
169
- value: value,
170
- unit: "px",
171
- };
114
+ }
115
+
116
+ return _arr;
172
117
  }
173
- /**
174
- * Take value as an input and return valid css value
175
- *
176
- * @param {(number | string)} value
177
- * @return {string} valid css value
178
- */
179
- function cssValue(value) {
180
- var lengthWithunit = parseLengthAndUnit(value);
181
- return "".concat(lengthWithunit.value).concat(lengthWithunit.unit);
118
+
119
+ function _unsupportedIterableToArray(o, minLen) {
120
+ if (!o) return;
121
+ if (typeof o === "string") return _arrayLikeToArray(o, minLen);
122
+ var n = Object.prototype.toString.call(o).slice(8, -1);
123
+ if (n === "Object" && o.constructor) n = o.constructor.name;
124
+ if (n === "Map" || n === "Set") return Array.from(o);
125
+ if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
182
126
  }
183
127
 
184
- var createAnimation = function (loaderName, frames, suffix) {
185
- var animationName = "react-spinners-".concat(loaderName, "-").concat(suffix);
186
- if (typeof window == "undefined" || !window.document) {
187
- return animationName;
188
- }
189
- var styleEl = document.createElement("style");
190
- document.head.appendChild(styleEl);
191
- var styleSheet = styleEl.sheet;
192
- var keyFrames = "\n @keyframes ".concat(animationName, " {\n ").concat(frames, "\n }\n ");
193
- if (styleSheet) {
194
- styleSheet.insertRule(keyFrames, 0);
195
- }
196
- return animationName;
197
- };
128
+ function _arrayLikeToArray(arr, len) {
129
+ if (len == null || len > arr.length) len = arr.length;
198
130
 
199
- var __assign = (undefined && undefined.__assign) || function () {
200
- __assign = Object.assign || function(t) {
201
- for (var s, i = 1, n = arguments.length; i < n; i++) {
202
- s = arguments[i];
203
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
204
- t[p] = s[p];
205
- }
206
- return t;
207
- };
208
- return __assign.apply(this, arguments);
209
- };
210
- var __rest = (undefined && undefined.__rest) || function (s, e) {
211
- var t = {};
212
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
213
- t[p] = s[p];
214
- if (s != null && typeof Object.getOwnPropertySymbols === "function")
215
- for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
216
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
217
- t[p[i]] = s[p[i]];
218
- }
219
- return t;
220
- };
221
- var beat = createAnimation("BeatLoader", "50% {transform: scale(0.75);opacity: 0.2} 100% {transform: scale(1);opacity: 1}", "beat");
222
- function BeatLoader(_a) {
223
- var _b = _a.loading, loading = _b === void 0 ? true : _b, _c = _a.color, color = _c === void 0 ? "#000000" : _c, _d = _a.speedMultiplier, speedMultiplier = _d === void 0 ? 1 : _d, _e = _a.cssOverride, cssOverride = _e === void 0 ? {} : _e, _f = _a.size, size = _f === void 0 ? 15 : _f, _g = _a.margin, margin = _g === void 0 ? 2 : _g, additionalprops = __rest(_a, ["loading", "color", "speedMultiplier", "cssOverride", "size", "margin"]);
224
- var wrapper = __assign({ display: "inherit" }, cssOverride);
225
- var style = function (i) {
226
- return {
227
- display: "inline-block",
228
- backgroundColor: color,
229
- width: cssValue(size),
230
- height: cssValue(size),
231
- margin: cssValue(margin),
232
- borderRadius: "100%",
233
- animation: "".concat(beat, " ").concat(0.7 / speedMultiplier, "s ").concat(i % 2 ? "0s" : "".concat(0.35 / speedMultiplier, "s"), " infinite linear"),
234
- animationFillMode: "both",
235
- };
236
- };
237
- if (!loading) {
238
- return null;
239
- }
240
- return (React.createElement("span", __assign({ style: wrapper }, additionalprops),
241
- React.createElement("span", { style: style(1) }),
242
- React.createElement("span", { style: style(2) }),
243
- React.createElement("span", { style: style(3) })));
131
+ for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
132
+
133
+ return arr2;
134
+ }
135
+
136
+ function _nonIterableRest() {
137
+ throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
244
138
  }
245
139
 
246
140
  var LuxityAppSideNav = function LuxityAppSideNav(_ref) {
247
141
  var closeIcon = _ref.closeIcon,
248
- accountIcon = _ref.accountIcon,
249
- orderIcon = _ref.orderIcon,
250
- saleIcon = _ref.saleIcon,
251
- onDashboardClick = _ref.onDashboardClick,
252
- onLogoutClick = _ref.onLogoutClick,
253
- bugReportLink = _ref.bugReportLink,
254
- onLuxityShopClick = _ref.onLuxityShopClick,
255
- onInterestClick = _ref.onInterestClick,
256
- onAddressClick = _ref.onAddressClick,
257
- onCouponsClick = _ref.onCouponsClick,
258
- onEditProfileClick = _ref.onEditProfileClick,
259
- onCurrentOrdersClick = _ref.onCurrentOrdersClick,
260
- onPastOrdersClick = _ref.onPastOrdersClick,
261
- onSubmissionsClick = _ref.onSubmissionsClick,
262
- onPastSalesClick = _ref.onPastSalesClick,
263
- onPaidOutClick = _ref.onPaidOutClick,
264
- showSideNav = _ref.showSideNav,
265
- onMenuClick = _ref.onMenuClick;
142
+ accountIcon = _ref.accountIcon,
143
+ orderIcon = _ref.orderIcon,
144
+ saleIcon = _ref.saleIcon,
145
+ onDashboardClick = _ref.onDashboardClick,
146
+ onLogoutClick = _ref.onLogoutClick,
147
+ bugReportLink = _ref.bugReportLink,
148
+ onLuxityShopClick = _ref.onLuxityShopClick,
149
+ onInterestClick = _ref.onInterestClick,
150
+ onAddressClick = _ref.onAddressClick,
151
+ onCouponsClick = _ref.onCouponsClick,
152
+ onEditProfileClick = _ref.onEditProfileClick,
153
+ onCurrentOrdersClick = _ref.onCurrentOrdersClick,
154
+ onPastOrdersClick = _ref.onPastOrdersClick,
155
+ onSubmissionsClick = _ref.onSubmissionsClick,
156
+ onPastSalesClick = _ref.onPastSalesClick,
157
+ onPaidOutClick = _ref.onPaidOutClick,
158
+ showSideNav = _ref.showSideNav,
159
+ onMenuClick = _ref.onMenuClick;
160
+
266
161
  var onCloseSideNav = function onCloseSideNav(e) {
267
162
  onMenuClick();
163
+
268
164
  if (e.key === 'Enter') {
269
165
  e.preventDefault();
270
166
  }
271
167
  };
168
+
272
169
  return /*#__PURE__*/React__default.createElement("div", {
273
170
  className: "side-nav"
274
171
  }, /*#__PURE__*/React__default.createElement("div", {
@@ -300,7 +197,7 @@
300
197
  src: accountIcon,
301
198
  alt: "close-icon",
302
199
  className: "side-nav__menu-icon"
303
- }), "Account"))), /*#__PURE__*/React__default.createElement("div", {
200
+ }), "Account"))), onInterestClick && /*#__PURE__*/React__default.createElement("div", {
304
201
  className: "side-nav__menu-item"
305
202
  }, /*#__PURE__*/React__default.createElement("button", {
306
203
  type: "button",
@@ -426,9 +323,9 @@
426
323
 
427
324
  var StoresDropdown = function StoresDropdown(_ref) {
428
325
  var backIcon = _ref.backIcon,
429
- onBackClick = _ref.onBackClick,
430
- stores = _ref.stores,
431
- onContactUsClick = _ref.onContactUsClick;
326
+ onBackClick = _ref.onBackClick,
327
+ stores = _ref.stores,
328
+ onContactUsClick = _ref.onContactUsClick;
432
329
  return /*#__PURE__*/React__default.createElement("div", {
433
330
  className: "side-nav__sub-menu"
434
331
  }, /*#__PURE__*/React__default.createElement("button", {
@@ -468,19 +365,20 @@
468
365
 
469
366
  var BrandsDropDown = function BrandsDropDown(_ref) {
470
367
  var subMenuOpen = _ref.subMenuOpen,
471
- onBackClick = _ref.onBackClick,
472
- onCloseSideNav = _ref.onCloseSideNav,
473
- backIcon = _ref.backIcon,
474
- subMenuCategoryTitle = _ref.subMenuCategoryTitle,
475
- productUrl = _ref.productUrl,
476
- categoryElements = _ref.categoryElements,
477
- subMenuBrandsTitle = _ref.subMenuBrandsTitle,
478
- _ref$brandsList = _ref.brandsList,
479
- brandsList = _ref$brandsList === void 0 ? [] : _ref$brandsList,
480
- categorySlug = _ref.categorySlug,
481
- isLoading = _ref.isLoading,
482
- hasError = _ref.hasError,
483
- LinkComponent = _ref.LinkComponent;
368
+ onBackClick = _ref.onBackClick,
369
+ onCloseSideNav = _ref.onCloseSideNav,
370
+ backIcon = _ref.backIcon,
371
+ subMenuCategoryTitle = _ref.subMenuCategoryTitle,
372
+ productUrl = _ref.productUrl,
373
+ categoryElements = _ref.categoryElements,
374
+ subMenuBrandsTitle = _ref.subMenuBrandsTitle,
375
+ _ref$brandsList = _ref.brandsList,
376
+ brandsList = _ref$brandsList === void 0 ? [] : _ref$brandsList,
377
+ categorySlug = _ref.categorySlug,
378
+ isLoading = _ref.isLoading,
379
+ hasError = _ref.hasError,
380
+ LinkComponent = _ref.LinkComponent;
381
+
484
382
  var handleLinkClick = function handleLinkClick(event) {
485
383
  event.preventDefault();
486
384
  var href = event.currentTarget.getAttribute('href');
@@ -488,6 +386,7 @@
488
386
  onCloseSideNav();
489
387
  window.location.href = href;
490
388
  };
389
+
491
390
  return /*#__PURE__*/React__default.createElement("div", {
492
391
  className: "side-nav__content ".concat(subMenuOpen ? '' : 'side-nav__content--hidden')
493
392
  }, hasError ? /*#__PURE__*/React__default.createElement("div", {
@@ -534,6 +433,7 @@
534
433
  className: "side-nav__element"
535
434
  }, "All Brands"), !!brandsList.length && brandsList.map(function (brand) {
536
435
  return /*#__PURE__*/React__default.createElement(LinkComponent, {
436
+ key: brand.slug,
537
437
  href: "".concat(productUrl, "/").concat(categorySlug === 'new' ? 'brands' : categorySlug, "/").concat(brand.slug),
538
438
  onClick: handleLinkClick,
539
439
  className: "side-nav__element"
@@ -543,37 +443,15 @@
543
443
 
544
444
  var removeCategoryByName = function removeCategoryByName(categories, name) {
545
445
  var _categories$filter;
446
+
546
447
  return (_categories$filter = categories === null || categories === void 0 ? void 0 : categories.filter(function (category) {
547
- return category.name !== name;
448
+ return category.name.toLowerCase() !== name.toLowerCase();
548
449
  })) !== null && _categories$filter !== void 0 ? _categories$filter : [];
549
450
  };
550
451
 
551
- var categories = {
552
- shoes: {
553
- name: 'Shoes',
554
- slug: 'shoes'
555
- },
556
- bags: {
557
- name: 'Bags',
558
- slug: 'bags'
559
- },
560
- clothing: {
561
- name: 'Clothing',
562
- slug: 'apparel'
563
- },
564
- watches: {
565
- name: 'Watches',
566
- slug: 'watches'
567
- },
568
- accessories: {
569
- name: 'Accessories',
570
- slug: 'accessories'
571
- }
572
- };
573
-
574
452
  var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5;
575
-
576
453
  /* position relative is required for the Body element to be positioned correctly */
454
+
577
455
  var relativeInlineStyle = styled.css(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n position: relative;\n"])));
578
456
  var topMiddleBodyStyle = styled.css(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n position: absolute;\n z-index: 1;\n bottom: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n"])));
579
457
  var getTopMiddleArrowAfterStyle = function getTopMiddleArrowAfterStyle(props) {
@@ -587,31 +465,40 @@
587
465
  };
588
466
 
589
467
  var _templateObject$1;
468
+
590
469
  var getBodyStyle = function getBodyStyle() {
591
470
  var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
592
471
  var _props$toolTipPositio = props.toolTipPosition,
593
- toolTipPosition = _props$toolTipPositio === void 0 ? '' : _props$toolTipPositio;
472
+ toolTipPosition = _props$toolTipPositio === void 0 ? '' : _props$toolTipPositio;
473
+
594
474
  switch (toolTipPosition) {
595
475
  case 'top':
596
476
  return topMiddleBodyStyle;
477
+
597
478
  case 'bottom':
598
479
  return getBottomMiddleBodyStyle(props);
480
+
599
481
  default:
600
482
  return null;
601
483
  }
602
484
  };
485
+
603
486
  var getAfterStyling = function getAfterStyling() {
604
487
  var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
605
488
  var toolTipPosition = props.toolTipPosition;
489
+
606
490
  switch (toolTipPosition) {
607
491
  case 'top':
608
492
  return getTopMiddleArrowAfterStyle(props);
493
+
609
494
  case 'bottom':
610
495
  return getBottomMiddleArrowAfterStyle(props);
496
+
611
497
  default:
612
498
  return '';
613
499
  }
614
500
  };
501
+
615
502
  var Body = styled__default.span(_templateObject$1 || (_templateObject$1 = _taggedTemplateLiteral(["\n ", ";\n visibility: hidden;\n opacity: 0;\n width: ", ";\n transition: visibility 0.3s linear, opacity 0.3s linear;\n background-color: ", ";\n color: white;\n text-align: center;\n border-radius: 5px;\n ", "\n &::after {\n content: ' ';\n position: absolute;\n ", "\n }\n"])), relativeInlineStyle, function (props) {
616
503
  return props.bodyWidth;
617
504
  }, function (props) {
@@ -691,12 +578,12 @@
691
578
 
692
579
  var Tooltip = function Tooltip(_ref) {
693
580
  var children = _ref.children,
694
- toolTipText = _ref.toolTipText,
695
- toolTipPosition = _ref.toolTipPosition,
696
- bodyWidth = _ref.bodyWidth,
697
- apexWidth = _ref.apexWidth,
698
- containerClassName = _ref.containerClassName,
699
- bodyClassName = _ref.bodyClassName;
581
+ toolTipText = _ref.toolTipText,
582
+ toolTipPosition = _ref.toolTipPosition,
583
+ bodyWidth = _ref.bodyWidth,
584
+ apexWidth = _ref.apexWidth,
585
+ containerClassName = _ref.containerClassName,
586
+ bodyClassName = _ref.bodyClassName;
700
587
  return /*#__PURE__*/React__default.createElement(Container, {
701
588
  className: containerClassName
702
589
  }, children, /*#__PURE__*/React__default.createElement(Body, {
@@ -706,6 +593,7 @@
706
593
  className: bodyClassName
707
594
  }, toolTipText));
708
595
  };
596
+
709
597
  Tooltip.defaultProps = {
710
598
  children: null,
711
599
  toolTipText: '',
@@ -719,21 +607,25 @@
719
607
 
720
608
  var CurrencySelect = function CurrencySelect(_ref) {
721
609
  var currency = _ref.currency,
722
- currencyOptions = _ref.currencyOptions,
723
- onCurrencyChange = _ref.onCurrencyChange,
724
- _ref$isCurrencySelect = _ref.isCurrencySelectionDisabled,
725
- isCurrencySelectionDisabled = _ref$isCurrencySelect === void 0 ? false : _ref$isCurrencySelect,
726
- _ref$tooltipContent = _ref.tooltipContent,
727
- tooltipContent = _ref$tooltipContent === void 0 ? '' : _ref$tooltipContent;
610
+ currencyOptions = _ref.currencyOptions,
611
+ onCurrencyChange = _ref.onCurrencyChange,
612
+ _ref$isCurrencySelect = _ref.isCurrencySelectionDisabled,
613
+ isCurrencySelectionDisabled = _ref$isCurrencySelect === void 0 ? false : _ref$isCurrencySelect,
614
+ _ref$tooltipContent = _ref.tooltipContent,
615
+ tooltipContent = _ref$tooltipContent === void 0 ? '' : _ref$tooltipContent;
616
+
728
617
  if (!currencyOptions || currencyOptions.length === 0) {
729
618
  return null;
730
619
  }
620
+
731
621
  var selectedOption = currencyOptions.find(function (opt) {
732
622
  return opt.value === currency;
733
623
  });
624
+
734
625
  if (!selectedOption) {
735
626
  return null;
736
627
  }
628
+
737
629
  return /*#__PURE__*/React__default.createElement(Tooltip$1, {
738
630
  toolTipText: isCurrencySelectionDisabled ? tooltipContent : '',
739
631
  toolTipPosition: "bottom",
@@ -762,77 +654,79 @@
762
654
 
763
655
  var LuxitySideNav = function LuxitySideNav(_ref) {
764
656
  var accordionIcon = _ref.accordionIcon,
765
- closeIcon = _ref.closeIcon,
766
- backIcon = _ref.backIcon,
767
- productUrl = _ref.productUrl,
768
- onAccountClick = _ref.onAccountClick,
769
- onCartClick = _ref.onCartClick,
770
- onContactUsClick = _ref.onContactUsClick,
771
- onOurStoryClick = _ref.onOurStoryClick,
772
- onBlogClick = _ref.onBlogClick,
773
- onSellToUsClick = _ref.onSellToUsClick,
774
- stores = _ref.stores,
775
- categoryElements = _ref.categoryElements,
776
- showSideNav = _ref.showSideNav,
777
- onMenuClick = _ref.onMenuClick,
778
- menuData = _ref.menuData,
779
- currency = _ref.currency,
780
- currencyOptions = _ref.currencyOptions,
781
- onCurrencyChange = _ref.onCurrencyChange,
782
- isCurrencySelectionDisabled = _ref.isCurrencySelectionDisabled,
783
- tooltipContent = _ref.tooltipContent,
784
- LinkComponent = _ref.LinkComponent;
657
+ closeIcon = _ref.closeIcon,
658
+ backIcon = _ref.backIcon,
659
+ productUrl = _ref.productUrl,
660
+ onAccountClick = _ref.onAccountClick,
661
+ onCartClick = _ref.onCartClick,
662
+ onContactUsClick = _ref.onContactUsClick,
663
+ onOurStoryClick = _ref.onOurStoryClick,
664
+ onBlogClick = _ref.onBlogClick,
665
+ onSellToUsClick = _ref.onSellToUsClick,
666
+ stores = _ref.stores,
667
+ categoryElements = _ref.categoryElements,
668
+ showSideNav = _ref.showSideNav,
669
+ onMenuClick = _ref.onMenuClick,
670
+ currency = _ref.currency,
671
+ currencyOptions = _ref.currencyOptions,
672
+ onCurrencyChange = _ref.onCurrencyChange,
673
+ isCurrencySelectionDisabled = _ref.isCurrencySelectionDisabled,
674
+ tooltipContent = _ref.tooltipContent,
675
+ LinkComponent = _ref.LinkComponent,
676
+ categoryConfig = _ref.categoryConfig;
677
+
785
678
  var _useState = React.useState(false),
786
- _useState2 = _slicedToArray(_useState, 2),
787
- subMenuOpen = _useState2[0],
788
- setSubMenuOpen = _useState2[1];
679
+ _useState2 = _slicedToArray(_useState, 2),
680
+ subMenuOpen = _useState2[0],
681
+ setSubMenuOpen = _useState2[1];
682
+
789
683
  var _useState3 = React.useState(''),
790
- _useState4 = _slicedToArray(_useState3, 2),
791
- displayedSubMenu = _useState4[0],
792
- setDisplayedSubMenu = _useState4[1];
684
+ _useState4 = _slicedToArray(_useState3, 2),
685
+ displayedSubMenu = _useState4[0],
686
+ setDisplayedSubMenu = _useState4[1];
687
+
793
688
  var _useState5 = React.useState(false),
794
- _useState6 = _slicedToArray(_useState5, 2),
795
- loading = _useState6[0],
796
- setLoading = _useState6[1];
797
- var _useState7 = React.useState({
798
- latestArrivals: [],
799
- bags: [],
800
- shoes: [],
801
- apparel: [],
802
- accessories: [],
803
- watches: [],
804
- accessoriesCategories: [],
805
- apparelStyles: []
806
- }),
807
- _useState8 = _slicedToArray(_useState7, 2),
808
- dropdownData = _useState8[0],
809
- setDropdownData = _useState8[1];
689
+ _useState6 = _slicedToArray(_useState5, 2),
690
+ loading = _useState6[0],
691
+ setLoading = _useState6[1];
692
+
693
+ var _useState7 = React.useState({}),
694
+ _useState8 = _slicedToArray(_useState7, 2),
695
+ dropdownData = _useState8[0],
696
+ setDropdownData = _useState8[1];
697
+
810
698
  var _useState9 = React.useState(false),
811
- _useState10 = _slicedToArray(_useState9, 2),
812
- hasError = _useState10[0],
813
- setHasError = _useState10[1];
699
+ _useState10 = _slicedToArray(_useState9, 2),
700
+ hasError = _useState10[0],
701
+ setHasError = _useState10[1];
702
+
814
703
  var onSubMenuClick = function onSubMenuClick(subMenu) {
815
704
  setSubMenuOpen(function (prev) {
816
705
  return !prev;
817
706
  });
818
707
  setDisplayedSubMenu(subMenu);
819
708
  };
709
+
820
710
  var onStoresClick = function onStoresClick() {
821
711
  setSubMenuOpen(false);
822
712
  setDisplayedSubMenu('stores');
823
713
  };
714
+
824
715
  var onBackClick = function onBackClick() {
825
716
  setSubMenuOpen(false);
826
717
  setDisplayedSubMenu('');
827
718
  };
719
+
828
720
  var onCloseSideNav = function onCloseSideNav(e) {
829
721
  onMenuClick();
830
722
  setSubMenuOpen(false);
831
723
  setDisplayedSubMenu('');
724
+
832
725
  if (e && e.key === 'Enter') {
833
726
  e.preventDefault();
834
727
  }
835
728
  };
729
+
836
730
  function addCategoryToElements(elements, categoryName) {
837
731
  return elements.map(function (element) {
838
732
  return _objectSpread2(_objectSpread2({}, element), {}, {
@@ -840,27 +734,96 @@
840
734
  });
841
735
  });
842
736
  }
737
+
843
738
  React.useMemo(function () {
844
739
  setLoading(true);
845
- axios.get("".concat(menuData)).then(function (_ref2) {
740
+ axios.get("".concat(categoryConfig.menuData)).then(function (_ref2) {
846
741
  var data = _ref2.data;
847
742
  setLoading(false);
848
- setDropdownData(function (prev) {
849
- return _objectSpread2(_objectSpread2({}, prev), {}, {
850
- latestArrivals: data.latest_arrivals,
851
- bags: data.bags,
852
- shoes: data.shoes,
853
- apparel: data.apparel,
854
- accessories: data.accessories,
855
- watches: data.watches,
856
- accessoriesCategories: data.accessories_categories,
857
- apparelStyles: data.apparel_styles
858
- });
859
- });
743
+ setDropdownData(data);
860
744
  }).catch(function () {
861
745
  return setHasError(true);
862
746
  });
863
- }, [menuData]);
747
+ }, [categoryConfig.menuData]);
748
+
749
+ var renderMenuItems = function renderMenuItems() {
750
+ return categoryConfig.categories.map(function (category) {
751
+ var title = category.title,
752
+ categorySlug = category.categorySlug;
753
+ var slug = categorySlug;
754
+
755
+ if (categorySlug === 'brands') {
756
+ slug = 'new';
757
+ }
758
+
759
+ return /*#__PURE__*/React__default.createElement("div", {
760
+ className: "side-nav__menu-item",
761
+ key: slug
762
+ }, /*#__PURE__*/React__default.createElement("button", {
763
+ type: "button",
764
+ className: "side-nav__menu-title-wrapper",
765
+ onClick: function onClick() {
766
+ return onSubMenuClick(slug);
767
+ }
768
+ }, /*#__PURE__*/React__default.createElement("span", {
769
+ className: "side-nav__menu-title"
770
+ }, title), /*#__PURE__*/React__default.createElement("img", {
771
+ src: accordionIcon,
772
+ alt: "accordion-icon",
773
+ className: "side-nav__accordion-icon"
774
+ })));
775
+ });
776
+ };
777
+
778
+ var renderDropdownLinks = function renderDropdownLinks() {
779
+ return categoryConfig.categories.map(function (category) {
780
+ var categorySlug = category.categorySlug,
781
+ categoryName = category.categoryName,
782
+ elementsKey = category.elementsKey,
783
+ subCategoryElementsKey = category.subCategoryElementsKey,
784
+ styleElementsKey = category.styleElementsKey;
785
+ var categoryElementsProcessed = categoryElements;
786
+
787
+ if (subCategoryElementsKey && dropdownData[subCategoryElementsKey]) {
788
+ // show subcategory elements
789
+ categoryElementsProcessed = removeCategoryByName(dropdownData[subCategoryElementsKey], categoryName);
790
+ } else if (styleElementsKey && dropdownData[styleElementsKey]) {
791
+ categoryElementsProcessed = addCategoryToElements(dropdownData[styleElementsKey], categorySlug);
792
+ } else {
793
+ categoryElementsProcessed = addCategoryToElements(categoryElementsProcessed, categorySlug);
794
+ }
795
+
796
+ var subMenuTitle = 'Brands';
797
+
798
+ if (categorySlug !== 'brands') {
799
+ subMenuTitle = "".concat(categoryName, " Brands");
800
+ }
801
+
802
+ var subMenu = categorySlug;
803
+
804
+ if (subMenu === 'brands') {
805
+ subMenu = 'new';
806
+ }
807
+
808
+ return /*#__PURE__*/React__default.createElement(BrandsDropDown, {
809
+ key: categorySlug,
810
+ subMenuOpen: subMenuOpen && displayedSubMenu === subMenu,
811
+ onBackClick: onBackClick,
812
+ backIcon: backIcon,
813
+ subMenuCategoryTitle: "Department",
814
+ productUrl: productUrl,
815
+ categoryElements: categoryElementsProcessed,
816
+ subMenuBrandsTitle: subMenuTitle,
817
+ brandsList: dropdownData[elementsKey],
818
+ categorySlug: displayedSubMenu,
819
+ isLoading: loading,
820
+ hasError: hasError,
821
+ onCloseSideNav: onCloseSideNav,
822
+ LinkComponent: LinkComponent
823
+ });
824
+ });
825
+ };
826
+
864
827
  return /*#__PURE__*/React__default.createElement("div", {
865
828
  className: "side-nav"
866
829
  }, /*#__PURE__*/React__default.createElement("div", {
@@ -881,92 +844,9 @@
881
844
  className: "side-nav__close-icon"
882
845
  })), /*#__PURE__*/React__default.createElement("div", {
883
846
  className: "side-nav__menu-items-wrapper"
884
- }, /*#__PURE__*/React__default.createElement("div", {
885
- className: "side-nav__menu-item"
886
- }, /*#__PURE__*/React__default.createElement("button", {
887
- type: "button",
888
- className: "side-nav__menu-title-wrapper",
889
- onClick: function onClick() {
890
- return onSubMenuClick('new');
891
- }
892
- }, /*#__PURE__*/React__default.createElement("span", {
893
- className: "side-nav__menu-title"
894
- }, "New"), /*#__PURE__*/React__default.createElement("img", {
895
- src: accordionIcon,
896
- alt: "accordion-icon",
897
- className: "side-nav__accordion-icon"
898
- }))), /*#__PURE__*/React__default.createElement("div", {
899
- className: "side-nav__menu-item"
900
- }, /*#__PURE__*/React__default.createElement("button", {
901
- type: "button",
902
- className: "side-nav__menu-title-wrapper",
903
- onClick: function onClick() {
904
- return onSubMenuClick('bags');
905
- }
906
- }, /*#__PURE__*/React__default.createElement("span", {
907
- className: "side-nav__menu-title"
908
- }, "Bags"), /*#__PURE__*/React__default.createElement("img", {
909
- src: accordionIcon,
910
- alt: "accordion-icon",
911
- className: "side-nav__accordion-icon"
912
- }))), /*#__PURE__*/React__default.createElement("div", {
913
- className: "side-nav__menu-item"
914
- }, /*#__PURE__*/React__default.createElement("button", {
915
- type: "button",
916
- className: "side-nav__menu-title-wrapper",
917
- onClick: function onClick() {
918
- return onSubMenuClick('shoes');
919
- }
920
- }, /*#__PURE__*/React__default.createElement("span", {
921
- className: "side-nav__menu-title"
922
- }, "Shoes"), /*#__PURE__*/React__default.createElement("img", {
923
- src: accordionIcon,
924
- alt: "accordion-icon",
925
- className: "side-nav__accordion-icon"
926
- }))), /*#__PURE__*/React__default.createElement("div", {
927
- className: "side-nav__menu-item"
928
- }, /*#__PURE__*/React__default.createElement("button", {
929
- type: "button",
930
- className: "side-nav__menu-title-wrapper",
931
- onClick: function onClick() {
932
- return onSubMenuClick('apparel');
933
- }
934
- }, /*#__PURE__*/React__default.createElement("span", {
935
- className: "side-nav__menu-title"
936
- }, "Clothing"), /*#__PURE__*/React__default.createElement("img", {
937
- src: accordionIcon,
938
- alt: "accordion-icon",
939
- className: "side-nav__accordion-icon"
940
- }))), /*#__PURE__*/React__default.createElement("div", {
941
- className: "side-nav__menu-item"
942
- }, /*#__PURE__*/React__default.createElement("button", {
943
- type: "button",
944
- className: "side-nav__menu-title-wrapper",
945
- onClick: function onClick() {
946
- return onSubMenuClick('accessories');
947
- }
948
- }, /*#__PURE__*/React__default.createElement("span", {
949
- className: "side-nav__menu-title"
950
- }, "Accessories"), /*#__PURE__*/React__default.createElement("img", {
951
- src: accordionIcon,
952
- alt: "accordion-icon",
953
- className: "side-nav__accordion-icon"
954
- }))), /*#__PURE__*/React__default.createElement("div", {
955
- className: "side-nav__menu-item"
956
- }, /*#__PURE__*/React__default.createElement("button", {
957
- type: "button",
958
- className: "side-nav__menu-title-wrapper",
959
- onClick: function onClick() {
960
- return onSubMenuClick('watches');
961
- }
962
- }, /*#__PURE__*/React__default.createElement("span", {
963
- className: "side-nav__menu-title"
964
- }, "Watches"), /*#__PURE__*/React__default.createElement("img", {
965
- src: accordionIcon,
966
- alt: "accordion-icon",
967
- className: "side-nav__accordion-icon"
968
- }))), /*#__PURE__*/React__default.createElement("div", {
969
- className: "side-nav__menu-item"
847
+ }, renderMenuItems(), !!stores.length && /*#__PURE__*/React__default.createElement("div", {
848
+ className: "side-nav__menu-item",
849
+ key: "stores"
970
850
  }, /*#__PURE__*/React__default.createElement("button", {
971
851
  type: "button",
972
852
  className: "side-nav__menu-title-wrapper",
@@ -978,134 +858,58 @@
978
858
  alt: "accordion-icon",
979
859
  className: "side-nav__accordion-icon"
980
860
  }))), /*#__PURE__*/React__default.createElement("div", {
981
- className: "side-nav__menu-item"
861
+ className: "side-nav__menu-item",
862
+ key: "sell-to-us"
982
863
  }, /*#__PURE__*/React__default.createElement("button", {
983
864
  type: "button",
984
865
  className: "side-nav__block-button",
985
866
  onClick: onSellToUsClick
986
867
  }, "Sell To Us")), /*#__PURE__*/React__default.createElement("div", {
987
- className: "side-nav__menu-item"
868
+ className: "side-nav__menu-item",
869
+ key: "our-story"
988
870
  }, /*#__PURE__*/React__default.createElement("button", {
989
871
  type: "button",
990
872
  className: "side-nav__sub-link",
991
873
  onClick: onOurStoryClick
992
- }, "Our Story")), /*#__PURE__*/React__default.createElement("div", {
993
- className: "side-nav__menu-item"
874
+ }, "Our Story")), typeof onBlogClick === 'function' && /*#__PURE__*/React__default.createElement("div", {
875
+ className: "side-nav__menu-item",
876
+ key: "blog"
994
877
  }, /*#__PURE__*/React__default.createElement("button", {
995
878
  type: "button",
996
879
  className: "side-nav__sub-link",
997
880
  onClick: onBlogClick
998
881
  }, "Blog")), /*#__PURE__*/React__default.createElement("div", {
999
- className: "side-nav__menu-item"
882
+ className: "side-nav__menu-item",
883
+ key: "contact-us"
1000
884
  }, /*#__PURE__*/React__default.createElement("button", {
1001
885
  type: "button",
1002
886
  className: "side-nav__sub-link",
1003
887
  onClick: onContactUsClick
1004
888
  }, "Contact Us")), /*#__PURE__*/React__default.createElement("div", {
1005
- className: "side-nav__menu-item"
889
+ className: "side-nav__menu-item",
890
+ key: "my-account"
1006
891
  }, /*#__PURE__*/React__default.createElement("button", {
1007
892
  type: "button",
1008
893
  className: "side-nav__sub-link",
1009
894
  onClick: onAccountClick
1010
895
  }, "My Account")), /*#__PURE__*/React__default.createElement("div", {
1011
- className: "side-nav__menu-item"
896
+ className: "side-nav__menu-item",
897
+ key: "my-cart"
1012
898
  }, /*#__PURE__*/React__default.createElement("button", {
1013
899
  type: "button",
1014
900
  className: "side-nav__sub-link",
1015
901
  onClick: onCartClick
1016
902
  }, "My Cart")), /*#__PURE__*/React__default.createElement(CurrencySelect, {
903
+ key: "currency",
1017
904
  currency: currency,
1018
905
  currencyOptions: currencyOptions,
1019
906
  onCurrencyChange: onCurrencyChange,
1020
907
  isCurrencySelectionDisabled: isCurrencySelectionDisabled,
1021
908
  tooltipContent: tooltipContent
1022
- }))), /*#__PURE__*/React__default.createElement(BrandsDropDown, {
1023
- subMenuOpen: subMenuOpen && displayedSubMenu === 'new',
1024
- onBackClick: onBackClick,
1025
- backIcon: backIcon,
1026
- subMenuCategoryTitle: "Department",
1027
- productUrl: productUrl,
1028
- categoryElements: categoryElements,
1029
- subMenuBrandsTitle: "Brands",
1030
- brandsList: dropdownData.latestArrivals,
1031
- categorySlug: displayedSubMenu,
1032
- isLoading: loading,
1033
- hasError: hasError,
1034
- onCloseSideNav: onCloseSideNav,
1035
- LinkComponent: LinkComponent
1036
- }), /*#__PURE__*/React__default.createElement(BrandsDropDown, {
1037
- subMenuOpen: subMenuOpen && displayedSubMenu === 'bags',
1038
- onBackClick: onBackClick,
1039
- backIcon: backIcon,
1040
- subMenuCategoryTitle: "Department",
1041
- productUrl: productUrl,
1042
- categoryElements: addCategoryToElements(categoryElements, categories.bags.slug),
1043
- subMenuBrandsTitle: "Bag Brands",
1044
- brandsList: dropdownData.bags,
1045
- categorySlug: displayedSubMenu,
1046
- isLoading: loading,
1047
- hasError: hasError,
1048
- onCloseSideNav: onCloseSideNav,
1049
- LinkComponent: LinkComponent
1050
- }), /*#__PURE__*/React__default.createElement(BrandsDropDown, {
1051
- subMenuOpen: subMenuOpen && displayedSubMenu === 'shoes',
1052
- onBackClick: onBackClick,
1053
- backIcon: backIcon,
1054
- subMenuCategoryTitle: "Department",
1055
- productUrl: productUrl,
1056
- categoryElements: addCategoryToElements(categoryElements, categories.shoes.slug),
1057
- subMenuBrandsTitle: "Shoe Brands",
1058
- brandsList: dropdownData.shoes,
1059
- categorySlug: displayedSubMenu,
1060
- isLoading: loading,
1061
- hasError: hasError,
1062
- onCloseSideNav: onCloseSideNav,
1063
- LinkComponent: LinkComponent
1064
- }), /*#__PURE__*/React__default.createElement(BrandsDropDown, {
1065
- subMenuOpen: subMenuOpen && displayedSubMenu === 'apparel',
1066
- onBackClick: onBackClick,
1067
- backIcon: backIcon,
1068
- subMenuCategoryTitle: "Department",
1069
- productUrl: productUrl,
1070
- categoryElements: addCategoryToElements(dropdownData.apparelStyles, categories.clothing.slug),
1071
- subMenuBrandsTitle: "Clothing Brands",
1072
- brandsList: dropdownData.apparel,
1073
- categorySlug: displayedSubMenu,
1074
- isLoading: loading,
1075
- hasError: hasError,
1076
- onCloseSideNav: onCloseSideNav,
1077
- LinkComponent: LinkComponent
1078
- }), /*#__PURE__*/React__default.createElement(BrandsDropDown, {
1079
- subMenuOpen: subMenuOpen && displayedSubMenu === 'accessories',
1080
- onBackClick: onBackClick,
1081
- backIcon: backIcon,
1082
- subMenuCategoryTitle: "Categories",
1083
- productUrl: productUrl,
1084
- categoryElements: removeCategoryByName(dropdownData.accessoriesCategories, 'ACCESSORIES'),
1085
- subMenuBrandsTitle: "Accessory Brands",
1086
- brandsList: dropdownData.accessories,
1087
- categorySlug: displayedSubMenu,
1088
- isLoading: loading,
1089
- hasError: hasError,
1090
- onCloseSideNav: onCloseSideNav,
1091
- LinkComponent: LinkComponent
1092
- }), /*#__PURE__*/React__default.createElement(BrandsDropDown, {
1093
- subMenuOpen: subMenuOpen && displayedSubMenu === 'watches',
1094
- onBackClick: onBackClick,
1095
- backIcon: backIcon,
1096
- subMenuCategoryTitle: "Department",
1097
- productUrl: productUrl,
1098
- categoryElements: addCategoryToElements(categoryElements, categories.watches.slug),
1099
- subMenuBrandsTitle: "Watches Brands",
1100
- brandsList: dropdownData.watches,
1101
- categorySlug: displayedSubMenu,
1102
- isLoading: loading,
1103
- hasError: hasError,
1104
- onCloseSideNav: onCloseSideNav,
1105
- LinkComponent: LinkComponent
1106
- }), displayedSubMenu === 'stores' && /*#__PURE__*/React__default.createElement("div", {
909
+ }))), renderDropdownLinks(), displayedSubMenu === 'stores' && /*#__PURE__*/React__default.createElement("div", {
1107
910
  className: "side-nav__content"
1108
911
  }, /*#__PURE__*/React__default.createElement(StoresDropdown, {
912
+ key: "stores",
1109
913
  backIcon: backIcon,
1110
914
  onBackClick: onBackClick,
1111
915
  stores: stores,
@@ -1113,172 +917,306 @@
1113
917
  })));
1114
918
  };
1115
919
 
1116
- var searchProducts = function searchProducts(search, limit) {
1117
- return {
1118
- query: "\n query SearchProducts($search: String!, $limit: Int!) {\n luxity_products_serach_results(search: $search, limit: $limit) {\n brands {\n name\n link\n }\n products {\n name\n link\n }\n luxity_product_ids\n }\n }\n ",
1119
- variables: {
1120
- search: search,
1121
- limit: limit
920
+ var SearchResults = function SearchResults(_ref) {
921
+ var _searchResults$brands, _searchResults$produc, _searchResults$brands2, _searchResults$produc2, _initialSearchData$tr, _initialSearchData$la, _limitBrands, _limitBrands2, _initialSearchData$la2, _searchResults$produc3;
922
+
923
+ var searchValue = _ref.searchValue,
924
+ searchResults = _ref.searchResults,
925
+ onViewAll = _ref.onViewAll,
926
+ searchResultsRef = _ref.searchResultsRef,
927
+ onSearchSubmit = _ref.onSearchSubmit,
928
+ setSearchValue = _ref.setSearchValue,
929
+ initialSearchData = _ref.initialSearchData,
930
+ isSearchFocused = _ref.isSearchFocused,
931
+ setIsSearchFocused = _ref.setIsSearchFocused,
932
+ currency = _ref.currency,
933
+ currencySymbol = _ref.currencySymbol;
934
+
935
+ var _useState = React.useState(false),
936
+ _useState2 = _slicedToArray(_useState, 2),
937
+ isMobile = _useState2[0],
938
+ setIsMobile = _useState2[1];
939
+
940
+ React.useEffect(function () {
941
+ var checkIfMobile = function checkIfMobile() {
942
+ setIsMobile(window.innerWidth <= 1024);
943
+ };
944
+
945
+ checkIfMobile();
946
+ window.addEventListener('resize', checkIfMobile);
947
+ return function () {
948
+ window.removeEventListener('resize', checkIfMobile);
949
+ };
950
+ }, []);
951
+ var shouldShowInitialData = isSearchFocused && (!searchValue || searchValue.trim().length < 3) || (searchValue === null || searchValue === void 0 ? void 0 : searchValue.trim().length) >= 3 && !(searchResults !== null && searchResults !== void 0 && (_searchResults$brands = searchResults.brands) !== null && _searchResults$brands !== void 0 && _searchResults$brands.length) && !(searchResults !== null && searchResults !== void 0 && (_searchResults$produc = searchResults.products) !== null && _searchResults$produc !== void 0 && _searchResults$produc.length);
952
+ var hasResults = (searchResults === null || searchResults === void 0 ? void 0 : (_searchResults$brands2 = searchResults.brands) === null || _searchResults$brands2 === void 0 ? void 0 : _searchResults$brands2.length) > 0 || (searchResults === null || searchResults === void 0 ? void 0 : (_searchResults$produc2 = searchResults.products) === null || _searchResults$produc2 === void 0 ? void 0 : _searchResults$produc2.length) > 0;
953
+ var hasInitialData = (initialSearchData === null || initialSearchData === void 0 ? void 0 : (_initialSearchData$tr = initialSearchData.trending_brands) === null || _initialSearchData$tr === void 0 ? void 0 : _initialSearchData$tr.length) > 0 || (initialSearchData === null || initialSearchData === void 0 ? void 0 : (_initialSearchData$la = initialSearchData.latest_products) === null || _initialSearchData$la === void 0 ? void 0 : _initialSearchData$la.length) > 0;
954
+
955
+ if (!hasResults && !hasInitialData) {
956
+ return null;
957
+ }
958
+
959
+ if (!isSearchFocused) {
960
+ return null;
961
+ }
962
+
963
+ var formatPrice = function formatPrice(price) {
964
+ var formatter = new Intl.NumberFormat(undefined, {
965
+ minimumFractionDigits: 0,
966
+ maximumFractionDigits: 2
967
+ });
968
+ return "".concat(currencySymbol).concat(formatter.format(price));
969
+ };
970
+
971
+ var renderProductCard = function renderProductCard(product) {
972
+ var selectedPrice = product.prices ? product.prices.find(function (p) {
973
+ return p.currency === currency;
974
+ }) : {
975
+ price: product.price,
976
+ retail_price: product.est_retail_price
977
+ };
978
+ return /*#__PURE__*/React__default.createElement("a", {
979
+ key: product.link,
980
+ href: product.link,
981
+ className: "product-card"
982
+ }, product.featured_image && /*#__PURE__*/React__default.createElement("div", {
983
+ className: "product-card__image-container"
984
+ }, /*#__PURE__*/React__default.createElement("img", {
985
+ src: product.featured_image,
986
+ alt: product.name,
987
+ className: "product-card__image"
988
+ })), /*#__PURE__*/React__default.createElement("div", {
989
+ className: "product-card__details"
990
+ }, /*#__PURE__*/React__default.createElement("h3", {
991
+ className: "product-card__name"
992
+ }, shouldShowInitialData ? /*#__PURE__*/React__default.createElement("span", null, /*#__PURE__*/React__default.createElement("span", {
993
+ className: "product-card__brand-name"
994
+ }, product.brand.toUpperCase()), ' ', product.name) : product.name), /*#__PURE__*/React__default.createElement("div", {
995
+ className: "product-card__info-row"
996
+ }, /*#__PURE__*/React__default.createElement("div", {
997
+ className: "product-card__price-group"
998
+ }, /*#__PURE__*/React__default.createElement("div", {
999
+ className: "product-card__price"
1000
+ }, formatPrice(selectedPrice.price)), selectedPrice.retail_price > 1 && /*#__PURE__*/React__default.createElement("div", {
1001
+ className: "product-card__retail-price"
1002
+ }, "Est. Retail: ", formatPrice(selectedPrice.retail_price))), /*#__PURE__*/React__default.createElement("div", {
1003
+ className: "product-card__condition"
1004
+ }, /*#__PURE__*/React__default.createElement("span", {
1005
+ className: "product-card__condition-label"
1006
+ }, "Condition:"), product.condition))));
1007
+ };
1008
+
1009
+ var getBrandLink = function getBrandLink(brand) {
1010
+ return "/products/brands/".concat(brand.slug);
1011
+ };
1012
+
1013
+ var limitBrands = function limitBrands(brands) {
1014
+ if (isMobile && brands && brands.length > 4) {
1015
+ return brands.slice(0, 4);
1122
1016
  }
1017
+
1018
+ return brands;
1123
1019
  };
1124
- };
1125
1020
 
1126
- var SearchResults = function SearchResults(_ref) {
1127
- var searchValue = _ref.searchValue,
1128
- searchResults = _ref.searchResults,
1129
- onViewAll = _ref.onViewAll,
1130
- searchResultsRef = _ref.searchResultsRef,
1131
- onSearchSubmit = _ref.onSearchSubmit,
1132
- setSearchValue = _ref.setSearchValue;
1133
- if (searchValue.trim().length >= 3) {
1134
- if (searchResults.brands.length === 0 && searchResults.products.length === 0) {
1135
- return null;
1021
+ return /*#__PURE__*/React__default.createElement("div", {
1022
+ className: "search-results",
1023
+ ref: searchResultsRef
1024
+ }, /*#__PURE__*/React__default.createElement("div", {
1025
+ className: "search-results__section"
1026
+ }, /*#__PURE__*/React__default.createElement("h2", {
1027
+ className: "search-results__header"
1028
+ }, shouldShowInitialData ? 'TRENDING SEARCHES' : 'BRANDS'), /*#__PURE__*/React__default.createElement("div", {
1029
+ className: "search-results__list"
1030
+ }, shouldShowInitialData ? (_limitBrands = limitBrands(initialSearchData === null || initialSearchData === void 0 ? void 0 : initialSearchData.trending_brands)) === null || _limitBrands === void 0 ? void 0 : _limitBrands.map(function (brand) {
1031
+ return /*#__PURE__*/React__default.createElement("a", {
1032
+ key: brand.id,
1033
+ href: getBrandLink(brand),
1034
+ className: "search-results__item"
1035
+ }, brand.name);
1036
+ }) : (_limitBrands2 = limitBrands(searchResults === null || searchResults === void 0 ? void 0 : searchResults.brands)) === null || _limitBrands2 === void 0 ? void 0 : _limitBrands2.map(function (brand) {
1037
+ return /*#__PURE__*/React__default.createElement("a", {
1038
+ key: brand.link,
1039
+ href: brand.link,
1040
+ className: "search-results__item"
1041
+ }, brand.name);
1042
+ }))), /*#__PURE__*/React__default.createElement("div", {
1043
+ className: "search-results__section"
1044
+ }, /*#__PURE__*/React__default.createElement("div", {
1045
+ className: "search-results__section-header"
1046
+ }, /*#__PURE__*/React__default.createElement("h2", {
1047
+ className: "search-results__header"
1048
+ }, shouldShowInitialData ? 'POPULAR' : 'TOP MATCHES'), /*#__PURE__*/React__default.createElement("button", {
1049
+ type: "button",
1050
+ className: "search-results__view-all-link",
1051
+ onClick: function onClick() {
1052
+ onViewAll();
1136
1053
  }
1137
- return /*#__PURE__*/React__default.createElement("div", {
1138
- className: "z-50 absolute md:top-14 font-body bg-white w-full lg:w-1/2 flex flex-col md:flex-row md:divide-x divide-black lg:mt-1 shadow-md",
1139
- ref: searchResultsRef
1140
- }, /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement("div", {
1141
- className: "w-full lg:w-1/3"
1142
- }, /*#__PURE__*/React__default.createElement("p", {
1143
- className: "font-bold p-2 px-4"
1144
- }, "Brands"), searchResults.brands.map(function (brand) {
1145
- return /*#__PURE__*/React__default.createElement("a", {
1146
- key: brand.link,
1147
- href: brand.link,
1148
- className: ""
1149
- }, /*#__PURE__*/React__default.createElement("div", {
1150
- className: "p-2 px-4 hover:bg-gray-100"
1151
- }, brand.name));
1152
- })), /*#__PURE__*/React__default.createElement("div", {
1153
- className: "w-full lg:w-2/3"
1154
- }, /*#__PURE__*/React__default.createElement("p", {
1155
- className: "font-bold p-2 px-4"
1156
- }, "Products"), searchResults.products.map(function (product) {
1157
- return /*#__PURE__*/React__default.createElement("a", {
1158
- key: product.link,
1159
- href: product.link
1160
- }, /*#__PURE__*/React__default.createElement("div", {
1161
- className: "p-2 px-4 hover:bg-gray-100"
1162
- }, product.name));
1163
- }), /*#__PURE__*/React__default.createElement("button", {
1164
- type: "button",
1165
- onClick: function onClick() {
1166
- onViewAll();
1054
+ }, "View all items")), /*#__PURE__*/React__default.createElement("div", {
1055
+ className: "search-results__product-list"
1056
+ }, shouldShowInitialData ? initialSearchData === null || initialSearchData === void 0 ? void 0 : (_initialSearchData$la2 = initialSearchData.latest_products) === null || _initialSearchData$la2 === void 0 ? void 0 : _initialSearchData$la2.map(renderProductCard) : searchResults === null || searchResults === void 0 ? void 0 : (_searchResults$produc3 = searchResults.products) === null || _searchResults$produc3 === void 0 ? void 0 : _searchResults$produc3.map(renderProductCard)), /*#__PURE__*/React__default.createElement("button", {
1057
+ type: "button",
1058
+ className: "search-results__view-all-button",
1059
+ onClick: function onClick() {
1060
+ onViewAll();
1061
+
1062
+ if (!shouldShowInitialData) {
1167
1063
  onSearchSubmit(searchValue);
1168
1064
  setSearchValue('');
1169
- },
1170
- className: "bottom-0 mt-5 py-3 w-full font-body text-center text-white uppercase bg-black hover:bg-gray-950 border border-black transition-all ease-in-out duration-300 cursor-pointer"
1171
- }, "View all"))));
1172
- }
1173
- return null;
1065
+ setIsSearchFocused(false);
1066
+ }
1067
+ }
1068
+ }, "View all items")));
1174
1069
  };
1175
1070
 
1176
- var LuxityMobileHeader = function LuxityMobileHeader(_ref) {
1177
- var logoSrc = _ref.logoSrc,
1178
- menuIcon = _ref.menuIcon,
1179
- inputSearchIcon = _ref.inputSearchIcon,
1180
- onCartClick = _ref.onCartClick,
1181
- cartIcon = _ref.cartIcon,
1182
- cartCount = _ref.cartCount,
1183
- closeIcon = _ref.closeIcon,
1184
- accountIcon = _ref.accountIcon,
1185
- saleIcon = _ref.saleIcon,
1186
- orderIcon = _ref.orderIcon,
1187
- accordionIcon = _ref.accordionIcon,
1188
- backIcon = _ref.backIcon,
1189
- productsUrl = _ref.productsUrl,
1190
- stores = _ref.stores,
1191
- categoryElements = _ref.categoryElements,
1192
- onAccountClick = _ref.onAccountClick,
1193
- onDashboardClick = _ref.onDashboardClick,
1194
- onContactUsClick = _ref.onContactUsClick,
1195
- onOurStoryClick = _ref.onOurStoryClick,
1196
- onBlogClick = _ref.onBlogClick,
1197
- bugReportLink = _ref.bugReportLink,
1198
- onSellToUsClick = _ref.onSellToUsClick,
1199
- onLogoClick = _ref.onLogoClick,
1200
- onLuxityShopClick = _ref.onLuxityShopClick,
1201
- endpoint = _ref.endpoint,
1202
- menuData = _ref.menuData,
1203
- onSearchSubmit = _ref.onSearchSubmit,
1204
- onProductIdsReceived = _ref.onProductIdsReceived,
1205
- onLogoutClick = _ref.onLogoutClick,
1206
- onInterestClick = _ref.onInterestClick,
1207
- onAddressClick = _ref.onAddressClick,
1208
- onCouponsClick = _ref.onCouponsClick,
1209
- onEditProfileClick = _ref.onEditProfileClick,
1210
- onCurrentOrdersClick = _ref.onCurrentOrdersClick,
1211
- onPastOrdersClick = _ref.onPastOrdersClick,
1212
- onSubmissionsClick = _ref.onSubmissionsClick,
1213
- onPastSalesClick = _ref.onPastSalesClick,
1214
- onPaidOutClick = _ref.onPaidOutClick,
1215
- currency = _ref.currency,
1216
- currencyOptions = _ref.currencyOptions,
1217
- onCurrencyChange = _ref.onCurrencyChange,
1218
- isCurrencySelectionDisabled = _ref.isCurrencySelectionDisabled,
1219
- tooltipContent = _ref.tooltipContent,
1220
- LinkComponent = _ref.LinkComponent,
1221
- shop = _ref.shop,
1222
- app = _ref.app;
1223
- var _useState = React.useState(''),
1224
- _useState2 = _slicedToArray(_useState, 2),
1225
- searchValue = _useState2[0],
1226
- setSearchValue = _useState2[1];
1227
- var _useState3 = React.useState(false),
1228
- _useState4 = _slicedToArray(_useState3, 2),
1229
- showSearchBar = _useState4[0],
1230
- setShowSearchbar = _useState4[1];
1231
- var _useState5 = React.useState(false),
1232
- _useState6 = _slicedToArray(_useState5, 2),
1233
- showSideNav = _useState6[0],
1234
- setShowSideNav = _useState6[1];
1235
- var _useState7 = React.useState(false),
1236
- _useState8 = _slicedToArray(_useState7, 2),
1237
- searchLoading = _useState8[0],
1238
- setSearchLoading = _useState8[1];
1239
- var _useState9 = React.useState({
1240
- brands: [],
1241
- products: []
1242
- }),
1243
- _useState10 = _slicedToArray(_useState9, 2),
1244
- searchResults = _useState10[0],
1245
- setSearchResults = _useState10[1];
1246
- var debounce = function debounce(func, wait) {
1071
+ var searchProducts = function searchProducts(search, limit, currencyCode) {
1072
+ return {
1073
+ query: "\n query SearchProducts($search: String!, $limit: Int!, $currencyCode: String!) {\n luxity_products_serach_results(search: $search, limit: $limit, currency_code: $currencyCode) {\n brands {\n name\n link\n }\n products {\n name\n link\n price\n est_retail_price\n condition\n featured_image\n }\n luxity_product_ids\n }\n }\n ",
1074
+ variables: {
1075
+ search: search,
1076
+ limit: limit,
1077
+ currencyCode: currencyCode
1078
+ }
1079
+ };
1080
+ };
1081
+
1082
+ var useSearch = function useSearch(_ref) {
1083
+ var endpoint = _ref.endpoint,
1084
+ onProductIdsReceived = _ref.onProductIdsReceived,
1085
+ currency = _ref.currency;
1086
+ var currentSearchRequestToken = React.useRef(null);
1087
+ var debounce = React.useCallback(function (func, wait) {
1247
1088
  var timeout;
1248
1089
  return function executedFunction() {
1249
1090
  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
1250
1091
  args[_key] = arguments[_key];
1251
1092
  }
1093
+
1252
1094
  var later = function later() {
1253
1095
  clearTimeout(timeout);
1254
1096
  func.apply(void 0, args);
1255
1097
  };
1098
+
1256
1099
  clearTimeout(timeout);
1257
1100
  timeout = setTimeout(later, wait);
1258
1101
  };
1259
- };
1260
- var debouncedSearch = React.useCallback(debounce(function (nextValue) {
1261
- setSearchLoading(true);
1262
- axios.post(endpoint, searchProducts(nextValue, 6)).then(function (response) {
1263
- setSearchResults(response.data.data.luxity_products_serach_results);
1264
- var ids = response.data.data.luxity_products_serach_results.luxity_product_ids;
1265
- onProductIdsReceived(ids);
1266
- setSearchLoading(false);
1102
+ }, []);
1103
+ var fetchInitialSearchData = React.useCallback(function (initialSearchDataUrl, setInitialSearchView) {
1104
+ axios.get("".concat(initialSearchDataUrl)).then(function (_ref2) {
1105
+ var data = _ref2.data;
1106
+ setInitialSearchView({
1107
+ trending_brands: data.trending_brands,
1108
+ latest_products: data.latest_products
1109
+ });
1267
1110
  }).catch(function () {
1268
- setSearchLoading(false);
1111
+ setInitialSearchView({
1112
+ trending_brands: [],
1113
+ latest_products: []
1114
+ });
1269
1115
  });
1270
- }, 500), [endpoint]);
1271
- var immediateSearch = React.useCallback(function (value) {
1272
- setSearchValue('');
1273
- setSearchResults({
1274
- brands: [],
1275
- products: []
1116
+ }, []);
1117
+ var performSearch = React.useCallback(function (searchQuery, setSearchResults) {
1118
+ if (!searchQuery || searchQuery.trim() === '') {
1119
+ setSearchResults({
1120
+ brands: [],
1121
+ products: [],
1122
+ luxity_product_ids: []
1123
+ });
1124
+ return;
1125
+ } // Cancel any ongoing search request to prevent race conditions
1126
+
1127
+
1128
+ if (currentSearchRequestToken.current) {
1129
+ currentSearchRequestToken.current.cancel();
1130
+ } // Create a new token for this specific search request
1131
+
1132
+
1133
+ var newSearchToken = axios.CancelToken.source();
1134
+ currentSearchRequestToken.current = newSearchToken;
1135
+ axios.post(endpoint, searchProducts(searchQuery, 3, currency), {
1136
+ cancelToken: newSearchToken.token
1137
+ }).then(function (response) {
1138
+ if (currentSearchRequestToken.current === newSearchToken) {
1139
+ var searchResults = response.data.data.luxity_products_serach_results;
1140
+ setSearchResults(searchResults);
1141
+
1142
+ if (searchResults && searchResults.luxity_product_ids) {
1143
+ onProductIdsReceived(searchResults.luxity_product_ids);
1144
+ }
1145
+
1146
+ currentSearchRequestToken.current = null;
1147
+ }
1148
+ }).catch(function (error) {
1149
+ if (!axios.isCancel(error)) {
1150
+ setSearchResults({
1151
+ brands: [],
1152
+ products: [],
1153
+ luxity_product_ids: []
1154
+ });
1155
+ currentSearchRequestToken.current = null;
1156
+ }
1276
1157
  });
1277
- onSearchSubmit(value);
1278
- }, [onSearchSubmit]);
1279
- var handleChange = function handleChange(event) {
1158
+ }, [endpoint, currency, onProductIdsReceived]);
1159
+ var debouncedSearch = React.useMemo(function () {
1160
+ return debounce(function (searchQuery, setSearchResults) {
1161
+ return performSearch(searchQuery, setSearchResults);
1162
+ }, 500);
1163
+ }, [debounce, performSearch]);
1164
+ var createDebouncedSearch = React.useCallback(function (setSearchResults) {
1165
+ return function (searchQuery) {
1166
+ return debouncedSearch(searchQuery, setSearchResults);
1167
+ };
1168
+ }, [debouncedSearch]);
1169
+ var createImmediateSearch = React.useCallback(function (setSearchValue, setSearchResults, onSearchSubmit) {
1170
+ return function (searchQuery) {
1171
+ /*
1172
+ * Cancel any pending search request when immediate search is performed
1173
+ * Immediate search is when the user types a search query and presses enter
1174
+ */
1175
+ if (currentSearchRequestToken.current) {
1176
+ currentSearchRequestToken.current.cancel();
1177
+ currentSearchRequestToken.current = null;
1178
+ }
1179
+
1180
+ setSearchValue('');
1181
+ setSearchResults({
1182
+ brands: [],
1183
+ products: []
1184
+ });
1185
+ onSearchSubmit(searchQuery);
1186
+ };
1187
+ }, []);
1188
+ return {
1189
+ fetchInitialSearchData: fetchInitialSearchData,
1190
+ createDebouncedSearch: createDebouncedSearch,
1191
+ createImmediateSearch: createImmediateSearch
1192
+ };
1193
+ };
1194
+
1195
+ var useSearchClickOutside = function useSearchClickOutside(ref, searchResults, setCachedResults, setIsSearchFocused, setSearchResults) {
1196
+ React.useEffect(function () {
1197
+ var handleClickOutside = function handleClickOutside(event) {
1198
+ if (ref.current && !ref.current.contains(event.target)) {
1199
+ setCachedResults(searchResults);
1200
+ setIsSearchFocused(false);
1201
+ setSearchResults({
1202
+ brands: [],
1203
+ products: []
1204
+ });
1205
+ }
1206
+ };
1207
+
1208
+ document.addEventListener('mousedown', handleClickOutside);
1209
+ return function () {
1210
+ document.removeEventListener('mousedown', handleClickOutside);
1211
+ };
1212
+ }, [ref, searchResults, setCachedResults, setIsSearchFocused, setSearchResults]);
1213
+ };
1214
+ var useSearchInputChange = function useSearchInputChange(setSearchValue, setIsSearchFocused, debouncedSearch, setSearchResults, setCachedResults) {
1215
+ return React.useCallback(function (event) {
1280
1216
  var value = event.target.value;
1281
1217
  setSearchValue(value);
1218
+ setIsSearchFocused(true);
1219
+
1282
1220
  if (value.trim().length >= 3) {
1283
1221
  debouncedSearch(value);
1284
1222
  } else {
@@ -1286,87 +1224,268 @@
1286
1224
  brands: [],
1287
1225
  products: []
1288
1226
  });
1227
+ setCachedResults({
1228
+ brands: [],
1229
+ products: []
1230
+ });
1289
1231
  }
1290
- };
1291
- var handleKeyDown = function handleKeyDown(event) {
1232
+ }, [setSearchValue, setIsSearchFocused, debouncedSearch, setSearchResults, setCachedResults]);
1233
+ };
1234
+ var useSearchInputFocus = function useSearchInputFocus(searchValue, setIsSearchFocused, cachedResults, setSearchResults) {
1235
+ var handleSearchClick = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : undefined;
1236
+ return React.useCallback(function () {
1237
+ setIsSearchFocused(true);
1238
+
1239
+ if (typeof handleSearchClick === 'function') {
1240
+ handleSearchClick();
1241
+ } else if (searchValue.trim().length >= 3) {
1242
+ setSearchResults(cachedResults);
1243
+ }
1244
+ }, [searchValue, setIsSearchFocused, cachedResults, setSearchResults, handleSearchClick]);
1245
+ };
1246
+ var useSearchInputKeyDown = function useSearchInputKeyDown(searchValue, immediateSearch, setIsSearchFocused) {
1247
+ var setSearchValue = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;
1248
+ return React.useCallback(function (event) {
1292
1249
  if (event.key === 'Enter') {
1293
1250
  event.preventDefault();
1251
+
1294
1252
  if (searchValue.trim().length >= 3) {
1295
1253
  immediateSearch(searchValue);
1296
1254
  }
1297
- } else if (event.key === 'Escape') {
1255
+
1256
+ setIsSearchFocused(false);
1257
+ } else if (event.key === 'Escape' && setSearchValue) {
1298
1258
  setSearchValue('');
1259
+ setIsSearchFocused(false);
1299
1260
  }
1300
- };
1261
+ }, [searchValue, immediateSearch, setIsSearchFocused, setSearchValue]);
1262
+ };
1263
+
1264
+ var LuxityMobileHeader = function LuxityMobileHeader(_ref) {
1265
+ var logoSrc = _ref.logoSrc,
1266
+ menuIcon = _ref.menuIcon,
1267
+ inputSearchIcon = _ref.inputSearchIcon,
1268
+ onCartClick = _ref.onCartClick,
1269
+ cartIcon = _ref.cartIcon,
1270
+ cartCount = _ref.cartCount,
1271
+ closeIcon = _ref.closeIcon,
1272
+ accountIcon = _ref.accountIcon,
1273
+ saleIcon = _ref.saleIcon,
1274
+ orderIcon = _ref.orderIcon,
1275
+ accordionIcon = _ref.accordionIcon,
1276
+ backIcon = _ref.backIcon,
1277
+ productsUrl = _ref.productsUrl,
1278
+ stores = _ref.stores,
1279
+ categoryElements = _ref.categoryElements,
1280
+ onAccountClick = _ref.onAccountClick,
1281
+ onDashboardClick = _ref.onDashboardClick,
1282
+ onContactUsClick = _ref.onContactUsClick,
1283
+ onOurStoryClick = _ref.onOurStoryClick,
1284
+ _ref$onBlogClick = _ref.onBlogClick,
1285
+ onBlogClick = _ref$onBlogClick === void 0 ? undefined : _ref$onBlogClick,
1286
+ bugReportLink = _ref.bugReportLink,
1287
+ onSellToUsClick = _ref.onSellToUsClick,
1288
+ onLogoClick = _ref.onLogoClick,
1289
+ onLuxityShopClick = _ref.onLuxityShopClick,
1290
+ endpoint = _ref.endpoint,
1291
+ initialSearchData = _ref.initialSearchData,
1292
+ onSearchSubmit = _ref.onSearchSubmit,
1293
+ onProductIdsReceived = _ref.onProductIdsReceived,
1294
+ onLogoutClick = _ref.onLogoutClick,
1295
+ onInterestClick = _ref.onInterestClick,
1296
+ onAddressClick = _ref.onAddressClick,
1297
+ onCouponsClick = _ref.onCouponsClick,
1298
+ onEditProfileClick = _ref.onEditProfileClick,
1299
+ onCurrentOrdersClick = _ref.onCurrentOrdersClick,
1300
+ onPastOrdersClick = _ref.onPastOrdersClick,
1301
+ onSubmissionsClick = _ref.onSubmissionsClick,
1302
+ onPastSalesClick = _ref.onPastSalesClick,
1303
+ onPaidOutClick = _ref.onPaidOutClick,
1304
+ currency = _ref.currency,
1305
+ currencySymbol = _ref.currencySymbol,
1306
+ currencyOptions = _ref.currencyOptions,
1307
+ onCurrencyChange = _ref.onCurrencyChange,
1308
+ isCurrencySelectionDisabled = _ref.isCurrencySelectionDisabled,
1309
+ tooltipContent = _ref.tooltipContent,
1310
+ LinkComponent = _ref.LinkComponent,
1311
+ shop = _ref.shop,
1312
+ app = _ref.app,
1313
+ categoryConfig = _ref.categoryConfig;
1314
+
1315
+ var _useSearch = useSearch({
1316
+ endpoint: endpoint,
1317
+ onProductIdsReceived: onProductIdsReceived,
1318
+ currency: currency
1319
+ }),
1320
+ fetchInitialSearchData = _useSearch.fetchInitialSearchData,
1321
+ createDebouncedSearch = _useSearch.createDebouncedSearch,
1322
+ createImmediateSearch = _useSearch.createImmediateSearch;
1323
+
1324
+ var _useState = React.useState(''),
1325
+ _useState2 = _slicedToArray(_useState, 2),
1326
+ searchValue = _useState2[0],
1327
+ setSearchValue = _useState2[1];
1328
+
1329
+ var _useState3 = React.useState(false),
1330
+ _useState4 = _slicedToArray(_useState3, 2),
1331
+ showSearchBar = _useState4[0],
1332
+ setShowSearchbar = _useState4[1];
1333
+
1334
+ var _useState5 = React.useState(false),
1335
+ _useState6 = _slicedToArray(_useState5, 2),
1336
+ showSideNav = _useState6[0],
1337
+ setShowSideNav = _useState6[1];
1338
+
1339
+ var _useState7 = React.useState({
1340
+ brands: [],
1341
+ products: []
1342
+ }),
1343
+ _useState8 = _slicedToArray(_useState7, 2),
1344
+ searchResults = _useState8[0],
1345
+ setSearchResults = _useState8[1];
1346
+
1347
+ var _useState9 = React.useState({
1348
+ brands: [],
1349
+ products: []
1350
+ }),
1351
+ _useState10 = _slicedToArray(_useState9, 2),
1352
+ cachedResults = _useState10[0],
1353
+ setCachedResults = _useState10[1];
1354
+
1355
+ var _useState11 = React.useState(false),
1356
+ _useState12 = _slicedToArray(_useState11, 2),
1357
+ isSearchFocused = _useState12[0],
1358
+ setIsSearchFocused = _useState12[1];
1359
+
1360
+ var _useState13 = React.useState({
1361
+ trending_brands: [],
1362
+ latest_products: []
1363
+ }),
1364
+ _useState14 = _slicedToArray(_useState13, 2),
1365
+ initialSearchView = _useState14[0],
1366
+ setInitialSearchView = _useState14[1];
1367
+
1368
+ var searchResultsRef = React.useRef(null);
1369
+ var searchInputRef = React.useRef(null);
1370
+ var debouncedSearch = createDebouncedSearch(function (results) {
1371
+ setSearchResults(results);
1372
+ setCachedResults(results);
1373
+ });
1374
+ var immediateSearch = createImmediateSearch(setSearchValue, setSearchResults, onSearchSubmit);
1375
+ var handleChange = useSearchInputChange(setSearchValue, setIsSearchFocused, debouncedSearch, setSearchResults, setCachedResults);
1376
+ var handleKeyDown = useSearchInputKeyDown(searchValue, immediateSearch, setIsSearchFocused, setSearchValue);
1377
+ React.useMemo(function () {
1378
+ if (!initialSearchData) {
1379
+ return;
1380
+ }
1381
+
1382
+ fetchInitialSearchData(initialSearchData, setInitialSearchView);
1383
+ }, [initialSearchData, fetchInitialSearchData]);
1384
+ useSearchClickOutside(searchResultsRef, searchResults, setCachedResults, setIsSearchFocused, setSearchResults);
1385
+ var handleSearchFocus = useSearchInputFocus(searchValue, setIsSearchFocused, cachedResults, setSearchResults);
1386
+ React.useEffect(function () {
1387
+ if (showSearchBar && searchInputRef.current) {
1388
+ searchInputRef.current.focus();
1389
+ }
1390
+ }, [showSearchBar]);
1391
+
1301
1392
  var onSearchClick = function onSearchClick() {
1302
1393
  setShowSearchbar(function (prev) {
1303
1394
  return !prev;
1304
1395
  });
1305
1396
  setSearchValue('');
1397
+ setIsSearchFocused(!showSearchBar);
1398
+
1399
+ if (showSearchBar) {
1400
+ setSearchResults({
1401
+ brands: [],
1402
+ products: []
1403
+ });
1404
+ }
1306
1405
  };
1406
+
1307
1407
  var onMenuClick = function onMenuClick() {
1308
1408
  setShowSideNav(function (prev) {
1309
1409
  return !prev;
1310
1410
  });
1311
1411
  };
1412
+
1312
1413
  var handleClick = function handleClick(callback) {
1313
1414
  callback();
1314
1415
  setShowSideNav(false);
1315
1416
  };
1417
+
1316
1418
  var handleDashboardClick = function handleDashboardClick() {
1317
1419
  return handleClick(onDashboardClick);
1318
1420
  };
1421
+
1319
1422
  var handleSellToUsClick = function handleSellToUsClick() {
1320
1423
  return handleClick(onSellToUsClick);
1321
1424
  };
1425
+
1322
1426
  var handleCartClick = function handleCartClick() {
1323
1427
  return handleClick(onCartClick);
1324
1428
  };
1429
+
1325
1430
  var handleLuxityShopClick = function handleLuxityShopClick() {
1326
1431
  return handleClick(onLuxityShopClick);
1327
1432
  };
1433
+
1328
1434
  var handleLogoutClick = function handleLogoutClick() {
1329
1435
  return handleClick(onLogoutClick);
1330
1436
  };
1437
+
1331
1438
  var handleInterestClick = function handleInterestClick() {
1332
1439
  return handleClick(onInterestClick);
1333
1440
  };
1441
+
1334
1442
  var handleAddressClick = function handleAddressClick() {
1335
1443
  return handleClick(onAddressClick);
1336
1444
  };
1445
+
1337
1446
  var handleCouponsClick = function handleCouponsClick() {
1338
1447
  return handleClick(onCouponsClick);
1339
1448
  };
1449
+
1340
1450
  var handleEditProfileClick = function handleEditProfileClick() {
1341
1451
  return handleClick(onEditProfileClick);
1342
1452
  };
1453
+
1343
1454
  var handleCurrentOrdersClick = function handleCurrentOrdersClick() {
1344
1455
  return handleClick(onCurrentOrdersClick);
1345
1456
  };
1457
+
1346
1458
  var handlePastOrdersClick = function handlePastOrdersClick() {
1347
1459
  return handleClick(onPastOrdersClick);
1348
1460
  };
1461
+
1349
1462
  var handlePastSalesClick = function handlePastSalesClick() {
1350
1463
  return handleClick(onPastSalesClick);
1351
1464
  };
1465
+
1352
1466
  var handlePaidOutClick = function handlePaidOutClick() {
1353
1467
  return handleClick(onPaidOutClick);
1354
1468
  };
1469
+
1355
1470
  var handleSubmissionsClick = function handleSubmissionsClick() {
1356
1471
  return handleClick(onSubmissionsClick);
1357
1472
  };
1473
+
1358
1474
  var handleAccountClick = function handleAccountClick() {
1359
1475
  return handleClick(onAccountClick);
1360
1476
  };
1477
+
1361
1478
  var handleContactUsClick = function handleContactUsClick() {
1362
1479
  return handleClick(onContactUsClick);
1363
1480
  };
1481
+
1364
1482
  var handleOurStoryClick = function handleOurStoryClick() {
1365
1483
  return handleClick(onOurStoryClick);
1366
1484
  };
1367
- var handleBlogClick = function handleBlogClick() {
1485
+
1486
+ var handleBlogClick = onBlogClick ? function () {
1368
1487
  return handleClick(onBlogClick);
1369
- };
1488
+ } : undefined;
1370
1489
  return /*#__PURE__*/React__default.createElement(React.Fragment, null, /*#__PURE__*/React__default.createElement("div", {
1371
1490
  className: "navbar navbar__mobile-wrapper"
1372
1491
  }, /*#__PURE__*/React__default.createElement("div", {
@@ -1387,7 +1506,8 @@
1387
1506
  className: "navbar__logo"
1388
1507
  }, /*#__PURE__*/React__default.createElement("img", {
1389
1508
  src: logoSrc,
1390
- alt: "luxity-logo"
1509
+ alt: "luxity-logo",
1510
+ loading: "eager"
1391
1511
  }))), /*#__PURE__*/React__default.createElement("div", {
1392
1512
  className: "navbar__icons-wrapper"
1393
1513
  }, /*#__PURE__*/React__default.createElement("div", {
@@ -1418,18 +1538,14 @@
1418
1538
  }, /*#__PURE__*/React__default.createElement("div", {
1419
1539
  className: "navbar__product-search"
1420
1540
  }, /*#__PURE__*/React__default.createElement("input", {
1541
+ ref: searchInputRef,
1421
1542
  className: "navbar__form-input",
1422
1543
  type: "text",
1423
1544
  placeholder: "Search for items and designs",
1424
1545
  value: searchValue,
1425
1546
  onChange: handleChange,
1426
- onKeyDown: handleKeyDown
1427
- }), searchLoading && /*#__PURE__*/React__default.createElement(BeatLoader, {
1428
- color: "#000000",
1429
- loading: searchLoading,
1430
- size: 5,
1431
- "aria-label": "Loading Spinner",
1432
- "data-testid": "loader"
1547
+ onKeyDown: handleKeyDown,
1548
+ onFocus: handleSearchFocus
1433
1549
  })), /*#__PURE__*/React__default.createElement("button", {
1434
1550
  type: "button",
1435
1551
  onClick: onSearchClick
@@ -1439,14 +1555,24 @@
1439
1555
  className: "navbar__input-close-icon"
1440
1556
  })))), /*#__PURE__*/React__default.createElement(SearchResults, {
1441
1557
  searchValue: searchValue,
1442
- searchLoading: searchLoading,
1443
1558
  searchResults: searchResults,
1444
1559
  onViewAll: function onViewAll() {
1445
1560
  onSearchSubmit(searchValue);
1446
1561
  setSearchValue('');
1562
+ setSearchResults({
1563
+ brands: [],
1564
+ products: []
1565
+ });
1566
+ setIsSearchFocused(false);
1447
1567
  },
1448
1568
  onSearchSubmit: onSearchSubmit,
1449
- setSearchValue: setSearchValue
1569
+ setSearchValue: setSearchValue,
1570
+ searchResultsRef: searchResultsRef,
1571
+ initialSearchData: initialSearchView,
1572
+ isSearchFocused: isSearchFocused,
1573
+ setIsSearchFocused: setIsSearchFocused,
1574
+ currency: currency,
1575
+ currencySymbol: currencySymbol
1450
1576
  }), shop && /*#__PURE__*/React__default.createElement(LuxitySideNav, {
1451
1577
  accordionIcon: accordionIcon,
1452
1578
  logoSrc: logoSrc,
@@ -1464,13 +1590,13 @@
1464
1590
  showSideNav: showSideNav,
1465
1591
  onMenuClick: onMenuClick,
1466
1592
  endpoint: endpoint,
1467
- menuData: menuData,
1468
1593
  currency: currency,
1469
1594
  currencyOptions: currencyOptions,
1470
1595
  onCurrencyChange: onCurrencyChange,
1471
1596
  isCurrencySelectionDisabled: isCurrencySelectionDisabled,
1472
1597
  tooltipContent: tooltipContent,
1473
- LinkComponent: LinkComponent
1598
+ LinkComponent: LinkComponent,
1599
+ categoryConfig: categoryConfig
1474
1600
  }), app && /*#__PURE__*/React__default.createElement(LuxityAppSideNav, {
1475
1601
  accordionIcon: accordionIcon,
1476
1602
  closeIcon: closeIcon,