@bonlineza/luxity-lib 2.39.5 → 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.
- package/Accordion.js +342 -352
- package/AddInterest.js +3136 -3142
- package/AddProductInterest.js +999 -7572
- package/BrandSelector.js +854 -861
- package/Checkbox.js +240 -250
- package/CheckboxButton.js +229 -236
- package/CommunicationPreferenceOptionsRenderer.js +560 -568
- package/CommunicationPreferenceSection.js +651 -659
- package/CommunicationPreferences.js +2394 -2402
- package/ConditionSelector.js +852 -859
- package/CountryCodeSelect.js +79 -6650
- package/CurrencyInputFormatter.js +86 -96
- package/CurrencySelect.js +219 -227
- package/DropdownSelector.js +212 -6821
- package/GALink.js +43 -51
- package/GenderSelector.js +355 -362
- package/GraphQLDropdownSelector.js +5308 -11879
- package/GraphQLMultiSelector.js +593 -601
- package/IconHeader.js +118 -126
- package/IconWrapper.js +17 -25
- package/InterestCatSelector.js +424 -432
- package/InterestItem.js +462 -470
- package/Interests.js +4718 -11289
- package/InterestsSubheading.js +33 -41
- package/InvertedTextButton.js +167 -175
- package/LuxityAppSideNav.js +181 -189
- package/LuxityDesktopHeader.js +1355 -1363
- package/LuxityFooter.js +2228 -2236
- package/LuxityGraphQLDropdownSelector.js +5393 -11964
- package/LuxityGraphQLMultiselector.js +778 -785
- package/LuxityMobileHeader.js +1786 -1794
- package/LuxityPageReady.js +199 -209
- package/LuxityProductInterestItem.js +359 -367
- package/LuxitySideNav.js +665 -673
- package/MaterialSelector.js +5428 -11999
- package/ModelSelector.js +5428 -11999
- package/NotificationDropDown.js +459 -7030
- package/Notify.js +20 -32
- package/OutlinePrimaryButton.js +134 -142
- package/PriceRangeSelector.js +1264 -1270
- package/PrimaryButton.js +129 -137
- package/RadioButtons.js +308 -318
- package/RangeSlider.js +1033 -1039
- package/RareStepFooter.js +257 -264
- package/RareStepHeader.js +801 -808
- package/ReactSelectWrapper.js +33 -6604
- package/SecondaryButton.js +144 -152
- package/ShoeSizeRangeSelector.js +1147 -1153
- package/ShoeSizeSelector.js +1146 -1154
- package/SimpleErrorBoundary.js +130 -138
- package/StyleSelector.js +854 -861
- package/TestComponent.js +15 -0
- package/TextButton.js +135 -143
- package/Tooltip.js +176 -184
- package/Tracking.js +15 -25
- package/WrapperButton.js +50 -58
- package/build/CountryCodeSelect/index.js +18 -0
- package/build/ReactSelectWrapper/index.js +34 -0
- package/build/bundle.css +1 -1
- package/build/bundle.js +10634 -17239
- package/build/constants.js +32 -45
- package/package.json +2 -2
- package/postcss.config.js +6 -0
- package/svg/Accessories.js +34 -42
- package/svg/Account.js +30 -38
- package/svg/Add.js +31 -39
- package/svg/ArrowRight.js +28 -36
- package/svg/Bags.js +40 -48
- package/svg/BurgerMenu.js +24 -32
- package/svg/Calendar.js +98 -106
- package/svg/CalendarCircled.js +100 -108
- package/svg/CheckCircled.js +32 -40
- package/svg/Close.js +29 -37
- package/svg/Clothing.js +36 -44
- package/svg/Dot.js +32 -40
- package/svg/Edit.js +27 -35
- package/svg/Eye.js +28 -36
- package/svg/FileAttach.js +28 -36
- package/svg/FileAttachCircled.js +30 -38
- package/svg/Jewellery.js +49 -57
- package/svg/LightBulb.js +58 -66
- package/svg/Logo.js +132 -140
- package/svg/LuxityMenu.js +28 -36
- package/svg/Minus.js +29 -37
- package/svg/MobileAvatar.js +28 -36
- package/svg/MyOrder.js +36 -44
- package/svg/MyPayment.js +36 -44
- package/svg/MyProfile.js +44 -52
- package/svg/MySale.js +31 -39
- package/svg/Notification.js +30 -38
- package/svg/PointerDown.js +28 -36
- package/svg/Search.js +27 -35
- package/svg/Shoes.js +37 -45
- package/svg/SvgWrapper.js +13 -21
- package/svg/Trash.js +32 -40
- package/svg/Watches.js +47 -55
package/LuxityDesktopHeader.js
CHANGED
|
@@ -1,1511 +1,1503 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
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
|
-
|
|
25
|
-
|
|
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
|
-
|
|
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
|
-
|
|
38
|
-
|
|
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
|
-
|
|
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
|
-
|
|
53
|
-
|
|
54
|
-
for (var i = 1; i < arguments.length; i++) {
|
|
55
|
-
var source = arguments[i];
|
|
43
|
+
return obj;
|
|
44
|
+
}
|
|
56
45
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
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
|
-
|
|
65
|
-
|
|
66
|
-
|
|
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
|
-
|
|
70
|
-
|
|
71
|
-
|
|
68
|
+
return Object.freeze(Object.defineProperties(strings, {
|
|
69
|
+
raw: {
|
|
70
|
+
value: Object.freeze(raw)
|
|
72
71
|
}
|
|
72
|
+
}));
|
|
73
|
+
}
|
|
73
74
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
}
|
|
78
|
-
}));
|
|
79
|
-
}
|
|
75
|
+
function _slicedToArray(arr, i) {
|
|
76
|
+
return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();
|
|
77
|
+
}
|
|
80
78
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
79
|
+
function _toConsumableArray(arr) {
|
|
80
|
+
return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();
|
|
81
|
+
}
|
|
84
82
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
83
|
+
function _arrayWithoutHoles(arr) {
|
|
84
|
+
if (Array.isArray(arr)) return _arrayLikeToArray(arr);
|
|
85
|
+
}
|
|
88
86
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
87
|
+
function _arrayWithHoles(arr) {
|
|
88
|
+
if (Array.isArray(arr)) return arr;
|
|
89
|
+
}
|
|
92
90
|
|
|
93
|
-
|
|
94
|
-
|
|
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
|
-
|
|
98
|
-
|
|
99
|
-
}
|
|
95
|
+
function _iterableToArrayLimit(arr, i) {
|
|
96
|
+
var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];
|
|
100
97
|
|
|
101
|
-
|
|
102
|
-
|
|
98
|
+
if (_i == null) return;
|
|
99
|
+
var _arr = [];
|
|
100
|
+
var _n = true;
|
|
101
|
+
var _d = false;
|
|
103
102
|
|
|
104
|
-
|
|
105
|
-
var _arr = [];
|
|
106
|
-
var _n = true;
|
|
107
|
-
var _d = false;
|
|
103
|
+
var _s, _e;
|
|
108
104
|
|
|
109
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
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
|
-
|
|
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
|
-
|
|
149
|
-
|
|
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
|
-
|
|
153
|
-
|
|
359
|
+
if (!hasResults && !hasInitialData && !showNoResults) {
|
|
360
|
+
return null;
|
|
154
361
|
}
|
|
155
362
|
|
|
156
|
-
var
|
|
157
|
-
var
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
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
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
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
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
className: "
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
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
|
|
317
|
-
var
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
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
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
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
|
-
}
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
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
|
-
|
|
470
|
-
|
|
471
|
-
|
|
463
|
+
var getBrandLink = function getBrandLink(brand) {
|
|
464
|
+
return "/products/brands/".concat(brand.slug);
|
|
465
|
+
};
|
|
472
466
|
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
467
|
+
var limitBrands = function limitBrands(brands) {
|
|
468
|
+
if (isMobile && brands && brands.length > 4) {
|
|
469
|
+
return brands.slice(0, 4);
|
|
470
|
+
}
|
|
477
471
|
|
|
478
|
-
|
|
479
|
-
|
|
472
|
+
return brands;
|
|
473
|
+
};
|
|
480
474
|
|
|
481
|
-
|
|
482
|
-
|
|
475
|
+
var renderBrandsList = function renderBrandsList() {
|
|
476
|
+
var _limitBrands2;
|
|
483
477
|
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
478
|
+
if (isLoading) {
|
|
479
|
+
return renderBrandSkeleton();
|
|
480
|
+
}
|
|
487
481
|
|
|
488
|
-
|
|
489
|
-
|
|
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 (
|
|
511
|
-
return /*#__PURE__*/
|
|
512
|
-
key: brand.
|
|
513
|
-
href: brand
|
|
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
|
|
494
|
+
brand_link: getBrandLink(brand),
|
|
520
495
|
search_string: searchValue,
|
|
521
|
-
is_trending:
|
|
496
|
+
is_trending: true
|
|
522
497
|
});
|
|
523
498
|
}
|
|
524
499
|
}
|
|
525
500
|
}, brand.name);
|
|
526
501
|
});
|
|
527
|
-
}
|
|
502
|
+
}
|
|
528
503
|
|
|
529
|
-
|
|
530
|
-
|
|
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
|
-
|
|
533
|
-
|
|
534
|
-
}
|
|
523
|
+
var renderProductsList = function renderProductsList() {
|
|
524
|
+
var _searchResults$produc2;
|
|
535
525
|
|
|
536
|
-
|
|
537
|
-
|
|
526
|
+
if (isLoading) {
|
|
527
|
+
return renderProductSkeleton();
|
|
528
|
+
}
|
|
538
529
|
|
|
539
|
-
|
|
540
|
-
|
|
530
|
+
if (shouldShowInitialData) {
|
|
531
|
+
var _initialSearchData$la2;
|
|
541
532
|
|
|
542
|
-
return
|
|
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
|
|
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__*/
|
|
578
|
-
className: "search-
|
|
579
|
-
}, /*#__PURE__*/
|
|
544
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
545
|
+
className: "search-results__no-results"
|
|
546
|
+
}, /*#__PURE__*/React.createElement("h2", {
|
|
580
547
|
className: "search-results__header"
|
|
581
|
-
},
|
|
582
|
-
className: "search-
|
|
583
|
-
},
|
|
584
|
-
className: "search-
|
|
585
|
-
}, /*#__PURE__*/
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
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-
|
|
592
|
-
onClick:
|
|
593
|
-
|
|
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
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
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
|
-
}
|
|
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
|
-
|
|
613
|
-
|
|
640
|
+
var getAfterStyling = function getAfterStyling() {
|
|
641
|
+
var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
642
|
+
var $toolTipPosition = props.$toolTipPosition;
|
|
614
643
|
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
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
|
-
|
|
648
|
+
case 'bottom':
|
|
649
|
+
return getBottomMiddleArrowAfterStyle(props);
|
|
628
650
|
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
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
|
-
|
|
635
|
-
|
|
636
|
-
|
|
775
|
+
var selectedOption = currencyOptions.find(function (opt) {
|
|
776
|
+
return opt.value === currency;
|
|
777
|
+
});
|
|
637
778
|
|
|
638
|
-
|
|
639
|
-
|
|
779
|
+
if (!selectedOption) {
|
|
780
|
+
return null;
|
|
781
|
+
}
|
|
640
782
|
|
|
641
|
-
|
|
642
|
-
|
|
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
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
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
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
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
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
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
|
-
|
|
740
|
-
|
|
741
|
-
|
|
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
|
-
|
|
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 (
|
|
778
|
-
|
|
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
|
-
|
|
786
|
-
|
|
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
|
-
|
|
790
|
-
|
|
791
|
-
|
|
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
|
-
|
|
840
|
-
|
|
841
|
-
|
|
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
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
},
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
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
|
-
|
|
884
|
-
|
|
885
|
-
}
|
|
914
|
+
if (currentSearchRequestToken.current === newSearchToken) {
|
|
915
|
+
var _brandsResponse$data$, _productsResponse$dat, _productsResponse$dat2;
|
|
886
916
|
|
|
887
|
-
|
|
888
|
-
|
|
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
|
-
|
|
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
|
-
|
|
897
|
-
|
|
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
|
-
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
997
|
-
|
|
998
|
-
|
|
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
|
-
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
|
|
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
|
-
|
|
1031
|
-
}
|
|
1032
|
-
}
|
|
1033
|
-
|
|
1034
|
-
|
|
1035
|
-
|
|
1036
|
-
|
|
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
|
-
|
|
1041
|
-
|
|
1042
|
-
|
|
1043
|
-
|
|
1044
|
-
|
|
1045
|
-
|
|
1046
|
-
|
|
1047
|
-
|
|
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(
|
|
1081
|
-
|
|
1082
|
-
|
|
1083
|
-
|
|
1084
|
-
|
|
1085
|
-
|
|
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
|
-
|
|
1108
|
-
|
|
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
|
-
|
|
1125
|
-
|
|
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
|
-
|
|
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
|
-
|
|
1282
|
-
|
|
1074
|
+
setSearchValue(value);
|
|
1075
|
+
setIsSearchFocused(true);
|
|
1283
1076
|
|
|
1284
|
-
|
|
1285
|
-
|
|
1286
|
-
|
|
1287
|
-
|
|
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
|
-
|
|
1293
|
-
|
|
1294
|
-
|
|
1295
|
-
|
|
1296
|
-
|
|
1297
|
-
|
|
1298
|
-
|
|
1299
|
-
|
|
1300
|
-
|
|
1301
|
-
|
|
1302
|
-
|
|
1303
|
-
|
|
1304
|
-
|
|
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
|
-
|
|
1308
|
-
}
|
|
1309
|
-
|
|
1310
|
-
|
|
1311
|
-
|
|
1312
|
-
|
|
1313
|
-
|
|
1314
|
-
|
|
1315
|
-
|
|
1316
|
-
|
|
1317
|
-
|
|
1318
|
-
|
|
1319
|
-
|
|
1320
|
-
|
|
1321
|
-
|
|
1322
|
-
|
|
1323
|
-
|
|
1324
|
-
|
|
1325
|
-
|
|
1326
|
-
|
|
1327
|
-
|
|
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
|
-
|
|
1331
|
-
|
|
1332
|
-
|
|
1333
|
-
|
|
1334
|
-
|
|
1335
|
-
|
|
1336
|
-
|
|
1337
|
-
|
|
1338
|
-
|
|
1339
|
-
|
|
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
|
-
|
|
1347
|
-
|
|
1348
|
-
|
|
1349
|
-
|
|
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
|
-
|
|
1353
|
-
|
|
1354
|
-
|
|
1355
|
-
|
|
1356
|
-
|
|
1357
|
-
|
|
1358
|
-
|
|
1359
|
-
|
|
1360
|
-
|
|
1361
|
-
|
|
1362
|
-
|
|
1363
|
-
|
|
1364
|
-
|
|
1365
|
-
|
|
1366
|
-
|
|
1367
|
-
|
|
1368
|
-
|
|
1369
|
-
|
|
1370
|
-
|
|
1371
|
-
|
|
1372
|
-
|
|
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
|
-
|
|
1446
|
-
|
|
1447
|
-
|
|
1448
|
-
|
|
1449
|
-
|
|
1450
|
-
|
|
1451
|
-
|
|
1452
|
-
|
|
1453
|
-
|
|
1454
|
-
|
|
1455
|
-
|
|
1456
|
-
|
|
1457
|
-
|
|
1458
|
-
|
|
1459
|
-
|
|
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
|
-
|
|
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;
|