@bonlineza/luxity-lib 2.36.1-uk-platform.1 → 2.36.2

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 (94) 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 +1508 -929
  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 +1463 -913
  24. package/InterestsSubheading.js +10 -5
  25. package/InvertedTextButton.js +63 -27
  26. package/LuxityAppSideNav.js +21 -18
  27. package/LuxityDesktopHeader.js +451 -298
  28. package/LuxityFooter.js +321 -430
  29. package/LuxityGraphQLDropdownSelector.js +1540 -945
  30. package/LuxityGraphQLMultiselector.js +321 -167
  31. package/LuxityMobileHeader.js +544 -353
  32. package/LuxityPageReady.js +136 -74
  33. package/LuxityProductInterestItem.js +175 -97
  34. package/LuxitySideNav.js +244 -176
  35. package/MaterialSelector.js +1547 -951
  36. package/ModelSelector.js +1547 -951
  37. package/NotificationDropDown.js +218 -118
  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/TestComponent.js +15 -0
  53. package/TextButton.js +58 -26
  54. package/Tooltip.js +39 -17
  55. package/Tracking.js +1 -0
  56. package/WrapperButton.js +43 -20
  57. package/build/CountryCodeSelect/index.js +18 -0
  58. package/build/ReactSelectWrapper/index.js +34 -0
  59. package/build/bundle.css +1 -1
  60. package/build/bundle.js +2616 -1974
  61. package/package.json +1 -1
  62. package/postcss.config.js +6 -0
  63. package/svg/Accessories.js +13 -6
  64. package/svg/Account.js +13 -6
  65. package/svg/Add.js +13 -6
  66. package/svg/ArrowRight.js +13 -6
  67. package/svg/Bags.js +13 -6
  68. package/svg/BurgerMenu.js +13 -6
  69. package/svg/Calendar.js +13 -6
  70. package/svg/CalendarCircled.js +13 -6
  71. package/svg/CheckCircled.js +13 -6
  72. package/svg/Close.js +13 -6
  73. package/svg/Clothing.js +13 -6
  74. package/svg/Dot.js +13 -6
  75. package/svg/Edit.js +13 -6
  76. package/svg/Eye.js +13 -6
  77. package/svg/FileAttach.js +13 -6
  78. package/svg/FileAttachCircled.js +13 -6
  79. package/svg/LightBulb.js +13 -6
  80. package/svg/Logo.js +13 -6
  81. package/svg/LuxityMenu.js +13 -6
  82. package/svg/Minus.js +13 -6
  83. package/svg/MobileAvatar.js +13 -6
  84. package/svg/MyOrder.js +13 -6
  85. package/svg/MyPayment.js +13 -6
  86. package/svg/MyProfile.js +14 -8
  87. package/svg/MySale.js +13 -6
  88. package/svg/Notification.js +13 -6
  89. package/svg/PointerDown.js +13 -6
  90. package/svg/Search.js +13 -6
  91. package/svg/Shoes.js +13 -6
  92. package/svg/SvgWrapper.js +7 -3
  93. package/svg/Trash.js +13 -6
  94. package/svg/Watches.js +13 -6
@@ -8,140 +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);
80
+
81
+ function _slicedToArray(arr, i) {
82
+ return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();
106
83
  }
107
- function _toPropertyKey(t) {
108
- var i = _toPrimitive(t, "string");
109
- return "symbol" == typeof i ? i : i + "";
84
+
85
+ function _arrayWithHoles(arr) {
86
+ if (Array.isArray(arr)) return arr;
110
87
  }
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;
88
+
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;
104
+ }
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;
113
+ }
116
114
  }
115
+
116
+ return _arr;
117
+ }
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);
126
+ }
127
+
128
+ function _arrayLikeToArray(arr, len) {
129
+ if (len == null || len > arr.length) len = arr.length;
130
+
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.");
117
138
  }
118
139
 
119
140
  var LuxityAppSideNav = function LuxityAppSideNav(_ref) {
120
141
  var closeIcon = _ref.closeIcon,
121
- accountIcon = _ref.accountIcon,
122
- orderIcon = _ref.orderIcon,
123
- saleIcon = _ref.saleIcon,
124
- onDashboardClick = _ref.onDashboardClick,
125
- onLogoutClick = _ref.onLogoutClick,
126
- bugReportLink = _ref.bugReportLink,
127
- onLuxityShopClick = _ref.onLuxityShopClick,
128
- onInterestClick = _ref.onInterestClick,
129
- onAddressClick = _ref.onAddressClick,
130
- onCouponsClick = _ref.onCouponsClick,
131
- onEditProfileClick = _ref.onEditProfileClick,
132
- onCurrentOrdersClick = _ref.onCurrentOrdersClick,
133
- onPastOrdersClick = _ref.onPastOrdersClick,
134
- onSubmissionsClick = _ref.onSubmissionsClick,
135
- onPastSalesClick = _ref.onPastSalesClick,
136
- onPaidOutClick = _ref.onPaidOutClick,
137
- showSideNav = _ref.showSideNav,
138
- 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
+
139
161
  var onCloseSideNav = function onCloseSideNav(e) {
140
162
  onMenuClick();
163
+
141
164
  if (e.key === 'Enter') {
142
165
  e.preventDefault();
143
166
  }
144
167
  };
168
+
145
169
  return /*#__PURE__*/React__default.createElement("div", {
146
170
  className: "side-nav"
147
171
  }, /*#__PURE__*/React__default.createElement("div", {
@@ -299,9 +323,9 @@
299
323
 
300
324
  var StoresDropdown = function StoresDropdown(_ref) {
301
325
  var backIcon = _ref.backIcon,
302
- onBackClick = _ref.onBackClick,
303
- stores = _ref.stores,
304
- onContactUsClick = _ref.onContactUsClick;
326
+ onBackClick = _ref.onBackClick,
327
+ stores = _ref.stores,
328
+ onContactUsClick = _ref.onContactUsClick;
305
329
  return /*#__PURE__*/React__default.createElement("div", {
306
330
  className: "side-nav__sub-menu"
307
331
  }, /*#__PURE__*/React__default.createElement("button", {
@@ -341,19 +365,20 @@
341
365
 
342
366
  var BrandsDropDown = function BrandsDropDown(_ref) {
343
367
  var subMenuOpen = _ref.subMenuOpen,
344
- onBackClick = _ref.onBackClick,
345
- onCloseSideNav = _ref.onCloseSideNav,
346
- backIcon = _ref.backIcon,
347
- subMenuCategoryTitle = _ref.subMenuCategoryTitle,
348
- productUrl = _ref.productUrl,
349
- categoryElements = _ref.categoryElements,
350
- subMenuBrandsTitle = _ref.subMenuBrandsTitle,
351
- _ref$brandsList = _ref.brandsList,
352
- brandsList = _ref$brandsList === void 0 ? [] : _ref$brandsList,
353
- categorySlug = _ref.categorySlug,
354
- isLoading = _ref.isLoading,
355
- hasError = _ref.hasError,
356
- 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
+
357
382
  var handleLinkClick = function handleLinkClick(event) {
358
383
  event.preventDefault();
359
384
  var href = event.currentTarget.getAttribute('href');
@@ -361,6 +386,7 @@
361
386
  onCloseSideNav();
362
387
  window.location.href = href;
363
388
  };
389
+
364
390
  return /*#__PURE__*/React__default.createElement("div", {
365
391
  className: "side-nav__content ".concat(subMenuOpen ? '' : 'side-nav__content--hidden')
366
392
  }, hasError ? /*#__PURE__*/React__default.createElement("div", {
@@ -407,6 +433,7 @@
407
433
  className: "side-nav__element"
408
434
  }, "All Brands"), !!brandsList.length && brandsList.map(function (brand) {
409
435
  return /*#__PURE__*/React__default.createElement(LinkComponent, {
436
+ key: brand.slug,
410
437
  href: "".concat(productUrl, "/").concat(categorySlug === 'new' ? 'brands' : categorySlug, "/").concat(brand.slug),
411
438
  onClick: handleLinkClick,
412
439
  className: "side-nav__element"
@@ -416,14 +443,15 @@
416
443
 
417
444
  var removeCategoryByName = function removeCategoryByName(categories, name) {
418
445
  var _categories$filter;
446
+
419
447
  return (_categories$filter = categories === null || categories === void 0 ? void 0 : categories.filter(function (category) {
420
448
  return category.name.toLowerCase() !== name.toLowerCase();
421
449
  })) !== null && _categories$filter !== void 0 ? _categories$filter : [];
422
450
  };
423
451
 
424
452
  var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5;
425
-
426
453
  /* position relative is required for the Body element to be positioned correctly */
454
+
427
455
  var relativeInlineStyle = styled.css(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n position: relative;\n"])));
428
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"])));
429
457
  var getTopMiddleArrowAfterStyle = function getTopMiddleArrowAfterStyle(props) {
@@ -437,31 +465,40 @@
437
465
  };
438
466
 
439
467
  var _templateObject$1;
468
+
440
469
  var getBodyStyle = function getBodyStyle() {
441
470
  var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
442
471
  var _props$toolTipPositio = props.toolTipPosition,
443
- toolTipPosition = _props$toolTipPositio === void 0 ? '' : _props$toolTipPositio;
472
+ toolTipPosition = _props$toolTipPositio === void 0 ? '' : _props$toolTipPositio;
473
+
444
474
  switch (toolTipPosition) {
445
475
  case 'top':
446
476
  return topMiddleBodyStyle;
477
+
447
478
  case 'bottom':
448
479
  return getBottomMiddleBodyStyle(props);
480
+
449
481
  default:
450
482
  return null;
451
483
  }
452
484
  };
485
+
453
486
  var getAfterStyling = function getAfterStyling() {
454
487
  var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
455
488
  var toolTipPosition = props.toolTipPosition;
489
+
456
490
  switch (toolTipPosition) {
457
491
  case 'top':
458
492
  return getTopMiddleArrowAfterStyle(props);
493
+
459
494
  case 'bottom':
460
495
  return getBottomMiddleArrowAfterStyle(props);
496
+
461
497
  default:
462
498
  return '';
463
499
  }
464
500
  };
501
+
465
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) {
466
503
  return props.bodyWidth;
467
504
  }, function (props) {
@@ -541,12 +578,12 @@
541
578
 
542
579
  var Tooltip = function Tooltip(_ref) {
543
580
  var children = _ref.children,
544
- toolTipText = _ref.toolTipText,
545
- toolTipPosition = _ref.toolTipPosition,
546
- bodyWidth = _ref.bodyWidth,
547
- apexWidth = _ref.apexWidth,
548
- containerClassName = _ref.containerClassName,
549
- 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;
550
587
  return /*#__PURE__*/React__default.createElement(Container, {
551
588
  className: containerClassName
552
589
  }, children, /*#__PURE__*/React__default.createElement(Body, {
@@ -556,6 +593,7 @@
556
593
  className: bodyClassName
557
594
  }, toolTipText));
558
595
  };
596
+
559
597
  Tooltip.defaultProps = {
560
598
  children: null,
561
599
  toolTipText: '',
@@ -569,21 +607,25 @@
569
607
 
570
608
  var CurrencySelect = function CurrencySelect(_ref) {
571
609
  var currency = _ref.currency,
572
- currencyOptions = _ref.currencyOptions,
573
- onCurrencyChange = _ref.onCurrencyChange,
574
- _ref$isCurrencySelect = _ref.isCurrencySelectionDisabled,
575
- isCurrencySelectionDisabled = _ref$isCurrencySelect === void 0 ? false : _ref$isCurrencySelect,
576
- _ref$tooltipContent = _ref.tooltipContent,
577
- 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
+
578
617
  if (!currencyOptions || currencyOptions.length === 0) {
579
618
  return null;
580
619
  }
620
+
581
621
  var selectedOption = currencyOptions.find(function (opt) {
582
622
  return opt.value === currency;
583
623
  });
624
+
584
625
  if (!selectedOption) {
585
626
  return null;
586
627
  }
628
+
587
629
  return /*#__PURE__*/React__default.createElement(Tooltip$1, {
588
630
  toolTipText: isCurrencySelectionDisabled ? tooltipContent : '',
589
631
  toolTipPosition: "bottom",
@@ -612,70 +654,79 @@
612
654
 
613
655
  var LuxitySideNav = function LuxitySideNav(_ref) {
614
656
  var accordionIcon = _ref.accordionIcon,
615
- closeIcon = _ref.closeIcon,
616
- backIcon = _ref.backIcon,
617
- productUrl = _ref.productUrl,
618
- onAccountClick = _ref.onAccountClick,
619
- onCartClick = _ref.onCartClick,
620
- onContactUsClick = _ref.onContactUsClick,
621
- onOurStoryClick = _ref.onOurStoryClick,
622
- _ref$onBlogClick = _ref.onBlogClick,
623
- onBlogClick = _ref$onBlogClick === void 0 ? undefined : _ref$onBlogClick,
624
- onSellToUsClick = _ref.onSellToUsClick,
625
- stores = _ref.stores,
626
- categoryElements = _ref.categoryElements,
627
- showSideNav = _ref.showSideNav,
628
- onMenuClick = _ref.onMenuClick,
629
- menuData = _ref.menuData,
630
- currency = _ref.currency,
631
- currencyOptions = _ref.currencyOptions,
632
- onCurrencyChange = _ref.onCurrencyChange,
633
- isCurrencySelectionDisabled = _ref.isCurrencySelectionDisabled,
634
- tooltipContent = _ref.tooltipContent,
635
- LinkComponent = _ref.LinkComponent,
636
- categoryConfig = _ref.categoryConfig;
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
+
637
678
  var _useState = React.useState(false),
638
- _useState2 = _slicedToArray(_useState, 2),
639
- subMenuOpen = _useState2[0],
640
- setSubMenuOpen = _useState2[1];
679
+ _useState2 = _slicedToArray(_useState, 2),
680
+ subMenuOpen = _useState2[0],
681
+ setSubMenuOpen = _useState2[1];
682
+
641
683
  var _useState3 = React.useState(''),
642
- _useState4 = _slicedToArray(_useState3, 2),
643
- displayedSubMenu = _useState4[0],
644
- setDisplayedSubMenu = _useState4[1];
684
+ _useState4 = _slicedToArray(_useState3, 2),
685
+ displayedSubMenu = _useState4[0],
686
+ setDisplayedSubMenu = _useState4[1];
687
+
645
688
  var _useState5 = React.useState(false),
646
- _useState6 = _slicedToArray(_useState5, 2),
647
- loading = _useState6[0],
648
- setLoading = _useState6[1];
689
+ _useState6 = _slicedToArray(_useState5, 2),
690
+ loading = _useState6[0],
691
+ setLoading = _useState6[1];
692
+
649
693
  var _useState7 = React.useState({}),
650
- _useState8 = _slicedToArray(_useState7, 2),
651
- dropdownData = _useState8[0],
652
- setDropdownData = _useState8[1];
694
+ _useState8 = _slicedToArray(_useState7, 2),
695
+ dropdownData = _useState8[0],
696
+ setDropdownData = _useState8[1];
697
+
653
698
  var _useState9 = React.useState(false),
654
- _useState10 = _slicedToArray(_useState9, 2),
655
- hasError = _useState10[0],
656
- setHasError = _useState10[1];
699
+ _useState10 = _slicedToArray(_useState9, 2),
700
+ hasError = _useState10[0],
701
+ setHasError = _useState10[1];
702
+
657
703
  var onSubMenuClick = function onSubMenuClick(subMenu) {
658
704
  setSubMenuOpen(function (prev) {
659
705
  return !prev;
660
706
  });
661
707
  setDisplayedSubMenu(subMenu);
662
708
  };
709
+
663
710
  var onStoresClick = function onStoresClick() {
664
711
  setSubMenuOpen(false);
665
712
  setDisplayedSubMenu('stores');
666
713
  };
714
+
667
715
  var onBackClick = function onBackClick() {
668
716
  setSubMenuOpen(false);
669
717
  setDisplayedSubMenu('');
670
718
  };
719
+
671
720
  var onCloseSideNav = function onCloseSideNav(e) {
672
721
  onMenuClick();
673
722
  setSubMenuOpen(false);
674
723
  setDisplayedSubMenu('');
724
+
675
725
  if (e && e.key === 'Enter') {
676
726
  e.preventDefault();
677
727
  }
678
728
  };
729
+
679
730
  function addCategoryToElements(elements, categoryName) {
680
731
  return elements.map(function (element) {
681
732
  return _objectSpread2(_objectSpread2({}, element), {}, {
@@ -683,26 +734,31 @@
683
734
  });
684
735
  });
685
736
  }
737
+
686
738
  React.useMemo(function () {
687
739
  setLoading(true);
688
- axios.get("".concat(menuData)).then(function (_ref2) {
740
+ axios.get("".concat(categoryConfig.menuData)).then(function (_ref2) {
689
741
  var data = _ref2.data;
690
742
  setLoading(false);
691
743
  setDropdownData(data);
692
744
  }).catch(function () {
693
745
  return setHasError(true);
694
746
  });
695
- }, [menuData]);
747
+ }, [categoryConfig.menuData]);
748
+
696
749
  var renderMenuItems = function renderMenuItems() {
697
750
  return categoryConfig.categories.map(function (category) {
698
751
  var title = category.title,
699
- categorySlug = category.categorySlug;
752
+ categorySlug = category.categorySlug;
700
753
  var slug = categorySlug;
754
+
701
755
  if (categorySlug === 'brands') {
702
756
  slug = 'new';
703
757
  }
758
+
704
759
  return /*#__PURE__*/React__default.createElement("div", {
705
- className: "side-nav__menu-item"
760
+ className: "side-nav__menu-item",
761
+ key: slug
706
762
  }, /*#__PURE__*/React__default.createElement("button", {
707
763
  type: "button",
708
764
  className: "side-nav__menu-title-wrapper",
@@ -718,14 +774,16 @@
718
774
  })));
719
775
  });
720
776
  };
777
+
721
778
  var renderDropdownLinks = function renderDropdownLinks() {
722
779
  return categoryConfig.categories.map(function (category) {
723
780
  var categorySlug = category.categorySlug,
724
- categoryName = category.categoryName,
725
- elementsKey = category.elementsKey,
726
- subCategoryElementsKey = category.subCategoryElementsKey,
727
- styleElementsKey = category.styleElementsKey;
781
+ categoryName = category.categoryName,
782
+ elementsKey = category.elementsKey,
783
+ subCategoryElementsKey = category.subCategoryElementsKey,
784
+ styleElementsKey = category.styleElementsKey;
728
785
  var categoryElementsProcessed = categoryElements;
786
+
729
787
  if (subCategoryElementsKey && dropdownData[subCategoryElementsKey]) {
730
788
  // show subcategory elements
731
789
  categoryElementsProcessed = removeCategoryByName(dropdownData[subCategoryElementsKey], categoryName);
@@ -734,15 +792,21 @@
734
792
  } else {
735
793
  categoryElementsProcessed = addCategoryToElements(categoryElementsProcessed, categorySlug);
736
794
  }
795
+
737
796
  var subMenuTitle = 'Brands';
797
+
738
798
  if (categorySlug !== 'brands') {
739
799
  subMenuTitle = "".concat(categoryName, " Brands");
740
800
  }
801
+
741
802
  var subMenu = categorySlug;
803
+
742
804
  if (subMenu === 'brands') {
743
805
  subMenu = 'new';
744
806
  }
807
+
745
808
  return /*#__PURE__*/React__default.createElement(BrandsDropDown, {
809
+ key: categorySlug,
746
810
  subMenuOpen: subMenuOpen && displayedSubMenu === subMenu,
747
811
  onBackClick: onBackClick,
748
812
  backIcon: backIcon,
@@ -759,6 +823,7 @@
759
823
  });
760
824
  });
761
825
  };
826
+
762
827
  return /*#__PURE__*/React__default.createElement("div", {
763
828
  className: "side-nav"
764
829
  }, /*#__PURE__*/React__default.createElement("div", {
@@ -780,7 +845,8 @@
780
845
  })), /*#__PURE__*/React__default.createElement("div", {
781
846
  className: "side-nav__menu-items-wrapper"
782
847
  }, renderMenuItems(), !!stores.length && /*#__PURE__*/React__default.createElement("div", {
783
- className: "side-nav__menu-item"
848
+ className: "side-nav__menu-item",
849
+ key: "stores"
784
850
  }, /*#__PURE__*/React__default.createElement("button", {
785
851
  type: "button",
786
852
  className: "side-nav__menu-title-wrapper",
@@ -792,42 +858,49 @@
792
858
  alt: "accordion-icon",
793
859
  className: "side-nav__accordion-icon"
794
860
  }))), /*#__PURE__*/React__default.createElement("div", {
795
- className: "side-nav__menu-item"
861
+ className: "side-nav__menu-item",
862
+ key: "sell-to-us"
796
863
  }, /*#__PURE__*/React__default.createElement("button", {
797
864
  type: "button",
798
865
  className: "side-nav__block-button",
799
866
  onClick: onSellToUsClick
800
867
  }, "Sell To Us")), /*#__PURE__*/React__default.createElement("div", {
801
- className: "side-nav__menu-item"
868
+ className: "side-nav__menu-item",
869
+ key: "our-story"
802
870
  }, /*#__PURE__*/React__default.createElement("button", {
803
871
  type: "button",
804
872
  className: "side-nav__sub-link",
805
873
  onClick: onOurStoryClick
806
874
  }, "Our Story")), typeof onBlogClick === 'function' && /*#__PURE__*/React__default.createElement("div", {
807
- className: "side-nav__menu-item"
875
+ className: "side-nav__menu-item",
876
+ key: "blog"
808
877
  }, /*#__PURE__*/React__default.createElement("button", {
809
878
  type: "button",
810
879
  className: "side-nav__sub-link",
811
880
  onClick: onBlogClick
812
881
  }, "Blog")), /*#__PURE__*/React__default.createElement("div", {
813
- className: "side-nav__menu-item"
882
+ className: "side-nav__menu-item",
883
+ key: "contact-us"
814
884
  }, /*#__PURE__*/React__default.createElement("button", {
815
885
  type: "button",
816
886
  className: "side-nav__sub-link",
817
887
  onClick: onContactUsClick
818
888
  }, "Contact Us")), /*#__PURE__*/React__default.createElement("div", {
819
- className: "side-nav__menu-item"
889
+ className: "side-nav__menu-item",
890
+ key: "my-account"
820
891
  }, /*#__PURE__*/React__default.createElement("button", {
821
892
  type: "button",
822
893
  className: "side-nav__sub-link",
823
894
  onClick: onAccountClick
824
895
  }, "My Account")), /*#__PURE__*/React__default.createElement("div", {
825
- className: "side-nav__menu-item"
896
+ className: "side-nav__menu-item",
897
+ key: "my-cart"
826
898
  }, /*#__PURE__*/React__default.createElement("button", {
827
899
  type: "button",
828
900
  className: "side-nav__sub-link",
829
901
  onClick: onCartClick
830
902
  }, "My Cart")), /*#__PURE__*/React__default.createElement(CurrencySelect, {
903
+ key: "currency",
831
904
  currency: currency,
832
905
  currencyOptions: currencyOptions,
833
906
  onCurrencyChange: onCurrencyChange,
@@ -836,37 +909,39 @@
836
909
  }))), renderDropdownLinks(), displayedSubMenu === 'stores' && /*#__PURE__*/React__default.createElement("div", {
837
910
  className: "side-nav__content"
838
911
  }, /*#__PURE__*/React__default.createElement(StoresDropdown, {
912
+ key: "stores",
839
913
  backIcon: backIcon,
840
914
  onBackClick: onBackClick,
841
915
  stores: stores,
842
916
  onContactUsClick: onContactUsClick
843
917
  })));
844
918
  };
845
- LuxitySideNav.defaultProps = {
846
- onBlogClick: undefined
847
- };
848
919
 
849
920
  var SearchResults = function SearchResults(_ref) {
850
921
  var _searchResults$brands, _searchResults$produc, _searchResults$brands2, _searchResults$produc2, _initialSearchData$tr, _initialSearchData$la, _limitBrands, _limitBrands2, _initialSearchData$la2, _searchResults$produc3;
922
+
851
923
  var searchValue = _ref.searchValue,
852
- searchResults = _ref.searchResults,
853
- onViewAll = _ref.onViewAll,
854
- searchResultsRef = _ref.searchResultsRef,
855
- onSearchSubmit = _ref.onSearchSubmit,
856
- setSearchValue = _ref.setSearchValue,
857
- initialSearchData = _ref.initialSearchData,
858
- isSearchFocused = _ref.isSearchFocused,
859
- setIsSearchFocused = _ref.setIsSearchFocused,
860
- currency = _ref.currency,
861
- currencySymbol = _ref.currencySymbol;
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
+
862
935
  var _useState = React.useState(false),
863
- _useState2 = _slicedToArray(_useState, 2),
864
- isMobile = _useState2[0],
865
- setIsMobile = _useState2[1];
936
+ _useState2 = _slicedToArray(_useState, 2),
937
+ isMobile = _useState2[0],
938
+ setIsMobile = _useState2[1];
939
+
866
940
  React.useEffect(function () {
867
941
  var checkIfMobile = function checkIfMobile() {
868
942
  setIsMobile(window.innerWidth <= 1024);
869
943
  };
944
+
870
945
  checkIfMobile();
871
946
  window.addEventListener('resize', checkIfMobile);
872
947
  return function () {
@@ -876,12 +951,15 @@
876
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);
877
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;
878
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
+
879
955
  if (!hasResults && !hasInitialData) {
880
956
  return null;
881
957
  }
882
- if (!isSearchFocused && !hasResults) {
958
+
959
+ if (!isSearchFocused) {
883
960
  return null;
884
961
  }
962
+
885
963
  var formatPrice = function formatPrice(price) {
886
964
  var formatter = new Intl.NumberFormat(undefined, {
887
965
  minimumFractionDigits: 0,
@@ -889,6 +967,7 @@
889
967
  });
890
968
  return "".concat(currencySymbol).concat(formatter.format(price));
891
969
  };
970
+
892
971
  var renderProductCard = function renderProductCard(product) {
893
972
  var selectedPrice = product.prices ? product.prices.find(function (p) {
894
973
  return p.currency === currency;
@@ -900,7 +979,7 @@
900
979
  key: product.link,
901
980
  href: product.link,
902
981
  className: "product-card"
903
- }, (product.image_url || product.featured_image) && /*#__PURE__*/React__default.createElement("div", {
982
+ }, product.featured_image && /*#__PURE__*/React__default.createElement("div", {
904
983
  className: "product-card__image-container"
905
984
  }, /*#__PURE__*/React__default.createElement("img", {
906
985
  src: product.featured_image,
@@ -926,15 +1005,19 @@
926
1005
  className: "product-card__condition-label"
927
1006
  }, "Condition:"), product.condition))));
928
1007
  };
1008
+
929
1009
  var getBrandLink = function getBrandLink(brand) {
930
1010
  return "/products/brands/".concat(brand.slug);
931
1011
  };
1012
+
932
1013
  var limitBrands = function limitBrands(brands) {
933
1014
  if (isMobile && brands && brands.length > 4) {
934
1015
  return brands.slice(0, 4);
935
1016
  }
1017
+
936
1018
  return brands;
937
1019
  };
1020
+
938
1021
  return /*#__PURE__*/React__default.createElement("div", {
939
1022
  className: "search-results",
940
1023
  ref: searchResultsRef
@@ -975,6 +1058,7 @@
975
1058
  className: "search-results__view-all-button",
976
1059
  onClick: function onClick() {
977
1060
  onViewAll();
1061
+
978
1062
  if (!shouldShowInitialData) {
979
1063
  onSearchSubmit(searchValue);
980
1064
  setSearchValue('');
@@ -997,18 +1081,21 @@
997
1081
 
998
1082
  var useSearch = function useSearch(_ref) {
999
1083
  var endpoint = _ref.endpoint,
1000
- onProductIdsReceived = _ref.onProductIdsReceived,
1001
- currency = _ref.currency;
1084
+ onProductIdsReceived = _ref.onProductIdsReceived,
1085
+ currency = _ref.currency;
1086
+ var currentSearchRequestToken = React.useRef(null);
1002
1087
  var debounce = React.useCallback(function (func, wait) {
1003
1088
  var timeout;
1004
1089
  return function executedFunction() {
1005
1090
  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
1006
1091
  args[_key] = arguments[_key];
1007
1092
  }
1093
+
1008
1094
  var later = function later() {
1009
1095
  clearTimeout(timeout);
1010
1096
  func.apply(void 0, args);
1011
1097
  };
1098
+
1012
1099
  clearTimeout(timeout);
1013
1100
  timeout = setTimeout(later, wait);
1014
1101
  };
@@ -1027,47 +1114,75 @@
1027
1114
  });
1028
1115
  });
1029
1116
  }, []);
1030
- var performSearch = React.useCallback(function (nextValue, setSearchResults) {
1031
- if (!nextValue || nextValue.trim() === '') {
1117
+ var performSearch = React.useCallback(function (searchQuery, setSearchResults) {
1118
+ if (!searchQuery || searchQuery.trim() === '') {
1032
1119
  setSearchResults({
1033
1120
  brands: [],
1034
1121
  products: [],
1035
1122
  luxity_product_ids: []
1036
1123
  });
1037
1124
  return;
1038
- }
1039
- axios.post(endpoint, searchProducts(nextValue, 3, currency)).then(function (response) {
1040
- var searchResults = response.data.data.luxity_products_serach_results;
1041
- setSearchResults(searchResults);
1042
- if (searchResults && searchResults.luxity_product_ids) {
1043
- onProductIdsReceived(searchResults.luxity_product_ids);
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;
1044
1156
  }
1045
- }).catch(function () {
1046
- setSearchResults({
1047
- brands: [],
1048
- products: [],
1049
- luxity_product_ids: []
1050
- });
1051
1157
  });
1052
1158
  }, [endpoint, currency, onProductIdsReceived]);
1053
1159
  var debouncedSearch = React.useMemo(function () {
1054
- return debounce(function (nextValue, setSearchResults) {
1055
- return performSearch(nextValue, setSearchResults);
1160
+ return debounce(function (searchQuery, setSearchResults) {
1161
+ return performSearch(searchQuery, setSearchResults);
1056
1162
  }, 500);
1057
1163
  }, [debounce, performSearch]);
1058
1164
  var createDebouncedSearch = React.useCallback(function (setSearchResults) {
1059
- return function (nextValue) {
1060
- return debouncedSearch(nextValue, setSearchResults);
1165
+ return function (searchQuery) {
1166
+ return debouncedSearch(searchQuery, setSearchResults);
1061
1167
  };
1062
1168
  }, [debouncedSearch]);
1063
1169
  var createImmediateSearch = React.useCallback(function (setSearchValue, setSearchResults, onSearchSubmit) {
1064
- return function (value) {
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
+
1065
1180
  setSearchValue('');
1066
1181
  setSearchResults({
1067
1182
  brands: [],
1068
1183
  products: []
1069
1184
  });
1070
- onSearchSubmit(value);
1185
+ onSearchSubmit(searchQuery);
1071
1186
  };
1072
1187
  }, []);
1073
1188
  return {
@@ -1077,103 +1192,31 @@
1077
1192
  };
1078
1193
  };
1079
1194
 
1080
- var LuxityMobileHeader = function LuxityMobileHeader(_ref) {
1081
- var logoSrc = _ref.logoSrc,
1082
- menuIcon = _ref.menuIcon,
1083
- inputSearchIcon = _ref.inputSearchIcon,
1084
- onCartClick = _ref.onCartClick,
1085
- cartIcon = _ref.cartIcon,
1086
- cartCount = _ref.cartCount,
1087
- closeIcon = _ref.closeIcon,
1088
- accountIcon = _ref.accountIcon,
1089
- saleIcon = _ref.saleIcon,
1090
- orderIcon = _ref.orderIcon,
1091
- accordionIcon = _ref.accordionIcon,
1092
- backIcon = _ref.backIcon,
1093
- productsUrl = _ref.productsUrl,
1094
- stores = _ref.stores,
1095
- categoryElements = _ref.categoryElements,
1096
- onAccountClick = _ref.onAccountClick,
1097
- onDashboardClick = _ref.onDashboardClick,
1098
- onContactUsClick = _ref.onContactUsClick,
1099
- onOurStoryClick = _ref.onOurStoryClick,
1100
- _ref$onBlogClick = _ref.onBlogClick,
1101
- onBlogClick = _ref$onBlogClick === void 0 ? undefined : _ref$onBlogClick,
1102
- bugReportLink = _ref.bugReportLink,
1103
- onSellToUsClick = _ref.onSellToUsClick,
1104
- onLogoClick = _ref.onLogoClick,
1105
- onLuxityShopClick = _ref.onLuxityShopClick,
1106
- endpoint = _ref.endpoint,
1107
- menuData = _ref.menuData,
1108
- initialSearchData = _ref.initialSearchData,
1109
- onSearchSubmit = _ref.onSearchSubmit,
1110
- onProductIdsReceived = _ref.onProductIdsReceived,
1111
- onLogoutClick = _ref.onLogoutClick,
1112
- onInterestClick = _ref.onInterestClick,
1113
- onAddressClick = _ref.onAddressClick,
1114
- onCouponsClick = _ref.onCouponsClick,
1115
- onEditProfileClick = _ref.onEditProfileClick,
1116
- onCurrentOrdersClick = _ref.onCurrentOrdersClick,
1117
- onPastOrdersClick = _ref.onPastOrdersClick,
1118
- onSubmissionsClick = _ref.onSubmissionsClick,
1119
- onPastSalesClick = _ref.onPastSalesClick,
1120
- onPaidOutClick = _ref.onPaidOutClick,
1121
- currency = _ref.currency,
1122
- currencySymbol = _ref.currencySymbol,
1123
- currencyOptions = _ref.currencyOptions,
1124
- onCurrencyChange = _ref.onCurrencyChange,
1125
- isCurrencySelectionDisabled = _ref.isCurrencySelectionDisabled,
1126
- tooltipContent = _ref.tooltipContent,
1127
- LinkComponent = _ref.LinkComponent,
1128
- shop = _ref.shop,
1129
- app = _ref.app,
1130
- categoryConfig = _ref.categoryConfig;
1131
- var _useSearch = useSearch({
1132
- endpoint: endpoint,
1133
- onProductIdsReceived: onProductIdsReceived,
1134
- currency: currency
1135
- }),
1136
- fetchInitialSearchData = _useSearch.fetchInitialSearchData,
1137
- createDebouncedSearch = _useSearch.createDebouncedSearch,
1138
- createImmediateSearch = _useSearch.createImmediateSearch;
1139
- var _useState = React.useState(''),
1140
- _useState2 = _slicedToArray(_useState, 2),
1141
- searchValue = _useState2[0],
1142
- setSearchValue = _useState2[1];
1143
- var _useState3 = React.useState(false),
1144
- _useState4 = _slicedToArray(_useState3, 2),
1145
- showSearchBar = _useState4[0],
1146
- setShowSearchbar = _useState4[1];
1147
- var _useState5 = React.useState(false),
1148
- _useState6 = _slicedToArray(_useState5, 2),
1149
- showSideNav = _useState6[0],
1150
- setShowSideNav = _useState6[1];
1151
- var _useState7 = React.useState({
1152
- brands: [],
1153
- products: []
1154
- }),
1155
- _useState8 = _slicedToArray(_useState7, 2),
1156
- searchResults = _useState8[0],
1157
- setSearchResults = _useState8[1];
1158
- var _useState9 = React.useState(false),
1159
- _useState10 = _slicedToArray(_useState9, 2),
1160
- isSearchFocused = _useState10[0],
1161
- setIsSearchFocused = _useState10[1];
1162
- var _useState11 = React.useState({
1163
- trending_brands: [],
1164
- latest_products: []
1165
- }),
1166
- _useState12 = _slicedToArray(_useState11, 2),
1167
- initialSearchView = _useState12[0],
1168
- setInitialSearchView = _useState12[1];
1169
- var searchResultsRef = React.useRef(null);
1170
- var searchInputRef = React.useRef(null);
1171
- var debouncedSearch = createDebouncedSearch(setSearchResults);
1172
- var immediateSearch = createImmediateSearch(setSearchValue, setSearchResults, onSearchSubmit);
1173
- var handleChange = function handleChange(event) {
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) {
1174
1216
  var value = event.target.value;
1175
1217
  setSearchValue(value);
1176
1218
  setIsSearchFocused(true);
1219
+
1177
1220
  if (value.trim().length >= 3) {
1178
1221
  debouncedSearch(value);
1179
1222
  } else {
@@ -1181,50 +1224,178 @@
1181
1224
  brands: [],
1182
1225
  products: []
1183
1226
  });
1227
+ setCachedResults({
1228
+ brands: [],
1229
+ products: []
1230
+ });
1184
1231
  }
1185
- };
1186
- 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) {
1187
1249
  if (event.key === 'Enter') {
1188
1250
  event.preventDefault();
1251
+
1189
1252
  if (searchValue.trim().length >= 3) {
1190
1253
  immediateSearch(searchValue);
1191
- setIsSearchFocused(false);
1192
1254
  }
1193
- } else if (event.key === 'Escape') {
1255
+
1256
+ setIsSearchFocused(false);
1257
+ } else if (event.key === 'Escape' && setSearchValue) {
1194
1258
  setSearchValue('');
1195
1259
  setIsSearchFocused(false);
1196
1260
  }
1197
- };
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);
1198
1377
  React.useMemo(function () {
1378
+ if (!initialSearchData) {
1379
+ return;
1380
+ }
1381
+
1199
1382
  fetchInitialSearchData(initialSearchData, setInitialSearchView);
1200
1383
  }, [initialSearchData, fetchInitialSearchData]);
1201
- React.useEffect(function () {
1202
- var handleClickOutside = function handleClickOutside(event) {
1203
- if (searchResultsRef.current && !searchResultsRef.current.contains(event.target)) {
1204
- setSearchValue('');
1205
- setIsSearchFocused(false);
1206
- setSearchResults({
1207
- brands: [],
1208
- products: []
1209
- });
1210
- }
1211
- };
1212
- document.addEventListener('mousedown', handleClickOutside);
1213
- return function () {
1214
- document.removeEventListener('mousedown', handleClickOutside);
1215
- };
1216
- }, []);
1384
+ useSearchClickOutside(searchResultsRef, searchResults, setCachedResults, setIsSearchFocused, setSearchResults);
1385
+ var handleSearchFocus = useSearchInputFocus(searchValue, setIsSearchFocused, cachedResults, setSearchResults);
1217
1386
  React.useEffect(function () {
1218
1387
  if (showSearchBar && searchInputRef.current) {
1219
1388
  searchInputRef.current.focus();
1220
1389
  }
1221
1390
  }, [showSearchBar]);
1391
+
1222
1392
  var onSearchClick = function onSearchClick() {
1223
1393
  setShowSearchbar(function (prev) {
1224
1394
  return !prev;
1225
1395
  });
1226
1396
  setSearchValue('');
1227
1397
  setIsSearchFocused(!showSearchBar);
1398
+
1228
1399
  if (showSearchBar) {
1229
1400
  setSearchResults({
1230
1401
  brands: [],
@@ -1232,66 +1403,86 @@
1232
1403
  });
1233
1404
  }
1234
1405
  };
1406
+
1235
1407
  var onMenuClick = function onMenuClick() {
1236
1408
  setShowSideNav(function (prev) {
1237
1409
  return !prev;
1238
1410
  });
1239
1411
  };
1412
+
1240
1413
  var handleClick = function handleClick(callback) {
1241
1414
  callback();
1242
1415
  setShowSideNav(false);
1243
1416
  };
1417
+
1244
1418
  var handleDashboardClick = function handleDashboardClick() {
1245
1419
  return handleClick(onDashboardClick);
1246
1420
  };
1421
+
1247
1422
  var handleSellToUsClick = function handleSellToUsClick() {
1248
1423
  return handleClick(onSellToUsClick);
1249
1424
  };
1425
+
1250
1426
  var handleCartClick = function handleCartClick() {
1251
1427
  return handleClick(onCartClick);
1252
1428
  };
1429
+
1253
1430
  var handleLuxityShopClick = function handleLuxityShopClick() {
1254
1431
  return handleClick(onLuxityShopClick);
1255
1432
  };
1433
+
1256
1434
  var handleLogoutClick = function handleLogoutClick() {
1257
1435
  return handleClick(onLogoutClick);
1258
1436
  };
1437
+
1259
1438
  var handleInterestClick = function handleInterestClick() {
1260
1439
  return handleClick(onInterestClick);
1261
1440
  };
1441
+
1262
1442
  var handleAddressClick = function handleAddressClick() {
1263
1443
  return handleClick(onAddressClick);
1264
1444
  };
1445
+
1265
1446
  var handleCouponsClick = function handleCouponsClick() {
1266
1447
  return handleClick(onCouponsClick);
1267
1448
  };
1449
+
1268
1450
  var handleEditProfileClick = function handleEditProfileClick() {
1269
1451
  return handleClick(onEditProfileClick);
1270
1452
  };
1453
+
1271
1454
  var handleCurrentOrdersClick = function handleCurrentOrdersClick() {
1272
1455
  return handleClick(onCurrentOrdersClick);
1273
1456
  };
1457
+
1274
1458
  var handlePastOrdersClick = function handlePastOrdersClick() {
1275
1459
  return handleClick(onPastOrdersClick);
1276
1460
  };
1461
+
1277
1462
  var handlePastSalesClick = function handlePastSalesClick() {
1278
1463
  return handleClick(onPastSalesClick);
1279
1464
  };
1465
+
1280
1466
  var handlePaidOutClick = function handlePaidOutClick() {
1281
1467
  return handleClick(onPaidOutClick);
1282
1468
  };
1469
+
1283
1470
  var handleSubmissionsClick = function handleSubmissionsClick() {
1284
1471
  return handleClick(onSubmissionsClick);
1285
1472
  };
1473
+
1286
1474
  var handleAccountClick = function handleAccountClick() {
1287
1475
  return handleClick(onAccountClick);
1288
1476
  };
1477
+
1289
1478
  var handleContactUsClick = function handleContactUsClick() {
1290
1479
  return handleClick(onContactUsClick);
1291
1480
  };
1481
+
1292
1482
  var handleOurStoryClick = function handleOurStoryClick() {
1293
1483
  return handleClick(onOurStoryClick);
1294
1484
  };
1485
+
1295
1486
  var handleBlogClick = onBlogClick ? function () {
1296
1487
  return handleClick(onBlogClick);
1297
1488
  } : undefined;
@@ -1315,7 +1506,8 @@
1315
1506
  className: "navbar__logo"
1316
1507
  }, /*#__PURE__*/React__default.createElement("img", {
1317
1508
  src: logoSrc,
1318
- alt: "luxity-logo"
1509
+ alt: "luxity-logo",
1510
+ loading: "eager"
1319
1511
  }))), /*#__PURE__*/React__default.createElement("div", {
1320
1512
  className: "navbar__icons-wrapper"
1321
1513
  }, /*#__PURE__*/React__default.createElement("div", {
@@ -1342,6 +1534,8 @@
1342
1534
  }), shop && /*#__PURE__*/React__default.createElement("div", {
1343
1535
  className: "navbar__cart-count"
1344
1536
  }, cartCount))))), showSearchBar && /*#__PURE__*/React__default.createElement("div", {
1537
+ className: "navbar__search-container"
1538
+ }, /*#__PURE__*/React__default.createElement("div", {
1345
1539
  className: "navbar__product-search-wrapper"
1346
1540
  }, /*#__PURE__*/React__default.createElement("div", {
1347
1541
  className: "navbar__product-search"
@@ -1353,9 +1547,7 @@
1353
1547
  value: searchValue,
1354
1548
  onChange: handleChange,
1355
1549
  onKeyDown: handleKeyDown,
1356
- onFocus: function onFocus() {
1357
- return setIsSearchFocused(true);
1358
- }
1550
+ onFocus: handleSearchFocus
1359
1551
  })), /*#__PURE__*/React__default.createElement("button", {
1360
1552
  type: "button",
1361
1553
  onClick: onSearchClick
@@ -1363,7 +1555,7 @@
1363
1555
  src: closeIcon,
1364
1556
  alt: "close-icon",
1365
1557
  className: "navbar__input-close-icon"
1366
- })))), /*#__PURE__*/React__default.createElement(SearchResults, {
1558
+ }))), isSearchFocused && /*#__PURE__*/React__default.createElement(SearchResults, {
1367
1559
  searchValue: searchValue,
1368
1560
  searchResults: searchResults,
1369
1561
  onViewAll: function onViewAll() {
@@ -1383,7 +1575,7 @@
1383
1575
  setIsSearchFocused: setIsSearchFocused,
1384
1576
  currency: currency,
1385
1577
  currencySymbol: currencySymbol
1386
- }), shop && /*#__PURE__*/React__default.createElement(LuxitySideNav, {
1578
+ }))), shop && /*#__PURE__*/React__default.createElement(LuxitySideNav, {
1387
1579
  accordionIcon: accordionIcon,
1388
1580
  logoSrc: logoSrc,
1389
1581
  closeIcon: closeIcon,
@@ -1400,7 +1592,6 @@
1400
1592
  showSideNav: showSideNav,
1401
1593
  onMenuClick: onMenuClick,
1402
1594
  endpoint: endpoint,
1403
- menuData: menuData,
1404
1595
  currency: currency,
1405
1596
  currencyOptions: currencyOptions,
1406
1597
  onCurrencyChange: onCurrencyChange,