@bonlineza/luxity-lib 2.39.4 → 2.39.6

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 (96) hide show
  1. package/Accordion.js +342 -352
  2. package/AddInterest.js +3109 -3068
  3. package/AddProductInterest.js +999 -7572
  4. package/BrandSelector.js +854 -861
  5. package/Checkbox.js +240 -250
  6. package/CheckboxButton.js +229 -236
  7. package/CommunicationPreferenceOptionsRenderer.js +560 -568
  8. package/CommunicationPreferenceSection.js +651 -659
  9. package/CommunicationPreferences.js +2394 -2402
  10. package/ConditionSelector.js +852 -859
  11. package/CountryCodeSelect.js +79 -6650
  12. package/CurrencyInputFormatter.js +86 -96
  13. package/CurrencySelect.js +219 -227
  14. package/DropdownSelector.js +212 -6821
  15. package/GALink.js +43 -51
  16. package/GenderSelector.js +355 -362
  17. package/GraphQLDropdownSelector.js +5308 -11832
  18. package/GraphQLMultiSelector.js +593 -601
  19. package/IconHeader.js +118 -126
  20. package/IconWrapper.js +17 -25
  21. package/InterestCatSelector.js +424 -389
  22. package/InterestItem.js +462 -469
  23. package/Interests.js +4719 -11243
  24. package/InterestsSubheading.js +33 -41
  25. package/InvertedTextButton.js +167 -175
  26. package/LuxityAppSideNav.js +181 -189
  27. package/LuxityDesktopHeader.js +1355 -1363
  28. package/LuxityFooter.js +2228 -2236
  29. package/LuxityGraphQLDropdownSelector.js +5395 -11919
  30. package/LuxityGraphQLMultiselector.js +778 -785
  31. package/LuxityMobileHeader.js +1786 -1794
  32. package/LuxityPageReady.js +199 -209
  33. package/LuxityProductInterestItem.js +359 -367
  34. package/LuxitySideNav.js +665 -673
  35. package/MaterialSelector.js +5430 -11954
  36. package/ModelSelector.js +5430 -11954
  37. package/NotificationDropDown.js +459 -7030
  38. package/Notify.js +20 -32
  39. package/OutlinePrimaryButton.js +134 -142
  40. package/PriceRangeSelector.js +1264 -1265
  41. package/PrimaryButton.js +129 -137
  42. package/RadioButtons.js +308 -318
  43. package/RangeSlider.js +1033 -1039
  44. package/RareStepFooter.js +257 -264
  45. package/RareStepHeader.js +801 -808
  46. package/ReactSelectWrapper.js +33 -6604
  47. package/SecondaryButton.js +144 -152
  48. package/ShoeSizeRangeSelector.js +1147 -1153
  49. package/ShoeSizeSelector.js +1146 -1154
  50. package/SimpleErrorBoundary.js +130 -138
  51. package/StyleSelector.js +854 -861
  52. package/TestComponent.js +15 -0
  53. package/TextButton.js +135 -143
  54. package/Tooltip.js +176 -184
  55. package/Tracking.js +15 -25
  56. package/WrapperButton.js +50 -58
  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 +10634 -17192
  61. package/build/constants.js +32 -43
  62. package/package.json +2 -2
  63. package/postcss.config.js +6 -0
  64. package/svg/Accessories.js +34 -42
  65. package/svg/Account.js +30 -38
  66. package/svg/Add.js +31 -39
  67. package/svg/ArrowRight.js +28 -36
  68. package/svg/Bags.js +40 -48
  69. package/svg/BurgerMenu.js +24 -32
  70. package/svg/Calendar.js +98 -106
  71. package/svg/CalendarCircled.js +100 -108
  72. package/svg/CheckCircled.js +32 -40
  73. package/svg/Close.js +29 -37
  74. package/svg/Clothing.js +36 -44
  75. package/svg/Dot.js +32 -40
  76. package/svg/Edit.js +27 -35
  77. package/svg/Eye.js +28 -36
  78. package/svg/FileAttach.js +28 -36
  79. package/svg/FileAttachCircled.js +30 -38
  80. package/svg/Jewellery.js +56 -0
  81. package/svg/LightBulb.js +58 -66
  82. package/svg/Logo.js +132 -140
  83. package/svg/LuxityMenu.js +28 -36
  84. package/svg/Minus.js +29 -37
  85. package/svg/MobileAvatar.js +28 -36
  86. package/svg/MyOrder.js +36 -44
  87. package/svg/MyPayment.js +36 -44
  88. package/svg/MyProfile.js +44 -52
  89. package/svg/MySale.js +31 -39
  90. package/svg/Notification.js +30 -38
  91. package/svg/PointerDown.js +28 -36
  92. package/svg/Search.js +27 -35
  93. package/svg/Shoes.js +37 -45
  94. package/svg/SvgWrapper.js +13 -21
  95. package/svg/Trash.js +32 -40
  96. package/svg/Watches.js +47 -55
@@ -1,1511 +1,1503 @@
1
- (function (global, factory) {
2
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('react'), require('axios'), require('styled-components')) :
3
- typeof define === 'function' && define.amd ? define(['react', 'axios', 'styled-components'], factory) :
4
- (global = global || self, global.LuxityDesktopHeader = factory(global.React, global.axios, global.styled));
5
- }(this, (function (React, axios, styled) { 'use strict';
6
-
7
- var React__default = 'default' in React ? React['default'] : React;
8
- axios = axios && Object.prototype.hasOwnProperty.call(axios, 'default') ? axios['default'] : axios;
9
- var styled__default = 'default' in styled ? styled['default'] : styled;
10
-
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);
19
- }
20
-
21
- return keys;
1
+ import React, { useState, useEffect, forwardRef, useRef, useCallback, useMemo } from 'react';
2
+ import axios from 'axios';
3
+ import styled, { css, ThemeProvider } from 'styled-components';
4
+
5
+ function ownKeys(object, enumerableOnly) {
6
+ var keys = Object.keys(object);
7
+
8
+ if (Object.getOwnPropertySymbols) {
9
+ var symbols = Object.getOwnPropertySymbols(object);
10
+ enumerableOnly && (symbols = symbols.filter(function (sym) {
11
+ return Object.getOwnPropertyDescriptor(object, sym).enumerable;
12
+ })), keys.push.apply(keys, symbols);
22
13
  }
23
14
 
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
- });
32
- }
15
+ return keys;
16
+ }
33
17
 
34
- return target;
18
+ function _objectSpread2(target) {
19
+ for (var i = 1; i < arguments.length; i++) {
20
+ var source = null != arguments[i] ? arguments[i] : {};
21
+ i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {
22
+ _defineProperty(target, key, source[key]);
23
+ }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {
24
+ Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
25
+ });
35
26
  }
36
27
 
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
44
- });
45
- } else {
46
- obj[key] = value;
47
- }
28
+ return target;
29
+ }
48
30
 
49
- return obj;
31
+ function _defineProperty(obj, key, value) {
32
+ if (key in obj) {
33
+ Object.defineProperty(obj, key, {
34
+ value: value,
35
+ enumerable: true,
36
+ configurable: true,
37
+ writable: true
38
+ });
39
+ } else {
40
+ obj[key] = value;
50
41
  }
51
42
 
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];
43
+ return obj;
44
+ }
56
45
 
57
- for (var key in source) {
58
- if (Object.prototype.hasOwnProperty.call(source, key)) {
59
- target[key] = source[key];
60
- }
46
+ function _extends() {
47
+ _extends = Object.assign ? Object.assign.bind() : function (target) {
48
+ for (var i = 1; i < arguments.length; i++) {
49
+ var source = arguments[i];
50
+
51
+ for (var key in source) {
52
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
53
+ target[key] = source[key];
61
54
  }
62
55
  }
56
+ }
63
57
 
64
- return target;
65
- };
66
- return _extends.apply(this, arguments);
58
+ return target;
59
+ };
60
+ return _extends.apply(this, arguments);
61
+ }
62
+
63
+ function _taggedTemplateLiteral(strings, raw) {
64
+ if (!raw) {
65
+ raw = strings.slice(0);
67
66
  }
68
67
 
69
- function _taggedTemplateLiteral(strings, raw) {
70
- if (!raw) {
71
- raw = strings.slice(0);
68
+ return Object.freeze(Object.defineProperties(strings, {
69
+ raw: {
70
+ value: Object.freeze(raw)
72
71
  }
72
+ }));
73
+ }
73
74
 
74
- return Object.freeze(Object.defineProperties(strings, {
75
- raw: {
76
- value: Object.freeze(raw)
77
- }
78
- }));
79
- }
75
+ function _slicedToArray(arr, i) {
76
+ return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();
77
+ }
80
78
 
81
- function _slicedToArray(arr, i) {
82
- return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();
83
- }
79
+ function _toConsumableArray(arr) {
80
+ return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();
81
+ }
84
82
 
85
- function _toConsumableArray(arr) {
86
- return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();
87
- }
83
+ function _arrayWithoutHoles(arr) {
84
+ if (Array.isArray(arr)) return _arrayLikeToArray(arr);
85
+ }
88
86
 
89
- function _arrayWithoutHoles(arr) {
90
- if (Array.isArray(arr)) return _arrayLikeToArray(arr);
91
- }
87
+ function _arrayWithHoles(arr) {
88
+ if (Array.isArray(arr)) return arr;
89
+ }
92
90
 
93
- function _arrayWithHoles(arr) {
94
- if (Array.isArray(arr)) return arr;
95
- }
91
+ function _iterableToArray(iter) {
92
+ if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
93
+ }
96
94
 
97
- function _iterableToArray(iter) {
98
- if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
99
- }
95
+ function _iterableToArrayLimit(arr, i) {
96
+ var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];
100
97
 
101
- function _iterableToArrayLimit(arr, i) {
102
- var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];
98
+ if (_i == null) return;
99
+ var _arr = [];
100
+ var _n = true;
101
+ var _d = false;
103
102
 
104
- if (_i == null) return;
105
- var _arr = [];
106
- var _n = true;
107
- var _d = false;
103
+ var _s, _e;
108
104
 
109
- var _s, _e;
105
+ try {
106
+ for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {
107
+ _arr.push(_s.value);
110
108
 
109
+ if (i && _arr.length === i) break;
110
+ }
111
+ } catch (err) {
112
+ _d = true;
113
+ _e = err;
114
+ } finally {
111
115
  try {
112
- for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {
113
- _arr.push(_s.value);
114
-
115
- if (i && _arr.length === i) break;
116
- }
117
- } catch (err) {
118
- _d = true;
119
- _e = err;
116
+ if (!_n && _i["return"] != null) _i["return"]();
120
117
  } finally {
121
- try {
122
- if (!_n && _i["return"] != null) _i["return"]();
123
- } finally {
124
- if (_d) throw _e;
125
- }
118
+ if (_d) throw _e;
126
119
  }
127
-
128
- return _arr;
129
120
  }
130
121
 
131
- function _unsupportedIterableToArray(o, minLen) {
132
- if (!o) return;
133
- if (typeof o === "string") return _arrayLikeToArray(o, minLen);
134
- var n = Object.prototype.toString.call(o).slice(8, -1);
135
- if (n === "Object" && o.constructor) n = o.constructor.name;
136
- if (n === "Map" || n === "Set") return Array.from(o);
137
- if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
138
- }
139
-
140
- function _arrayLikeToArray(arr, len) {
141
- if (len == null || len > arr.length) len = arr.length;
142
-
143
- for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
122
+ return _arr;
123
+ }
124
+
125
+ function _unsupportedIterableToArray(o, minLen) {
126
+ if (!o) return;
127
+ if (typeof o === "string") return _arrayLikeToArray(o, minLen);
128
+ var n = Object.prototype.toString.call(o).slice(8, -1);
129
+ if (n === "Object" && o.constructor) n = o.constructor.name;
130
+ if (n === "Map" || n === "Set") return Array.from(o);
131
+ if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
132
+ }
133
+
134
+ function _arrayLikeToArray(arr, len) {
135
+ if (len == null || len > arr.length) len = arr.length;
136
+
137
+ for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
138
+
139
+ return arr2;
140
+ }
141
+
142
+ function _nonIterableSpread() {
143
+ throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
144
+ }
145
+
146
+ function _nonIterableRest() {
147
+ throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
148
+ }
149
+
150
+ var Dropdown = function Dropdown(_ref) {
151
+ var title = _ref.title,
152
+ imageSrc = _ref.imageSrc,
153
+ _ref$categoryElements = _ref.categoryElements,
154
+ categoryElements = _ref$categoryElements === void 0 ? [] : _ref$categoryElements,
155
+ _ref$brandElements = _ref.brandElements,
156
+ brandElements = _ref$brandElements === void 0 ? [] : _ref$brandElements,
157
+ productsUrl = _ref.productsUrl,
158
+ LinkComponent = _ref.LinkComponent,
159
+ categorySlug = _ref.categorySlug,
160
+ categoryTitle = _ref.categoryTitle,
161
+ isLoading = _ref.isLoading,
162
+ hasError = _ref.hasError,
163
+ onMenuItemClick = _ref.onMenuItemClick;
164
+ return /*#__PURE__*/React.createElement(React.Fragment, null, hasError ? /*#__PURE__*/React.createElement("div", {
165
+ className: "dropdown__errors"
166
+ }, "Failed to load data.") : /*#__PURE__*/React.createElement("div", {
167
+ className: "dropdown"
168
+ }, isLoading ? /*#__PURE__*/React.createElement("div", {
169
+ className: "cover-spinner"
170
+ }) : /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
171
+ className: "dropdown__column"
172
+ }, /*#__PURE__*/React.createElement("div", {
173
+ className: "dropdown__title"
174
+ }, title), /*#__PURE__*/React.createElement("div", {
175
+ className: "dropdown__elements dropdown__elements--column"
176
+ }, !!categoryElements.length && categoryElements.map(function (categoryElement) {
177
+ return categoryElement.category ? /*#__PURE__*/React.createElement(LinkComponent, {
178
+ href: "".concat(productsUrl, "/").concat(categoryElement.category, "/").concat(categoryElement === null || categoryElement === void 0 ? void 0 : categoryElement.slug),
179
+ className: "dropdown__element",
180
+ key: categoryElement.name,
181
+ onClick: onMenuItemClick
182
+ }, categoryElement === null || categoryElement === void 0 ? void 0 : categoryElement.name.toLowerCase()) : /*#__PURE__*/React.createElement(LinkComponent, {
183
+ href: "".concat(productsUrl, "/").concat(categoryElement === null || categoryElement === void 0 ? void 0 : categoryElement.slug),
184
+ className: "dropdown__element",
185
+ key: categoryElement.name,
186
+ onClick: onMenuItemClick
187
+ }, categoryElement === null || categoryElement === void 0 ? void 0 : categoryElement.name.toLowerCase());
188
+ }))), /*#__PURE__*/React.createElement("div", {
189
+ className: "dropdown__column"
190
+ }, /*#__PURE__*/React.createElement("div", {
191
+ className: "dropdown__title"
192
+ }, "Brands"), /*#__PURE__*/React.createElement("div", {
193
+ className: "dropdown__brand-elements"
194
+ }, /*#__PURE__*/React.createElement("div", {
195
+ className: "dropdown__brand-element"
196
+ }, /*#__PURE__*/React.createElement(LinkComponent, {
197
+ href: "".concat(productsUrl, "/").concat(categorySlug),
198
+ className: "dropdown__element",
199
+ onClick: onMenuItemClick
200
+ }, "All ", categoryTitle)), !!brandElements.length && brandElements.map(function (brand) {
201
+ return /*#__PURE__*/React.createElement("div", {
202
+ className: "dropdown__brand-element",
203
+ key: brand.name
204
+ }, /*#__PURE__*/React.createElement(LinkComponent, {
205
+ href: "".concat(productsUrl, "/").concat(categorySlug, "/").concat(brand === null || brand === void 0 ? void 0 : brand.slug),
206
+ className: "dropdown__element",
207
+ onClick: onMenuItemClick
208
+ }, brand === null || brand === void 0 ? void 0 : brand.name));
209
+ }))), /*#__PURE__*/React.createElement("div", {
210
+ className: "dropdown__column"
211
+ }, /*#__PURE__*/React.createElement("img", {
212
+ src: imageSrc,
213
+ alt: "".concat(title)
214
+ })))));
215
+ };
216
+
217
+ var DropdownLink = function DropdownLink(_ref) {
218
+ var title = _ref.title,
219
+ imageSrc = _ref.imageSrc,
220
+ categoryElements = _ref.categoryElements,
221
+ brandElements = _ref.brandElements,
222
+ productsUrl = _ref.productsUrl,
223
+ LinkComponent = _ref.LinkComponent,
224
+ categorySlug = _ref.categorySlug,
225
+ categoryTitle = _ref.categoryTitle,
226
+ isLoading = _ref.isLoading,
227
+ hasError = _ref.hasError;
228
+
229
+ var _useState = useState(false),
230
+ _useState2 = _slicedToArray(_useState, 2),
231
+ dropdownVisible = _useState2[0],
232
+ setDropdownVisible = _useState2[1];
233
+
234
+ var handleMenuItemClick = function handleMenuItemClick() {
235
+ setDropdownVisible(false);
236
+ };
144
237
 
145
- return arr2;
146
- }
238
+ return /*#__PURE__*/React.createElement("li", {
239
+ className: "navbar__link",
240
+ onMouseEnter: function onMouseEnter() {
241
+ return setDropdownVisible(true);
242
+ },
243
+ onMouseLeave: function onMouseLeave() {
244
+ return setDropdownVisible(false);
245
+ }
246
+ }, /*#__PURE__*/React.createElement(LinkComponent, {
247
+ href: "".concat(productsUrl, "/").concat(categorySlug),
248
+ className: "navbar__link-item navbar__link-item--desktop",
249
+ onClick: handleMenuItemClick
250
+ }, title), dropdownVisible && /*#__PURE__*/React.createElement("div", {
251
+ className: "navbar__dropdown"
252
+ }, /*#__PURE__*/React.createElement(Dropdown, {
253
+ title: "Department",
254
+ imageSrc: imageSrc,
255
+ categoryElements: categoryElements,
256
+ brandElements: brandElements,
257
+ productsUrl: productsUrl,
258
+ categorySlug: categorySlug,
259
+ categoryTitle: categoryTitle,
260
+ isLoading: isLoading,
261
+ hasError: hasError,
262
+ onMenuItemClick: handleMenuItemClick,
263
+ LinkComponent: LinkComponent
264
+ })));
265
+ };
266
+
267
+ var StoresDropdown = function StoresDropdown(_ref) {
268
+ var _ref$stores = _ref.stores,
269
+ stores = _ref$stores === void 0 ? [] : _ref$stores,
270
+ contactNumber = _ref.contactNumber;
271
+ return /*#__PURE__*/React.createElement("div", {
272
+ className: "stores-dropdown"
273
+ }, !!stores.length && stores.map(function (store) {
274
+ return /*#__PURE__*/React.createElement("div", {
275
+ className: "stores-dropdown__store-details",
276
+ key: store.title
277
+ }, /*#__PURE__*/React.createElement("div", {
278
+ className: "stores-dropdown__store-image"
279
+ }, /*#__PURE__*/React.createElement("img", {
280
+ className: "stores-dropdown__image",
281
+ src: store.image,
282
+ alt: store.title
283
+ })), /*#__PURE__*/React.createElement("div", {
284
+ className: "stores-dropdown__store-info"
285
+ }, /*#__PURE__*/React.createElement("h4", {
286
+ className: "stores-dropdown__title"
287
+ }, store.title, " ", /*#__PURE__*/React.createElement("br", null), " ", store.location), /*#__PURE__*/React.createElement("div", {
288
+ className: "stores-dropdown__open-days"
289
+ }, store.regularOpenDays), /*#__PURE__*/React.createElement("div", {
290
+ className: "stores-dropdown__open-hours"
291
+ }, store.regularOpenHours), /*#__PURE__*/React.createElement("div", {
292
+ className: "stores-dropdown__open-days"
293
+ }, store.holidayOpenDays), /*#__PURE__*/React.createElement("div", {
294
+ className: "stores-dropdown__open-hours"
295
+ }, store.holidayOpenHours), (store === null || store === void 0 ? void 0 : store.weekendOpenDays) && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
296
+ className: "stores-dropdown__open-days"
297
+ }, store.weekendOpenDays), /*#__PURE__*/React.createElement("div", {
298
+ className: "stores-dropdown__open-hours"
299
+ }, store.weekendOpenHours))));
300
+ }), /*#__PURE__*/React.createElement("div", {
301
+ className: "stores-dropdown__queries"
302
+ }, /*#__PURE__*/React.createElement("h4", {
303
+ className: "stores-dropdown__queries-title"
304
+ }, "Customer Queries: "), /*#__PURE__*/React.createElement("a", {
305
+ className: "stores-dropdown__contact-details",
306
+ href: "tel:".concat(contactNumber)
307
+ }, contactNumber)));
308
+ };
309
+
310
+ var SearchResults = function SearchResults(_ref) {
311
+ var _searchResults$brands, _searchResults$produc, _initialSearchData$tr, _initialSearchData$la;
312
+
313
+ var searchValue = _ref.searchValue,
314
+ searchResults = _ref.searchResults,
315
+ onViewAll = _ref.onViewAll,
316
+ searchResultsRef = _ref.searchResultsRef,
317
+ onSearchSubmit = _ref.onSearchSubmit,
318
+ setSearchValue = _ref.setSearchValue,
319
+ initialSearchData = _ref.initialSearchData,
320
+ isSearchFocused = _ref.isSearchFocused,
321
+ setIsSearchFocused = _ref.setIsSearchFocused,
322
+ currency = _ref.currency,
323
+ currencySymbol = _ref.currencySymbol,
324
+ onProductSearchResultClick = _ref.onProductSearchResultClick,
325
+ onBrandSearchResultClick = _ref.onBrandSearchResultClick,
326
+ onCreateInterests = _ref.onCreateInterests,
327
+ noResultsImage = _ref.noResultsImage,
328
+ showNoResults = _ref.showNoResults,
329
+ _ref$isLoading = _ref.isLoading,
330
+ isLoading = _ref$isLoading === void 0 ? false : _ref$isLoading,
331
+ _ref$showCreateIntere = _ref.showCreateInterest,
332
+ showCreateInterest = _ref$showCreateIntere === void 0 ? true : _ref$showCreateIntere;
333
+
334
+ var _useState = useState(false),
335
+ _useState2 = _slicedToArray(_useState, 2),
336
+ isMobile = _useState2[0],
337
+ setIsMobile = _useState2[1];
338
+
339
+ useEffect(function () {
340
+ var checkIfMobile = function checkIfMobile() {
341
+ setIsMobile(window.innerWidth <= 1024);
342
+ };
147
343
 
148
- function _nonIterableSpread() {
149
- throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
344
+ checkIfMobile();
345
+ window.addEventListener('resize', checkIfMobile);
346
+ return function () {
347
+ window.removeEventListener('resize', checkIfMobile);
348
+ };
349
+ }, []);
350
+ var hasSearchBeenPerformed = (searchValue === null || searchValue === void 0 ? void 0 : searchValue.trim().length) >= 3;
351
+ var hasResults = (searchResults === null || searchResults === void 0 ? void 0 : (_searchResults$brands = searchResults.brands) === null || _searchResults$brands === void 0 ? void 0 : _searchResults$brands.length) > 0 || (searchResults === null || searchResults === void 0 ? void 0 : (_searchResults$produc = searchResults.products) === null || _searchResults$produc === void 0 ? void 0 : _searchResults$produc.length) > 0;
352
+ 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;
353
+ var shouldShowInitialData = isSearchFocused && (!hasSearchBeenPerformed || !hasResults && !showNoResults);
354
+
355
+ if (!isSearchFocused) {
356
+ return null;
150
357
  }
151
358
 
152
- function _nonIterableRest() {
153
- throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
359
+ if (!hasResults && !hasInitialData && !showNoResults) {
360
+ return null;
154
361
  }
155
362
 
156
- var Dropdown = function Dropdown(_ref) {
157
- var title = _ref.title,
158
- imageSrc = _ref.imageSrc,
159
- _ref$categoryElements = _ref.categoryElements,
160
- categoryElements = _ref$categoryElements === void 0 ? [] : _ref$categoryElements,
161
- _ref$brandElements = _ref.brandElements,
162
- brandElements = _ref$brandElements === void 0 ? [] : _ref$brandElements,
163
- productsUrl = _ref.productsUrl,
164
- LinkComponent = _ref.LinkComponent,
165
- categorySlug = _ref.categorySlug,
166
- categoryTitle = _ref.categoryTitle,
167
- isLoading = _ref.isLoading,
168
- hasError = _ref.hasError,
169
- onMenuItemClick = _ref.onMenuItemClick;
170
- return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, hasError ? /*#__PURE__*/React__default.createElement("div", {
171
- className: "dropdown__errors"
172
- }, "Failed to load data.") : /*#__PURE__*/React__default.createElement("div", {
173
- className: "dropdown"
174
- }, isLoading ? /*#__PURE__*/React__default.createElement("div", {
175
- className: "cover-spinner"
176
- }) : /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement("div", {
177
- className: "dropdown__column"
178
- }, /*#__PURE__*/React__default.createElement("div", {
179
- className: "dropdown__title"
180
- }, title), /*#__PURE__*/React__default.createElement("div", {
181
- className: "dropdown__elements dropdown__elements--column"
182
- }, !!categoryElements.length && categoryElements.map(function (categoryElement) {
183
- return categoryElement.category ? /*#__PURE__*/React__default.createElement(LinkComponent, {
184
- href: "".concat(productsUrl, "/").concat(categoryElement.category, "/").concat(categoryElement === null || categoryElement === void 0 ? void 0 : categoryElement.slug),
185
- className: "dropdown__element",
186
- key: categoryElement.name,
187
- onClick: onMenuItemClick
188
- }, categoryElement === null || categoryElement === void 0 ? void 0 : categoryElement.name.toLowerCase()) : /*#__PURE__*/React__default.createElement(LinkComponent, {
189
- href: "".concat(productsUrl, "/").concat(categoryElement === null || categoryElement === void 0 ? void 0 : categoryElement.slug),
190
- className: "dropdown__element",
191
- key: categoryElement.name,
192
- onClick: onMenuItemClick
193
- }, categoryElement === null || categoryElement === void 0 ? void 0 : categoryElement.name.toLowerCase());
194
- }))), /*#__PURE__*/React__default.createElement("div", {
195
- className: "dropdown__column"
196
- }, /*#__PURE__*/React__default.createElement("div", {
197
- className: "dropdown__title"
198
- }, "Brands"), /*#__PURE__*/React__default.createElement("div", {
199
- className: "dropdown__brand-elements"
200
- }, /*#__PURE__*/React__default.createElement("div", {
201
- className: "dropdown__brand-element"
202
- }, /*#__PURE__*/React__default.createElement(LinkComponent, {
203
- href: "".concat(productsUrl, "/").concat(categorySlug),
204
- className: "dropdown__element",
205
- onClick: onMenuItemClick
206
- }, "All ", categoryTitle)), !!brandElements.length && brandElements.map(function (brand) {
207
- return /*#__PURE__*/React__default.createElement("div", {
208
- className: "dropdown__brand-element",
209
- key: brand.name
210
- }, /*#__PURE__*/React__default.createElement(LinkComponent, {
211
- href: "".concat(productsUrl, "/").concat(categorySlug, "/").concat(brand === null || brand === void 0 ? void 0 : brand.slug),
212
- className: "dropdown__element",
213
- onClick: onMenuItemClick
214
- }, brand === null || brand === void 0 ? void 0 : brand.name));
215
- }))), /*#__PURE__*/React__default.createElement("div", {
216
- className: "dropdown__column"
217
- }, /*#__PURE__*/React__default.createElement("img", {
218
- src: imageSrc,
219
- alt: "".concat(title)
220
- })))));
363
+ var formatPrice = function formatPrice(price) {
364
+ var formatter = new Intl.NumberFormat(undefined, {
365
+ minimumFractionDigits: 0,
366
+ maximumFractionDigits: 2
367
+ });
368
+ return "".concat(currencySymbol).concat(formatter.format(price));
221
369
  };
222
370
 
223
- var DropdownLink = function DropdownLink(_ref) {
224
- var title = _ref.title,
225
- imageSrc = _ref.imageSrc,
226
- categoryElements = _ref.categoryElements,
227
- brandElements = _ref.brandElements,
228
- productsUrl = _ref.productsUrl,
229
- LinkComponent = _ref.LinkComponent,
230
- categorySlug = _ref.categorySlug,
231
- categoryTitle = _ref.categoryTitle,
232
- isLoading = _ref.isLoading,
233
- hasError = _ref.hasError;
234
-
235
- var _useState = React.useState(false),
236
- _useState2 = _slicedToArray(_useState, 2),
237
- dropdownVisible = _useState2[0],
238
- setDropdownVisible = _useState2[1];
239
-
240
- var handleMenuItemClick = function handleMenuItemClick() {
241
- setDropdownVisible(false);
242
- };
243
-
244
- return /*#__PURE__*/React__default.createElement("li", {
245
- className: "navbar__link",
246
- onMouseEnter: function onMouseEnter() {
247
- return setDropdownVisible(true);
248
- },
249
- onMouseLeave: function onMouseLeave() {
250
- return setDropdownVisible(false);
251
- }
252
- }, /*#__PURE__*/React__default.createElement(LinkComponent, {
253
- href: "".concat(productsUrl, "/").concat(categorySlug),
254
- className: "navbar__link-item navbar__link-item--desktop",
255
- onClick: handleMenuItemClick
256
- }, title), dropdownVisible && /*#__PURE__*/React__default.createElement("div", {
257
- className: "navbar__dropdown"
258
- }, /*#__PURE__*/React__default.createElement(Dropdown, {
259
- title: "Department",
260
- imageSrc: imageSrc,
261
- categoryElements: categoryElements,
262
- brandElements: brandElements,
263
- productsUrl: productsUrl,
264
- categorySlug: categorySlug,
265
- categoryTitle: categoryTitle,
266
- isLoading: isLoading,
267
- hasError: hasError,
268
- onMenuItemClick: handleMenuItemClick,
269
- LinkComponent: LinkComponent
270
- })));
371
+ var renderBrandSkeleton = function renderBrandSkeleton() {
372
+ return /*#__PURE__*/React.createElement("div", {
373
+ className: "brand-skeleton"
374
+ }, /*#__PURE__*/React.createElement("div", {
375
+ className: "brand-skeleton__item shimmer"
376
+ }), /*#__PURE__*/React.createElement("div", {
377
+ className: "brand-skeleton__item shimmer"
378
+ }), /*#__PURE__*/React.createElement("div", {
379
+ className: "brand-skeleton__item shimmer"
380
+ }), /*#__PURE__*/React.createElement("div", {
381
+ className: "brand-skeleton__item shimmer"
382
+ }));
271
383
  };
272
384
 
273
- var StoresDropdown = function StoresDropdown(_ref) {
274
- var _ref$stores = _ref.stores,
275
- stores = _ref$stores === void 0 ? [] : _ref$stores,
276
- contactNumber = _ref.contactNumber;
277
- return /*#__PURE__*/React__default.createElement("div", {
278
- className: "stores-dropdown"
279
- }, !!stores.length && stores.map(function (store) {
280
- return /*#__PURE__*/React__default.createElement("div", {
281
- className: "stores-dropdown__store-details",
282
- key: store.title
283
- }, /*#__PURE__*/React__default.createElement("div", {
284
- className: "stores-dropdown__store-image"
285
- }, /*#__PURE__*/React__default.createElement("img", {
286
- className: "stores-dropdown__image",
287
- src: store.image,
288
- alt: store.title
289
- })), /*#__PURE__*/React__default.createElement("div", {
290
- className: "stores-dropdown__store-info"
291
- }, /*#__PURE__*/React__default.createElement("h4", {
292
- className: "stores-dropdown__title"
293
- }, store.title, " ", /*#__PURE__*/React__default.createElement("br", null), " ", store.location), /*#__PURE__*/React__default.createElement("div", {
294
- className: "stores-dropdown__open-days"
295
- }, store.regularOpenDays), /*#__PURE__*/React__default.createElement("div", {
296
- className: "stores-dropdown__open-hours"
297
- }, store.regularOpenHours), /*#__PURE__*/React__default.createElement("div", {
298
- className: "stores-dropdown__open-days"
299
- }, store.holidayOpenDays), /*#__PURE__*/React__default.createElement("div", {
300
- className: "stores-dropdown__open-hours"
301
- }, store.holidayOpenHours), (store === null || store === void 0 ? void 0 : store.weekendOpenDays) && /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement("div", {
302
- className: "stores-dropdown__open-days"
303
- }, store.weekendOpenDays), /*#__PURE__*/React__default.createElement("div", {
304
- className: "stores-dropdown__open-hours"
305
- }, store.weekendOpenHours))));
306
- }), /*#__PURE__*/React__default.createElement("div", {
307
- className: "stores-dropdown__queries"
308
- }, /*#__PURE__*/React__default.createElement("h4", {
309
- className: "stores-dropdown__queries-title"
310
- }, "Customer Queries: "), /*#__PURE__*/React__default.createElement("a", {
311
- className: "stores-dropdown__contact-details",
312
- href: "tel:".concat(contactNumber)
313
- }, contactNumber)));
385
+ var renderProductSkeleton = function renderProductSkeleton() {
386
+ return /*#__PURE__*/React.createElement(React.Fragment, null, _toConsumableArray(Array(3)).map(function (_, index) {
387
+ return /*#__PURE__*/React.createElement("div", {
388
+ key: index,
389
+ className: "product-skeleton"
390
+ }, /*#__PURE__*/React.createElement("div", {
391
+ className: "product-skeleton__image shimmer"
392
+ }), /*#__PURE__*/React.createElement("div", {
393
+ className: "product-skeleton__content"
394
+ }, /*#__PURE__*/React.createElement("div", {
395
+ className: "product-skeleton__title shimmer"
396
+ }), /*#__PURE__*/React.createElement("div", {
397
+ className: "product-skeleton__subtitle shimmer"
398
+ }), /*#__PURE__*/React.createElement("div", {
399
+ className: "product-skeleton__price shimmer"
400
+ })));
401
+ }));
314
402
  };
315
403
 
316
- var SearchResults = function SearchResults(_ref) {
317
- var _searchResults$brands, _searchResults$produc, _initialSearchData$tr, _initialSearchData$la;
318
-
319
- var searchValue = _ref.searchValue,
320
- searchResults = _ref.searchResults,
321
- onViewAll = _ref.onViewAll,
322
- searchResultsRef = _ref.searchResultsRef,
323
- onSearchSubmit = _ref.onSearchSubmit,
324
- setSearchValue = _ref.setSearchValue,
325
- initialSearchData = _ref.initialSearchData,
326
- isSearchFocused = _ref.isSearchFocused,
327
- setIsSearchFocused = _ref.setIsSearchFocused,
328
- currency = _ref.currency,
329
- currencySymbol = _ref.currencySymbol,
330
- onProductSearchResultClick = _ref.onProductSearchResultClick,
331
- onBrandSearchResultClick = _ref.onBrandSearchResultClick,
332
- onCreateInterests = _ref.onCreateInterests,
333
- noResultsImage = _ref.noResultsImage,
334
- showNoResults = _ref.showNoResults,
335
- _ref$isLoading = _ref.isLoading,
336
- isLoading = _ref$isLoading === void 0 ? false : _ref$isLoading,
337
- _ref$showCreateIntere = _ref.showCreateInterest,
338
- showCreateInterest = _ref$showCreateIntere === void 0 ? true : _ref$showCreateIntere;
339
-
340
- var _useState = React.useState(false),
341
- _useState2 = _slicedToArray(_useState, 2),
342
- isMobile = _useState2[0],
343
- setIsMobile = _useState2[1];
344
-
345
- React.useEffect(function () {
346
- var checkIfMobile = function checkIfMobile() {
347
- setIsMobile(window.innerWidth <= 1024);
348
- };
349
-
350
- checkIfMobile();
351
- window.addEventListener('resize', checkIfMobile);
352
- return function () {
353
- window.removeEventListener('resize', checkIfMobile);
354
- };
355
- }, []);
356
- var hasSearchBeenPerformed = (searchValue === null || searchValue === void 0 ? void 0 : searchValue.trim().length) >= 3;
357
- var hasResults = (searchResults === null || searchResults === void 0 ? void 0 : (_searchResults$brands = searchResults.brands) === null || _searchResults$brands === void 0 ? void 0 : _searchResults$brands.length) > 0 || (searchResults === null || searchResults === void 0 ? void 0 : (_searchResults$produc = searchResults.products) === null || _searchResults$produc === void 0 ? void 0 : _searchResults$produc.length) > 0;
358
- 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;
359
- var shouldShowInitialData = isSearchFocused && (!hasSearchBeenPerformed || !hasResults && !showNoResults);
360
-
361
- if (!isSearchFocused) {
362
- return null;
363
- }
364
-
365
- if (!hasResults && !hasInitialData && !showNoResults) {
366
- return null;
367
- }
368
-
369
- var formatPrice = function formatPrice(price) {
370
- var formatter = new Intl.NumberFormat(undefined, {
371
- minimumFractionDigits: 0,
372
- maximumFractionDigits: 2
373
- });
374
- return "".concat(currencySymbol).concat(formatter.format(price));
375
- };
376
-
377
- var renderBrandSkeleton = function renderBrandSkeleton() {
378
- return /*#__PURE__*/React__default.createElement("div", {
379
- className: "brand-skeleton"
380
- }, /*#__PURE__*/React__default.createElement("div", {
381
- className: "brand-skeleton__item shimmer"
382
- }), /*#__PURE__*/React__default.createElement("div", {
383
- className: "brand-skeleton__item shimmer"
384
- }), /*#__PURE__*/React__default.createElement("div", {
385
- className: "brand-skeleton__item shimmer"
386
- }), /*#__PURE__*/React__default.createElement("div", {
387
- className: "brand-skeleton__item shimmer"
388
- }));
389
- };
390
-
391
- var renderProductSkeleton = function renderProductSkeleton() {
392
- return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, _toConsumableArray(Array(3)).map(function (_, index) {
393
- return /*#__PURE__*/React__default.createElement("div", {
394
- key: index,
395
- className: "product-skeleton"
396
- }, /*#__PURE__*/React__default.createElement("div", {
397
- className: "product-skeleton__image shimmer"
398
- }), /*#__PURE__*/React__default.createElement("div", {
399
- className: "product-skeleton__content"
400
- }, /*#__PURE__*/React__default.createElement("div", {
401
- className: "product-skeleton__title shimmer"
402
- }), /*#__PURE__*/React__default.createElement("div", {
403
- className: "product-skeleton__subtitle shimmer"
404
- }), /*#__PURE__*/React__default.createElement("div", {
405
- className: "product-skeleton__price shimmer"
406
- })));
407
- }));
404
+ var renderProductCard = function renderProductCard(product) {
405
+ var selectedPrice = product.prices ? product.prices.find(function (p) {
406
+ return p.currency === currency;
407
+ }) : {
408
+ price: product.price,
409
+ retail_price: product.est_retail_price
408
410
  };
409
-
410
- var renderProductCard = function renderProductCard(product) {
411
- var selectedPrice = product.prices ? product.prices.find(function (p) {
412
- return p.currency === currency;
413
- }) : {
414
- price: product.price,
415
- retail_price: product.est_retail_price
416
- };
417
- var displayPrice = product.on_promotion && product.promotion_price ? product.promotion_price : selectedPrice.price;
418
- var hasPromotion = product.on_promotion && product.promotion_price;
419
- return /*#__PURE__*/React__default.createElement("a", {
420
- key: product.link,
421
- href: product.link,
422
- className: "product-card",
423
- onClick: function onClick() {
424
- if (typeof onProductSearchResultClick === 'function') {
425
- onProductSearchResultClick({
426
- product_name: product.name,
427
- product_brand: product.brand,
428
- product_link: product.link,
429
- search_string: searchValue,
430
- is_popular: shouldShowInitialData
431
- });
432
- }
411
+ var displayPrice = product.on_promotion && product.promotion_price ? product.promotion_price : selectedPrice.price;
412
+ var hasPromotion = product.on_promotion && product.promotion_price;
413
+ return /*#__PURE__*/React.createElement("a", {
414
+ key: product.link,
415
+ href: product.link,
416
+ className: "product-card",
417
+ onClick: function onClick() {
418
+ if (typeof onProductSearchResultClick === 'function') {
419
+ onProductSearchResultClick({
420
+ product_name: product.name,
421
+ product_brand: product.brand,
422
+ product_link: product.link,
423
+ search_string: searchValue,
424
+ is_popular: shouldShowInitialData
425
+ });
433
426
  }
434
- }, product.featured_image && /*#__PURE__*/React__default.createElement("div", {
435
- className: "product-card__image-container"
436
- }, /*#__PURE__*/React__default.createElement("img", {
437
- src: product.featured_image,
438
- alt: product.name,
439
- className: "product-card__image"
440
- })), /*#__PURE__*/React__default.createElement("div", {
441
- className: "product-card__details"
442
- }, /*#__PURE__*/React__default.createElement("h3", {
443
- className: "product-card__name"
444
- }, shouldShowInitialData ? /*#__PURE__*/React__default.createElement("span", null, /*#__PURE__*/React__default.createElement("span", {
445
- className: "product-card__brand-name"
446
- }, product.brand.toUpperCase()), ' ', product.name) : /*#__PURE__*/React__default.createElement("span", null, /*#__PURE__*/React__default.createElement("span", {
447
- className: "product-card__brand-name"
448
- }, product.brand.toUpperCase()), ' ', product.name)), /*#__PURE__*/React__default.createElement("div", {
449
- className: "product-card__info-row"
450
- }, /*#__PURE__*/React__default.createElement("div", {
451
- className: "product-card__price-group"
452
- }, hasPromotion ? /*#__PURE__*/React__default.createElement("div", {
453
- className: "product-card__price-with-promotion"
454
- }, /*#__PURE__*/React__default.createElement("div", {
455
- className: "product-card__price product-card__price--promotion"
456
- }, formatPrice(displayPrice)), /*#__PURE__*/React__default.createElement("div", {
457
- className: "product-card__price product-card__price--original"
458
- }, formatPrice(selectedPrice.price))) : /*#__PURE__*/React__default.createElement("div", {
459
- className: "product-card__price"
460
- }, formatPrice(displayPrice)), selectedPrice.retail_price > 1 && selectedPrice.retail_price > displayPrice && /*#__PURE__*/React__default.createElement("div", {
461
- className: "product-card__retail-price"
462
- }, "Est. Retail: ", formatPrice(selectedPrice.retail_price))), product.condition && /*#__PURE__*/React__default.createElement("div", {
463
- className: "product-card__condition"
464
- }, /*#__PURE__*/React__default.createElement("span", {
465
- className: "product-card__condition-label"
466
- }, "Condition:"), product.condition))));
467
- };
427
+ }
428
+ }, product.featured_image && /*#__PURE__*/React.createElement("div", {
429
+ className: "product-card__image-container"
430
+ }, /*#__PURE__*/React.createElement("img", {
431
+ src: product.featured_image,
432
+ alt: product.name,
433
+ className: "product-card__image"
434
+ })), /*#__PURE__*/React.createElement("div", {
435
+ className: "product-card__details"
436
+ }, /*#__PURE__*/React.createElement("h3", {
437
+ className: "product-card__name"
438
+ }, shouldShowInitialData ? /*#__PURE__*/React.createElement("span", null, /*#__PURE__*/React.createElement("span", {
439
+ className: "product-card__brand-name"
440
+ }, product.brand.toUpperCase()), ' ', product.name) : /*#__PURE__*/React.createElement("span", null, /*#__PURE__*/React.createElement("span", {
441
+ className: "product-card__brand-name"
442
+ }, product.brand.toUpperCase()), ' ', product.name)), /*#__PURE__*/React.createElement("div", {
443
+ className: "product-card__info-row"
444
+ }, /*#__PURE__*/React.createElement("div", {
445
+ className: "product-card__price-group"
446
+ }, hasPromotion ? /*#__PURE__*/React.createElement("div", {
447
+ className: "product-card__price-with-promotion"
448
+ }, /*#__PURE__*/React.createElement("div", {
449
+ className: "product-card__price product-card__price--promotion"
450
+ }, formatPrice(displayPrice)), /*#__PURE__*/React.createElement("div", {
451
+ className: "product-card__price product-card__price--original"
452
+ }, formatPrice(selectedPrice.price))) : /*#__PURE__*/React.createElement("div", {
453
+ className: "product-card__price"
454
+ }, formatPrice(displayPrice)), selectedPrice.retail_price > 1 && selectedPrice.retail_price > displayPrice && /*#__PURE__*/React.createElement("div", {
455
+ className: "product-card__retail-price"
456
+ }, "Est. Retail: ", formatPrice(selectedPrice.retail_price))), product.condition && /*#__PURE__*/React.createElement("div", {
457
+ className: "product-card__condition"
458
+ }, /*#__PURE__*/React.createElement("span", {
459
+ className: "product-card__condition-label"
460
+ }, "Condition:"), product.condition))));
461
+ };
468
462
 
469
- var getBrandLink = function getBrandLink(brand) {
470
- return "/products/brands/".concat(brand.slug);
471
- };
463
+ var getBrandLink = function getBrandLink(brand) {
464
+ return "/products/brands/".concat(brand.slug);
465
+ };
472
466
 
473
- var limitBrands = function limitBrands(brands) {
474
- if (isMobile && brands && brands.length > 4) {
475
- return brands.slice(0, 4);
476
- }
467
+ var limitBrands = function limitBrands(brands) {
468
+ if (isMobile && brands && brands.length > 4) {
469
+ return brands.slice(0, 4);
470
+ }
477
471
 
478
- return brands;
479
- };
472
+ return brands;
473
+ };
480
474
 
481
- var renderBrandsList = function renderBrandsList() {
482
- var _limitBrands2;
475
+ var renderBrandsList = function renderBrandsList() {
476
+ var _limitBrands2;
483
477
 
484
- if (isLoading) {
485
- return renderBrandSkeleton();
486
- }
478
+ if (isLoading) {
479
+ return renderBrandSkeleton();
480
+ }
487
481
 
488
- if (shouldShowInitialData) {
489
- var _limitBrands;
490
-
491
- return (_limitBrands = limitBrands(initialSearchData === null || initialSearchData === void 0 ? void 0 : initialSearchData.trending_brands)) === null || _limitBrands === void 0 ? void 0 : _limitBrands.map(function (brand) {
492
- return /*#__PURE__*/React__default.createElement("a", {
493
- key: brand.id,
494
- href: getBrandLink(brand),
495
- className: "search-results__item",
496
- onClick: function onClick() {
497
- if (typeof onBrandSearchResultClick === 'function') {
498
- onBrandSearchResultClick({
499
- brand_name: brand.name,
500
- brand_link: getBrandLink(brand),
501
- search_string: searchValue,
502
- is_trending: true
503
- });
504
- }
505
- }
506
- }, brand.name);
507
- });
508
- }
482
+ if (shouldShowInitialData) {
483
+ var _limitBrands;
509
484
 
510
- return (_limitBrands2 = limitBrands(searchResults === null || searchResults === void 0 ? void 0 : searchResults.brands)) === null || _limitBrands2 === void 0 ? void 0 : _limitBrands2.map(function (brand) {
511
- return /*#__PURE__*/React__default.createElement("a", {
512
- key: brand.link,
513
- href: brand.link,
485
+ return (_limitBrands = limitBrands(initialSearchData === null || initialSearchData === void 0 ? void 0 : initialSearchData.trending_brands)) === null || _limitBrands === void 0 ? void 0 : _limitBrands.map(function (brand) {
486
+ return /*#__PURE__*/React.createElement("a", {
487
+ key: brand.id,
488
+ href: getBrandLink(brand),
514
489
  className: "search-results__item",
515
490
  onClick: function onClick() {
516
491
  if (typeof onBrandSearchResultClick === 'function') {
517
492
  onBrandSearchResultClick({
518
493
  brand_name: brand.name,
519
- brand_link: brand.link,
494
+ brand_link: getBrandLink(brand),
520
495
  search_string: searchValue,
521
- is_trending: false
496
+ is_trending: true
522
497
  });
523
498
  }
524
499
  }
525
500
  }, brand.name);
526
501
  });
527
- };
502
+ }
528
503
 
529
- var renderProductsList = function renderProductsList() {
530
- var _searchResults$produc2;
504
+ return (_limitBrands2 = limitBrands(searchResults === null || searchResults === void 0 ? void 0 : searchResults.brands)) === null || _limitBrands2 === void 0 ? void 0 : _limitBrands2.map(function (brand) {
505
+ return /*#__PURE__*/React.createElement("a", {
506
+ key: brand.link,
507
+ href: brand.link,
508
+ className: "search-results__item",
509
+ onClick: function onClick() {
510
+ if (typeof onBrandSearchResultClick === 'function') {
511
+ onBrandSearchResultClick({
512
+ brand_name: brand.name,
513
+ brand_link: brand.link,
514
+ search_string: searchValue,
515
+ is_trending: false
516
+ });
517
+ }
518
+ }
519
+ }, brand.name);
520
+ });
521
+ };
531
522
 
532
- if (isLoading) {
533
- return renderProductSkeleton();
534
- }
523
+ var renderProductsList = function renderProductsList() {
524
+ var _searchResults$produc2;
535
525
 
536
- if (shouldShowInitialData) {
537
- var _initialSearchData$la2;
526
+ if (isLoading) {
527
+ return renderProductSkeleton();
528
+ }
538
529
 
539
- return initialSearchData === null || initialSearchData === void 0 ? void 0 : (_initialSearchData$la2 = initialSearchData.latest_products) === null || _initialSearchData$la2 === void 0 ? void 0 : _initialSearchData$la2.map(renderProductCard);
540
- }
530
+ if (shouldShowInitialData) {
531
+ var _initialSearchData$la2;
541
532
 
542
- return searchResults === null || searchResults === void 0 ? void 0 : (_searchResults$produc2 = searchResults.products) === null || _searchResults$produc2 === void 0 ? void 0 : _searchResults$produc2.map(renderProductCard);
543
- }; // Show no results state
544
-
545
-
546
- if (showNoResults) {
547
- return /*#__PURE__*/React__default.createElement("div", {
548
- className: "search-results",
549
- ref: searchResultsRef
550
- }, /*#__PURE__*/React__default.createElement("div", {
551
- className: "search-results__no-results"
552
- }, /*#__PURE__*/React__default.createElement("h2", {
553
- className: "search-results__header"
554
- }, "TOP MATCHES"), /*#__PURE__*/React__default.createElement("div", {
555
- className: "search-results__no-results-content"
556
- }, /*#__PURE__*/React__default.createElement("div", {
557
- className: "search-results__no-results-image"
558
- }, /*#__PURE__*/React__default.createElement("img", {
559
- src: noResultsImage,
560
- alt: "No results"
561
- })), /*#__PURE__*/React__default.createElement("div", {
562
- className: "search-results__no-results-text"
563
- }, /*#__PURE__*/React__default.createElement("p", {
564
- className: "search-results__no-results-title"
565
- }, "There are currently no products in stock that match your selection"), showCreateInterest && /*#__PURE__*/React__default.createElement("p", {
566
- className: "search-results__no-results-description"
567
- }, "Create an interest now and receive instant notifications as your interests list."))), showCreateInterest && /*#__PURE__*/React__default.createElement("button", {
568
- type: "button",
569
- className: "search-results__create-interest-button",
570
- onClick: onCreateInterests
571
- }, "Create Interests")));
533
+ return initialSearchData === null || initialSearchData === void 0 ? void 0 : (_initialSearchData$la2 = initialSearchData.latest_products) === null || _initialSearchData$la2 === void 0 ? void 0 : _initialSearchData$la2.map(renderProductCard);
572
534
  }
573
535
 
574
- return /*#__PURE__*/React__default.createElement("div", {
536
+ return searchResults === null || searchResults === void 0 ? void 0 : (_searchResults$produc2 = searchResults.products) === null || _searchResults$produc2 === void 0 ? void 0 : _searchResults$produc2.map(renderProductCard);
537
+ }; // Show no results state
538
+
539
+
540
+ if (showNoResults) {
541
+ return /*#__PURE__*/React.createElement("div", {
575
542
  className: "search-results",
576
543
  ref: searchResultsRef
577
- }, /*#__PURE__*/React__default.createElement("div", {
578
- className: "search-results__section"
579
- }, /*#__PURE__*/React__default.createElement("h2", {
544
+ }, /*#__PURE__*/React.createElement("div", {
545
+ className: "search-results__no-results"
546
+ }, /*#__PURE__*/React.createElement("h2", {
580
547
  className: "search-results__header"
581
- }, shouldShowInitialData ? 'TRENDING SEARCHES' : 'BRANDS'), /*#__PURE__*/React__default.createElement("div", {
582
- className: "search-results__list"
583
- }, renderBrandsList())), /*#__PURE__*/React__default.createElement("div", {
584
- className: "search-results__section"
585
- }, /*#__PURE__*/React__default.createElement("div", {
586
- className: "search-results__section-header"
587
- }, /*#__PURE__*/React__default.createElement("h2", {
588
- className: "search-results__header"
589
- }, shouldShowInitialData ? 'POPULAR' : 'TOP MATCHES'), /*#__PURE__*/React__default.createElement("button", {
548
+ }, "TOP MATCHES"), /*#__PURE__*/React.createElement("div", {
549
+ className: "search-results__no-results-content"
550
+ }, /*#__PURE__*/React.createElement("div", {
551
+ className: "search-results__no-results-image"
552
+ }, /*#__PURE__*/React.createElement("img", {
553
+ src: noResultsImage,
554
+ alt: "No results"
555
+ })), /*#__PURE__*/React.createElement("div", {
556
+ className: "search-results__no-results-text"
557
+ }, /*#__PURE__*/React.createElement("p", {
558
+ className: "search-results__no-results-title"
559
+ }, "There are currently no products in stock that match your selection"), showCreateInterest && /*#__PURE__*/React.createElement("p", {
560
+ className: "search-results__no-results-description"
561
+ }, "Create an interest now and receive instant notifications as your interests list."))), showCreateInterest && /*#__PURE__*/React.createElement("button", {
590
562
  type: "button",
591
- className: "search-results__view-all-link",
592
- onClick: function onClick() {
593
- onViewAll();
594
- }
595
- }, "View all items")), /*#__PURE__*/React__default.createElement("div", {
596
- className: "search-results__product-list"
597
- }, renderProductsList()), /*#__PURE__*/React__default.createElement("button", {
598
- type: "button",
599
- className: "search-results__view-all-button",
600
- onClick: function onClick() {
601
- onViewAll();
563
+ className: "search-results__create-interest-button",
564
+ onClick: onCreateInterests
565
+ }, "Create Interests")));
566
+ }
602
567
 
603
- if (!shouldShowInitialData) {
604
- onSearchSubmit(searchValue);
605
- setSearchValue('');
606
- setIsSearchFocused(false);
607
- }
568
+ return /*#__PURE__*/React.createElement("div", {
569
+ className: "search-results",
570
+ ref: searchResultsRef
571
+ }, /*#__PURE__*/React.createElement("div", {
572
+ className: "search-results__section"
573
+ }, /*#__PURE__*/React.createElement("h2", {
574
+ className: "search-results__header"
575
+ }, shouldShowInitialData ? 'TRENDING SEARCHES' : 'BRANDS'), /*#__PURE__*/React.createElement("div", {
576
+ className: "search-results__list"
577
+ }, renderBrandsList())), /*#__PURE__*/React.createElement("div", {
578
+ className: "search-results__section"
579
+ }, /*#__PURE__*/React.createElement("div", {
580
+ className: "search-results__section-header"
581
+ }, /*#__PURE__*/React.createElement("h2", {
582
+ className: "search-results__header"
583
+ }, shouldShowInitialData ? 'POPULAR' : 'TOP MATCHES'), /*#__PURE__*/React.createElement("button", {
584
+ type: "button",
585
+ className: "search-results__view-all-link",
586
+ onClick: function onClick() {
587
+ onViewAll();
588
+ }
589
+ }, "View all items")), /*#__PURE__*/React.createElement("div", {
590
+ className: "search-results__product-list"
591
+ }, renderProductsList()), /*#__PURE__*/React.createElement("button", {
592
+ type: "button",
593
+ className: "search-results__view-all-button",
594
+ onClick: function onClick() {
595
+ onViewAll();
596
+
597
+ if (!shouldShowInitialData) {
598
+ onSearchSubmit(searchValue);
599
+ setSearchValue('');
600
+ setIsSearchFocused(false);
608
601
  }
609
- }, "View all items")));
610
- };
602
+ }
603
+ }, "View all items")));
604
+ };
605
+
606
+ var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5;
607
+ /* position relative is required for the Body element to be positioned correctly */
608
+
609
+ var relativeInlineStyle = css(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n position: relative;\n"])));
610
+ var topMiddleBodyStyle = css(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n position: absolute;\n z-index: 1;\n bottom: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n"])));
611
+ var getTopMiddleArrowAfterStyle = function getTopMiddleArrowAfterStyle(props) {
612
+ return css(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["\n /*Bottom Arrow*/\n top: 100%; /* At the bottom of the tooltip */\n left: calc(50% - ", ");\n border-width: ", ";\n border-style: solid;\n border-color: ", " transparent transparent transparent;\n"])), props.$apexWidth, props.$apexWidth, props.theme.colors.base);
613
+ };
614
+ var getBottomMiddleBodyStyle = function getBottomMiddleBodyStyle(props) {
615
+ return css(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral(["\n position: absolute;\n top: 100%;\n left: calc(50% - ", " / 2);\n"])), props.$bodyWidth);
616
+ };
617
+ var getBottomMiddleArrowAfterStyle = function getBottomMiddleArrowAfterStyle(props) {
618
+ return css(_templateObject5 || (_templateObject5 = _taggedTemplateLiteral(["\n /*Top Arrow*/\n bottom: 100%; /* At the top of the tooltip */\n top: initial;\n left: 50%;\n border-style: solid;\n border-color: transparent transparent ", " transparent;\n"])), props.theme.colors.base);
619
+ };
620
+
621
+ var _templateObject$1;
622
+
623
+ var getBodyStyle = function getBodyStyle() {
624
+ var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
625
+ var _props$$toolTipPositi = props.$toolTipPosition,
626
+ $toolTipPosition = _props$$toolTipPositi === void 0 ? '' : _props$$toolTipPositi;
627
+
628
+ switch ($toolTipPosition) {
629
+ case 'top':
630
+ return topMiddleBodyStyle;
631
+
632
+ case 'bottom':
633
+ return getBottomMiddleBodyStyle(props);
634
+
635
+ default:
636
+ return null;
637
+ }
638
+ };
611
639
 
612
- var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5;
613
- /* position relative is required for the Body element to be positioned correctly */
640
+ var getAfterStyling = function getAfterStyling() {
641
+ var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
642
+ var $toolTipPosition = props.$toolTipPosition;
614
643
 
615
- var relativeInlineStyle = styled.css(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n position: relative;\n"])));
616
- 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"])));
617
- var getTopMiddleArrowAfterStyle = function getTopMiddleArrowAfterStyle(props) {
618
- return styled.css(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["\n /*Bottom Arrow*/\n top: 100%; /* At the bottom of the tooltip */\n left: calc(50% - ", ");\n border-width: ", ";\n border-style: solid;\n border-color: ", " transparent transparent transparent;\n"])), props.$apexWidth, props.$apexWidth, props.theme.colors.base);
619
- };
620
- var getBottomMiddleBodyStyle = function getBottomMiddleBodyStyle(props) {
621
- return styled.css(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral(["\n position: absolute;\n top: 100%;\n left: calc(50% - ", " / 2);\n"])), props.$bodyWidth);
622
- };
623
- var getBottomMiddleArrowAfterStyle = function getBottomMiddleArrowAfterStyle(props) {
624
- return styled.css(_templateObject5 || (_templateObject5 = _taggedTemplateLiteral(["\n /*Top Arrow*/\n bottom: 100%; /* At the top of the tooltip */\n top: initial;\n left: 50%;\n border-style: solid;\n border-color: transparent transparent ", " transparent;\n"])), props.theme.colors.base);
625
- };
644
+ switch ($toolTipPosition) {
645
+ case 'top':
646
+ return getTopMiddleArrowAfterStyle(props);
626
647
 
627
- var _templateObject$1;
648
+ case 'bottom':
649
+ return getBottomMiddleArrowAfterStyle(props);
628
650
 
629
- var getBodyStyle = function getBodyStyle() {
630
- var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
631
- var _props$$toolTipPositi = props.$toolTipPosition,
632
- $toolTipPosition = _props$$toolTipPositi === void 0 ? '' : _props$$toolTipPositi;
651
+ default:
652
+ return '';
653
+ }
654
+ };
655
+
656
+ var Body = styled.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) {
657
+ return props.$bodyWidth;
658
+ }, function (props) {
659
+ return props.theme.colors.base || 'black';
660
+ }, function (props) {
661
+ return getBodyStyle(props);
662
+ }, function (props) {
663
+ return getAfterStyling(props);
664
+ });
665
+
666
+ var _templateObject$2;
667
+ var Container = styled.div(_templateObject$2 || (_templateObject$2 = _taggedTemplateLiteral(["\n ", ";\n cursor: pointer;\n &:hover ", " {\n opacity: 1;\n visibility: visible;\n }\n"])), relativeInlineStyle, Body);
668
+
669
+ var theme = {
670
+ breakpoints: ['40em', '52em', '64em'],
671
+ space: ['0px', '4px', '8px', '16px', '32px', '64px', '128px', '256px', '512px'],
672
+ fontSizes: ['12px', '14px', '16px', '20px', '24px', '32px', '48px', '64px', '72px'],
673
+ marginPaddings: ['0.5rem', '1rem', '1.5rem', '2rem', '2.5rem', '3rem', '3.5rem', '4rem', '4.5rem', '5rem', '5.5rem', '6rem'],
674
+ letterSpacings: ['-0.5px', '0px', '+0.5px'],
675
+ radii: ['0px', '2px', '4px', '8px'],
676
+ borderRadius: '6px',
677
+ colors: {
678
+ primary: '#000',
679
+ base: '#4e4949',
680
+ baseLt: '#817c7c',
681
+ borderColor: '#d8d8d8',
682
+ ntrlMin: '#fff',
683
+ ntrlMinTen: '#e6e6e6',
684
+ gray: '#efefef',
685
+ darkerGray: '#454141'
686
+ },
687
+ rareStepColors: {
688
+ primary: '#202b58',
689
+ secondary: '#ef5c2d',
690
+ ntrlMin: '#ffffff',
691
+ ntrl40: '#f4f4f4',
692
+ ntrl50: '#808080',
693
+ ntrl60: '#e8e8e8',
694
+ ntrl70: '#252525',
695
+ ntrlMax: '#000000'
696
+ },
697
+ rareStepFontWeights: {
698
+ normal: 400,
699
+ medium: 500,
700
+ semiBold: 600,
701
+ bold: 700
702
+ },
703
+ rareStepFontSize: {
704
+ h1: '36px',
705
+ h2: '30px',
706
+ h3: '24px',
707
+ h4: '20px',
708
+ h5: '16px',
709
+ h6: '14px',
710
+ footerTitle: '16px'
711
+ },
712
+ rareStepPageSizes: {
713
+ mobile: '500px',
714
+ tablet: '768px',
715
+ desktop: '992px',
716
+ screenl: '1280px',
717
+ screenxl: '1680px',
718
+ screenxxl: '1920px',
719
+ container: '1600px'
720
+ }
721
+ };
722
+
723
+ var themed = (function (Component) {
724
+ return /*#__PURE__*/forwardRef(function (props, ref) {
725
+ return /*#__PURE__*/React.createElement(ThemeProvider, {
726
+ theme: theme
727
+ }, /*#__PURE__*/React.createElement(Component, _extends({}, props, {
728
+ ref: ref
729
+ })));
730
+ });
731
+ });
732
+
733
+ /* eslint-disable react/require-default-props */
734
+
735
+ var Tooltip = function Tooltip(_ref) {
736
+ var _ref$children = _ref.children,
737
+ children = _ref$children === void 0 ? null : _ref$children,
738
+ _ref$toolTipText = _ref.toolTipText,
739
+ toolTipText = _ref$toolTipText === void 0 ? '' : _ref$toolTipText,
740
+ _ref$toolTipPosition = _ref.toolTipPosition,
741
+ toolTipPosition = _ref$toolTipPosition === void 0 ? 'top' : _ref$toolTipPosition,
742
+ _ref$bodyWidth = _ref.bodyWidth,
743
+ bodyWidth = _ref$bodyWidth === void 0 ? '8em' : _ref$bodyWidth,
744
+ _ref$apexWidth = _ref.apexWidth,
745
+ apexWidth = _ref$apexWidth === void 0 ? '5px' : _ref$apexWidth,
746
+ _ref$containerClassNa = _ref.containerClassName,
747
+ containerClassName = _ref$containerClassNa === void 0 ? '' : _ref$containerClassNa,
748
+ _ref$bodyClassName = _ref.bodyClassName,
749
+ bodyClassName = _ref$bodyClassName === void 0 ? '' : _ref$bodyClassName;
750
+ return /*#__PURE__*/React.createElement(Container, {
751
+ className: containerClassName
752
+ }, children, /*#__PURE__*/React.createElement(Body, {
753
+ $toolTipPosition: toolTipPosition,
754
+ $bodyWidth: bodyWidth,
755
+ $apexWidth: apexWidth,
756
+ className: bodyClassName
757
+ }, toolTipText));
758
+ };
759
+
760
+ var Tooltip$1 = themed(Tooltip);
761
+
762
+ var CurrencySelect = function CurrencySelect(_ref) {
763
+ var currency = _ref.currency,
764
+ currencyOptions = _ref.currencyOptions,
765
+ onCurrencyChange = _ref.onCurrencyChange,
766
+ _ref$isCurrencySelect = _ref.isCurrencySelectionDisabled,
767
+ isCurrencySelectionDisabled = _ref$isCurrencySelect === void 0 ? false : _ref$isCurrencySelect,
768
+ _ref$tooltipContent = _ref.tooltipContent,
769
+ tooltipContent = _ref$tooltipContent === void 0 ? '' : _ref$tooltipContent;
770
+
771
+ if (!currencyOptions || currencyOptions.length === 0) {
772
+ return null;
773
+ }
633
774
 
634
- switch ($toolTipPosition) {
635
- case 'top':
636
- return topMiddleBodyStyle;
775
+ var selectedOption = currencyOptions.find(function (opt) {
776
+ return opt.value === currency;
777
+ });
637
778
 
638
- case 'bottom':
639
- return getBottomMiddleBodyStyle(props);
779
+ if (!selectedOption) {
780
+ return null;
781
+ }
640
782
 
641
- default:
642
- return null;
783
+ return /*#__PURE__*/React.createElement(Tooltip$1, {
784
+ toolTipText: isCurrencySelectionDisabled ? tooltipContent : '',
785
+ toolTipPosition: "bottom",
786
+ bodyWidth: "160px"
787
+ }, /*#__PURE__*/React.createElement("div", {
788
+ className: "currency-select-container ".concat(isCurrencySelectionDisabled ? 'disabled' : '')
789
+ }, /*#__PURE__*/React.createElement("div", {
790
+ className: "currency-flag"
791
+ }, /*#__PURE__*/React.createElement("img", {
792
+ src: selectedOption.flagSrc,
793
+ alt: "".concat(currency, " flag")
794
+ })), /*#__PURE__*/React.createElement("select", {
795
+ value: currency,
796
+ onChange: function onChange(e) {
797
+ return onCurrencyChange(e.target.value);
798
+ },
799
+ className: "currency-select",
800
+ disabled: isCurrencySelectionDisabled
801
+ }, currencyOptions.map(function (option) {
802
+ return /*#__PURE__*/React.createElement("option", {
803
+ key: option.value,
804
+ value: option.value
805
+ }, option.value, " (", option.symbol, ")");
806
+ }))));
807
+ };
808
+
809
+ var searchBrandsAggregations = function searchBrandsAggregations(search, currencyCode) {
810
+ return {
811
+ query: "\n query GetProductFilterAggregations($search: String!) {\n luxity_products_aggregations(search: $search) {\n luxity_brand {\n name\n }\n }\n }\n ",
812
+ variables: {
813
+ search: search,
814
+ currency_code: currencyCode
643
815
  }
644
816
  };
645
-
646
- var getAfterStyling = function getAfterStyling() {
647
- var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
648
- var $toolTipPosition = props.$toolTipPosition;
649
-
650
- switch ($toolTipPosition) {
651
- case 'top':
652
- return getTopMiddleArrowAfterStyle(props);
653
-
654
- case 'bottom':
655
- return getBottomMiddleArrowAfterStyle(props);
656
-
657
- default:
658
- return '';
817
+ }; // NEW: Get top products for search dropdown (right side)
818
+
819
+ var searchProductsFilter = function searchProductsFilter(search, limit, currencyCode) {
820
+ return {
821
+ query: "\n query LUXITY_PRODUCTS_FILTER(\n $search: String!\n $limit: Int!\n $page: Int!\n $sort_by: String!\n $with_sold: Boolean!\n $currency_code: String!\n ) {\n luxity_products_filter(\n search: $search\n limit: $limit\n page: $page\n sort_by: $sort_by\n with_sold: $with_sold\n ) {\n data {\n id\n product {\n sku\n name\n price(currency_code: $currency_code)\n promotion_price(currency_code: $currency_code)\n est_retail_price(currency_code: $currency_code)\n condition\n currency_symbol(currency_code: $currency_code)\n }\n product_slug\n category_type\n gender\n status\n featured_image\n on_promotion\n promotion_discount\n luxity_brand {\n id\n name\n slug\n }\n }\n total\n }\n }\n ",
822
+ variables: {
823
+ search: search,
824
+ limit: limit,
825
+ page: 1,
826
+ sort_by: 'newest',
827
+ with_sold: false,
828
+ currency_code: currencyCode
659
829
  }
660
830
  };
831
+ };
832
+
833
+ var useSearch = function useSearch(_ref) {
834
+ var endpoint = _ref.endpoint,
835
+ onSearchLoading = _ref.onSearchLoading,
836
+ currency = _ref.currency,
837
+ onSearchPreview = _ref.onSearchPreview,
838
+ onNoResults = _ref.onNoResults;
839
+ var currentSearchRequestToken = useRef(null);
840
+ var debounce = useCallback(function (func, wait) {
841
+ var timeout;
842
+ return function executedFunction() {
843
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
844
+ args[_key] = arguments[_key];
845
+ }
661
846
 
662
- 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) {
663
- return props.$bodyWidth;
664
- }, function (props) {
665
- return props.theme.colors.base || 'black';
666
- }, function (props) {
667
- return getBodyStyle(props);
668
- }, function (props) {
669
- return getAfterStyling(props);
670
- });
671
-
672
- var _templateObject$2;
673
- var Container = styled__default.div(_templateObject$2 || (_templateObject$2 = _taggedTemplateLiteral(["\n ", ";\n cursor: pointer;\n &:hover ", " {\n opacity: 1;\n visibility: visible;\n }\n"])), relativeInlineStyle, Body);
674
-
675
- var theme = {
676
- breakpoints: ['40em', '52em', '64em'],
677
- space: ['0px', '4px', '8px', '16px', '32px', '64px', '128px', '256px', '512px'],
678
- fontSizes: ['12px', '14px', '16px', '20px', '24px', '32px', '48px', '64px', '72px'],
679
- marginPaddings: ['0.5rem', '1rem', '1.5rem', '2rem', '2.5rem', '3rem', '3.5rem', '4rem', '4.5rem', '5rem', '5.5rem', '6rem'],
680
- letterSpacings: ['-0.5px', '0px', '+0.5px'],
681
- radii: ['0px', '2px', '4px', '8px'],
682
- borderRadius: '6px',
683
- colors: {
684
- primary: '#000',
685
- base: '#4e4949',
686
- baseLt: '#817c7c',
687
- borderColor: '#d8d8d8',
688
- ntrlMin: '#fff',
689
- ntrlMinTen: '#e6e6e6',
690
- gray: '#efefef',
691
- darkerGray: '#454141'
692
- },
693
- rareStepColors: {
694
- primary: '#202b58',
695
- secondary: '#ef5c2d',
696
- ntrlMin: '#ffffff',
697
- ntrl40: '#f4f4f4',
698
- ntrl50: '#808080',
699
- ntrl60: '#e8e8e8',
700
- ntrl70: '#252525',
701
- ntrlMax: '#000000'
702
- },
703
- rareStepFontWeights: {
704
- normal: 400,
705
- medium: 500,
706
- semiBold: 600,
707
- bold: 700
708
- },
709
- rareStepFontSize: {
710
- h1: '36px',
711
- h2: '30px',
712
- h3: '24px',
713
- h4: '20px',
714
- h5: '16px',
715
- h6: '14px',
716
- footerTitle: '16px'
717
- },
718
- rareStepPageSizes: {
719
- mobile: '500px',
720
- tablet: '768px',
721
- desktop: '992px',
722
- screenl: '1280px',
723
- screenxl: '1680px',
724
- screenxxl: '1920px',
725
- container: '1600px'
726
- }
727
- };
847
+ var later = function later() {
848
+ clearTimeout(timeout);
849
+ func.apply(void 0, args);
850
+ };
728
851
 
729
- var themed = (function (Component) {
730
- return /*#__PURE__*/React.forwardRef(function (props, ref) {
731
- return /*#__PURE__*/React__default.createElement(styled.ThemeProvider, {
732
- theme: theme
733
- }, /*#__PURE__*/React__default.createElement(Component, _extends({}, props, {
734
- ref: ref
735
- })));
852
+ clearTimeout(timeout);
853
+ timeout = setTimeout(later, wait);
854
+ };
855
+ }, []);
856
+ var fetchInitialSearchData = useCallback(function (initialSearchDataUrl, setInitialSearchView) {
857
+ axios.get("".concat(initialSearchDataUrl)).then(function (_ref2) {
858
+ var data = _ref2.data;
859
+ setInitialSearchView({
860
+ trending_brands: data.trending_brands,
861
+ latest_products: data.latest_products
862
+ });
863
+ }).catch(function () {
864
+ setInitialSearchView({
865
+ trending_brands: [],
866
+ latest_products: []
867
+ });
736
868
  });
737
- });
869
+ }, []);
870
+ var performSearch = useCallback(function (searchQuery, setSearchResults) {
871
+ if (!searchQuery || searchQuery.trim() === '') {
872
+ setSearchResults({
873
+ brands: [],
874
+ products: []
875
+ }); // Reset no results state when clearing search
738
876
 
739
- /* eslint-disable react/require-default-props */
740
-
741
- var Tooltip = function Tooltip(_ref) {
742
- var _ref$children = _ref.children,
743
- children = _ref$children === void 0 ? null : _ref$children,
744
- _ref$toolTipText = _ref.toolTipText,
745
- toolTipText = _ref$toolTipText === void 0 ? '' : _ref$toolTipText,
746
- _ref$toolTipPosition = _ref.toolTipPosition,
747
- toolTipPosition = _ref$toolTipPosition === void 0 ? 'top' : _ref$toolTipPosition,
748
- _ref$bodyWidth = _ref.bodyWidth,
749
- bodyWidth = _ref$bodyWidth === void 0 ? '8em' : _ref$bodyWidth,
750
- _ref$apexWidth = _ref.apexWidth,
751
- apexWidth = _ref$apexWidth === void 0 ? '5px' : _ref$apexWidth,
752
- _ref$containerClassNa = _ref.containerClassName,
753
- containerClassName = _ref$containerClassNa === void 0 ? '' : _ref$containerClassNa,
754
- _ref$bodyClassName = _ref.bodyClassName,
755
- bodyClassName = _ref$bodyClassName === void 0 ? '' : _ref$bodyClassName;
756
- return /*#__PURE__*/React__default.createElement(Container, {
757
- className: containerClassName
758
- }, children, /*#__PURE__*/React__default.createElement(Body, {
759
- $toolTipPosition: toolTipPosition,
760
- $bodyWidth: bodyWidth,
761
- $apexWidth: apexWidth,
762
- className: bodyClassName
763
- }, toolTipText));
764
- };
877
+ if (typeof onNoResults === 'function') {
878
+ onNoResults(false);
879
+ }
765
880
 
766
- var Tooltip$1 = themed(Tooltip);
881
+ return;
882
+ } // Cancel any ongoing search request to prevent race conditions
767
883
 
768
- var CurrencySelect = function CurrencySelect(_ref) {
769
- var currency = _ref.currency,
770
- currencyOptions = _ref.currencyOptions,
771
- onCurrencyChange = _ref.onCurrencyChange,
772
- _ref$isCurrencySelect = _ref.isCurrencySelectionDisabled,
773
- isCurrencySelectionDisabled = _ref$isCurrencySelect === void 0 ? false : _ref$isCurrencySelect,
774
- _ref$tooltipContent = _ref.tooltipContent,
775
- tooltipContent = _ref$tooltipContent === void 0 ? '' : _ref$tooltipContent;
776
884
 
777
- if (!currencyOptions || currencyOptions.length === 0) {
778
- return null;
779
- }
885
+ if (currentSearchRequestToken.current) {
886
+ currentSearchRequestToken.current.cancel();
887
+ } // Create a new token for this specific search request
780
888
 
781
- var selectedOption = currencyOptions.find(function (opt) {
782
- return opt.value === currency;
783
- });
784
889
 
785
- if (!selectedOption) {
786
- return null;
787
- }
890
+ var newSearchToken = axios.CancelToken.source();
891
+ currentSearchRequestToken.current = newSearchToken; // Reset no results state when starting new search (user is typing)
788
892
 
789
- return /*#__PURE__*/React__default.createElement(Tooltip$1, {
790
- toolTipText: isCurrencySelectionDisabled ? tooltipContent : '',
791
- toolTipPosition: "bottom",
792
- bodyWidth: "160px"
793
- }, /*#__PURE__*/React__default.createElement("div", {
794
- className: "currency-select-container ".concat(isCurrencySelectionDisabled ? 'disabled' : '')
795
- }, /*#__PURE__*/React__default.createElement("div", {
796
- className: "currency-flag"
797
- }, /*#__PURE__*/React__default.createElement("img", {
798
- src: selectedOption.flagSrc,
799
- alt: "".concat(currency, " flag")
800
- })), /*#__PURE__*/React__default.createElement("select", {
801
- value: currency,
802
- onChange: function onChange(e) {
803
- return onCurrencyChange(e.target.value);
804
- },
805
- className: "currency-select",
806
- disabled: isCurrencySelectionDisabled
807
- }, currencyOptions.map(function (option) {
808
- return /*#__PURE__*/React__default.createElement("option", {
809
- key: option.value,
810
- value: option.value
811
- }, option.value, " (", option.symbol, ")");
812
- }))));
813
- };
893
+ if (typeof onNoResults === 'function') {
894
+ onNoResults(false);
895
+ } // Set loading to true when starting the search request
814
896
 
815
- var searchBrandsAggregations = function searchBrandsAggregations(search, currencyCode) {
816
- return {
817
- query: "\n query GetProductFilterAggregations($search: String!) {\n luxity_products_aggregations(search: $search) {\n luxity_brand {\n name\n }\n }\n }\n ",
818
- variables: {
819
- search: search,
820
- currency_code: currencyCode
821
- }
822
- };
823
- }; // NEW: Get top products for search dropdown (right side)
824
-
825
- var searchProductsFilter = function searchProductsFilter(search, limit, currencyCode) {
826
- return {
827
- query: "\n query LUXITY_PRODUCTS_FILTER(\n $search: String!\n $limit: Int!\n $page: Int!\n $sort_by: String!\n $with_sold: Boolean!\n $currency_code: String!\n ) {\n luxity_products_filter(\n search: $search\n limit: $limit\n page: $page\n sort_by: $sort_by\n with_sold: $with_sold\n ) {\n data {\n id\n product {\n sku\n name\n price(currency_code: $currency_code)\n promotion_price(currency_code: $currency_code)\n est_retail_price(currency_code: $currency_code)\n condition\n currency_symbol(currency_code: $currency_code)\n }\n product_slug\n category_type\n gender\n status\n featured_image\n on_promotion\n promotion_discount\n luxity_brand {\n id\n name\n slug\n }\n }\n total\n }\n }\n ",
828
- variables: {
829
- search: search,
830
- limit: limit,
831
- page: 1,
832
- sort_by: 'newest',
833
- with_sold: false,
834
- currency_code: currencyCode
835
- }
836
- };
837
- };
838
897
 
839
- var useSearch = function useSearch(_ref) {
840
- var endpoint = _ref.endpoint,
841
- onSearchLoading = _ref.onSearchLoading,
842
- currency = _ref.currency,
843
- onSearchPreview = _ref.onSearchPreview,
844
- onNoResults = _ref.onNoResults;
845
- var currentSearchRequestToken = React.useRef(null);
846
- var debounce = React.useCallback(function (func, wait) {
847
- var timeout;
848
- return function executedFunction() {
849
- for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
850
- args[_key] = arguments[_key];
851
- }
898
+ if (typeof onSearchLoading === 'function') {
899
+ onSearchLoading(true);
900
+ } // Make TWO parallel queries: brands aggregations + products filter
852
901
 
853
- var later = function later() {
854
- clearTimeout(timeout);
855
- func.apply(void 0, args);
856
- };
857
902
 
858
- clearTimeout(timeout);
859
- timeout = setTimeout(later, wait);
860
- };
861
- }, []);
862
- var fetchInitialSearchData = React.useCallback(function (initialSearchDataUrl, setInitialSearchView) {
863
- axios.get("".concat(initialSearchDataUrl)).then(function (_ref2) {
864
- var data = _ref2.data;
865
- setInitialSearchView({
866
- trending_brands: data.trending_brands,
867
- latest_products: data.latest_products
868
- });
869
- }).catch(function () {
870
- setInitialSearchView({
871
- trending_brands: [],
872
- latest_products: []
873
- });
874
- });
875
- }, []);
876
- var performSearch = React.useCallback(function (searchQuery, setSearchResults) {
877
- if (!searchQuery || searchQuery.trim() === '') {
878
- setSearchResults({
879
- brands: [],
880
- products: []
881
- }); // Reset no results state when clearing search
903
+ Promise.all([// Query 1: Get brands aggregations
904
+ axios.post(endpoint, searchBrandsAggregations(searchQuery, currency), {
905
+ cancelToken: newSearchToken.token
906
+ }), // Query 2: Get top 3 products
907
+ axios.post(endpoint, searchProductsFilter(searchQuery, 3, currency), {
908
+ cancelToken: newSearchToken.token
909
+ })]).then(function (_ref3) {
910
+ var _ref4 = _slicedToArray(_ref3, 2),
911
+ brandsResponse = _ref4[0],
912
+ productsResponse = _ref4[1];
882
913
 
883
- if (typeof onNoResults === 'function') {
884
- onNoResults(false);
885
- }
914
+ if (currentSearchRequestToken.current === newSearchToken) {
915
+ var _brandsResponse$data$, _productsResponse$dat, _productsResponse$dat2;
886
916
 
887
- return;
888
- } // Cancel any ongoing search request to prevent race conditions
917
+ // Set loading to false when search completes
918
+ if (typeof onSearchLoading === 'function') {
919
+ onSearchLoading(false);
920
+ } // Extract brands from aggregations
889
921
 
890
922
 
891
- if (currentSearchRequestToken.current) {
892
- currentSearchRequestToken.current.cancel();
893
- } // Create a new token for this specific search request
923
+ var brandsData = ((_brandsResponse$data$ = brandsResponse.data.data.luxity_products_aggregations) === null || _brandsResponse$data$ === void 0 ? void 0 : _brandsResponse$data$.luxity_brand) || []; // Extract products from filter
894
924
 
925
+ var productsData = ((_productsResponse$dat = productsResponse.data.data.luxity_products_filter) === null || _productsResponse$dat === void 0 ? void 0 : _productsResponse$dat.data) || [];
926
+ var totalResults = ((_productsResponse$dat2 = productsResponse.data.data.luxity_products_filter) === null || _productsResponse$dat2 === void 0 ? void 0 : _productsResponse$dat2.total) || 0; // Map brands to old structure: { name, link }
895
927
 
896
- var newSearchToken = axios.CancelToken.source();
897
- currentSearchRequestToken.current = newSearchToken; // Reset no results state when starting new search (user is typing)
928
+ var brands = brandsData.slice(0, 10).map(function (brand) {
929
+ return {
930
+ name: brand.name,
931
+ link: "/products/brands/".concat(brand.name.toLowerCase().replace(/\s+/g, '-')) // Convert to slug
898
932
 
899
- if (typeof onNoResults === 'function') {
900
- onNoResults(false);
901
- } // Set loading to true when starting the search request
902
-
903
-
904
- if (typeof onSearchLoading === 'function') {
905
- onSearchLoading(true);
906
- } // Make TWO parallel queries: brands aggregations + products filter
907
-
908
-
909
- Promise.all([// Query 1: Get brands aggregations
910
- axios.post(endpoint, searchBrandsAggregations(searchQuery, currency), {
911
- cancelToken: newSearchToken.token
912
- }), // Query 2: Get top 3 products
913
- axios.post(endpoint, searchProductsFilter(searchQuery, 3, currency), {
914
- cancelToken: newSearchToken.token
915
- })]).then(function (_ref3) {
916
- var _ref4 = _slicedToArray(_ref3, 2),
917
- brandsResponse = _ref4[0],
918
- productsResponse = _ref4[1];
919
-
920
- if (currentSearchRequestToken.current === newSearchToken) {
921
- var _brandsResponse$data$, _productsResponse$dat, _productsResponse$dat2;
922
-
923
- // Set loading to false when search completes
924
- if (typeof onSearchLoading === 'function') {
925
- onSearchLoading(false);
926
- } // Extract brands from aggregations
927
-
928
-
929
- var brandsData = ((_brandsResponse$data$ = brandsResponse.data.data.luxity_products_aggregations) === null || _brandsResponse$data$ === void 0 ? void 0 : _brandsResponse$data$.luxity_brand) || []; // Extract products from filter
930
-
931
- var productsData = ((_productsResponse$dat = productsResponse.data.data.luxity_products_filter) === null || _productsResponse$dat === void 0 ? void 0 : _productsResponse$dat.data) || [];
932
- var totalResults = ((_productsResponse$dat2 = productsResponse.data.data.luxity_products_filter) === null || _productsResponse$dat2 === void 0 ? void 0 : _productsResponse$dat2.total) || 0; // Map brands to old structure: { name, link }
933
-
934
- var brands = brandsData.slice(0, 10).map(function (brand) {
935
- return {
936
- name: brand.name,
937
- link: "/products/brands/".concat(brand.name.toLowerCase().replace(/\s+/g, '-')) // Convert to slug
938
-
939
- };
940
- }); // Map products to old structure with prices
941
-
942
- var products = productsData.map(function (product) {
943
- // Generate product link: /products/{category_type}/{brand_slug}/{product_slug}
944
- var categorySlug = product.category_type.toLowerCase().replace(/\s+/g, '-');
945
- var brandSlug = product.luxity_brand.slug;
946
- var productSlug = product.product_slug;
947
- var link = "/products/".concat(categorySlug, "/").concat(brandSlug, "/").concat(productSlug);
948
- return {
949
- name: product.product.name,
950
- brand: product.luxity_brand.name,
951
- link: link,
952
- price: product.product.price || 0,
953
- promotion_price: product.product.promotion_price || null,
954
- est_retail_price: product.product.est_retail_price || 0,
955
- condition: product.product.condition || '',
956
- currency_symbol: product.product.currency_symbol || '',
957
- featured_image: product.featured_image,
958
- on_promotion: product.on_promotion || false,
959
- promotion_discount: product.promotion_discount || 0,
960
- id: product.id,
961
- category_type: product.category_type,
962
- product_slug: product.product_slug,
963
- luxity_brand: product.luxity_brand
964
- };
965
- });
966
- var searchResults = {
967
- brands: brands,
968
- products: products,
969
- total: totalResults
970
933
  };
971
- setSearchResults(searchResults); // Check if we have no results (empty aggregations)
972
-
973
- var hasNoResults = brandsData.length === 0 && productsData.length === 0;
974
-
975
- if (typeof onNoResults === 'function') {
976
- onNoResults(hasNoResults);
977
- }
934
+ }); // Map products to old structure with prices
935
+
936
+ var products = productsData.map(function (product) {
937
+ // Generate product link: /products/{category_type}/{brand_slug}/{product_slug}
938
+ var categorySlug = product.category_type.toLowerCase().replace(/\s+/g, '-');
939
+ var brandSlug = product.luxity_brand.slug;
940
+ var productSlug = product.product_slug;
941
+ var link = "/products/".concat(categorySlug, "/").concat(brandSlug, "/").concat(productSlug);
942
+ return {
943
+ name: product.product.name,
944
+ brand: product.luxity_brand.name,
945
+ link: link,
946
+ price: product.product.price || 0,
947
+ promotion_price: product.product.promotion_price || null,
948
+ est_retail_price: product.product.est_retail_price || 0,
949
+ condition: product.product.condition || '',
950
+ currency_symbol: product.product.currency_symbol || '',
951
+ featured_image: product.featured_image,
952
+ on_promotion: product.on_promotion || false,
953
+ promotion_discount: product.promotion_discount || 0,
954
+ id: product.id,
955
+ category_type: product.category_type,
956
+ product_slug: product.product_slug,
957
+ luxity_brand: product.luxity_brand
958
+ };
959
+ });
960
+ var searchResults = {
961
+ brands: brands,
962
+ products: products,
963
+ total: totalResults
964
+ };
965
+ setSearchResults(searchResults); // Check if we have no results (empty aggregations)
978
966
 
979
- if (typeof onSearchPreview === 'function') {
980
- var hasResults = brands.length > 0 || products.length > 0;
981
- onSearchPreview({
982
- search_string: searchQuery,
983
- has_results: hasResults
984
- });
985
- }
967
+ var hasNoResults = brandsData.length === 0 && productsData.length === 0;
986
968
 
987
- currentSearchRequestToken.current = null;
969
+ if (typeof onNoResults === 'function') {
970
+ onNoResults(hasNoResults);
988
971
  }
989
- }).catch(function (error) {
990
- if (!axios.isCancel(error)) {
991
- // Set loading to false when search fails
992
- if (typeof onSearchLoading === 'function') {
993
- onSearchLoading(false);
994
- }
995
972
 
996
- setSearchResults({
997
- brands: [],
998
- products: []
973
+ if (typeof onSearchPreview === 'function') {
974
+ var hasResults = brands.length > 0 || products.length > 0;
975
+ onSearchPreview({
976
+ search_string: searchQuery,
977
+ has_results: hasResults
999
978
  });
1000
- currentSearchRequestToken.current = null;
1001
979
  }
1002
- });
1003
- }, [endpoint, currency, onSearchPreview, onSearchLoading, onNoResults]);
1004
- var debouncedSearch = React.useMemo(function () {
1005
- return debounce(function (searchQuery, setSearchResults) {
1006
- return performSearch(searchQuery, setSearchResults);
1007
- }, 500);
1008
- }, [debounce, performSearch]);
1009
- var createDebouncedSearch = React.useCallback(function (setSearchResults) {
1010
- return function (searchQuery) {
1011
- return debouncedSearch(searchQuery, setSearchResults);
1012
- };
1013
- }, [debouncedSearch]);
1014
- var createImmediateSearch = React.useCallback(function (setSearchValue, setSearchResults, onSearchSubmit) {
1015
- return function (searchQuery) {
1016
- /*
1017
- * Cancel any pending search request when immediate search is performed
1018
- * Immediate search is when the user types a search query and presses enter
1019
- */
1020
- if (currentSearchRequestToken.current) {
1021
- currentSearchRequestToken.current.cancel();
1022
- currentSearchRequestToken.current = null;
980
+
981
+ currentSearchRequestToken.current = null;
982
+ }
983
+ }).catch(function (error) {
984
+ if (!axios.isCancel(error)) {
985
+ // Set loading to false when search fails
986
+ if (typeof onSearchLoading === 'function') {
987
+ onSearchLoading(false);
1023
988
  }
1024
989
 
1025
- setSearchValue('');
1026
990
  setSearchResults({
1027
991
  brands: [],
1028
992
  products: []
1029
993
  });
1030
- onSearchSubmit(searchQuery);
1031
- };
1032
- }, []);
1033
- return {
1034
- fetchInitialSearchData: fetchInitialSearchData,
1035
- createDebouncedSearch: createDebouncedSearch,
1036
- createImmediateSearch: createImmediateSearch
994
+ currentSearchRequestToken.current = null;
995
+ }
996
+ });
997
+ }, [endpoint, currency, onSearchPreview, onSearchLoading, onNoResults]);
998
+ var debouncedSearch = useMemo(function () {
999
+ return debounce(function (searchQuery, setSearchResults) {
1000
+ return performSearch(searchQuery, setSearchResults);
1001
+ }, 500);
1002
+ }, [debounce, performSearch]);
1003
+ var createDebouncedSearch = useCallback(function (setSearchResults) {
1004
+ return function (searchQuery) {
1005
+ return debouncedSearch(searchQuery, setSearchResults);
1037
1006
  };
1038
- };
1039
-
1040
- var useSearchClickOutside = function useSearchClickOutside(ref, searchResults, setCachedResults, setIsSearchFocused, setSearchResults) {
1041
- var setSearchValue = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : null;
1042
- var setShowNoResults = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : null;
1043
- React.useEffect(function () {
1044
- var handleClickOutside = function handleClickOutside(event) {
1045
- if (ref.current && !ref.current.contains(event.target)) {
1046
- setCachedResults(searchResults);
1047
- setIsSearchFocused(false);
1048
- setSearchResults({
1049
- brands: [],
1050
- products: []
1051
- }); // Reset search value and no results state when closing
1052
-
1053
- if (setSearchValue) {
1054
- setSearchValue('');
1055
- }
1056
-
1057
- if (setShowNoResults) {
1058
- setShowNoResults(false);
1059
- }
1060
- }
1061
- };
1062
-
1063
- document.addEventListener('mousedown', handleClickOutside);
1064
- return function () {
1065
- document.removeEventListener('mousedown', handleClickOutside);
1066
- };
1067
- }, [ref, searchResults, setCachedResults, setIsSearchFocused, setSearchResults, setSearchValue, setShowNoResults]);
1068
- };
1069
- var useSearchInputChange = function useSearchInputChange(setSearchValue, setIsSearchFocused, debouncedSearch, setSearchResults, setCachedResults) {
1070
- var app = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : false;
1071
- var productsUrl = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : null;
1072
- return React.useCallback(function (event) {
1073
- var value = event.target.value;
1074
-
1075
- if (app && productsUrl && value.trim().length > 0) {
1076
- window.location.href = productsUrl;
1077
- return;
1007
+ }, [debouncedSearch]);
1008
+ var createImmediateSearch = useCallback(function (setSearchValue, setSearchResults, onSearchSubmit) {
1009
+ return function (searchQuery) {
1010
+ /*
1011
+ * Cancel any pending search request when immediate search is performed
1012
+ * Immediate search is when the user types a search query and presses enter
1013
+ */
1014
+ if (currentSearchRequestToken.current) {
1015
+ currentSearchRequestToken.current.cancel();
1016
+ currentSearchRequestToken.current = null;
1078
1017
  }
1079
1018
 
1080
- setSearchValue(value);
1081
- setIsSearchFocused(true);
1082
-
1083
- if (value.trim().length >= 3) {
1084
- debouncedSearch(value);
1085
- } else {
1019
+ setSearchValue('');
1020
+ setSearchResults({
1021
+ brands: [],
1022
+ products: []
1023
+ });
1024
+ onSearchSubmit(searchQuery);
1025
+ };
1026
+ }, []);
1027
+ return {
1028
+ fetchInitialSearchData: fetchInitialSearchData,
1029
+ createDebouncedSearch: createDebouncedSearch,
1030
+ createImmediateSearch: createImmediateSearch
1031
+ };
1032
+ };
1033
+
1034
+ var useSearchClickOutside = function useSearchClickOutside(ref, searchResults, setCachedResults, setIsSearchFocused, setSearchResults) {
1035
+ var setSearchValue = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : null;
1036
+ var setShowNoResults = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : null;
1037
+ useEffect(function () {
1038
+ var handleClickOutside = function handleClickOutside(event) {
1039
+ if (ref.current && !ref.current.contains(event.target)) {
1040
+ setCachedResults(searchResults);
1041
+ setIsSearchFocused(false);
1086
1042
  setSearchResults({
1087
1043
  brands: [],
1088
1044
  products: []
1089
- });
1090
- setCachedResults({
1091
- brands: [],
1092
- products: []
1093
- });
1094
- }
1095
- }, [setSearchValue, setIsSearchFocused, debouncedSearch, setSearchResults, setCachedResults, app, productsUrl]);
1096
- };
1097
- var useSearchInputFocus = function useSearchInputFocus(searchValue, setIsSearchFocused, cachedResults, setSearchResults) {
1098
- var handleSearchClick = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : undefined;
1099
- var setShowNoResults = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : null;
1100
- return React.useCallback(function () {
1101
- setIsSearchFocused(true); // Reset no results state when reopening search
1102
-
1103
- if (setShowNoResults) {
1104
- setShowNoResults(false);
1105
- }
1045
+ }); // Reset search value and no results state when closing
1106
1046
 
1107
- if (typeof handleSearchClick === 'function') {
1108
- handleSearchClick();
1109
- } else if (searchValue.trim().length >= 3) {
1110
- setSearchResults(cachedResults);
1111
- }
1112
- }, [searchValue, setIsSearchFocused, cachedResults, setSearchResults, handleSearchClick, setShowNoResults]);
1113
- };
1114
- var useSearchInputKeyDown = function useSearchInputKeyDown(searchValue, immediateSearch, setIsSearchFocused) {
1115
- var setSearchValue = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;
1116
- return React.useCallback(function (event) {
1117
- if (event.key === 'Enter') {
1118
- event.preventDefault();
1119
-
1120
- if (searchValue.trim().length >= 3) {
1121
- immediateSearch(searchValue);
1047
+ if (setSearchValue) {
1048
+ setSearchValue('');
1122
1049
  }
1123
1050
 
1124
- setIsSearchFocused(false);
1125
- } else if (event.key === 'Escape' && setSearchValue) {
1126
- setSearchValue('');
1127
- setIsSearchFocused(false);
1128
- }
1129
- }, [searchValue, immediateSearch, setIsSearchFocused, setSearchValue]);
1130
- };
1131
-
1132
- var removeCategoryByName = function removeCategoryByName(categories, name) {
1133
- var _categories$filter;
1134
-
1135
- return (_categories$filter = categories === null || categories === void 0 ? void 0 : categories.filter(function (category) {
1136
- return category.name.toLowerCase() !== name.toLowerCase();
1137
- })) !== null && _categories$filter !== void 0 ? _categories$filter : [];
1138
- };
1139
-
1140
- var LuxityDesktopHeader = function LuxityDesktopHeader(_ref) {
1141
- var accountIcon = _ref.accountIcon,
1142
- cartIcon = _ref.cartIcon,
1143
- interestIcon = _ref.interestIcon,
1144
- cartCount = _ref.cartCount,
1145
- logoSrc = _ref.logoSrc,
1146
- categoryElements = _ref.categoryElements,
1147
- stores = _ref.stores,
1148
- contactNumber = _ref.contactNumber,
1149
- productsUrl = _ref.productsUrl,
1150
- LinkComponent = _ref.LinkComponent,
1151
- onInterestClick = _ref.onInterestClick,
1152
- onCartClick = _ref.onCartClick,
1153
- onAccountClick = _ref.onAccountClick,
1154
- inputSearchIcon = _ref.inputSearchIcon,
1155
- onSellToUsClick = _ref.onSellToUsClick,
1156
- contactUsLink = _ref.contactUsLink,
1157
- ourStoryLink = _ref.ourStoryLink,
1158
- onLogoClick = _ref.onLogoClick,
1159
- endpoint = _ref.endpoint,
1160
- initialSearchData = _ref.initialSearchData,
1161
- onSearchSubmit = _ref.onSearchSubmit,
1162
- onSearchBarClick = _ref.onSearchBarClick,
1163
- onSearchPreview = _ref.onSearchPreview,
1164
- onProductSearchResultClick = _ref.onProductSearchResultClick,
1165
- onBrandSearchResultClick = _ref.onBrandSearchResultClick,
1166
- _onSearchLoading = _ref.onSearchLoading,
1167
- currency = _ref.currency,
1168
- currencySymbol = _ref.currencySymbol,
1169
- currencyOptions = _ref.currencyOptions,
1170
- onCurrencyChange = _ref.onCurrencyChange,
1171
- isCurrencySelectionDisabled = _ref.isCurrencySelectionDisabled,
1172
- tooltipContent = _ref.tooltipContent,
1173
- earlyAccessIcon = _ref.earlyAccessIcon,
1174
- exclusiveIcon = _ref.exclusiveIcon,
1175
- name = _ref.name,
1176
- isEarlyAccess = _ref.isEarlyAccess,
1177
- isExclusive = _ref.isExclusive,
1178
- shop = _ref.shop,
1179
- app = _ref.app,
1180
- categoryConfig = _ref.categoryConfig,
1181
- onCreateInterests = _ref.onCreateInterests,
1182
- noResultsImage = _ref.noResultsImage,
1183
- _ref$showCreateIntere = _ref.showCreateInterest,
1184
- showCreateInterest = _ref$showCreateIntere === void 0 ? true : _ref$showCreateIntere;
1185
-
1186
- var _useState = React.useState(''),
1187
- _useState2 = _slicedToArray(_useState, 2),
1188
- searchValue = _useState2[0],
1189
- setSearchValue = _useState2[1];
1190
-
1191
- var _useState3 = React.useState(false),
1192
- _useState4 = _slicedToArray(_useState3, 2),
1193
- loading = _useState4[0],
1194
- setLoading = _useState4[1];
1195
-
1196
- var _useState5 = React.useState(false),
1197
- _useState6 = _slicedToArray(_useState5, 2),
1198
- searchLoading = _useState6[0],
1199
- setSearchLoading = _useState6[1];
1200
-
1201
- var _useState7 = React.useState(false),
1202
- _useState8 = _slicedToArray(_useState7, 2),
1203
- isSearchFocused = _useState8[0],
1204
- setIsSearchFocused = _useState8[1];
1205
-
1206
- var _useState9 = React.useState({
1207
- trending_brands: [],
1208
- latest_products: []
1209
- }),
1210
- _useState10 = _slicedToArray(_useState9, 2),
1211
- initialSearchView = _useState10[0],
1212
- setInitialSearchView = _useState10[1];
1213
-
1214
- var _useState11 = React.useState({}),
1215
- _useState12 = _slicedToArray(_useState11, 2),
1216
- dropdownData = _useState12[0],
1217
- setDropdownData = _useState12[1];
1218
-
1219
- var _useState13 = React.useState(false),
1220
- _useState14 = _slicedToArray(_useState13, 2),
1221
- hasError = _useState14[0],
1222
- setHasError = _useState14[1];
1223
-
1224
- var _useState15 = React.useState({
1225
- brands: [],
1226
- products: []
1227
- }),
1228
- _useState16 = _slicedToArray(_useState15, 2),
1229
- searchResults = _useState16[0],
1230
- setSearchResults = _useState16[1];
1231
-
1232
- var _useState17 = React.useState({
1233
- brands: [],
1234
- products: []
1235
- }),
1236
- _useState18 = _slicedToArray(_useState17, 2),
1237
- cachedResults = _useState18[0],
1238
- setCachedResults = _useState18[1];
1239
-
1240
- var _useState19 = React.useState(false),
1241
- _useState20 = _slicedToArray(_useState19, 2),
1242
- showNoResults = _useState20[0],
1243
- setShowNoResults = _useState20[1];
1244
-
1245
- var searchResultsRef = React.useRef(null);
1246
-
1247
- var _useSearch = useSearch({
1248
- endpoint: endpoint,
1249
- onSearchLoading: function onSearchLoading(isLoading) {
1250
- setSearchLoading(isLoading);
1251
-
1252
- if (typeof _onSearchLoading === 'function') {
1253
- _onSearchLoading(isLoading);
1051
+ if (setShowNoResults) {
1052
+ setShowNoResults(false);
1254
1053
  }
1255
- },
1256
- currency: currency,
1257
- onSearchPreview: onSearchPreview,
1258
- onNoResults: setShowNoResults
1259
- }),
1260
- fetchInitialSearchData = _useSearch.fetchInitialSearchData,
1261
- createDebouncedSearch = _useSearch.createDebouncedSearch,
1262
- createImmediateSearch = _useSearch.createImmediateSearch;
1263
-
1264
- var debouncedSearch = createDebouncedSearch(function (results) {
1265
- setSearchResults(results);
1266
- setCachedResults(results);
1267
- });
1268
- var immediateSearch = createImmediateSearch(setSearchValue, setSearchResults, onSearchSubmit);
1269
- var handleChange = useSearchInputChange(setSearchValue, setIsSearchFocused, debouncedSearch, setSearchResults, setCachedResults, app, productsUrl);
1270
- useSearchClickOutside(searchResultsRef, searchResults, setCachedResults, setIsSearchFocused, setSearchResults, setSearchValue, setShowNoResults);
1271
-
1272
- var handleSearchClick = function handleSearchClick() {
1273
- if (typeof onSearchBarClick === 'function') {
1274
- onSearchBarClick();
1275
- return;
1276
1054
  }
1055
+ };
1277
1056
 
1278
- handleSearchFocus();
1057
+ document.addEventListener('mousedown', handleClickOutside);
1058
+ return function () {
1059
+ document.removeEventListener('mousedown', handleClickOutside);
1279
1060
  };
1061
+ }, [ref, searchResults, setCachedResults, setIsSearchFocused, setSearchResults, setSearchValue, setShowNoResults]);
1062
+ };
1063
+ var useSearchInputChange = function useSearchInputChange(setSearchValue, setIsSearchFocused, debouncedSearch, setSearchResults, setCachedResults) {
1064
+ var app = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : false;
1065
+ var productsUrl = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : null;
1066
+ return useCallback(function (event) {
1067
+ var value = event.target.value;
1068
+
1069
+ if (app && productsUrl && value.trim().length > 0) {
1070
+ window.location.href = productsUrl;
1071
+ return;
1072
+ }
1280
1073
 
1281
- var handleSearchFocus = useSearchInputFocus(searchValue, setIsSearchFocused, cachedResults, setSearchResults, undefined, setShowNoResults);
1282
- var handleKeyDown = useSearchInputKeyDown(searchValue, immediateSearch, setIsSearchFocused);
1074
+ setSearchValue(value);
1075
+ setIsSearchFocused(true);
1283
1076
 
1284
- function addCategoryToElements(elements, categoryName) {
1285
- return elements.map(function (element) {
1286
- return _objectSpread2(_objectSpread2({}, element), {}, {
1287
- category: categoryName
1288
- });
1077
+ if (value.trim().length >= 3) {
1078
+ debouncedSearch(value);
1079
+ } else {
1080
+ setSearchResults({
1081
+ brands: [],
1082
+ products: []
1083
+ });
1084
+ setCachedResults({
1085
+ brands: [],
1086
+ products: []
1289
1087
  });
1290
1088
  }
1089
+ }, [setSearchValue, setIsSearchFocused, debouncedSearch, setSearchResults, setCachedResults, app, productsUrl]);
1090
+ };
1091
+ var useSearchInputFocus = function useSearchInputFocus(searchValue, setIsSearchFocused, cachedResults, setSearchResults) {
1092
+ var handleSearchClick = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : undefined;
1093
+ var setShowNoResults = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : null;
1094
+ return useCallback(function () {
1095
+ setIsSearchFocused(true); // Reset no results state when reopening search
1096
+
1097
+ if (setShowNoResults) {
1098
+ setShowNoResults(false);
1099
+ }
1291
1100
 
1292
- React.useMemo(function () {
1293
- setLoading(true);
1294
- axios.get("".concat(categoryConfig.menuData)).then(function (_ref2) {
1295
- var data = _ref2.data;
1296
- setLoading(false);
1297
- setDropdownData(data);
1298
- }).catch(function () {
1299
- return setHasError(true);
1300
- });
1301
- }, [categoryConfig.menuData]);
1302
- React.useMemo(function () {
1303
- if (!initialSearchData) {
1304
- return;
1101
+ if (typeof handleSearchClick === 'function') {
1102
+ handleSearchClick();
1103
+ } else if (searchValue.trim().length >= 3) {
1104
+ setSearchResults(cachedResults);
1105
+ }
1106
+ }, [searchValue, setIsSearchFocused, cachedResults, setSearchResults, handleSearchClick, setShowNoResults]);
1107
+ };
1108
+ var useSearchInputKeyDown = function useSearchInputKeyDown(searchValue, immediateSearch, setIsSearchFocused) {
1109
+ var setSearchValue = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;
1110
+ return useCallback(function (event) {
1111
+ if (event.key === 'Enter') {
1112
+ event.preventDefault();
1113
+
1114
+ if (searchValue.trim().length >= 3) {
1115
+ immediateSearch(searchValue);
1305
1116
  }
1306
1117
 
1307
- fetchInitialSearchData(initialSearchData, setInitialSearchView);
1308
- }, [initialSearchData, fetchInitialSearchData]);
1309
-
1310
- var renderDropdownLinks = function renderDropdownLinks() {
1311
- return categoryConfig.categories.map(function (category) {
1312
- var title = category.title,
1313
- imageSrc = category.imageSrc,
1314
- categorySlug = category.categorySlug,
1315
- categoryName = category.categoryName,
1316
- elementsKey = category.elementsKey,
1317
- subCategoryElementsKey = category.subCategoryElementsKey,
1318
- styleElementsKey = category.styleElementsKey;
1319
- var categoryElementsProcessed = categoryElements;
1320
-
1321
- if (subCategoryElementsKey && dropdownData[subCategoryElementsKey]) {
1322
- // show subcategory elements
1323
- categoryElementsProcessed = removeCategoryByName(dropdownData[subCategoryElementsKey], categoryName);
1324
- } else if (styleElementsKey && dropdownData[styleElementsKey]) {
1325
- categoryElementsProcessed = addCategoryToElements(dropdownData[styleElementsKey], categorySlug);
1326
- } else {
1327
- categoryElementsProcessed = addCategoryToElements(categoryElementsProcessed, categorySlug);
1328
- }
1118
+ setIsSearchFocused(false);
1119
+ } else if (event.key === 'Escape' && setSearchValue) {
1120
+ setSearchValue('');
1121
+ setIsSearchFocused(false);
1122
+ }
1123
+ }, [searchValue, immediateSearch, setIsSearchFocused, setSearchValue]);
1124
+ };
1125
+
1126
+ var removeCategoryByName = function removeCategoryByName(categories, name) {
1127
+ var _categories$filter;
1128
+
1129
+ return (_categories$filter = categories === null || categories === void 0 ? void 0 : categories.filter(function (category) {
1130
+ return category.name.toLowerCase() !== name.toLowerCase();
1131
+ })) !== null && _categories$filter !== void 0 ? _categories$filter : [];
1132
+ };
1133
+
1134
+ var LuxityDesktopHeader = function LuxityDesktopHeader(_ref) {
1135
+ var accountIcon = _ref.accountIcon,
1136
+ cartIcon = _ref.cartIcon,
1137
+ interestIcon = _ref.interestIcon,
1138
+ cartCount = _ref.cartCount,
1139
+ logoSrc = _ref.logoSrc,
1140
+ categoryElements = _ref.categoryElements,
1141
+ stores = _ref.stores,
1142
+ contactNumber = _ref.contactNumber,
1143
+ productsUrl = _ref.productsUrl,
1144
+ LinkComponent = _ref.LinkComponent,
1145
+ onInterestClick = _ref.onInterestClick,
1146
+ onCartClick = _ref.onCartClick,
1147
+ onAccountClick = _ref.onAccountClick,
1148
+ inputSearchIcon = _ref.inputSearchIcon,
1149
+ onSellToUsClick = _ref.onSellToUsClick,
1150
+ contactUsLink = _ref.contactUsLink,
1151
+ ourStoryLink = _ref.ourStoryLink,
1152
+ onLogoClick = _ref.onLogoClick,
1153
+ endpoint = _ref.endpoint,
1154
+ initialSearchData = _ref.initialSearchData,
1155
+ onSearchSubmit = _ref.onSearchSubmit,
1156
+ onSearchBarClick = _ref.onSearchBarClick,
1157
+ onSearchPreview = _ref.onSearchPreview,
1158
+ onProductSearchResultClick = _ref.onProductSearchResultClick,
1159
+ onBrandSearchResultClick = _ref.onBrandSearchResultClick,
1160
+ _onSearchLoading = _ref.onSearchLoading,
1161
+ currency = _ref.currency,
1162
+ currencySymbol = _ref.currencySymbol,
1163
+ currencyOptions = _ref.currencyOptions,
1164
+ onCurrencyChange = _ref.onCurrencyChange,
1165
+ isCurrencySelectionDisabled = _ref.isCurrencySelectionDisabled,
1166
+ tooltipContent = _ref.tooltipContent,
1167
+ earlyAccessIcon = _ref.earlyAccessIcon,
1168
+ exclusiveIcon = _ref.exclusiveIcon,
1169
+ name = _ref.name,
1170
+ isEarlyAccess = _ref.isEarlyAccess,
1171
+ isExclusive = _ref.isExclusive,
1172
+ shop = _ref.shop,
1173
+ app = _ref.app,
1174
+ categoryConfig = _ref.categoryConfig,
1175
+ onCreateInterests = _ref.onCreateInterests,
1176
+ noResultsImage = _ref.noResultsImage,
1177
+ _ref$showCreateIntere = _ref.showCreateInterest,
1178
+ showCreateInterest = _ref$showCreateIntere === void 0 ? true : _ref$showCreateIntere;
1179
+
1180
+ var _useState = useState(''),
1181
+ _useState2 = _slicedToArray(_useState, 2),
1182
+ searchValue = _useState2[0],
1183
+ setSearchValue = _useState2[1];
1184
+
1185
+ var _useState3 = useState(false),
1186
+ _useState4 = _slicedToArray(_useState3, 2),
1187
+ loading = _useState4[0],
1188
+ setLoading = _useState4[1];
1189
+
1190
+ var _useState5 = useState(false),
1191
+ _useState6 = _slicedToArray(_useState5, 2),
1192
+ searchLoading = _useState6[0],
1193
+ setSearchLoading = _useState6[1];
1194
+
1195
+ var _useState7 = useState(false),
1196
+ _useState8 = _slicedToArray(_useState7, 2),
1197
+ isSearchFocused = _useState8[0],
1198
+ setIsSearchFocused = _useState8[1];
1199
+
1200
+ var _useState9 = useState({
1201
+ trending_brands: [],
1202
+ latest_products: []
1203
+ }),
1204
+ _useState10 = _slicedToArray(_useState9, 2),
1205
+ initialSearchView = _useState10[0],
1206
+ setInitialSearchView = _useState10[1];
1207
+
1208
+ var _useState11 = useState({}),
1209
+ _useState12 = _slicedToArray(_useState11, 2),
1210
+ dropdownData = _useState12[0],
1211
+ setDropdownData = _useState12[1];
1212
+
1213
+ var _useState13 = useState(false),
1214
+ _useState14 = _slicedToArray(_useState13, 2),
1215
+ hasError = _useState14[0],
1216
+ setHasError = _useState14[1];
1217
+
1218
+ var _useState15 = useState({
1219
+ brands: [],
1220
+ products: []
1221
+ }),
1222
+ _useState16 = _slicedToArray(_useState15, 2),
1223
+ searchResults = _useState16[0],
1224
+ setSearchResults = _useState16[1];
1225
+
1226
+ var _useState17 = useState({
1227
+ brands: [],
1228
+ products: []
1229
+ }),
1230
+ _useState18 = _slicedToArray(_useState17, 2),
1231
+ cachedResults = _useState18[0],
1232
+ setCachedResults = _useState18[1];
1233
+
1234
+ var _useState19 = useState(false),
1235
+ _useState20 = _slicedToArray(_useState19, 2),
1236
+ showNoResults = _useState20[0],
1237
+ setShowNoResults = _useState20[1];
1238
+
1239
+ var searchResultsRef = useRef(null);
1240
+
1241
+ var _useSearch = useSearch({
1242
+ endpoint: endpoint,
1243
+ onSearchLoading: function onSearchLoading(isLoading) {
1244
+ setSearchLoading(isLoading);
1245
+
1246
+ if (typeof _onSearchLoading === 'function') {
1247
+ _onSearchLoading(isLoading);
1248
+ }
1249
+ },
1250
+ currency: currency,
1251
+ onSearchPreview: onSearchPreview,
1252
+ onNoResults: setShowNoResults
1253
+ }),
1254
+ fetchInitialSearchData = _useSearch.fetchInitialSearchData,
1255
+ createDebouncedSearch = _useSearch.createDebouncedSearch,
1256
+ createImmediateSearch = _useSearch.createImmediateSearch;
1257
+
1258
+ var debouncedSearch = createDebouncedSearch(function (results) {
1259
+ setSearchResults(results);
1260
+ setCachedResults(results);
1261
+ });
1262
+ var immediateSearch = createImmediateSearch(setSearchValue, setSearchResults, onSearchSubmit);
1263
+ var handleChange = useSearchInputChange(setSearchValue, setIsSearchFocused, debouncedSearch, setSearchResults, setCachedResults, app, productsUrl);
1264
+ useSearchClickOutside(searchResultsRef, searchResults, setCachedResults, setIsSearchFocused, setSearchResults, setSearchValue, setShowNoResults);
1265
+
1266
+ var handleSearchClick = function handleSearchClick() {
1267
+ if (typeof onSearchBarClick === 'function') {
1268
+ onSearchBarClick();
1269
+ return;
1270
+ }
1329
1271
 
1330
- return /*#__PURE__*/React__default.createElement(DropdownLink, {
1331
- key: categorySlug,
1332
- title: title,
1333
- imageSrc: imageSrc,
1334
- categoryElements: categoryElementsProcessed,
1335
- brandElements: dropdownData[elementsKey] || [],
1336
- productsUrl: productsUrl,
1337
- categorySlug: categorySlug,
1338
- categoryTitle: categoryName,
1339
- isLoading: loading,
1340
- hasError: hasError,
1341
- LinkComponent: LinkComponent
1342
- });
1272
+ handleSearchFocus();
1273
+ };
1274
+
1275
+ var handleSearchFocus = useSearchInputFocus(searchValue, setIsSearchFocused, cachedResults, setSearchResults, undefined, setShowNoResults);
1276
+ var handleKeyDown = useSearchInputKeyDown(searchValue, immediateSearch, setIsSearchFocused);
1277
+
1278
+ function addCategoryToElements(elements, categoryName) {
1279
+ return elements.map(function (element) {
1280
+ return _objectSpread2(_objectSpread2({}, element), {}, {
1281
+ category: categoryName
1343
1282
  });
1344
- };
1283
+ });
1284
+ }
1345
1285
 
1346
- var getMarginRight = function getMarginRight(showLoyaltyIcon, userName) {
1347
- if (showLoyaltyIcon) return '15px';
1348
- if (userName) return '5px';
1349
- return '18px';
1350
- };
1286
+ useMemo(function () {
1287
+ setLoading(true);
1288
+ axios.get("".concat(categoryConfig.menuData)).then(function (_ref2) {
1289
+ var data = _ref2.data;
1290
+ setLoading(false);
1291
+ setDropdownData(data);
1292
+ }).catch(function () {
1293
+ return setHasError(true);
1294
+ });
1295
+ }, [categoryConfig.menuData]);
1296
+ useMemo(function () {
1297
+ if (!initialSearchData) {
1298
+ return;
1299
+ }
1351
1300
 
1352
- return /*#__PURE__*/React__default.createElement("div", {
1353
- className: "navbar"
1354
- }, /*#__PURE__*/React__default.createElement("div", {
1355
- className: "navbar__container"
1356
- }, /*#__PURE__*/React__default.createElement("div", {
1357
- className: "navbar__logo-wrapper"
1358
- }, /*#__PURE__*/React__default.createElement("button", {
1359
- type: "button",
1360
- onClick: onLogoClick,
1361
- className: "navbar__logo"
1362
- }, /*#__PURE__*/React__default.createElement("img", {
1363
- src: logoSrc,
1364
- alt: "luxity-logo",
1365
- loading: "eager"
1366
- }))), /*#__PURE__*/React__default.createElement("div", {
1367
- className: "navbar__section"
1368
- }, /*#__PURE__*/React__default.createElement("div", {
1369
- className: "navbar__body"
1370
- }, /*#__PURE__*/React__default.createElement("div", {
1371
- className: "navbar__product-search"
1372
- }, /*#__PURE__*/React__default.createElement("img", {
1373
- src: inputSearchIcon,
1374
- alt: "search-icon",
1375
- className: "navbar__input-search-icon"
1376
- }), /*#__PURE__*/React__default.createElement("input", {
1377
- className: "navbar__form-input",
1378
- type: "text",
1379
- placeholder: "Search for items and designs",
1380
- value: searchValue,
1381
- onChange: handleChange,
1382
- onKeyDown: handleKeyDown,
1383
- onClick: handleSearchClick,
1384
- onFocus: handleSearchFocus,
1385
- autoComplete: "off",
1386
- readOnly: app
1387
- })), /*#__PURE__*/React__default.createElement(SearchResults, {
1388
- searchValue: searchValue,
1389
- searchResults: searchResults,
1390
- onViewAll: function onViewAll() {
1391
- onSearchSubmit(searchValue);
1392
- setSearchValue('');
1393
- setSearchResults({
1394
- brands: [],
1395
- products: []
1396
- });
1397
- setIsSearchFocused(false);
1398
- setShowNoResults(false);
1399
- },
1400
- searchResultsRef: searchResultsRef,
1401
- onSearchSubmit: onSearchSubmit,
1402
- setSearchValue: setSearchValue,
1403
- initialSearchData: initialSearchView,
1404
- isSearchFocused: isSearchFocused,
1405
- setIsSearchFocused: setIsSearchFocused,
1406
- currency: currency,
1407
- currencySymbol: currencySymbol,
1408
- onProductSearchResultClick: onProductSearchResultClick,
1409
- onBrandSearchResultClick: onBrandSearchResultClick,
1410
- onCreateInterests: onCreateInterests,
1411
- noResultsImage: noResultsImage,
1412
- showNoResults: showNoResults,
1413
- isLoading: searchLoading,
1414
- showCreateInterest: showCreateInterest
1415
- }), /*#__PURE__*/React__default.createElement("nav", {
1416
- className: "navbar__nav-links navbar__nav-links--wrap"
1417
- }, renderDropdownLinks(), !!stores.length && /*#__PURE__*/React__default.createElement("li", {
1418
- className: "navbar__link",
1419
- key: "Stores"
1420
- }, /*#__PURE__*/React__default.createElement(LinkComponent, {
1421
- href: contactUsLink,
1422
- className: "navbar__link-item navbar__link-item--desktop"
1423
- }, "Stores"), /*#__PURE__*/React__default.createElement("div", {
1424
- className: "navbar__dropdown"
1425
- }, /*#__PURE__*/React__default.createElement(StoresDropdown, {
1426
- stores: stores,
1427
- contactNumber: contactNumber
1428
- }))))), /*#__PURE__*/React__default.createElement("div", {
1429
- className: "navbar__icons-wrapper"
1430
- }, /*#__PURE__*/React__default.createElement("div", {
1431
- className: "navbar__icons"
1432
- }, /*#__PURE__*/React__default.createElement(CurrencySelect, {
1433
- currency: currency,
1434
- currencyOptions: currencyOptions,
1435
- onCurrencyChange: onCurrencyChange,
1436
- isCurrencySelectionDisabled: isCurrencySelectionDisabled,
1437
- tooltipContent: tooltipContent
1438
- }), shop && /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement("button", {
1439
- type: "button",
1440
- className: "navbar__icon relative flex",
1441
- onClick: onAccountClick,
1442
- style: {
1443
- marginRight: getMarginRight(isEarlyAccess || isExclusive, name)
1301
+ fetchInitialSearchData(initialSearchData, setInitialSearchView);
1302
+ }, [initialSearchData, fetchInitialSearchData]);
1303
+
1304
+ var renderDropdownLinks = function renderDropdownLinks() {
1305
+ return categoryConfig.categories.map(function (category) {
1306
+ var title = category.title,
1307
+ imageSrc = category.imageSrc,
1308
+ categorySlug = category.categorySlug,
1309
+ categoryName = category.categoryName,
1310
+ elementsKey = category.elementsKey,
1311
+ subCategoryElementsKey = category.subCategoryElementsKey,
1312
+ styleElementsKey = category.styleElementsKey;
1313
+ var categoryElementsProcessed = categoryElements;
1314
+
1315
+ if (subCategoryElementsKey && dropdownData[subCategoryElementsKey]) {
1316
+ // show subcategory elements
1317
+ categoryElementsProcessed = removeCategoryByName(dropdownData[subCategoryElementsKey], categoryName);
1318
+ } else if (styleElementsKey && dropdownData[styleElementsKey]) {
1319
+ categoryElementsProcessed = addCategoryToElements(dropdownData[styleElementsKey], categorySlug);
1320
+ } else {
1321
+ categoryElementsProcessed = addCategoryToElements(categoryElementsProcessed, categorySlug);
1444
1322
  }
1445
- }, /*#__PURE__*/React__default.createElement("img", {
1446
- src: accountIcon,
1447
- alt: "account-icon",
1448
- width: 20,
1449
- height: 20
1450
- }), isEarlyAccess && /*#__PURE__*/React__default.createElement("img", {
1451
- src: earlyAccessIcon,
1452
- alt: "loyalty-icon",
1453
- className: "navbar__loyalty-icon",
1454
- width: 16,
1455
- height: 16
1456
- }), isExclusive && /*#__PURE__*/React__default.createElement("img", {
1457
- src: exclusiveIcon,
1458
- alt: "loyalty-icon",
1459
- className: "navbar__loyalty-icon",
1460
- width: 16,
1461
- height: 16
1462
- })), name && /*#__PURE__*/React__default.createElement("button", {
1463
- type: "button",
1464
- className: "mr-3",
1465
- onClick: onAccountClick
1466
- }, /*#__PURE__*/React__default.createElement("span", {
1467
- className: "text-sm"
1468
- }, name))), onInterestClick && /*#__PURE__*/React__default.createElement("button", {
1469
- type: "button",
1470
- className: "".concat(app ? 'navbar__icon--app' : 'navbar__icon'),
1471
- onClick: onInterestClick
1472
- }, /*#__PURE__*/React__default.createElement("img", {
1473
- src: interestIcon,
1474
- alt: "interest-icon",
1475
- width: 20,
1476
- height: 20
1477
- })), /*#__PURE__*/React__default.createElement("button", {
1478
- type: "button",
1479
- className: "navbar__cart-icon ".concat(app ? 'navbar__icon--app' : 'navbar__icon'),
1480
- onClick: onCartClick
1481
- }, /*#__PURE__*/React__default.createElement("img", {
1482
- src: cartIcon,
1483
- alt: "cart-icon",
1484
- width: 20,
1485
- height: 20
1486
- }), shop && cartCount > 0 && /*#__PURE__*/React__default.createElement("div", {
1487
- className: "navbar__cart-count"
1488
- }, cartCount))), /*#__PURE__*/React__default.createElement("nav", {
1489
- className: "navbar__nav-links"
1490
- }, /*#__PURE__*/React__default.createElement("li", {
1491
- className: "navbar__company-link"
1492
- }, /*#__PURE__*/React__default.createElement(LinkComponent, {
1493
- href: ourStoryLink,
1494
- className: "navbar__link-item"
1495
- }, "Our Story")), /*#__PURE__*/React__default.createElement("li", {
1496
- className: "navbar__company-link"
1497
- }, /*#__PURE__*/React__default.createElement(LinkComponent, {
1498
- href: contactUsLink,
1499
- className: "navbar__link-item"
1500
- }, "Contact Us")), /*#__PURE__*/React__default.createElement("li", {
1501
- className: "navbar__company-link"
1502
- }, /*#__PURE__*/React__default.createElement("button", {
1503
- type: "button",
1504
- className: "navbar__company-block",
1505
- onClick: onSellToUsClick
1506
- }, "Sell to us")))))));
1323
+
1324
+ return /*#__PURE__*/React.createElement(DropdownLink, {
1325
+ key: categorySlug,
1326
+ title: title,
1327
+ imageSrc: imageSrc,
1328
+ categoryElements: categoryElementsProcessed,
1329
+ brandElements: dropdownData[elementsKey] || [],
1330
+ productsUrl: productsUrl,
1331
+ categorySlug: categorySlug,
1332
+ categoryTitle: categoryName,
1333
+ isLoading: loading,
1334
+ hasError: hasError,
1335
+ LinkComponent: LinkComponent
1336
+ });
1337
+ });
1507
1338
  };
1508
1339
 
1509
- return LuxityDesktopHeader;
1340
+ var getMarginRight = function getMarginRight(showLoyaltyIcon, userName) {
1341
+ if (showLoyaltyIcon) return '15px';
1342
+ if (userName) return '5px';
1343
+ return '18px';
1344
+ };
1510
1345
 
1511
- })));
1346
+ return /*#__PURE__*/React.createElement("div", {
1347
+ className: "navbar"
1348
+ }, /*#__PURE__*/React.createElement("div", {
1349
+ className: "navbar__container"
1350
+ }, /*#__PURE__*/React.createElement("div", {
1351
+ className: "navbar__logo-wrapper"
1352
+ }, /*#__PURE__*/React.createElement("button", {
1353
+ type: "button",
1354
+ onClick: onLogoClick,
1355
+ className: "navbar__logo"
1356
+ }, /*#__PURE__*/React.createElement("img", {
1357
+ src: logoSrc,
1358
+ alt: "luxity-logo",
1359
+ loading: "eager"
1360
+ }))), /*#__PURE__*/React.createElement("div", {
1361
+ className: "navbar__section"
1362
+ }, /*#__PURE__*/React.createElement("div", {
1363
+ className: "navbar__body"
1364
+ }, /*#__PURE__*/React.createElement("div", {
1365
+ className: "navbar__product-search"
1366
+ }, /*#__PURE__*/React.createElement("img", {
1367
+ src: inputSearchIcon,
1368
+ alt: "search-icon",
1369
+ className: "navbar__input-search-icon"
1370
+ }), /*#__PURE__*/React.createElement("input", {
1371
+ className: "navbar__form-input",
1372
+ type: "text",
1373
+ placeholder: "Search for items and designs",
1374
+ value: searchValue,
1375
+ onChange: handleChange,
1376
+ onKeyDown: handleKeyDown,
1377
+ onClick: handleSearchClick,
1378
+ onFocus: handleSearchFocus,
1379
+ autoComplete: "off",
1380
+ readOnly: app
1381
+ })), /*#__PURE__*/React.createElement(SearchResults, {
1382
+ searchValue: searchValue,
1383
+ searchResults: searchResults,
1384
+ onViewAll: function onViewAll() {
1385
+ onSearchSubmit(searchValue);
1386
+ setSearchValue('');
1387
+ setSearchResults({
1388
+ brands: [],
1389
+ products: []
1390
+ });
1391
+ setIsSearchFocused(false);
1392
+ setShowNoResults(false);
1393
+ },
1394
+ searchResultsRef: searchResultsRef,
1395
+ onSearchSubmit: onSearchSubmit,
1396
+ setSearchValue: setSearchValue,
1397
+ initialSearchData: initialSearchView,
1398
+ isSearchFocused: isSearchFocused,
1399
+ setIsSearchFocused: setIsSearchFocused,
1400
+ currency: currency,
1401
+ currencySymbol: currencySymbol,
1402
+ onProductSearchResultClick: onProductSearchResultClick,
1403
+ onBrandSearchResultClick: onBrandSearchResultClick,
1404
+ onCreateInterests: onCreateInterests,
1405
+ noResultsImage: noResultsImage,
1406
+ showNoResults: showNoResults,
1407
+ isLoading: searchLoading,
1408
+ showCreateInterest: showCreateInterest
1409
+ }), /*#__PURE__*/React.createElement("nav", {
1410
+ className: "navbar__nav-links navbar__nav-links--wrap"
1411
+ }, renderDropdownLinks(), !!stores.length && /*#__PURE__*/React.createElement("li", {
1412
+ className: "navbar__link",
1413
+ key: "Stores"
1414
+ }, /*#__PURE__*/React.createElement(LinkComponent, {
1415
+ href: contactUsLink,
1416
+ className: "navbar__link-item navbar__link-item--desktop"
1417
+ }, "Stores"), /*#__PURE__*/React.createElement("div", {
1418
+ className: "navbar__dropdown"
1419
+ }, /*#__PURE__*/React.createElement(StoresDropdown, {
1420
+ stores: stores,
1421
+ contactNumber: contactNumber
1422
+ }))))), /*#__PURE__*/React.createElement("div", {
1423
+ className: "navbar__icons-wrapper"
1424
+ }, /*#__PURE__*/React.createElement("div", {
1425
+ className: "navbar__icons"
1426
+ }, /*#__PURE__*/React.createElement(CurrencySelect, {
1427
+ currency: currency,
1428
+ currencyOptions: currencyOptions,
1429
+ onCurrencyChange: onCurrencyChange,
1430
+ isCurrencySelectionDisabled: isCurrencySelectionDisabled,
1431
+ tooltipContent: tooltipContent
1432
+ }), shop && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("button", {
1433
+ type: "button",
1434
+ className: "navbar__icon relative flex",
1435
+ onClick: onAccountClick,
1436
+ style: {
1437
+ marginRight: getMarginRight(isEarlyAccess || isExclusive, name)
1438
+ }
1439
+ }, /*#__PURE__*/React.createElement("img", {
1440
+ src: accountIcon,
1441
+ alt: "account-icon",
1442
+ width: 20,
1443
+ height: 20
1444
+ }), isEarlyAccess && /*#__PURE__*/React.createElement("img", {
1445
+ src: earlyAccessIcon,
1446
+ alt: "loyalty-icon",
1447
+ className: "navbar__loyalty-icon",
1448
+ width: 16,
1449
+ height: 16
1450
+ }), isExclusive && /*#__PURE__*/React.createElement("img", {
1451
+ src: exclusiveIcon,
1452
+ alt: "loyalty-icon",
1453
+ className: "navbar__loyalty-icon",
1454
+ width: 16,
1455
+ height: 16
1456
+ })), name && /*#__PURE__*/React.createElement("button", {
1457
+ type: "button",
1458
+ className: "mr-3",
1459
+ onClick: onAccountClick
1460
+ }, /*#__PURE__*/React.createElement("span", {
1461
+ className: "text-sm"
1462
+ }, name))), onInterestClick && /*#__PURE__*/React.createElement("button", {
1463
+ type: "button",
1464
+ className: "".concat(app ? 'navbar__icon--app' : 'navbar__icon'),
1465
+ onClick: onInterestClick
1466
+ }, /*#__PURE__*/React.createElement("img", {
1467
+ src: interestIcon,
1468
+ alt: "interest-icon",
1469
+ width: 20,
1470
+ height: 20
1471
+ })), /*#__PURE__*/React.createElement("button", {
1472
+ type: "button",
1473
+ className: "navbar__cart-icon ".concat(app ? 'navbar__icon--app' : 'navbar__icon'),
1474
+ onClick: onCartClick
1475
+ }, /*#__PURE__*/React.createElement("img", {
1476
+ src: cartIcon,
1477
+ alt: "cart-icon",
1478
+ width: 20,
1479
+ height: 20
1480
+ }), shop && cartCount > 0 && /*#__PURE__*/React.createElement("div", {
1481
+ className: "navbar__cart-count"
1482
+ }, cartCount))), /*#__PURE__*/React.createElement("nav", {
1483
+ className: "navbar__nav-links"
1484
+ }, /*#__PURE__*/React.createElement("li", {
1485
+ className: "navbar__company-link"
1486
+ }, /*#__PURE__*/React.createElement(LinkComponent, {
1487
+ href: ourStoryLink,
1488
+ className: "navbar__link-item"
1489
+ }, "Our Story")), /*#__PURE__*/React.createElement("li", {
1490
+ className: "navbar__company-link"
1491
+ }, /*#__PURE__*/React.createElement(LinkComponent, {
1492
+ href: contactUsLink,
1493
+ className: "navbar__link-item"
1494
+ }, "Contact Us")), /*#__PURE__*/React.createElement("li", {
1495
+ className: "navbar__company-link"
1496
+ }, /*#__PURE__*/React.createElement("button", {
1497
+ type: "button",
1498
+ className: "navbar__company-block",
1499
+ onClick: onSellToUsClick
1500
+ }, "Sell to us")))))));
1501
+ };
1502
+
1503
+ export default LuxityDesktopHeader;