@bonlineza/luxity-lib 2.35.8 → 2.36.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/build/bundle.js CHANGED
@@ -15562,13 +15562,13 @@
15562
15562
  setError = _useForm.setError;
15563
15563
 
15564
15564
  var renderLinks = function renderLinks(links, title) {
15565
- return /*#__PURE__*/React__default.createElement("div", {
15565
+ return !!links.length && /*#__PURE__*/React__default.createElement("div", {
15566
15566
  className: "footer__link-container"
15567
15567
  }, /*#__PURE__*/React__default.createElement("div", {
15568
15568
  className: "footer__link-title"
15569
15569
  }, title), /*#__PURE__*/React__default.createElement("div", {
15570
15570
  className: "footer__links"
15571
- }, !!links.length && links.map(function (link) {
15571
+ }, links.map(function (link) {
15572
15572
  return /*#__PURE__*/React__default.createElement("div", {
15573
15573
  className: "footer__link-wrapper",
15574
15574
  key: link.label
@@ -15751,13 +15751,13 @@
15751
15751
  }), /*#__PURE__*/React__default.createElement(AccordionSection, {
15752
15752
  title: "POPULAR",
15753
15753
  links: popularLinks
15754
- }), /*#__PURE__*/React__default.createElement(AccordionSection, {
15754
+ }), !!sellLinks.length && /*#__PURE__*/React__default.createElement(AccordionSection, {
15755
15755
  title: "SELL",
15756
15756
  links: sellLinks
15757
15757
  }), /*#__PURE__*/React__default.createElement(AccordionSection, {
15758
15758
  title: "COMPANY",
15759
15759
  links: companyLinks
15760
- }), /*#__PURE__*/React__default.createElement(AccordionSection, {
15760
+ }), !!storeLinks.length && /*#__PURE__*/React__default.createElement(AccordionSection, {
15761
15761
  title: "CONNECT",
15762
15762
  links: storeLinks
15763
15763
  }), /*#__PURE__*/React__default.createElement("div", {
@@ -15821,11 +15821,11 @@
15821
15821
  onClick: onMenuItemClick
15822
15822
  }, "All ", categoryTitle)), !!brandElements.length && brandElements.map(function (brand) {
15823
15823
  return /*#__PURE__*/React__default.createElement("div", {
15824
- className: "dropdown__brand-element"
15824
+ className: "dropdown__brand-element",
15825
+ key: brand.name
15825
15826
  }, /*#__PURE__*/React__default.createElement(LinkComponent, {
15826
15827
  href: "".concat(productsUrl, "/").concat(categorySlug, "/").concat(brand === null || brand === void 0 ? void 0 : brand.slug),
15827
15828
  className: "dropdown__element",
15828
- key: brand.name,
15829
15829
  onClick: onMenuItemClick
15830
15830
  }, brand === null || brand === void 0 ? void 0 : brand.name));
15831
15831
  }))), /*#__PURE__*/React__default.createElement("div", {
@@ -15929,37 +15929,6 @@
15929
15929
  }, contactNumber)));
15930
15930
  };
15931
15931
 
15932
- var categories$1 = {
15933
- shoes: {
15934
- name: 'Shoes',
15935
- slug: 'shoes'
15936
- },
15937
- bags: {
15938
- name: 'Bags',
15939
- slug: 'bags'
15940
- },
15941
- clothing: {
15942
- name: 'Clothing',
15943
- slug: 'apparel'
15944
- },
15945
- watches: {
15946
- name: 'Watches',
15947
- slug: 'watches'
15948
- },
15949
- accessories: {
15950
- name: 'Accessories',
15951
- slug: 'accessories'
15952
- }
15953
- };
15954
-
15955
- var removeCategoryByName = function removeCategoryByName(categories, name) {
15956
- var _categories$filter;
15957
-
15958
- return (_categories$filter = categories === null || categories === void 0 ? void 0 : categories.filter(function (category) {
15959
- return category.name !== name;
15960
- })) !== null && _categories$filter !== void 0 ? _categories$filter : [];
15961
- };
15962
-
15963
15932
  var SearchResults = function SearchResults(_ref) {
15964
15933
  var _searchResults$brands, _searchResults$produc, _searchResults$brands2, _searchResults$produc2, _initialSearchData$tr, _initialSearchData$la, _limitBrands, _limitBrands2, _initialSearchData$la2, _searchResults$produc3;
15965
15934
 
@@ -16126,6 +16095,7 @@
16126
16095
  var endpoint = _ref.endpoint,
16127
16096
  onProductIdsReceived = _ref.onProductIdsReceived,
16128
16097
  currency = _ref.currency;
16098
+ var currentSearchRequestToken = React.useRef(null);
16129
16099
  var debounce = React.useCallback(function (func, wait) {
16130
16100
  var timeout;
16131
16101
  return function executedFunction() {
@@ -16156,49 +16126,75 @@
16156
16126
  });
16157
16127
  });
16158
16128
  }, []);
16159
- var performSearch = React.useCallback(function (nextValue, setSearchResults) {
16160
- if (!nextValue || nextValue.trim() === '') {
16129
+ var performSearch = React.useCallback(function (searchQuery, setSearchResults) {
16130
+ if (!searchQuery || searchQuery.trim() === '') {
16161
16131
  setSearchResults({
16162
16132
  brands: [],
16163
16133
  products: [],
16164
16134
  luxity_product_ids: []
16165
16135
  });
16166
16136
  return;
16167
- }
16137
+ } // Cancel any ongoing search request to prevent race conditions
16168
16138
 
16169
- axios.post(endpoint, searchProducts(nextValue, 3, currency)).then(function (response) {
16170
- var searchResults = response.data.data.luxity_products_serach_results;
16171
- setSearchResults(searchResults);
16172
16139
 
16173
- if (searchResults && searchResults.luxity_product_ids) {
16174
- onProductIdsReceived(searchResults.luxity_product_ids);
16140
+ if (currentSearchRequestToken.current) {
16141
+ currentSearchRequestToken.current.cancel();
16142
+ } // Create a new token for this specific search request
16143
+
16144
+
16145
+ var newSearchToken = axios.CancelToken.source();
16146
+ currentSearchRequestToken.current = newSearchToken;
16147
+ axios.post(endpoint, searchProducts(searchQuery, 3, currency), {
16148
+ cancelToken: newSearchToken.token
16149
+ }).then(function (response) {
16150
+ if (currentSearchRequestToken.current === newSearchToken) {
16151
+ var searchResults = response.data.data.luxity_products_serach_results;
16152
+ setSearchResults(searchResults);
16153
+
16154
+ if (searchResults && searchResults.luxity_product_ids) {
16155
+ onProductIdsReceived(searchResults.luxity_product_ids);
16156
+ }
16157
+
16158
+ currentSearchRequestToken.current = null;
16159
+ }
16160
+ }).catch(function (error) {
16161
+ if (!axios.isCancel(error)) {
16162
+ setSearchResults({
16163
+ brands: [],
16164
+ products: [],
16165
+ luxity_product_ids: []
16166
+ });
16167
+ currentSearchRequestToken.current = null;
16175
16168
  }
16176
- }).catch(function () {
16177
- setSearchResults({
16178
- brands: [],
16179
- products: [],
16180
- luxity_product_ids: []
16181
- });
16182
16169
  });
16183
16170
  }, [endpoint, currency, onProductIdsReceived]);
16184
16171
  var debouncedSearch = React.useMemo(function () {
16185
- return debounce(function (nextValue, setSearchResults) {
16186
- return performSearch(nextValue, setSearchResults);
16172
+ return debounce(function (searchQuery, setSearchResults) {
16173
+ return performSearch(searchQuery, setSearchResults);
16187
16174
  }, 500);
16188
16175
  }, [debounce, performSearch]);
16189
16176
  var createDebouncedSearch = React.useCallback(function (setSearchResults) {
16190
- return function (nextValue) {
16191
- return debouncedSearch(nextValue, setSearchResults);
16177
+ return function (searchQuery) {
16178
+ return debouncedSearch(searchQuery, setSearchResults);
16192
16179
  };
16193
16180
  }, [debouncedSearch]);
16194
16181
  var createImmediateSearch = React.useCallback(function (setSearchValue, setSearchResults, onSearchSubmit) {
16195
- return function (value) {
16182
+ return function (searchQuery) {
16183
+ /*
16184
+ * Cancel any pending search request when immediate search is performed
16185
+ * Immediate search is when the user types a search query and presses enter
16186
+ */
16187
+ if (currentSearchRequestToken.current) {
16188
+ currentSearchRequestToken.current.cancel();
16189
+ currentSearchRequestToken.current = null;
16190
+ }
16191
+
16196
16192
  setSearchValue('');
16197
16193
  setSearchResults({
16198
16194
  brands: [],
16199
16195
  products: []
16200
16196
  });
16201
- onSearchSubmit(value);
16197
+ onSearchSubmit(searchQuery);
16202
16198
  };
16203
16199
  }, []);
16204
16200
  return {
@@ -16248,13 +16244,16 @@
16248
16244
  }, [setSearchValue, setIsSearchFocused, debouncedSearch, setSearchResults, setCachedResults]);
16249
16245
  };
16250
16246
  var useSearchInputFocus = function useSearchInputFocus(searchValue, setIsSearchFocused, cachedResults, setSearchResults) {
16247
+ var handleSearchClick = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : undefined;
16251
16248
  return React.useCallback(function () {
16252
16249
  setIsSearchFocused(true);
16253
16250
 
16254
- if (searchValue.trim().length >= 3) {
16251
+ if (typeof handleSearchClick === 'function') {
16252
+ handleSearchClick();
16253
+ } else if (searchValue.trim().length >= 3) {
16255
16254
  setSearchResults(cachedResults);
16256
16255
  }
16257
- }, [searchValue, setIsSearchFocused, cachedResults, setSearchResults]);
16256
+ }, [searchValue, setIsSearchFocused, cachedResults, setSearchResults, handleSearchClick]);
16258
16257
  };
16259
16258
  var useSearchInputKeyDown = function useSearchInputKeyDown(searchValue, immediateSearch, setIsSearchFocused) {
16260
16259
  var setSearchValue = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;
@@ -16274,6 +16273,14 @@
16274
16273
  }, [searchValue, immediateSearch, setIsSearchFocused, setSearchValue]);
16275
16274
  };
16276
16275
 
16276
+ var removeCategoryByName = function removeCategoryByName(categories, name) {
16277
+ var _categories$filter;
16278
+
16279
+ return (_categories$filter = categories === null || categories === void 0 ? void 0 : categories.filter(function (category) {
16280
+ return category.name.toLowerCase() !== name.toLowerCase();
16281
+ })) !== null && _categories$filter !== void 0 ? _categories$filter : [];
16282
+ };
16283
+
16277
16284
  var LuxityDesktopHeader = function LuxityDesktopHeader(_ref) {
16278
16285
  var accountIcon = _ref.accountIcon,
16279
16286
  cartIcon = _ref.cartIcon,
@@ -16281,12 +16288,6 @@
16281
16288
  cartCount = _ref.cartCount,
16282
16289
  logoSrc = _ref.logoSrc,
16283
16290
  categoryElements = _ref.categoryElements,
16284
- newBrandsImage = _ref.newBrandsImage,
16285
- bagsImage = _ref.bagsImage,
16286
- shoesImage = _ref.shoesImage,
16287
- clothingImage = _ref.clothingImage,
16288
- accessoriesImage = _ref.accessoriesImage,
16289
- watchesImage = _ref.watchesImage,
16290
16291
  stores = _ref.stores,
16291
16292
  contactNumber = _ref.contactNumber,
16292
16293
  productsUrl = _ref.productsUrl,
@@ -16300,9 +16301,9 @@
16300
16301
  ourStoryLink = _ref.ourStoryLink,
16301
16302
  onLogoClick = _ref.onLogoClick,
16302
16303
  endpoint = _ref.endpoint,
16303
- menuData = _ref.menuData,
16304
16304
  initialSearchData = _ref.initialSearchData,
16305
16305
  onSearchSubmit = _ref.onSearchSubmit,
16306
+ onSearchClick = _ref.onSearchClick,
16306
16307
  onProductIdsReceived = _ref.onProductIdsReceived,
16307
16308
  currency = _ref.currency,
16308
16309
  currencySymbol = _ref.currencySymbol,
@@ -16314,7 +16315,8 @@
16314
16315
  name = _ref.name,
16315
16316
  isVip = _ref.isVip,
16316
16317
  shop = _ref.shop,
16317
- app = _ref.app;
16318
+ app = _ref.app,
16319
+ categoryConfig = _ref.categoryConfig;
16318
16320
 
16319
16321
  var _useSearch = useSearch({
16320
16322
  endpoint: endpoint,
@@ -16341,26 +16343,17 @@
16341
16343
  setIsSearchFocused = _useState6[1];
16342
16344
 
16343
16345
  var _useState7 = React.useState({
16344
- latestArrivals: [],
16345
- bags: [],
16346
- shoes: [],
16347
- clothing: [],
16348
- accessories: [],
16349
- watches: [],
16350
- accessoriesCategories: [],
16351
- apparelStyles: []
16352
- }),
16353
- _useState8 = _slicedToArray(_useState7, 2),
16354
- dropdownData = _useState8[0],
16355
- setDropdownData = _useState8[1];
16356
-
16357
- var _useState9 = React.useState({
16358
16346
  trending_brands: [],
16359
16347
  latest_products: []
16360
16348
  }),
16349
+ _useState8 = _slicedToArray(_useState7, 2),
16350
+ initialSearchView = _useState8[0],
16351
+ setInitialSearchView = _useState8[1];
16352
+
16353
+ var _useState9 = React.useState({}),
16361
16354
  _useState10 = _slicedToArray(_useState9, 2),
16362
- initialSearchView = _useState10[0],
16363
- setInitialSearchView = _useState10[1];
16355
+ dropdownData = _useState10[0],
16356
+ setDropdownData = _useState10[1];
16364
16357
 
16365
16358
  var _useState11 = React.useState(false),
16366
16359
  _useState12 = _slicedToArray(_useState11, 2),
@@ -16391,7 +16384,17 @@
16391
16384
  var immediateSearch = createImmediateSearch(setSearchValue, setSearchResults, onSearchSubmit);
16392
16385
  var handleChange = useSearchInputChange(setSearchValue, setIsSearchFocused, debouncedSearch, setSearchResults, setCachedResults);
16393
16386
  useSearchClickOutside(searchResultsRef, searchResults, setCachedResults, setIsSearchFocused, setSearchResults);
16394
- var handleSearchFocus = useSearchInputFocus(searchValue, setIsSearchFocused, cachedResults, setSearchResults);
16387
+
16388
+ var handleSearchClick = function handleSearchClick() {
16389
+ if (typeof onSearchClick === 'function') {
16390
+ onSearchClick();
16391
+ return;
16392
+ }
16393
+
16394
+ handleSearchFocus();
16395
+ };
16396
+
16397
+ var handleSearchFocus = useSearchInputFocus(searchValue, setIsSearchFocused, cachedResults, setSearchResults, onSearchClick);
16395
16398
  var handleKeyDown = useSearchInputKeyDown(searchValue, immediateSearch, setIsSearchFocused);
16396
16399
 
16397
16400
  function addCategoryToElements(elements, categoryName) {
@@ -16404,29 +16407,58 @@
16404
16407
 
16405
16408
  React.useMemo(function () {
16406
16409
  setLoading(true);
16407
- axios.get("".concat(menuData)).then(function (_ref2) {
16410
+ axios.get("".concat(categoryConfig.menuData)).then(function (_ref2) {
16408
16411
  var data = _ref2.data;
16409
16412
  setLoading(false);
16410
- setDropdownData(function (prev) {
16411
- return _objectSpread2(_objectSpread2({}, prev), {}, {
16412
- latestArrivals: data.latest_arrivals,
16413
- bags: data.bags,
16414
- shoes: data.shoes,
16415
- apparel: data.apparel,
16416
- accessories: data.accessories,
16417
- watches: data.watches,
16418
- accessoriesCategories: data.accessories_categories,
16419
- apparelStyles: data.apparel_styles
16420
- });
16421
- });
16413
+ setDropdownData(data);
16422
16414
  }).catch(function () {
16423
16415
  return setHasError(true);
16424
16416
  });
16425
- }, [menuData]);
16417
+ }, [categoryConfig.menuData]);
16426
16418
  React.useMemo(function () {
16419
+ if (!initialSearchData) {
16420
+ return;
16421
+ }
16422
+
16427
16423
  fetchInitialSearchData(initialSearchData, setInitialSearchView);
16428
16424
  }, [initialSearchData, fetchInitialSearchData]);
16429
16425
 
16426
+ var renderDropdownLinks = function renderDropdownLinks() {
16427
+ return categoryConfig.categories.map(function (category) {
16428
+ var title = category.title,
16429
+ imageSrc = category.imageSrc,
16430
+ categorySlug = category.categorySlug,
16431
+ categoryName = category.categoryName,
16432
+ elementsKey = category.elementsKey,
16433
+ subCategoryElementsKey = category.subCategoryElementsKey,
16434
+ styleElementsKey = category.styleElementsKey;
16435
+ var categoryElementsProcessed = categoryElements;
16436
+
16437
+ if (subCategoryElementsKey && dropdownData[subCategoryElementsKey]) {
16438
+ // show subcategory elements
16439
+ categoryElementsProcessed = removeCategoryByName(dropdownData[subCategoryElementsKey], categoryName);
16440
+ } else if (styleElementsKey && dropdownData[styleElementsKey]) {
16441
+ categoryElementsProcessed = addCategoryToElements(dropdownData[styleElementsKey], categorySlug);
16442
+ } else {
16443
+ categoryElementsProcessed = addCategoryToElements(categoryElementsProcessed, categorySlug);
16444
+ }
16445
+
16446
+ return /*#__PURE__*/React__default.createElement(DropdownLink$1, {
16447
+ key: categorySlug,
16448
+ title: title,
16449
+ imageSrc: imageSrc,
16450
+ categoryElements: categoryElementsProcessed,
16451
+ brandElements: dropdownData[elementsKey] || [],
16452
+ productsUrl: productsUrl,
16453
+ categorySlug: categorySlug,
16454
+ categoryTitle: categoryName,
16455
+ isLoading: loading,
16456
+ hasError: hasError,
16457
+ LinkComponent: LinkComponent
16458
+ });
16459
+ });
16460
+ };
16461
+
16430
16462
  var getMarginRight = function getMarginRight(userIsVip, userName) {
16431
16463
  if (userIsVip) return '15px';
16432
16464
  if (userName) return '5px';
@@ -16464,7 +16496,7 @@
16464
16496
  value: searchValue,
16465
16497
  onChange: handleChange,
16466
16498
  onKeyDown: handleKeyDown,
16467
- onClick: handleSearchFocus,
16499
+ onClick: handleSearchClick,
16468
16500
  onFocus: handleSearchFocus
16469
16501
  })), /*#__PURE__*/React__default.createElement(SearchResults, {
16470
16502
  searchValue: searchValue,
@@ -16488,74 +16520,9 @@
16488
16520
  currencySymbol: currencySymbol
16489
16521
  }), /*#__PURE__*/React__default.createElement("nav", {
16490
16522
  className: "navbar__nav-links navbar__nav-links--wrap"
16491
- }, /*#__PURE__*/React__default.createElement(DropdownLink$1, {
16492
- title: "New",
16493
- imageSrc: newBrandsImage,
16494
- categoryElements: categoryElements,
16495
- brandElements: dropdownData.latestArrivals,
16496
- productsUrl: productsUrl,
16497
- categorySlug: "brands",
16498
- categoryTitle: "Brands",
16499
- isLoading: loading,
16500
- hasError: hasError,
16501
- LinkComponent: LinkComponent
16502
- }), /*#__PURE__*/React__default.createElement(DropdownLink$1, {
16503
- title: "Bags",
16504
- imageSrc: bagsImage,
16505
- categoryElements: addCategoryToElements(categoryElements, categories$1.bags.slug),
16506
- brandElements: dropdownData.bags,
16507
- productsUrl: productsUrl,
16508
- categorySlug: categories$1.bags.slug,
16509
- categoryTitle: categories$1.bags.name,
16510
- isLoading: loading,
16511
- hasError: hasError,
16512
- LinkComponent: LinkComponent
16513
- }), /*#__PURE__*/React__default.createElement(DropdownLink$1, {
16514
- title: "Shoes",
16515
- imageSrc: shoesImage,
16516
- categoryElements: addCategoryToElements(categoryElements, categories$1.shoes.slug),
16517
- brandElements: dropdownData.shoes,
16518
- productsUrl: productsUrl,
16519
- categorySlug: categories$1.shoes.slug,
16520
- categoryTitle: categories$1.shoes.name,
16521
- isLoading: loading,
16522
- hasError: hasError,
16523
- LinkComponent: LinkComponent
16524
- }), /*#__PURE__*/React__default.createElement(DropdownLink$1, {
16525
- title: "Clothing",
16526
- imageSrc: clothingImage,
16527
- categoryElements: addCategoryToElements(dropdownData.apparelStyles, categories$1.clothing.slug),
16528
- brandElements: dropdownData.apparel,
16529
- productsUrl: productsUrl,
16530
- categorySlug: categories$1.clothing.slug,
16531
- categoryTitle: categories$1.clothing.name,
16532
- isLoading: loading,
16533
- hasError: hasError,
16534
- LinkComponent: LinkComponent
16535
- }), /*#__PURE__*/React__default.createElement(DropdownLink$1, {
16536
- title: "Accessories",
16537
- imageSrc: accessoriesImage,
16538
- categoryElements: removeCategoryByName(dropdownData.accessoriesCategories, 'ACCESSORIES'),
16539
- brandElements: dropdownData.accessories,
16540
- productsUrl: productsUrl,
16541
- categorySlug: categories$1.accessories.slug,
16542
- categoryTitle: categories$1.accessories.name,
16543
- isLoading: loading,
16544
- hasError: hasError,
16545
- LinkComponent: LinkComponent
16546
- }), /*#__PURE__*/React__default.createElement(DropdownLink$1, {
16547
- title: "Watches",
16548
- imageSrc: watchesImage,
16549
- categoryElements: addCategoryToElements(categoryElements, categories$1.watches.slug),
16550
- brandElements: dropdownData.watches,
16551
- productsUrl: productsUrl,
16552
- categorySlug: categories$1.watches.slug,
16553
- categoryTitle: categories$1.watches.name,
16554
- isLoading: loading,
16555
- hasError: hasError,
16556
- LinkComponent: LinkComponent
16557
- }), /*#__PURE__*/React__default.createElement("li", {
16558
- className: "navbar__link"
16523
+ }, renderDropdownLinks(), !!stores.length && /*#__PURE__*/React__default.createElement("li", {
16524
+ className: "navbar__link",
16525
+ key: "Stores"
16559
16526
  }, /*#__PURE__*/React__default.createElement(LinkComponent, {
16560
16527
  href: contactUsLink,
16561
16528
  className: "navbar__link-item navbar__link-item--desktop"
@@ -16598,7 +16565,7 @@
16598
16565
  onClick: onAccountClick
16599
16566
  }, /*#__PURE__*/React__default.createElement("span", {
16600
16567
  className: "text-sm"
16601
- }, name))), /*#__PURE__*/React__default.createElement("button", {
16568
+ }, name))), onInterestClick && /*#__PURE__*/React__default.createElement("button", {
16602
16569
  type: "button",
16603
16570
  className: "".concat(app ? 'navbar__icon--app' : 'navbar__icon'),
16604
16571
  onClick: onInterestClick
@@ -16751,6 +16718,7 @@
16751
16718
  className: "side-nav__element"
16752
16719
  }, "All Brands"), !!brandsList.length && brandsList.map(function (brand) {
16753
16720
  return /*#__PURE__*/React__default.createElement(LinkComponent, {
16721
+ key: brand.slug,
16754
16722
  href: "".concat(productUrl, "/").concat(categorySlug === 'new' ? 'brands' : categorySlug, "/").concat(brand.slug),
16755
16723
  onClick: handleLinkClick,
16756
16724
  className: "side-nav__element"
@@ -16773,13 +16741,13 @@
16773
16741
  categoryElements = _ref.categoryElements,
16774
16742
  showSideNav = _ref.showSideNav,
16775
16743
  onMenuClick = _ref.onMenuClick,
16776
- menuData = _ref.menuData,
16777
16744
  currency = _ref.currency,
16778
16745
  currencyOptions = _ref.currencyOptions,
16779
16746
  onCurrencyChange = _ref.onCurrencyChange,
16780
16747
  isCurrencySelectionDisabled = _ref.isCurrencySelectionDisabled,
16781
16748
  tooltipContent = _ref.tooltipContent,
16782
- LinkComponent = _ref.LinkComponent;
16749
+ LinkComponent = _ref.LinkComponent,
16750
+ categoryConfig = _ref.categoryConfig;
16783
16751
 
16784
16752
  var _useState = React.useState(false),
16785
16753
  _useState2 = _slicedToArray(_useState, 2),
@@ -16796,16 +16764,7 @@
16796
16764
  loading = _useState6[0],
16797
16765
  setLoading = _useState6[1];
16798
16766
 
16799
- var _useState7 = React.useState({
16800
- latestArrivals: [],
16801
- bags: [],
16802
- shoes: [],
16803
- apparel: [],
16804
- accessories: [],
16805
- watches: [],
16806
- accessoriesCategories: [],
16807
- apparelStyles: []
16808
- }),
16767
+ var _useState7 = React.useState({}),
16809
16768
  _useState8 = _slicedToArray(_useState7, 2),
16810
16769
  dropdownData = _useState8[0],
16811
16770
  setDropdownData = _useState8[1];
@@ -16852,25 +16811,93 @@
16852
16811
 
16853
16812
  React.useMemo(function () {
16854
16813
  setLoading(true);
16855
- axios.get("".concat(menuData)).then(function (_ref2) {
16814
+ axios.get("".concat(categoryConfig.menuData)).then(function (_ref2) {
16856
16815
  var data = _ref2.data;
16857
16816
  setLoading(false);
16858
- setDropdownData(function (prev) {
16859
- return _objectSpread2(_objectSpread2({}, prev), {}, {
16860
- latestArrivals: data.latest_arrivals,
16861
- bags: data.bags,
16862
- shoes: data.shoes,
16863
- apparel: data.apparel,
16864
- accessories: data.accessories,
16865
- watches: data.watches,
16866
- accessoriesCategories: data.accessories_categories,
16867
- apparelStyles: data.apparel_styles
16868
- });
16869
- });
16817
+ setDropdownData(data);
16870
16818
  }).catch(function () {
16871
16819
  return setHasError(true);
16872
16820
  });
16873
- }, [menuData]);
16821
+ }, [categoryConfig.menuData]);
16822
+
16823
+ var renderMenuItems = function renderMenuItems() {
16824
+ return categoryConfig.categories.map(function (category) {
16825
+ var title = category.title,
16826
+ categorySlug = category.categorySlug;
16827
+ var slug = categorySlug;
16828
+
16829
+ if (categorySlug === 'brands') {
16830
+ slug = 'new';
16831
+ }
16832
+
16833
+ return /*#__PURE__*/React__default.createElement("div", {
16834
+ className: "side-nav__menu-item",
16835
+ key: slug
16836
+ }, /*#__PURE__*/React__default.createElement("button", {
16837
+ type: "button",
16838
+ className: "side-nav__menu-title-wrapper",
16839
+ onClick: function onClick() {
16840
+ return onSubMenuClick(slug);
16841
+ }
16842
+ }, /*#__PURE__*/React__default.createElement("span", {
16843
+ className: "side-nav__menu-title"
16844
+ }, title), /*#__PURE__*/React__default.createElement("img", {
16845
+ src: accordionIcon,
16846
+ alt: "accordion-icon",
16847
+ className: "side-nav__accordion-icon"
16848
+ })));
16849
+ });
16850
+ };
16851
+
16852
+ var renderDropdownLinks = function renderDropdownLinks() {
16853
+ return categoryConfig.categories.map(function (category) {
16854
+ var categorySlug = category.categorySlug,
16855
+ categoryName = category.categoryName,
16856
+ elementsKey = category.elementsKey,
16857
+ subCategoryElementsKey = category.subCategoryElementsKey,
16858
+ styleElementsKey = category.styleElementsKey;
16859
+ var categoryElementsProcessed = categoryElements;
16860
+
16861
+ if (subCategoryElementsKey && dropdownData[subCategoryElementsKey]) {
16862
+ // show subcategory elements
16863
+ categoryElementsProcessed = removeCategoryByName(dropdownData[subCategoryElementsKey], categoryName);
16864
+ } else if (styleElementsKey && dropdownData[styleElementsKey]) {
16865
+ categoryElementsProcessed = addCategoryToElements(dropdownData[styleElementsKey], categorySlug);
16866
+ } else {
16867
+ categoryElementsProcessed = addCategoryToElements(categoryElementsProcessed, categorySlug);
16868
+ }
16869
+
16870
+ var subMenuTitle = 'Brands';
16871
+
16872
+ if (categorySlug !== 'brands') {
16873
+ subMenuTitle = "".concat(categoryName, " Brands");
16874
+ }
16875
+
16876
+ var subMenu = categorySlug;
16877
+
16878
+ if (subMenu === 'brands') {
16879
+ subMenu = 'new';
16880
+ }
16881
+
16882
+ return /*#__PURE__*/React__default.createElement(BrandsDropDown, {
16883
+ key: categorySlug,
16884
+ subMenuOpen: subMenuOpen && displayedSubMenu === subMenu,
16885
+ onBackClick: onBackClick,
16886
+ backIcon: backIcon,
16887
+ subMenuCategoryTitle: "Department",
16888
+ productUrl: productUrl,
16889
+ categoryElements: categoryElementsProcessed,
16890
+ subMenuBrandsTitle: subMenuTitle,
16891
+ brandsList: dropdownData[elementsKey],
16892
+ categorySlug: displayedSubMenu,
16893
+ isLoading: loading,
16894
+ hasError: hasError,
16895
+ onCloseSideNav: onCloseSideNav,
16896
+ LinkComponent: LinkComponent
16897
+ });
16898
+ });
16899
+ };
16900
+
16874
16901
  return /*#__PURE__*/React__default.createElement("div", {
16875
16902
  className: "side-nav"
16876
16903
  }, /*#__PURE__*/React__default.createElement("div", {
@@ -16891,92 +16918,9 @@
16891
16918
  className: "side-nav__close-icon"
16892
16919
  })), /*#__PURE__*/React__default.createElement("div", {
16893
16920
  className: "side-nav__menu-items-wrapper"
16894
- }, /*#__PURE__*/React__default.createElement("div", {
16895
- className: "side-nav__menu-item"
16896
- }, /*#__PURE__*/React__default.createElement("button", {
16897
- type: "button",
16898
- className: "side-nav__menu-title-wrapper",
16899
- onClick: function onClick() {
16900
- return onSubMenuClick('new');
16901
- }
16902
- }, /*#__PURE__*/React__default.createElement("span", {
16903
- className: "side-nav__menu-title"
16904
- }, "New"), /*#__PURE__*/React__default.createElement("img", {
16905
- src: accordionIcon,
16906
- alt: "accordion-icon",
16907
- className: "side-nav__accordion-icon"
16908
- }))), /*#__PURE__*/React__default.createElement("div", {
16909
- className: "side-nav__menu-item"
16910
- }, /*#__PURE__*/React__default.createElement("button", {
16911
- type: "button",
16912
- className: "side-nav__menu-title-wrapper",
16913
- onClick: function onClick() {
16914
- return onSubMenuClick('bags');
16915
- }
16916
- }, /*#__PURE__*/React__default.createElement("span", {
16917
- className: "side-nav__menu-title"
16918
- }, "Bags"), /*#__PURE__*/React__default.createElement("img", {
16919
- src: accordionIcon,
16920
- alt: "accordion-icon",
16921
- className: "side-nav__accordion-icon"
16922
- }))), /*#__PURE__*/React__default.createElement("div", {
16923
- className: "side-nav__menu-item"
16924
- }, /*#__PURE__*/React__default.createElement("button", {
16925
- type: "button",
16926
- className: "side-nav__menu-title-wrapper",
16927
- onClick: function onClick() {
16928
- return onSubMenuClick('shoes');
16929
- }
16930
- }, /*#__PURE__*/React__default.createElement("span", {
16931
- className: "side-nav__menu-title"
16932
- }, "Shoes"), /*#__PURE__*/React__default.createElement("img", {
16933
- src: accordionIcon,
16934
- alt: "accordion-icon",
16935
- className: "side-nav__accordion-icon"
16936
- }))), /*#__PURE__*/React__default.createElement("div", {
16937
- className: "side-nav__menu-item"
16938
- }, /*#__PURE__*/React__default.createElement("button", {
16939
- type: "button",
16940
- className: "side-nav__menu-title-wrapper",
16941
- onClick: function onClick() {
16942
- return onSubMenuClick('apparel');
16943
- }
16944
- }, /*#__PURE__*/React__default.createElement("span", {
16945
- className: "side-nav__menu-title"
16946
- }, "Clothing"), /*#__PURE__*/React__default.createElement("img", {
16947
- src: accordionIcon,
16948
- alt: "accordion-icon",
16949
- className: "side-nav__accordion-icon"
16950
- }))), /*#__PURE__*/React__default.createElement("div", {
16951
- className: "side-nav__menu-item"
16952
- }, /*#__PURE__*/React__default.createElement("button", {
16953
- type: "button",
16954
- className: "side-nav__menu-title-wrapper",
16955
- onClick: function onClick() {
16956
- return onSubMenuClick('accessories');
16957
- }
16958
- }, /*#__PURE__*/React__default.createElement("span", {
16959
- className: "side-nav__menu-title"
16960
- }, "Accessories"), /*#__PURE__*/React__default.createElement("img", {
16961
- src: accordionIcon,
16962
- alt: "accordion-icon",
16963
- className: "side-nav__accordion-icon"
16964
- }))), /*#__PURE__*/React__default.createElement("div", {
16965
- className: "side-nav__menu-item"
16966
- }, /*#__PURE__*/React__default.createElement("button", {
16967
- type: "button",
16968
- className: "side-nav__menu-title-wrapper",
16969
- onClick: function onClick() {
16970
- return onSubMenuClick('watches');
16971
- }
16972
- }, /*#__PURE__*/React__default.createElement("span", {
16973
- className: "side-nav__menu-title"
16974
- }, "Watches"), /*#__PURE__*/React__default.createElement("img", {
16975
- src: accordionIcon,
16976
- alt: "accordion-icon",
16977
- className: "side-nav__accordion-icon"
16978
- }))), /*#__PURE__*/React__default.createElement("div", {
16979
- className: "side-nav__menu-item"
16921
+ }, renderMenuItems(), !!stores.length && /*#__PURE__*/React__default.createElement("div", {
16922
+ className: "side-nav__menu-item",
16923
+ key: "stores"
16980
16924
  }, /*#__PURE__*/React__default.createElement("button", {
16981
16925
  type: "button",
16982
16926
  className: "side-nav__menu-title-wrapper",
@@ -16988,134 +16932,58 @@
16988
16932
  alt: "accordion-icon",
16989
16933
  className: "side-nav__accordion-icon"
16990
16934
  }))), /*#__PURE__*/React__default.createElement("div", {
16991
- className: "side-nav__menu-item"
16935
+ className: "side-nav__menu-item",
16936
+ key: "sell-to-us"
16992
16937
  }, /*#__PURE__*/React__default.createElement("button", {
16993
16938
  type: "button",
16994
16939
  className: "side-nav__block-button",
16995
16940
  onClick: onSellToUsClick
16996
16941
  }, "Sell To Us")), /*#__PURE__*/React__default.createElement("div", {
16997
- className: "side-nav__menu-item"
16942
+ className: "side-nav__menu-item",
16943
+ key: "our-story"
16998
16944
  }, /*#__PURE__*/React__default.createElement("button", {
16999
16945
  type: "button",
17000
16946
  className: "side-nav__sub-link",
17001
16947
  onClick: onOurStoryClick
17002
- }, "Our Story")), /*#__PURE__*/React__default.createElement("div", {
17003
- className: "side-nav__menu-item"
16948
+ }, "Our Story")), typeof onBlogClick === 'function' && /*#__PURE__*/React__default.createElement("div", {
16949
+ className: "side-nav__menu-item",
16950
+ key: "blog"
17004
16951
  }, /*#__PURE__*/React__default.createElement("button", {
17005
16952
  type: "button",
17006
16953
  className: "side-nav__sub-link",
17007
16954
  onClick: onBlogClick
17008
16955
  }, "Blog")), /*#__PURE__*/React__default.createElement("div", {
17009
- className: "side-nav__menu-item"
16956
+ className: "side-nav__menu-item",
16957
+ key: "contact-us"
17010
16958
  }, /*#__PURE__*/React__default.createElement("button", {
17011
16959
  type: "button",
17012
16960
  className: "side-nav__sub-link",
17013
16961
  onClick: onContactUsClick
17014
16962
  }, "Contact Us")), /*#__PURE__*/React__default.createElement("div", {
17015
- className: "side-nav__menu-item"
16963
+ className: "side-nav__menu-item",
16964
+ key: "my-account"
17016
16965
  }, /*#__PURE__*/React__default.createElement("button", {
17017
16966
  type: "button",
17018
16967
  className: "side-nav__sub-link",
17019
16968
  onClick: onAccountClick
17020
16969
  }, "My Account")), /*#__PURE__*/React__default.createElement("div", {
17021
- className: "side-nav__menu-item"
16970
+ className: "side-nav__menu-item",
16971
+ key: "my-cart"
17022
16972
  }, /*#__PURE__*/React__default.createElement("button", {
17023
16973
  type: "button",
17024
16974
  className: "side-nav__sub-link",
17025
16975
  onClick: onCartClick
17026
16976
  }, "My Cart")), /*#__PURE__*/React__default.createElement(CurrencySelect, {
16977
+ key: "currency",
17027
16978
  currency: currency,
17028
16979
  currencyOptions: currencyOptions,
17029
16980
  onCurrencyChange: onCurrencyChange,
17030
16981
  isCurrencySelectionDisabled: isCurrencySelectionDisabled,
17031
16982
  tooltipContent: tooltipContent
17032
- }))), /*#__PURE__*/React__default.createElement(BrandsDropDown, {
17033
- subMenuOpen: subMenuOpen && displayedSubMenu === 'new',
17034
- onBackClick: onBackClick,
17035
- backIcon: backIcon,
17036
- subMenuCategoryTitle: "Department",
17037
- productUrl: productUrl,
17038
- categoryElements: categoryElements,
17039
- subMenuBrandsTitle: "Brands",
17040
- brandsList: dropdownData.latestArrivals,
17041
- categorySlug: displayedSubMenu,
17042
- isLoading: loading,
17043
- hasError: hasError,
17044
- onCloseSideNav: onCloseSideNav,
17045
- LinkComponent: LinkComponent
17046
- }), /*#__PURE__*/React__default.createElement(BrandsDropDown, {
17047
- subMenuOpen: subMenuOpen && displayedSubMenu === 'bags',
17048
- onBackClick: onBackClick,
17049
- backIcon: backIcon,
17050
- subMenuCategoryTitle: "Department",
17051
- productUrl: productUrl,
17052
- categoryElements: addCategoryToElements(categoryElements, categories$1.bags.slug),
17053
- subMenuBrandsTitle: "Bag Brands",
17054
- brandsList: dropdownData.bags,
17055
- categorySlug: displayedSubMenu,
17056
- isLoading: loading,
17057
- hasError: hasError,
17058
- onCloseSideNav: onCloseSideNav,
17059
- LinkComponent: LinkComponent
17060
- }), /*#__PURE__*/React__default.createElement(BrandsDropDown, {
17061
- subMenuOpen: subMenuOpen && displayedSubMenu === 'shoes',
17062
- onBackClick: onBackClick,
17063
- backIcon: backIcon,
17064
- subMenuCategoryTitle: "Department",
17065
- productUrl: productUrl,
17066
- categoryElements: addCategoryToElements(categoryElements, categories$1.shoes.slug),
17067
- subMenuBrandsTitle: "Shoe Brands",
17068
- brandsList: dropdownData.shoes,
17069
- categorySlug: displayedSubMenu,
17070
- isLoading: loading,
17071
- hasError: hasError,
17072
- onCloseSideNav: onCloseSideNav,
17073
- LinkComponent: LinkComponent
17074
- }), /*#__PURE__*/React__default.createElement(BrandsDropDown, {
17075
- subMenuOpen: subMenuOpen && displayedSubMenu === 'apparel',
17076
- onBackClick: onBackClick,
17077
- backIcon: backIcon,
17078
- subMenuCategoryTitle: "Department",
17079
- productUrl: productUrl,
17080
- categoryElements: addCategoryToElements(dropdownData.apparelStyles, categories$1.clothing.slug),
17081
- subMenuBrandsTitle: "Clothing Brands",
17082
- brandsList: dropdownData.apparel,
17083
- categorySlug: displayedSubMenu,
17084
- isLoading: loading,
17085
- hasError: hasError,
17086
- onCloseSideNav: onCloseSideNav,
17087
- LinkComponent: LinkComponent
17088
- }), /*#__PURE__*/React__default.createElement(BrandsDropDown, {
17089
- subMenuOpen: subMenuOpen && displayedSubMenu === 'accessories',
17090
- onBackClick: onBackClick,
17091
- backIcon: backIcon,
17092
- subMenuCategoryTitle: "Categories",
17093
- productUrl: productUrl,
17094
- categoryElements: removeCategoryByName(dropdownData.accessoriesCategories, 'ACCESSORIES'),
17095
- subMenuBrandsTitle: "Accessory Brands",
17096
- brandsList: dropdownData.accessories,
17097
- categorySlug: displayedSubMenu,
17098
- isLoading: loading,
17099
- hasError: hasError,
17100
- onCloseSideNav: onCloseSideNav,
17101
- LinkComponent: LinkComponent
17102
- }), /*#__PURE__*/React__default.createElement(BrandsDropDown, {
17103
- subMenuOpen: subMenuOpen && displayedSubMenu === 'watches',
17104
- onBackClick: onBackClick,
17105
- backIcon: backIcon,
17106
- subMenuCategoryTitle: "Department",
17107
- productUrl: productUrl,
17108
- categoryElements: addCategoryToElements(categoryElements, categories$1.watches.slug),
17109
- subMenuBrandsTitle: "Watches Brands",
17110
- brandsList: dropdownData.watches,
17111
- categorySlug: displayedSubMenu,
17112
- isLoading: loading,
17113
- hasError: hasError,
17114
- onCloseSideNav: onCloseSideNav,
17115
- LinkComponent: LinkComponent
17116
- }), displayedSubMenu === 'stores' && /*#__PURE__*/React__default.createElement("div", {
16983
+ }))), renderDropdownLinks(), displayedSubMenu === 'stores' && /*#__PURE__*/React__default.createElement("div", {
17117
16984
  className: "side-nav__content"
17118
16985
  }, /*#__PURE__*/React__default.createElement(StoresDropdown$1, {
16986
+ key: "stores",
17119
16987
  backIcon: backIcon,
17120
16988
  onBackClick: onBackClick,
17121
16989
  stores: stores,
@@ -17183,7 +17051,7 @@
17183
17051
  src: accountIcon,
17184
17052
  alt: "close-icon",
17185
17053
  className: "side-nav__menu-icon"
17186
- }), "Account"))), /*#__PURE__*/React__default.createElement("div", {
17054
+ }), "Account"))), onInterestClick && /*#__PURE__*/React__default.createElement("div", {
17187
17055
  className: "side-nav__menu-item"
17188
17056
  }, /*#__PURE__*/React__default.createElement("button", {
17189
17057
  type: "button",
@@ -17327,13 +17195,13 @@
17327
17195
  onDashboardClick = _ref.onDashboardClick,
17328
17196
  onContactUsClick = _ref.onContactUsClick,
17329
17197
  onOurStoryClick = _ref.onOurStoryClick,
17330
- onBlogClick = _ref.onBlogClick,
17198
+ _ref$onBlogClick = _ref.onBlogClick,
17199
+ onBlogClick = _ref$onBlogClick === void 0 ? undefined : _ref$onBlogClick,
17331
17200
  bugReportLink = _ref.bugReportLink,
17332
17201
  onSellToUsClick = _ref.onSellToUsClick,
17333
17202
  onLogoClick = _ref.onLogoClick,
17334
17203
  onLuxityShopClick = _ref.onLuxityShopClick,
17335
17204
  endpoint = _ref.endpoint,
17336
- menuData = _ref.menuData,
17337
17205
  initialSearchData = _ref.initialSearchData,
17338
17206
  onSearchSubmit = _ref.onSearchSubmit,
17339
17207
  onProductIdsReceived = _ref.onProductIdsReceived,
@@ -17355,7 +17223,8 @@
17355
17223
  tooltipContent = _ref.tooltipContent,
17356
17224
  LinkComponent = _ref.LinkComponent,
17357
17225
  shop = _ref.shop,
17358
- app = _ref.app;
17226
+ app = _ref.app,
17227
+ categoryConfig = _ref.categoryConfig;
17359
17228
 
17360
17229
  var _useSearch = useSearch({
17361
17230
  endpoint: endpoint,
@@ -17420,6 +17289,10 @@
17420
17289
  var handleChange = useSearchInputChange(setSearchValue, setIsSearchFocused, debouncedSearch, setSearchResults, setCachedResults);
17421
17290
  var handleKeyDown = useSearchInputKeyDown(searchValue, immediateSearch, setIsSearchFocused, setSearchValue);
17422
17291
  React.useMemo(function () {
17292
+ if (!initialSearchData) {
17293
+ return;
17294
+ }
17295
+
17423
17296
  fetchInitialSearchData(initialSearchData, setInitialSearchView);
17424
17297
  }, [initialSearchData, fetchInitialSearchData]);
17425
17298
  useSearchClickOutside(searchResultsRef, searchResults, setCachedResults, setIsSearchFocused, setSearchResults);
@@ -17524,10 +17397,9 @@
17524
17397
  return handleClick(onOurStoryClick);
17525
17398
  };
17526
17399
 
17527
- var handleBlogClick = function handleBlogClick() {
17400
+ var handleBlogClick = onBlogClick ? function () {
17528
17401
  return handleClick(onBlogClick);
17529
- };
17530
-
17402
+ } : undefined;
17531
17403
  return /*#__PURE__*/React__default.createElement(React.Fragment, null, /*#__PURE__*/React__default.createElement("div", {
17532
17404
  className: "navbar navbar__mobile-wrapper"
17533
17405
  }, /*#__PURE__*/React__default.createElement("div", {
@@ -17632,13 +17504,13 @@
17632
17504
  showSideNav: showSideNav,
17633
17505
  onMenuClick: onMenuClick,
17634
17506
  endpoint: endpoint,
17635
- menuData: menuData,
17636
17507
  currency: currency,
17637
17508
  currencyOptions: currencyOptions,
17638
17509
  onCurrencyChange: onCurrencyChange,
17639
17510
  isCurrencySelectionDisabled: isCurrencySelectionDisabled,
17640
17511
  tooltipContent: tooltipContent,
17641
- LinkComponent: LinkComponent
17512
+ LinkComponent: LinkComponent,
17513
+ categoryConfig: categoryConfig
17642
17514
  }), app && /*#__PURE__*/React__default.createElement(LuxityAppSideNav, {
17643
17515
  accordionIcon: accordionIcon,
17644
17516
  closeIcon: closeIcon,