@bonlineza/luxity-lib 2.38.1 → 2.39.0
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/LuxityDesktopHeader.js +177 -68
- package/LuxityMobileHeader.js +178 -69
- package/build/bundle.css +1 -1
- package/build/bundle.js +201 -96
- package/package.json +1 -1
- package/TestComponent.js +0 -15
- package/build/CountryCodeSelect/index.js +0 -18
- package/build/ReactSelectWrapper/index.js +0 -34
- package/postcss.config.js +0 -6
package/LuxityDesktopHeader.js
CHANGED
|
@@ -82,10 +82,22 @@
|
|
|
82
82
|
return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();
|
|
83
83
|
}
|
|
84
84
|
|
|
85
|
+
function _toConsumableArray(arr) {
|
|
86
|
+
return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
function _arrayWithoutHoles(arr) {
|
|
90
|
+
if (Array.isArray(arr)) return _arrayLikeToArray(arr);
|
|
91
|
+
}
|
|
92
|
+
|
|
85
93
|
function _arrayWithHoles(arr) {
|
|
86
94
|
if (Array.isArray(arr)) return arr;
|
|
87
95
|
}
|
|
88
96
|
|
|
97
|
+
function _iterableToArray(iter) {
|
|
98
|
+
if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
|
|
99
|
+
}
|
|
100
|
+
|
|
89
101
|
function _iterableToArrayLimit(arr, i) {
|
|
90
102
|
var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];
|
|
91
103
|
|
|
@@ -133,6 +145,10 @@
|
|
|
133
145
|
return arr2;
|
|
134
146
|
}
|
|
135
147
|
|
|
148
|
+
function _nonIterableSpread() {
|
|
149
|
+
throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
150
|
+
}
|
|
151
|
+
|
|
136
152
|
function _nonIterableRest() {
|
|
137
153
|
throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
138
154
|
}
|
|
@@ -298,7 +314,7 @@
|
|
|
298
314
|
};
|
|
299
315
|
|
|
300
316
|
var SearchResults = function SearchResults(_ref) {
|
|
301
|
-
var _searchResults$brands, _searchResults$produc, _initialSearchData$tr, _initialSearchData$la
|
|
317
|
+
var _searchResults$brands, _searchResults$produc, _initialSearchData$tr, _initialSearchData$la;
|
|
302
318
|
|
|
303
319
|
var searchValue = _ref.searchValue,
|
|
304
320
|
searchResults = _ref.searchResults,
|
|
@@ -315,7 +331,9 @@
|
|
|
315
331
|
onBrandSearchResultClick = _ref.onBrandSearchResultClick,
|
|
316
332
|
onCreateInterests = _ref.onCreateInterests,
|
|
317
333
|
noResultsImage = _ref.noResultsImage,
|
|
318
|
-
showNoResults = _ref.showNoResults
|
|
334
|
+
showNoResults = _ref.showNoResults,
|
|
335
|
+
_ref$isLoading = _ref.isLoading,
|
|
336
|
+
isLoading = _ref$isLoading === void 0 ? false : _ref$isLoading;
|
|
319
337
|
|
|
320
338
|
var _useState = React.useState(false),
|
|
321
339
|
_useState2 = _slicedToArray(_useState, 2),
|
|
@@ -354,6 +372,39 @@
|
|
|
354
372
|
return "".concat(currencySymbol).concat(formatter.format(price));
|
|
355
373
|
};
|
|
356
374
|
|
|
375
|
+
var renderBrandSkeleton = function renderBrandSkeleton() {
|
|
376
|
+
return /*#__PURE__*/React__default.createElement("div", {
|
|
377
|
+
className: "brand-skeleton"
|
|
378
|
+
}, /*#__PURE__*/React__default.createElement("div", {
|
|
379
|
+
className: "brand-skeleton__item shimmer"
|
|
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
|
+
}));
|
|
387
|
+
};
|
|
388
|
+
|
|
389
|
+
var renderProductSkeleton = function renderProductSkeleton() {
|
|
390
|
+
return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, _toConsumableArray(Array(3)).map(function (_, index) {
|
|
391
|
+
return /*#__PURE__*/React__default.createElement("div", {
|
|
392
|
+
key: index,
|
|
393
|
+
className: "product-skeleton"
|
|
394
|
+
}, /*#__PURE__*/React__default.createElement("div", {
|
|
395
|
+
className: "product-skeleton__image shimmer"
|
|
396
|
+
}), /*#__PURE__*/React__default.createElement("div", {
|
|
397
|
+
className: "product-skeleton__content"
|
|
398
|
+
}, /*#__PURE__*/React__default.createElement("div", {
|
|
399
|
+
className: "product-skeleton__title shimmer"
|
|
400
|
+
}), /*#__PURE__*/React__default.createElement("div", {
|
|
401
|
+
className: "product-skeleton__subtitle shimmer"
|
|
402
|
+
}), /*#__PURE__*/React__default.createElement("div", {
|
|
403
|
+
className: "product-skeleton__price shimmer"
|
|
404
|
+
})));
|
|
405
|
+
}));
|
|
406
|
+
};
|
|
407
|
+
|
|
357
408
|
var renderProductCard = function renderProductCard(product) {
|
|
358
409
|
var selectedPrice = product.prices ? product.prices.find(function (p) {
|
|
359
410
|
return p.currency === currency;
|
|
@@ -423,6 +474,70 @@
|
|
|
423
474
|
}
|
|
424
475
|
|
|
425
476
|
return brands;
|
|
477
|
+
};
|
|
478
|
+
|
|
479
|
+
var renderBrandsList = function renderBrandsList() {
|
|
480
|
+
var _limitBrands2;
|
|
481
|
+
|
|
482
|
+
if (isLoading) {
|
|
483
|
+
return renderBrandSkeleton();
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
if (shouldShowInitialData) {
|
|
487
|
+
var _limitBrands;
|
|
488
|
+
|
|
489
|
+
return (_limitBrands = limitBrands(initialSearchData === null || initialSearchData === void 0 ? void 0 : initialSearchData.trending_brands)) === null || _limitBrands === void 0 ? void 0 : _limitBrands.map(function (brand) {
|
|
490
|
+
return /*#__PURE__*/React__default.createElement("a", {
|
|
491
|
+
key: brand.id,
|
|
492
|
+
href: getBrandLink(brand),
|
|
493
|
+
className: "search-results__item",
|
|
494
|
+
onClick: function onClick() {
|
|
495
|
+
if (typeof onBrandSearchResultClick === 'function') {
|
|
496
|
+
onBrandSearchResultClick({
|
|
497
|
+
brand_name: brand.name,
|
|
498
|
+
brand_link: getBrandLink(brand),
|
|
499
|
+
search_string: searchValue,
|
|
500
|
+
is_trending: true
|
|
501
|
+
});
|
|
502
|
+
}
|
|
503
|
+
}
|
|
504
|
+
}, brand.name);
|
|
505
|
+
});
|
|
506
|
+
}
|
|
507
|
+
|
|
508
|
+
return (_limitBrands2 = limitBrands(searchResults === null || searchResults === void 0 ? void 0 : searchResults.brands)) === null || _limitBrands2 === void 0 ? void 0 : _limitBrands2.map(function (brand) {
|
|
509
|
+
return /*#__PURE__*/React__default.createElement("a", {
|
|
510
|
+
key: brand.link,
|
|
511
|
+
href: brand.link,
|
|
512
|
+
className: "search-results__item",
|
|
513
|
+
onClick: function onClick() {
|
|
514
|
+
if (typeof onBrandSearchResultClick === 'function') {
|
|
515
|
+
onBrandSearchResultClick({
|
|
516
|
+
brand_name: brand.name,
|
|
517
|
+
brand_link: brand.link,
|
|
518
|
+
search_string: searchValue,
|
|
519
|
+
is_trending: false
|
|
520
|
+
});
|
|
521
|
+
}
|
|
522
|
+
}
|
|
523
|
+
}, brand.name);
|
|
524
|
+
});
|
|
525
|
+
};
|
|
526
|
+
|
|
527
|
+
var renderProductsList = function renderProductsList() {
|
|
528
|
+
var _searchResults$produc2;
|
|
529
|
+
|
|
530
|
+
if (isLoading) {
|
|
531
|
+
return renderProductSkeleton();
|
|
532
|
+
}
|
|
533
|
+
|
|
534
|
+
if (shouldShowInitialData) {
|
|
535
|
+
var _initialSearchData$la2;
|
|
536
|
+
|
|
537
|
+
return initialSearchData === null || initialSearchData === void 0 ? void 0 : (_initialSearchData$la2 = initialSearchData.latest_products) === null || _initialSearchData$la2 === void 0 ? void 0 : _initialSearchData$la2.map(renderProductCard);
|
|
538
|
+
}
|
|
539
|
+
|
|
540
|
+
return searchResults === null || searchResults === void 0 ? void 0 : (_searchResults$produc2 = searchResults.products) === null || _searchResults$produc2 === void 0 ? void 0 : _searchResults$produc2.map(renderProductCard);
|
|
426
541
|
}; // Show no results state
|
|
427
542
|
|
|
428
543
|
|
|
@@ -463,39 +578,7 @@
|
|
|
463
578
|
className: "search-results__header"
|
|
464
579
|
}, shouldShowInitialData ? 'TRENDING SEARCHES' : 'BRANDS'), /*#__PURE__*/React__default.createElement("div", {
|
|
465
580
|
className: "search-results__list"
|
|
466
|
-
},
|
|
467
|
-
return /*#__PURE__*/React__default.createElement("a", {
|
|
468
|
-
key: brand.id,
|
|
469
|
-
href: getBrandLink(brand),
|
|
470
|
-
className: "search-results__item",
|
|
471
|
-
onClick: function onClick() {
|
|
472
|
-
if (typeof onBrandSearchResultClick === 'function') {
|
|
473
|
-
onBrandSearchResultClick({
|
|
474
|
-
brand_name: brand.name,
|
|
475
|
-
brand_link: getBrandLink(brand),
|
|
476
|
-
search_string: searchValue,
|
|
477
|
-
is_trending: true
|
|
478
|
-
});
|
|
479
|
-
}
|
|
480
|
-
}
|
|
481
|
-
}, brand.name);
|
|
482
|
-
}) : (_limitBrands2 = limitBrands(searchResults === null || searchResults === void 0 ? void 0 : searchResults.brands)) === null || _limitBrands2 === void 0 ? void 0 : _limitBrands2.map(function (brand) {
|
|
483
|
-
return /*#__PURE__*/React__default.createElement("a", {
|
|
484
|
-
key: brand.link,
|
|
485
|
-
href: brand.link,
|
|
486
|
-
className: "search-results__item",
|
|
487
|
-
onClick: function onClick() {
|
|
488
|
-
if (typeof onBrandSearchResultClick === 'function') {
|
|
489
|
-
onBrandSearchResultClick({
|
|
490
|
-
brand_name: brand.name,
|
|
491
|
-
brand_link: brand.link,
|
|
492
|
-
search_string: searchValue,
|
|
493
|
-
is_trending: false
|
|
494
|
-
});
|
|
495
|
-
}
|
|
496
|
-
}
|
|
497
|
-
}, brand.name);
|
|
498
|
-
}))), /*#__PURE__*/React__default.createElement("div", {
|
|
581
|
+
}, renderBrandsList())), /*#__PURE__*/React__default.createElement("div", {
|
|
499
582
|
className: "search-results__section"
|
|
500
583
|
}, /*#__PURE__*/React__default.createElement("div", {
|
|
501
584
|
className: "search-results__section-header"
|
|
@@ -509,7 +592,7 @@
|
|
|
509
592
|
}
|
|
510
593
|
}, "View all items")), /*#__PURE__*/React__default.createElement("div", {
|
|
511
594
|
className: "search-results__product-list"
|
|
512
|
-
},
|
|
595
|
+
}, renderProductsList()), /*#__PURE__*/React__default.createElement("button", {
|
|
513
596
|
type: "button",
|
|
514
597
|
className: "search-results__view-all-button",
|
|
515
598
|
onClick: function onClick() {
|
|
@@ -739,7 +822,7 @@
|
|
|
739
822
|
|
|
740
823
|
var searchProductsFilter = function searchProductsFilter(search, limit, currencyCode) {
|
|
741
824
|
return {
|
|
742
|
-
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 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 ",
|
|
825
|
+
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 ",
|
|
743
826
|
variables: {
|
|
744
827
|
search: search,
|
|
745
828
|
limit: limit,
|
|
@@ -835,7 +918,12 @@
|
|
|
835
918
|
if (currentSearchRequestToken.current === newSearchToken) {
|
|
836
919
|
var _brandsResponse$data$, _productsResponse$dat, _productsResponse$dat2;
|
|
837
920
|
|
|
838
|
-
//
|
|
921
|
+
// Set loading to false when search completes
|
|
922
|
+
if (typeof onSearchLoading === 'function') {
|
|
923
|
+
onSearchLoading(false);
|
|
924
|
+
} // Extract brands from aggregations
|
|
925
|
+
|
|
926
|
+
|
|
839
927
|
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
|
|
840
928
|
|
|
841
929
|
var productsData = ((_productsResponse$dat = productsResponse.data.data.luxity_products_filter) === null || _productsResponse$dat === void 0 ? void 0 : _productsResponse$dat.data) || [];
|
|
@@ -850,11 +938,15 @@
|
|
|
850
938
|
}); // Map products to old structure with prices
|
|
851
939
|
|
|
852
940
|
var products = productsData.map(function (product) {
|
|
941
|
+
// Generate product link: /products/{category_type}/{brand_slug}/{product_slug}
|
|
942
|
+
var categorySlug = product.category_type.toLowerCase().replace(/\s+/g, '-');
|
|
943
|
+
var brandSlug = product.luxity_brand.slug;
|
|
944
|
+
var productSlug = product.product_slug;
|
|
945
|
+
var link = "/products/".concat(categorySlug, "/").concat(brandSlug, "/").concat(productSlug);
|
|
853
946
|
return {
|
|
854
947
|
name: product.product.name,
|
|
855
948
|
brand: product.luxity_brand.name,
|
|
856
|
-
link:
|
|
857
|
-
// Using product ID for link
|
|
949
|
+
link: link,
|
|
858
950
|
price: product.product.price || 0,
|
|
859
951
|
promotion_price: product.product.promotion_price || null,
|
|
860
952
|
est_retail_price: product.product.est_retail_price || 0,
|
|
@@ -863,9 +955,9 @@
|
|
|
863
955
|
featured_image: product.featured_image,
|
|
864
956
|
on_promotion: product.on_promotion || false,
|
|
865
957
|
promotion_discount: product.promotion_discount || 0,
|
|
866
|
-
// Keep new fields for potential future use
|
|
867
958
|
id: product.id,
|
|
868
959
|
category_type: product.category_type,
|
|
960
|
+
product_slug: product.product_slug,
|
|
869
961
|
luxity_brand: product.luxity_brand
|
|
870
962
|
};
|
|
871
963
|
});
|
|
@@ -894,6 +986,11 @@
|
|
|
894
986
|
}
|
|
895
987
|
}).catch(function (error) {
|
|
896
988
|
if (!axios.isCancel(error)) {
|
|
989
|
+
// Set loading to false when search fails
|
|
990
|
+
if (typeof onSearchLoading === 'function') {
|
|
991
|
+
onSearchLoading(false);
|
|
992
|
+
}
|
|
993
|
+
|
|
897
994
|
setSearchResults({
|
|
898
995
|
brands: [],
|
|
899
996
|
products: []
|
|
@@ -1041,7 +1138,7 @@
|
|
|
1041
1138
|
onSearchPreview = _ref.onSearchPreview,
|
|
1042
1139
|
onProductSearchResultClick = _ref.onProductSearchResultClick,
|
|
1043
1140
|
onBrandSearchResultClick = _ref.onBrandSearchResultClick,
|
|
1044
|
-
|
|
1141
|
+
_onSearchLoading = _ref.onSearchLoading,
|
|
1045
1142
|
currency = _ref.currency,
|
|
1046
1143
|
currencySymbol = _ref.currencySymbol,
|
|
1047
1144
|
currencyOptions = _ref.currencyOptions,
|
|
@@ -1071,53 +1168,64 @@
|
|
|
1071
1168
|
|
|
1072
1169
|
var _useState5 = React.useState(false),
|
|
1073
1170
|
_useState6 = _slicedToArray(_useState5, 2),
|
|
1074
|
-
|
|
1075
|
-
|
|
1171
|
+
searchLoading = _useState6[0],
|
|
1172
|
+
setSearchLoading = _useState6[1];
|
|
1173
|
+
|
|
1174
|
+
var _useState7 = React.useState(false),
|
|
1175
|
+
_useState8 = _slicedToArray(_useState7, 2),
|
|
1176
|
+
isSearchFocused = _useState8[0],
|
|
1177
|
+
setIsSearchFocused = _useState8[1];
|
|
1076
1178
|
|
|
1077
|
-
var
|
|
1179
|
+
var _useState9 = React.useState({
|
|
1078
1180
|
trending_brands: [],
|
|
1079
1181
|
latest_products: []
|
|
1080
1182
|
}),
|
|
1081
|
-
_useState8 = _slicedToArray(_useState7, 2),
|
|
1082
|
-
initialSearchView = _useState8[0],
|
|
1083
|
-
setInitialSearchView = _useState8[1];
|
|
1084
|
-
|
|
1085
|
-
var _useState9 = React.useState({}),
|
|
1086
1183
|
_useState10 = _slicedToArray(_useState9, 2),
|
|
1087
|
-
|
|
1088
|
-
|
|
1184
|
+
initialSearchView = _useState10[0],
|
|
1185
|
+
setInitialSearchView = _useState10[1];
|
|
1089
1186
|
|
|
1090
|
-
var _useState11 = React.useState(
|
|
1187
|
+
var _useState11 = React.useState({}),
|
|
1091
1188
|
_useState12 = _slicedToArray(_useState11, 2),
|
|
1092
|
-
|
|
1093
|
-
|
|
1189
|
+
dropdownData = _useState12[0],
|
|
1190
|
+
setDropdownData = _useState12[1];
|
|
1094
1191
|
|
|
1095
|
-
var _useState13 = React.useState(
|
|
1096
|
-
brands: [],
|
|
1097
|
-
products: []
|
|
1098
|
-
}),
|
|
1192
|
+
var _useState13 = React.useState(false),
|
|
1099
1193
|
_useState14 = _slicedToArray(_useState13, 2),
|
|
1100
|
-
|
|
1101
|
-
|
|
1194
|
+
hasError = _useState14[0],
|
|
1195
|
+
setHasError = _useState14[1];
|
|
1102
1196
|
|
|
1103
1197
|
var _useState15 = React.useState({
|
|
1104
1198
|
brands: [],
|
|
1105
1199
|
products: []
|
|
1106
1200
|
}),
|
|
1107
1201
|
_useState16 = _slicedToArray(_useState15, 2),
|
|
1108
|
-
|
|
1109
|
-
|
|
1202
|
+
searchResults = _useState16[0],
|
|
1203
|
+
setSearchResults = _useState16[1];
|
|
1110
1204
|
|
|
1111
|
-
var _useState17 = React.useState(
|
|
1205
|
+
var _useState17 = React.useState({
|
|
1206
|
+
brands: [],
|
|
1207
|
+
products: []
|
|
1208
|
+
}),
|
|
1112
1209
|
_useState18 = _slicedToArray(_useState17, 2),
|
|
1113
|
-
|
|
1114
|
-
|
|
1210
|
+
cachedResults = _useState18[0],
|
|
1211
|
+
setCachedResults = _useState18[1];
|
|
1212
|
+
|
|
1213
|
+
var _useState19 = React.useState(false),
|
|
1214
|
+
_useState20 = _slicedToArray(_useState19, 2),
|
|
1215
|
+
showNoResults = _useState20[0],
|
|
1216
|
+
setShowNoResults = _useState20[1];
|
|
1115
1217
|
|
|
1116
1218
|
var searchResultsRef = React.useRef(null);
|
|
1117
1219
|
|
|
1118
1220
|
var _useSearch = useSearch({
|
|
1119
1221
|
endpoint: endpoint,
|
|
1120
|
-
onSearchLoading: onSearchLoading
|
|
1222
|
+
onSearchLoading: function onSearchLoading(isLoading) {
|
|
1223
|
+
setSearchLoading(isLoading);
|
|
1224
|
+
|
|
1225
|
+
if (typeof _onSearchLoading === 'function') {
|
|
1226
|
+
_onSearchLoading(isLoading);
|
|
1227
|
+
}
|
|
1228
|
+
},
|
|
1121
1229
|
currency: currency,
|
|
1122
1230
|
onSearchPreview: onSearchPreview,
|
|
1123
1231
|
onNoResults: setShowNoResults
|
|
@@ -1272,7 +1380,8 @@
|
|
|
1272
1380
|
onBrandSearchResultClick: onBrandSearchResultClick,
|
|
1273
1381
|
onCreateInterests: onCreateInterests,
|
|
1274
1382
|
noResultsImage: noResultsImage,
|
|
1275
|
-
showNoResults: showNoResults
|
|
1383
|
+
showNoResults: showNoResults,
|
|
1384
|
+
isLoading: searchLoading
|
|
1276
1385
|
}), /*#__PURE__*/React__default.createElement("nav", {
|
|
1277
1386
|
className: "navbar__nav-links navbar__nav-links--wrap"
|
|
1278
1387
|
}, renderDropdownLinks(), !!stores.length && /*#__PURE__*/React__default.createElement("li", {
|