@bonlineza/luxity-lib 2.37.7 → 2.38.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/CurrencySelect.js CHANGED
@@ -42,10 +42,10 @@
42
42
  var relativeInlineStyle = styled.css(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n position: relative;\n"])));
43
43
  var topMiddleBodyStyle = styled.css(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n position: absolute;\n z-index: 1;\n bottom: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n"])));
44
44
  var getTopMiddleArrowAfterStyle = function getTopMiddleArrowAfterStyle(props) {
45
- 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);
45
+ 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);
46
46
  };
47
47
  var getBottomMiddleBodyStyle = function getBottomMiddleBodyStyle(props) {
48
- return styled.css(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral(["\n position: absolute;\n top: 100%;\n left: calc(50% - ", " / 2);\n"])), props.$bodyWidth);
48
+ return styled.css(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral(["\n position: absolute;\n top: 100%;\n left: calc(50% - ", " / 2);\n"])), props.bodyWidth);
49
49
  };
50
50
  var getBottomMiddleArrowAfterStyle = function getBottomMiddleArrowAfterStyle(props) {
51
51
  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);
@@ -55,10 +55,10 @@
55
55
 
56
56
  var getBodyStyle = function getBodyStyle() {
57
57
  var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
58
- var _props$$toolTipPositi = props.$toolTipPosition,
59
- $toolTipPosition = _props$$toolTipPositi === void 0 ? '' : _props$$toolTipPositi;
58
+ var _props$toolTipPositio = props.toolTipPosition,
59
+ toolTipPosition = _props$toolTipPositio === void 0 ? '' : _props$toolTipPositio;
60
60
 
61
- switch ($toolTipPosition) {
61
+ switch (toolTipPosition) {
62
62
  case 'top':
63
63
  return topMiddleBodyStyle;
64
64
 
@@ -72,9 +72,9 @@
72
72
 
73
73
  var getAfterStyling = function getAfterStyling() {
74
74
  var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
75
- var $toolTipPosition = props.$toolTipPosition;
75
+ var toolTipPosition = props.toolTipPosition;
76
76
 
77
- switch ($toolTipPosition) {
77
+ switch (toolTipPosition) {
78
78
  case 'top':
79
79
  return getTopMiddleArrowAfterStyle(props);
80
80
 
@@ -87,7 +87,7 @@
87
87
  };
88
88
 
89
89
  var Body = styled__default.span(_templateObject$1 || (_templateObject$1 = _taggedTemplateLiteral(["\n ", ";\n visibility: hidden;\n opacity: 0;\n width: ", ";\n transition: visibility 0.3s linear, opacity 0.3s linear;\n background-color: ", ";\n color: white;\n text-align: center;\n border-radius: 5px;\n ", "\n &::after {\n content: ' ';\n position: absolute;\n ", "\n }\n"])), relativeInlineStyle, function (props) {
90
- return props.$bodyWidth;
90
+ return props.bodyWidth;
91
91
  }, function (props) {
92
92
  return props.theme.colors.base || 'black';
93
93
  }, function (props) {
@@ -163,33 +163,33 @@
163
163
  });
164
164
  });
165
165
 
166
- /* eslint-disable react/require-default-props */
167
-
168
166
  var Tooltip = function Tooltip(_ref) {
169
- var _ref$children = _ref.children,
170
- children = _ref$children === void 0 ? null : _ref$children,
171
- _ref$toolTipText = _ref.toolTipText,
172
- toolTipText = _ref$toolTipText === void 0 ? '' : _ref$toolTipText,
173
- _ref$toolTipPosition = _ref.toolTipPosition,
174
- toolTipPosition = _ref$toolTipPosition === void 0 ? 'top' : _ref$toolTipPosition,
175
- _ref$bodyWidth = _ref.bodyWidth,
176
- bodyWidth = _ref$bodyWidth === void 0 ? '8em' : _ref$bodyWidth,
177
- _ref$apexWidth = _ref.apexWidth,
178
- apexWidth = _ref$apexWidth === void 0 ? '5px' : _ref$apexWidth,
179
- _ref$containerClassNa = _ref.containerClassName,
180
- containerClassName = _ref$containerClassNa === void 0 ? '' : _ref$containerClassNa,
181
- _ref$bodyClassName = _ref.bodyClassName,
182
- bodyClassName = _ref$bodyClassName === void 0 ? '' : _ref$bodyClassName;
167
+ var children = _ref.children,
168
+ toolTipText = _ref.toolTipText,
169
+ toolTipPosition = _ref.toolTipPosition,
170
+ bodyWidth = _ref.bodyWidth,
171
+ apexWidth = _ref.apexWidth,
172
+ containerClassName = _ref.containerClassName,
173
+ bodyClassName = _ref.bodyClassName;
183
174
  return /*#__PURE__*/React__default.createElement(Container, {
184
175
  className: containerClassName
185
176
  }, children, /*#__PURE__*/React__default.createElement(Body, {
186
- $toolTipPosition: toolTipPosition,
187
- $bodyWidth: bodyWidth,
188
- $apexWidth: apexWidth,
177
+ toolTipPosition: toolTipPosition,
178
+ bodyWidth: bodyWidth,
179
+ apexWidth: apexWidth,
189
180
  className: bodyClassName
190
181
  }, toolTipText));
191
182
  };
192
183
 
184
+ Tooltip.defaultProps = {
185
+ children: null,
186
+ toolTipText: '',
187
+ toolTipPosition: 'top',
188
+ bodyWidth: '8em',
189
+ apexWidth: '5px',
190
+ containerClassName: '',
191
+ bodyClassName: ''
192
+ };
193
193
  var Tooltip$1 = themed(Tooltip);
194
194
 
195
195
  var CurrencySelect = function CurrencySelect(_ref) {
@@ -1313,10 +1313,10 @@
1313
1313
  var relativeInlineStyle = styled.css(_templateObject$i || (_templateObject$i = _taggedTemplateLiteral(["\n position: relative;\n"])));
1314
1314
  var topMiddleBodyStyle = styled.css(_templateObject2$1 || (_templateObject2$1 = _taggedTemplateLiteral(["\n position: absolute;\n z-index: 1;\n bottom: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n"])));
1315
1315
  var getTopMiddleArrowAfterStyle = function getTopMiddleArrowAfterStyle(props) {
1316
- return styled.css(_templateObject3$1 || (_templateObject3$1 = _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);
1316
+ return styled.css(_templateObject3$1 || (_templateObject3$1 = _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);
1317
1317
  };
1318
1318
  var getBottomMiddleBodyStyle = function getBottomMiddleBodyStyle(props) {
1319
- return styled.css(_templateObject4$1 || (_templateObject4$1 = _taggedTemplateLiteral(["\n position: absolute;\n top: 100%;\n left: calc(50% - ", " / 2);\n"])), props.$bodyWidth);
1319
+ return styled.css(_templateObject4$1 || (_templateObject4$1 = _taggedTemplateLiteral(["\n position: absolute;\n top: 100%;\n left: calc(50% - ", " / 2);\n"])), props.bodyWidth);
1320
1320
  };
1321
1321
  var getBottomMiddleArrowAfterStyle = function getBottomMiddleArrowAfterStyle(props) {
1322
1322
  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);
@@ -1326,10 +1326,10 @@
1326
1326
 
1327
1327
  var getBodyStyle = function getBodyStyle() {
1328
1328
  var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
1329
- var _props$$toolTipPositi = props.$toolTipPosition,
1330
- $toolTipPosition = _props$$toolTipPositi === void 0 ? '' : _props$$toolTipPositi;
1329
+ var _props$toolTipPositio = props.toolTipPosition,
1330
+ toolTipPosition = _props$toolTipPositio === void 0 ? '' : _props$toolTipPositio;
1331
1331
 
1332
- switch ($toolTipPosition) {
1332
+ switch (toolTipPosition) {
1333
1333
  case 'top':
1334
1334
  return topMiddleBodyStyle;
1335
1335
 
@@ -1343,9 +1343,9 @@
1343
1343
 
1344
1344
  var getAfterStyling = function getAfterStyling() {
1345
1345
  var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
1346
- var $toolTipPosition = props.$toolTipPosition;
1346
+ var toolTipPosition = props.toolTipPosition;
1347
1347
 
1348
- switch ($toolTipPosition) {
1348
+ switch (toolTipPosition) {
1349
1349
  case 'top':
1350
1350
  return getTopMiddleArrowAfterStyle(props);
1351
1351
 
@@ -1358,7 +1358,7 @@
1358
1358
  };
1359
1359
 
1360
1360
  var Body$1 = styled__default.span(_templateObject$j || (_templateObject$j = _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) {
1361
- return props.$bodyWidth;
1361
+ return props.bodyWidth;
1362
1362
  }, function (props) {
1363
1363
  return props.theme.colors.base || 'black';
1364
1364
  }, function (props) {
@@ -357,6 +357,8 @@
357
357
  price: product.price,
358
358
  retail_price: product.est_retail_price
359
359
  };
360
+ var displayPrice = product.on_promotion && product.promotion_price ? product.promotion_price : selectedPrice.price;
361
+ var hasPromotion = product.on_promotion && product.promotion_price;
360
362
  return /*#__PURE__*/React__default.createElement("a", {
361
363
  key: product.link,
362
364
  href: product.link,
@@ -384,15 +386,23 @@
384
386
  className: "product-card__name"
385
387
  }, shouldShowInitialData ? /*#__PURE__*/React__default.createElement("span", null, /*#__PURE__*/React__default.createElement("span", {
386
388
  className: "product-card__brand-name"
387
- }, product.brand.toUpperCase()), ' ', product.name) : product.name), /*#__PURE__*/React__default.createElement("div", {
389
+ }, product.brand.toUpperCase()), ' ', product.name) : /*#__PURE__*/React__default.createElement("span", null, /*#__PURE__*/React__default.createElement("span", {
390
+ className: "product-card__brand-name"
391
+ }, product.brand.toUpperCase()), ' ', product.name)), /*#__PURE__*/React__default.createElement("div", {
388
392
  className: "product-card__info-row"
389
393
  }, /*#__PURE__*/React__default.createElement("div", {
390
394
  className: "product-card__price-group"
395
+ }, hasPromotion ? /*#__PURE__*/React__default.createElement("div", {
396
+ className: "product-card__price-with-promotion"
391
397
  }, /*#__PURE__*/React__default.createElement("div", {
398
+ className: "product-card__price product-card__price--promotion"
399
+ }, formatPrice(displayPrice)), /*#__PURE__*/React__default.createElement("div", {
400
+ className: "product-card__price product-card__price--original"
401
+ }, formatPrice(selectedPrice.price))) : /*#__PURE__*/React__default.createElement("div", {
392
402
  className: "product-card__price"
393
- }, formatPrice(selectedPrice.price)), selectedPrice.retail_price > 1 && /*#__PURE__*/React__default.createElement("div", {
403
+ }, formatPrice(displayPrice)), selectedPrice.retail_price > 1 && selectedPrice.retail_price > displayPrice && /*#__PURE__*/React__default.createElement("div", {
394
404
  className: "product-card__retail-price"
395
- }, "Est. Retail: ", formatPrice(selectedPrice.retail_price))), /*#__PURE__*/React__default.createElement("div", {
405
+ }, "Est. Retail: ", formatPrice(selectedPrice.retail_price))), product.condition && /*#__PURE__*/React__default.createElement("div", {
396
406
  className: "product-card__condition"
397
407
  }, /*#__PURE__*/React__default.createElement("span", {
398
408
  className: "product-card__condition-label"
@@ -487,10 +497,10 @@
487
497
  var relativeInlineStyle = styled.css(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n position: relative;\n"])));
488
498
  var topMiddleBodyStyle = styled.css(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n position: absolute;\n z-index: 1;\n bottom: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n"])));
489
499
  var getTopMiddleArrowAfterStyle = function getTopMiddleArrowAfterStyle(props) {
490
- 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);
500
+ 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);
491
501
  };
492
502
  var getBottomMiddleBodyStyle = function getBottomMiddleBodyStyle(props) {
493
- return styled.css(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral(["\n position: absolute;\n top: 100%;\n left: calc(50% - ", " / 2);\n"])), props.$bodyWidth);
503
+ return styled.css(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral(["\n position: absolute;\n top: 100%;\n left: calc(50% - ", " / 2);\n"])), props.bodyWidth);
494
504
  };
495
505
  var getBottomMiddleArrowAfterStyle = function getBottomMiddleArrowAfterStyle(props) {
496
506
  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);
@@ -500,10 +510,10 @@
500
510
 
501
511
  var getBodyStyle = function getBodyStyle() {
502
512
  var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
503
- var _props$$toolTipPositi = props.$toolTipPosition,
504
- $toolTipPosition = _props$$toolTipPositi === void 0 ? '' : _props$$toolTipPositi;
513
+ var _props$toolTipPositio = props.toolTipPosition,
514
+ toolTipPosition = _props$toolTipPositio === void 0 ? '' : _props$toolTipPositio;
505
515
 
506
- switch ($toolTipPosition) {
516
+ switch (toolTipPosition) {
507
517
  case 'top':
508
518
  return topMiddleBodyStyle;
509
519
 
@@ -517,9 +527,9 @@
517
527
 
518
528
  var getAfterStyling = function getAfterStyling() {
519
529
  var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
520
- var $toolTipPosition = props.$toolTipPosition;
530
+ var toolTipPosition = props.toolTipPosition;
521
531
 
522
- switch ($toolTipPosition) {
532
+ switch (toolTipPosition) {
523
533
  case 'top':
524
534
  return getTopMiddleArrowAfterStyle(props);
525
535
 
@@ -532,7 +542,7 @@
532
542
  };
533
543
 
534
544
  var Body = styled__default.span(_templateObject$1 || (_templateObject$1 = _taggedTemplateLiteral(["\n ", ";\n visibility: hidden;\n opacity: 0;\n width: ", ";\n transition: visibility 0.3s linear, opacity 0.3s linear;\n background-color: ", ";\n color: white;\n text-align: center;\n border-radius: 5px;\n ", "\n &::after {\n content: ' ';\n position: absolute;\n ", "\n }\n"])), relativeInlineStyle, function (props) {
535
- return props.$bodyWidth;
545
+ return props.bodyWidth;
536
546
  }, function (props) {
537
547
  return props.theme.colors.base || 'black';
538
548
  }, function (props) {
@@ -608,33 +618,33 @@
608
618
  });
609
619
  });
610
620
 
611
- /* eslint-disable react/require-default-props */
612
-
613
621
  var Tooltip = function Tooltip(_ref) {
614
- var _ref$children = _ref.children,
615
- children = _ref$children === void 0 ? null : _ref$children,
616
- _ref$toolTipText = _ref.toolTipText,
617
- toolTipText = _ref$toolTipText === void 0 ? '' : _ref$toolTipText,
618
- _ref$toolTipPosition = _ref.toolTipPosition,
619
- toolTipPosition = _ref$toolTipPosition === void 0 ? 'top' : _ref$toolTipPosition,
620
- _ref$bodyWidth = _ref.bodyWidth,
621
- bodyWidth = _ref$bodyWidth === void 0 ? '8em' : _ref$bodyWidth,
622
- _ref$apexWidth = _ref.apexWidth,
623
- apexWidth = _ref$apexWidth === void 0 ? '5px' : _ref$apexWidth,
624
- _ref$containerClassNa = _ref.containerClassName,
625
- containerClassName = _ref$containerClassNa === void 0 ? '' : _ref$containerClassNa,
626
- _ref$bodyClassName = _ref.bodyClassName,
627
- bodyClassName = _ref$bodyClassName === void 0 ? '' : _ref$bodyClassName;
622
+ var children = _ref.children,
623
+ toolTipText = _ref.toolTipText,
624
+ toolTipPosition = _ref.toolTipPosition,
625
+ bodyWidth = _ref.bodyWidth,
626
+ apexWidth = _ref.apexWidth,
627
+ containerClassName = _ref.containerClassName,
628
+ bodyClassName = _ref.bodyClassName;
628
629
  return /*#__PURE__*/React__default.createElement(Container, {
629
630
  className: containerClassName
630
631
  }, children, /*#__PURE__*/React__default.createElement(Body, {
631
- $toolTipPosition: toolTipPosition,
632
- $bodyWidth: bodyWidth,
633
- $apexWidth: apexWidth,
632
+ toolTipPosition: toolTipPosition,
633
+ bodyWidth: bodyWidth,
634
+ apexWidth: apexWidth,
634
635
  className: bodyClassName
635
636
  }, toolTipText));
636
637
  };
637
638
 
639
+ Tooltip.defaultProps = {
640
+ children: null,
641
+ toolTipText: '',
642
+ toolTipPosition: 'top',
643
+ bodyWidth: '8em',
644
+ apexWidth: '5px',
645
+ containerClassName: '',
646
+ bodyClassName: ''
647
+ };
638
648
  var Tooltip$1 = themed(Tooltip);
639
649
 
640
650
  var CurrencySelect = function CurrencySelect(_ref) {
@@ -684,20 +694,33 @@
684
694
  }))));
685
695
  };
686
696
 
687
- var searchProducts = function searchProducts(search, limit, currencyCode) {
697
+ var searchBrandsAggregations = function searchBrandsAggregations(search, currencyCode) {
688
698
  return {
689
- query: "\n query SearchProducts($search: String!, $limit: Int!, $currencyCode: String!) {\n luxity_products_serach_results(search: $search, limit: $limit, currency_code: $currencyCode) {\n brands {\n name\n link\n }\n products {\n name\n link\n price\n est_retail_price\n condition\n featured_image\n }\n luxity_product_ids\n }\n }\n ",
699
+ query: "\n query GetProductFilterAggregations($search: String!) {\n luxity_products_aggregations(search: $search) {\n luxity_brand {\n name\n }\n }\n }\n ",
700
+ variables: {
701
+ search: search,
702
+ currency_code: currencyCode
703
+ }
704
+ };
705
+ }; // NEW: Get top products for search dropdown (right side)
706
+
707
+ var searchProductsFilter = function searchProductsFilter(search, limit, currencyCode) {
708
+ return {
709
+ 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 ",
690
710
  variables: {
691
711
  search: search,
692
712
  limit: limit,
693
- currencyCode: currencyCode
713
+ page: 1,
714
+ sort_by: 'newest',
715
+ with_sold: false,
716
+ currency_code: currencyCode
694
717
  }
695
718
  };
696
719
  };
697
720
 
698
721
  var useSearch = function useSearch(_ref) {
699
722
  var endpoint = _ref.endpoint,
700
- onProductIdsReceived = _ref.onProductIdsReceived,
723
+ onSearchLoading = _ref.onSearchLoading,
701
724
  currency = _ref.currency,
702
725
  onSearchPreview = _ref.onSearchPreview;
703
726
  var currentSearchRequestToken = React.useRef(null);
@@ -735,8 +758,7 @@
735
758
  if (!searchQuery || searchQuery.trim() === '') {
736
759
  setSearchResults({
737
760
  brands: [],
738
- products: [],
739
- luxity_product_ids: []
761
+ products: []
740
762
  });
741
763
  return;
742
764
  } // Cancel any ongoing search request to prevent race conditions
@@ -748,41 +770,96 @@
748
770
 
749
771
 
750
772
  var newSearchToken = axios.CancelToken.source();
751
- currentSearchRequestToken.current = newSearchToken;
752
- axios.post(endpoint, searchProducts(searchQuery, 3, currency), {
773
+ currentSearchRequestToken.current = newSearchToken; // Set loading to true when starting the search request
774
+
775
+ if (typeof onSearchLoading === 'function') {
776
+ onSearchLoading(true);
777
+ } // Make TWO parallel queries: brands aggregations + products filter
778
+
779
+
780
+ Promise.all([// Query 1: Get brands aggregations
781
+ axios.post(endpoint, searchBrandsAggregations(searchQuery, currency), {
753
782
  cancelToken: newSearchToken.token
754
- }).then(function (response) {
783
+ }), // Query 2: Get top 3 products
784
+ axios.post(endpoint, searchProductsFilter(searchQuery, 3, currency), {
785
+ cancelToken: newSearchToken.token
786
+ })]).then(function (_ref3) {
787
+ var _ref4 = _slicedToArray(_ref3, 2),
788
+ brandsResponse = _ref4[0],
789
+ productsResponse = _ref4[1];
790
+
755
791
  if (currentSearchRequestToken.current === newSearchToken) {
756
- var searchResults = response.data.data.luxity_products_serach_results;
792
+ var _brandsResponse$data$, _productsResponse$dat, _productsResponse$dat2;
793
+
794
+ // Extract brands from aggregations
795
+ 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
796
+
797
+ var productsData = ((_productsResponse$dat = productsResponse.data.data.luxity_products_filter) === null || _productsResponse$dat === void 0 ? void 0 : _productsResponse$dat.data) || [];
798
+ 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 }
799
+
800
+ var brands = brandsData.slice(0, 10).map(function (brand) {
801
+ return {
802
+ name: brand.name,
803
+ link: "/products/brands/".concat(brand.name.toLowerCase().replace(/\s+/g, '-')) // Convert to slug
804
+
805
+ };
806
+ }); // Map products to old structure with prices
807
+
808
+ var products = productsData.map(function (product) {
809
+ return {
810
+ name: product.product.name,
811
+ brand: product.luxity_brand.name,
812
+ link: "/products/".concat(product.id),
813
+ // Using product ID for link
814
+ price: product.product.price || 0,
815
+ promotion_price: product.product.promotion_price || null,
816
+ est_retail_price: product.product.est_retail_price || 0,
817
+ condition: product.product.condition || '',
818
+ currency_symbol: product.product.currency_symbol || '',
819
+ featured_image: product.featured_image,
820
+ on_promotion: product.on_promotion || false,
821
+ promotion_discount: product.promotion_discount || 0,
822
+ // Keep new fields for potential future use
823
+ id: product.id,
824
+ category_type: product.category_type,
825
+ luxity_brand: product.luxity_brand
826
+ };
827
+ });
828
+ var searchResults = {
829
+ brands: brands,
830
+ products: products,
831
+ total: totalResults
832
+ };
757
833
  setSearchResults(searchResults);
758
834
 
759
- if (searchResults && searchResults.luxity_product_ids) {
760
- onProductIdsReceived(searchResults.luxity_product_ids);
761
- }
762
-
763
835
  if (typeof onSearchPreview === 'function') {
764
- var _searchResults$brands, _searchResults$produc;
765
-
766
- var hasResults = ((_searchResults$brands = searchResults.brands) === null || _searchResults$brands === void 0 ? void 0 : _searchResults$brands.length) > 0 || ((_searchResults$produc = searchResults.products) === null || _searchResults$produc === void 0 ? void 0 : _searchResults$produc.length) > 0;
836
+ var hasResults = brands.length > 0 || products.length > 0;
767
837
  onSearchPreview({
768
838
  search_string: searchQuery,
769
839
  has_results: hasResults
770
840
  });
771
841
  }
772
842
 
773
- currentSearchRequestToken.current = null;
843
+ currentSearchRequestToken.current = null; // Set loading to false when search completes successfully
844
+
845
+ if (typeof onSearchLoading === 'function') {
846
+ onSearchLoading(false);
847
+ }
774
848
  }
775
849
  }).catch(function (error) {
776
850
  if (!axios.isCancel(error)) {
777
851
  setSearchResults({
778
852
  brands: [],
779
- products: [],
780
- luxity_product_ids: []
853
+ products: []
781
854
  });
782
- currentSearchRequestToken.current = null;
855
+ currentSearchRequestToken.current = null; // Set loading to false when search fails
856
+
857
+ if (typeof onSearchLoading === 'function') {
858
+ onSearchLoading(false);
859
+ }
783
860
  }
784
861
  });
785
- }, [endpoint, currency, onSearchPreview, onProductIdsReceived]);
862
+ }, [endpoint, currency, onSearchPreview, onSearchLoading]);
786
863
  var debouncedSearch = React.useMemo(function () {
787
864
  return debounce(function (searchQuery, setSearchResults) {
788
865
  return performSearch(searchQuery, setSearchResults);
@@ -938,7 +1015,7 @@
938
1015
  onSearchPreview = _ref.onSearchPreview,
939
1016
  onProductSearchResultClick = _ref.onProductSearchResultClick,
940
1017
  onBrandSearchResultClick = _ref.onBrandSearchResultClick,
941
- onProductIdsReceived = _ref.onProductIdsReceived,
1018
+ onSearchLoading = _ref.onSearchLoading,
942
1019
  currency = _ref.currency,
943
1020
  currencySymbol = _ref.currencySymbol,
944
1021
  currencyOptions = _ref.currencyOptions,
@@ -956,7 +1033,7 @@
956
1033
 
957
1034
  var _useSearch = useSearch({
958
1035
  endpoint: endpoint,
959
- onProductIdsReceived: onProductIdsReceived,
1036
+ onSearchLoading: onSearchLoading,
960
1037
  currency: currency,
961
1038
  onSearchPreview: onSearchPreview
962
1039
  }),
package/LuxityFooter.js CHANGED
@@ -1931,10 +1931,10 @@
1931
1931
  var relativeInlineStyle = styled.css(_templateObject$1 || (_templateObject$1 = _taggedTemplateLiteral(["\n position: relative;\n"])));
1932
1932
  var topMiddleBodyStyle = styled.css(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n position: absolute;\n z-index: 1;\n bottom: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n"])));
1933
1933
  var getTopMiddleArrowAfterStyle = function getTopMiddleArrowAfterStyle(props) {
1934
- 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);
1934
+ 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);
1935
1935
  };
1936
1936
  var getBottomMiddleBodyStyle = function getBottomMiddleBodyStyle(props) {
1937
- return styled.css(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral(["\n position: absolute;\n top: 100%;\n left: calc(50% - ", " / 2);\n"])), props.$bodyWidth);
1937
+ return styled.css(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral(["\n position: absolute;\n top: 100%;\n left: calc(50% - ", " / 2);\n"])), props.bodyWidth);
1938
1938
  };
1939
1939
  var getBottomMiddleArrowAfterStyle = function getBottomMiddleArrowAfterStyle(props) {
1940
1940
  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);
@@ -1944,10 +1944,10 @@
1944
1944
 
1945
1945
  var getBodyStyle = function getBodyStyle() {
1946
1946
  var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
1947
- var _props$$toolTipPositi = props.$toolTipPosition,
1948
- $toolTipPosition = _props$$toolTipPositi === void 0 ? '' : _props$$toolTipPositi;
1947
+ var _props$toolTipPositio = props.toolTipPosition,
1948
+ toolTipPosition = _props$toolTipPositio === void 0 ? '' : _props$toolTipPositio;
1949
1949
 
1950
- switch ($toolTipPosition) {
1950
+ switch (toolTipPosition) {
1951
1951
  case 'top':
1952
1952
  return topMiddleBodyStyle;
1953
1953
 
@@ -1961,9 +1961,9 @@
1961
1961
 
1962
1962
  var getAfterStyling = function getAfterStyling() {
1963
1963
  var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
1964
- var $toolTipPosition = props.$toolTipPosition;
1964
+ var toolTipPosition = props.toolTipPosition;
1965
1965
 
1966
- switch ($toolTipPosition) {
1966
+ switch (toolTipPosition) {
1967
1967
  case 'top':
1968
1968
  return getTopMiddleArrowAfterStyle(props);
1969
1969
 
@@ -1976,7 +1976,7 @@
1976
1976
  };
1977
1977
 
1978
1978
  var Body = styled__default.span(_templateObject$2 || (_templateObject$2 = _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) {
1979
- return props.$bodyWidth;
1979
+ return props.bodyWidth;
1980
1980
  }, function (props) {
1981
1981
  return props.theme.colors.base || 'black';
1982
1982
  }, function (props) {
@@ -1988,33 +1988,33 @@
1988
1988
  var _templateObject$3;
1989
1989
  var Container = styled__default.div(_templateObject$3 || (_templateObject$3 = _taggedTemplateLiteral(["\n ", ";\n cursor: pointer;\n &:hover ", " {\n opacity: 1;\n visibility: visible;\n }\n"])), relativeInlineStyle, Body);
1990
1990
 
1991
- /* eslint-disable react/require-default-props */
1992
-
1993
1991
  var Tooltip = function Tooltip(_ref) {
1994
- var _ref$children = _ref.children,
1995
- children = _ref$children === void 0 ? null : _ref$children,
1996
- _ref$toolTipText = _ref.toolTipText,
1997
- toolTipText = _ref$toolTipText === void 0 ? '' : _ref$toolTipText,
1998
- _ref$toolTipPosition = _ref.toolTipPosition,
1999
- toolTipPosition = _ref$toolTipPosition === void 0 ? 'top' : _ref$toolTipPosition,
2000
- _ref$bodyWidth = _ref.bodyWidth,
2001
- bodyWidth = _ref$bodyWidth === void 0 ? '8em' : _ref$bodyWidth,
2002
- _ref$apexWidth = _ref.apexWidth,
2003
- apexWidth = _ref$apexWidth === void 0 ? '5px' : _ref$apexWidth,
2004
- _ref$containerClassNa = _ref.containerClassName,
2005
- containerClassName = _ref$containerClassNa === void 0 ? '' : _ref$containerClassNa,
2006
- _ref$bodyClassName = _ref.bodyClassName,
2007
- bodyClassName = _ref$bodyClassName === void 0 ? '' : _ref$bodyClassName;
1992
+ var children = _ref.children,
1993
+ toolTipText = _ref.toolTipText,
1994
+ toolTipPosition = _ref.toolTipPosition,
1995
+ bodyWidth = _ref.bodyWidth,
1996
+ apexWidth = _ref.apexWidth,
1997
+ containerClassName = _ref.containerClassName,
1998
+ bodyClassName = _ref.bodyClassName;
2008
1999
  return /*#__PURE__*/React__default.createElement(Container, {
2009
2000
  className: containerClassName
2010
2001
  }, children, /*#__PURE__*/React__default.createElement(Body, {
2011
- $toolTipPosition: toolTipPosition,
2012
- $bodyWidth: bodyWidth,
2013
- $apexWidth: apexWidth,
2002
+ toolTipPosition: toolTipPosition,
2003
+ bodyWidth: bodyWidth,
2004
+ apexWidth: apexWidth,
2014
2005
  className: bodyClassName
2015
2006
  }, toolTipText));
2016
2007
  };
2017
2008
 
2009
+ Tooltip.defaultProps = {
2010
+ children: null,
2011
+ toolTipText: '',
2012
+ toolTipPosition: 'top',
2013
+ bodyWidth: '8em',
2014
+ apexWidth: '5px',
2015
+ containerClassName: '',
2016
+ bodyClassName: ''
2017
+ };
2018
2018
  var Tooltip$1 = themed(Tooltip);
2019
2019
 
2020
2020
  var CurrencySelect = function CurrencySelect(_ref) {
@@ -2161,7 +2161,6 @@
2161
2161
  track: link === null || link === void 0 ? void 0 : link.track,
2162
2162
  target: link.target
2163
2163
  }, link.label) : /*#__PURE__*/React__default.createElement("div", {
2164
- key: link.label,
2165
2164
  className: "footer__text"
2166
2165
  }, link.label);
2167
2166
  })));
@@ -1313,10 +1313,10 @@
1313
1313
  var relativeInlineStyle = styled.css(_templateObject$i || (_templateObject$i = _taggedTemplateLiteral(["\n position: relative;\n"])));
1314
1314
  var topMiddleBodyStyle = styled.css(_templateObject2$1 || (_templateObject2$1 = _taggedTemplateLiteral(["\n position: absolute;\n z-index: 1;\n bottom: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n"])));
1315
1315
  var getTopMiddleArrowAfterStyle = function getTopMiddleArrowAfterStyle(props) {
1316
- return styled.css(_templateObject3$1 || (_templateObject3$1 = _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);
1316
+ return styled.css(_templateObject3$1 || (_templateObject3$1 = _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);
1317
1317
  };
1318
1318
  var getBottomMiddleBodyStyle = function getBottomMiddleBodyStyle(props) {
1319
- return styled.css(_templateObject4$1 || (_templateObject4$1 = _taggedTemplateLiteral(["\n position: absolute;\n top: 100%;\n left: calc(50% - ", " / 2);\n"])), props.$bodyWidth);
1319
+ return styled.css(_templateObject4$1 || (_templateObject4$1 = _taggedTemplateLiteral(["\n position: absolute;\n top: 100%;\n left: calc(50% - ", " / 2);\n"])), props.bodyWidth);
1320
1320
  };
1321
1321
  var getBottomMiddleArrowAfterStyle = function getBottomMiddleArrowAfterStyle(props) {
1322
1322
  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);
@@ -1326,10 +1326,10 @@
1326
1326
 
1327
1327
  var getBodyStyle = function getBodyStyle() {
1328
1328
  var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
1329
- var _props$$toolTipPositi = props.$toolTipPosition,
1330
- $toolTipPosition = _props$$toolTipPositi === void 0 ? '' : _props$$toolTipPositi;
1329
+ var _props$toolTipPositio = props.toolTipPosition,
1330
+ toolTipPosition = _props$toolTipPositio === void 0 ? '' : _props$toolTipPositio;
1331
1331
 
1332
- switch ($toolTipPosition) {
1332
+ switch (toolTipPosition) {
1333
1333
  case 'top':
1334
1334
  return topMiddleBodyStyle;
1335
1335
 
@@ -1343,9 +1343,9 @@
1343
1343
 
1344
1344
  var getAfterStyling = function getAfterStyling() {
1345
1345
  var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
1346
- var $toolTipPosition = props.$toolTipPosition;
1346
+ var toolTipPosition = props.toolTipPosition;
1347
1347
 
1348
- switch ($toolTipPosition) {
1348
+ switch (toolTipPosition) {
1349
1349
  case 'top':
1350
1350
  return getTopMiddleArrowAfterStyle(props);
1351
1351
 
@@ -1358,7 +1358,7 @@
1358
1358
  };
1359
1359
 
1360
1360
  var Body$1 = styled__default.span(_templateObject$j || (_templateObject$j = _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) {
1361
- return props.$bodyWidth;
1361
+ return props.bodyWidth;
1362
1362
  }, function (props) {
1363
1363
  return props.theme.colors.base || 'black';
1364
1364
  }, function (props) {