@bonlineza/luxity-lib 2.35.9 → 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.
@@ -66,7 +66,7 @@
66
66
  src: accountIcon,
67
67
  alt: "close-icon",
68
68
  className: "side-nav__menu-icon"
69
- }), "Account"))), /*#__PURE__*/React.createElement("div", {
69
+ }), "Account"))), onInterestClick && /*#__PURE__*/React.createElement("div", {
70
70
  className: "side-nav__menu-item"
71
71
  }, /*#__PURE__*/React.createElement("button", {
72
72
  type: "button",
@@ -189,11 +189,11 @@
189
189
  onClick: onMenuItemClick
190
190
  }, "All ", categoryTitle)), !!brandElements.length && brandElements.map(function (brand) {
191
191
  return /*#__PURE__*/React__default.createElement("div", {
192
- className: "dropdown__brand-element"
192
+ className: "dropdown__brand-element",
193
+ key: brand.name
193
194
  }, /*#__PURE__*/React__default.createElement(LinkComponent, {
194
195
  href: "".concat(productsUrl, "/").concat(categorySlug, "/").concat(brand === null || brand === void 0 ? void 0 : brand.slug),
195
196
  className: "dropdown__element",
196
- key: brand.name,
197
197
  onClick: onMenuItemClick
198
198
  }, brand === null || brand === void 0 ? void 0 : brand.name));
199
199
  }))), /*#__PURE__*/React__default.createElement("div", {
@@ -297,37 +297,6 @@
297
297
  }, contactNumber)));
298
298
  };
299
299
 
300
- var categories = {
301
- shoes: {
302
- name: 'Shoes',
303
- slug: 'shoes'
304
- },
305
- bags: {
306
- name: 'Bags',
307
- slug: 'bags'
308
- },
309
- clothing: {
310
- name: 'Clothing',
311
- slug: 'apparel'
312
- },
313
- watches: {
314
- name: 'Watches',
315
- slug: 'watches'
316
- },
317
- accessories: {
318
- name: 'Accessories',
319
- slug: 'accessories'
320
- }
321
- };
322
-
323
- var removeCategoryByName = function removeCategoryByName(categories, name) {
324
- var _categories$filter;
325
-
326
- return (_categories$filter = categories === null || categories === void 0 ? void 0 : categories.filter(function (category) {
327
- return category.name !== name;
328
- })) !== null && _categories$filter !== void 0 ? _categories$filter : [];
329
- };
330
-
331
300
  var SearchResults = function SearchResults(_ref) {
332
301
  var _searchResults$brands, _searchResults$produc, _searchResults$brands2, _searchResults$produc2, _initialSearchData$tr, _initialSearchData$la, _limitBrands, _limitBrands2, _initialSearchData$la2, _searchResults$produc3;
333
302
 
@@ -846,13 +815,16 @@
846
815
  }, [setSearchValue, setIsSearchFocused, debouncedSearch, setSearchResults, setCachedResults]);
847
816
  };
848
817
  var useSearchInputFocus = function useSearchInputFocus(searchValue, setIsSearchFocused, cachedResults, setSearchResults) {
818
+ var handleSearchClick = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : undefined;
849
819
  return React.useCallback(function () {
850
820
  setIsSearchFocused(true);
851
821
 
852
- if (searchValue.trim().length >= 3) {
822
+ if (typeof handleSearchClick === 'function') {
823
+ handleSearchClick();
824
+ } else if (searchValue.trim().length >= 3) {
853
825
  setSearchResults(cachedResults);
854
826
  }
855
- }, [searchValue, setIsSearchFocused, cachedResults, setSearchResults]);
827
+ }, [searchValue, setIsSearchFocused, cachedResults, setSearchResults, handleSearchClick]);
856
828
  };
857
829
  var useSearchInputKeyDown = function useSearchInputKeyDown(searchValue, immediateSearch, setIsSearchFocused) {
858
830
  var setSearchValue = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;
@@ -872,6 +844,14 @@
872
844
  }, [searchValue, immediateSearch, setIsSearchFocused, setSearchValue]);
873
845
  };
874
846
 
847
+ var removeCategoryByName = function removeCategoryByName(categories, name) {
848
+ var _categories$filter;
849
+
850
+ return (_categories$filter = categories === null || categories === void 0 ? void 0 : categories.filter(function (category) {
851
+ return category.name.toLowerCase() !== name.toLowerCase();
852
+ })) !== null && _categories$filter !== void 0 ? _categories$filter : [];
853
+ };
854
+
875
855
  var LuxityDesktopHeader = function LuxityDesktopHeader(_ref) {
876
856
  var accountIcon = _ref.accountIcon,
877
857
  cartIcon = _ref.cartIcon,
@@ -879,12 +859,6 @@
879
859
  cartCount = _ref.cartCount,
880
860
  logoSrc = _ref.logoSrc,
881
861
  categoryElements = _ref.categoryElements,
882
- newBrandsImage = _ref.newBrandsImage,
883
- bagsImage = _ref.bagsImage,
884
- shoesImage = _ref.shoesImage,
885
- clothingImage = _ref.clothingImage,
886
- accessoriesImage = _ref.accessoriesImage,
887
- watchesImage = _ref.watchesImage,
888
862
  stores = _ref.stores,
889
863
  contactNumber = _ref.contactNumber,
890
864
  productsUrl = _ref.productsUrl,
@@ -898,9 +872,9 @@
898
872
  ourStoryLink = _ref.ourStoryLink,
899
873
  onLogoClick = _ref.onLogoClick,
900
874
  endpoint = _ref.endpoint,
901
- menuData = _ref.menuData,
902
875
  initialSearchData = _ref.initialSearchData,
903
876
  onSearchSubmit = _ref.onSearchSubmit,
877
+ onSearchClick = _ref.onSearchClick,
904
878
  onProductIdsReceived = _ref.onProductIdsReceived,
905
879
  currency = _ref.currency,
906
880
  currencySymbol = _ref.currencySymbol,
@@ -912,7 +886,8 @@
912
886
  name = _ref.name,
913
887
  isVip = _ref.isVip,
914
888
  shop = _ref.shop,
915
- app = _ref.app;
889
+ app = _ref.app,
890
+ categoryConfig = _ref.categoryConfig;
916
891
 
917
892
  var _useSearch = useSearch({
918
893
  endpoint: endpoint,
@@ -939,26 +914,17 @@
939
914
  setIsSearchFocused = _useState6[1];
940
915
 
941
916
  var _useState7 = React.useState({
942
- latestArrivals: [],
943
- bags: [],
944
- shoes: [],
945
- clothing: [],
946
- accessories: [],
947
- watches: [],
948
- accessoriesCategories: [],
949
- apparelStyles: []
950
- }),
951
- _useState8 = _slicedToArray(_useState7, 2),
952
- dropdownData = _useState8[0],
953
- setDropdownData = _useState8[1];
954
-
955
- var _useState9 = React.useState({
956
917
  trending_brands: [],
957
918
  latest_products: []
958
919
  }),
920
+ _useState8 = _slicedToArray(_useState7, 2),
921
+ initialSearchView = _useState8[0],
922
+ setInitialSearchView = _useState8[1];
923
+
924
+ var _useState9 = React.useState({}),
959
925
  _useState10 = _slicedToArray(_useState9, 2),
960
- initialSearchView = _useState10[0],
961
- setInitialSearchView = _useState10[1];
926
+ dropdownData = _useState10[0],
927
+ setDropdownData = _useState10[1];
962
928
 
963
929
  var _useState11 = React.useState(false),
964
930
  _useState12 = _slicedToArray(_useState11, 2),
@@ -989,7 +955,17 @@
989
955
  var immediateSearch = createImmediateSearch(setSearchValue, setSearchResults, onSearchSubmit);
990
956
  var handleChange = useSearchInputChange(setSearchValue, setIsSearchFocused, debouncedSearch, setSearchResults, setCachedResults);
991
957
  useSearchClickOutside(searchResultsRef, searchResults, setCachedResults, setIsSearchFocused, setSearchResults);
992
- var handleSearchFocus = useSearchInputFocus(searchValue, setIsSearchFocused, cachedResults, setSearchResults);
958
+
959
+ var handleSearchClick = function handleSearchClick() {
960
+ if (typeof onSearchClick === 'function') {
961
+ onSearchClick();
962
+ return;
963
+ }
964
+
965
+ handleSearchFocus();
966
+ };
967
+
968
+ var handleSearchFocus = useSearchInputFocus(searchValue, setIsSearchFocused, cachedResults, setSearchResults, onSearchClick);
993
969
  var handleKeyDown = useSearchInputKeyDown(searchValue, immediateSearch, setIsSearchFocused);
994
970
 
995
971
  function addCategoryToElements(elements, categoryName) {
@@ -1002,29 +978,58 @@
1002
978
 
1003
979
  React.useMemo(function () {
1004
980
  setLoading(true);
1005
- axios.get("".concat(menuData)).then(function (_ref2) {
981
+ axios.get("".concat(categoryConfig.menuData)).then(function (_ref2) {
1006
982
  var data = _ref2.data;
1007
983
  setLoading(false);
1008
- setDropdownData(function (prev) {
1009
- return _objectSpread2(_objectSpread2({}, prev), {}, {
1010
- latestArrivals: data.latest_arrivals,
1011
- bags: data.bags,
1012
- shoes: data.shoes,
1013
- apparel: data.apparel,
1014
- accessories: data.accessories,
1015
- watches: data.watches,
1016
- accessoriesCategories: data.accessories_categories,
1017
- apparelStyles: data.apparel_styles
1018
- });
1019
- });
984
+ setDropdownData(data);
1020
985
  }).catch(function () {
1021
986
  return setHasError(true);
1022
987
  });
1023
- }, [menuData]);
988
+ }, [categoryConfig.menuData]);
1024
989
  React.useMemo(function () {
990
+ if (!initialSearchData) {
991
+ return;
992
+ }
993
+
1025
994
  fetchInitialSearchData(initialSearchData, setInitialSearchView);
1026
995
  }, [initialSearchData, fetchInitialSearchData]);
1027
996
 
997
+ var renderDropdownLinks = function renderDropdownLinks() {
998
+ return categoryConfig.categories.map(function (category) {
999
+ var title = category.title,
1000
+ imageSrc = category.imageSrc,
1001
+ categorySlug = category.categorySlug,
1002
+ categoryName = category.categoryName,
1003
+ elementsKey = category.elementsKey,
1004
+ subCategoryElementsKey = category.subCategoryElementsKey,
1005
+ styleElementsKey = category.styleElementsKey;
1006
+ var categoryElementsProcessed = categoryElements;
1007
+
1008
+ if (subCategoryElementsKey && dropdownData[subCategoryElementsKey]) {
1009
+ // show subcategory elements
1010
+ categoryElementsProcessed = removeCategoryByName(dropdownData[subCategoryElementsKey], categoryName);
1011
+ } else if (styleElementsKey && dropdownData[styleElementsKey]) {
1012
+ categoryElementsProcessed = addCategoryToElements(dropdownData[styleElementsKey], categorySlug);
1013
+ } else {
1014
+ categoryElementsProcessed = addCategoryToElements(categoryElementsProcessed, categorySlug);
1015
+ }
1016
+
1017
+ return /*#__PURE__*/React__default.createElement(DropdownLink, {
1018
+ key: categorySlug,
1019
+ title: title,
1020
+ imageSrc: imageSrc,
1021
+ categoryElements: categoryElementsProcessed,
1022
+ brandElements: dropdownData[elementsKey] || [],
1023
+ productsUrl: productsUrl,
1024
+ categorySlug: categorySlug,
1025
+ categoryTitle: categoryName,
1026
+ isLoading: loading,
1027
+ hasError: hasError,
1028
+ LinkComponent: LinkComponent
1029
+ });
1030
+ });
1031
+ };
1032
+
1028
1033
  var getMarginRight = function getMarginRight(userIsVip, userName) {
1029
1034
  if (userIsVip) return '15px';
1030
1035
  if (userName) return '5px';
@@ -1062,7 +1067,7 @@
1062
1067
  value: searchValue,
1063
1068
  onChange: handleChange,
1064
1069
  onKeyDown: handleKeyDown,
1065
- onClick: handleSearchFocus,
1070
+ onClick: handleSearchClick,
1066
1071
  onFocus: handleSearchFocus
1067
1072
  })), /*#__PURE__*/React__default.createElement(SearchResults, {
1068
1073
  searchValue: searchValue,
@@ -1086,74 +1091,9 @@
1086
1091
  currencySymbol: currencySymbol
1087
1092
  }), /*#__PURE__*/React__default.createElement("nav", {
1088
1093
  className: "navbar__nav-links navbar__nav-links--wrap"
1089
- }, /*#__PURE__*/React__default.createElement(DropdownLink, {
1090
- title: "New",
1091
- imageSrc: newBrandsImage,
1092
- categoryElements: categoryElements,
1093
- brandElements: dropdownData.latestArrivals,
1094
- productsUrl: productsUrl,
1095
- categorySlug: "brands",
1096
- categoryTitle: "Brands",
1097
- isLoading: loading,
1098
- hasError: hasError,
1099
- LinkComponent: LinkComponent
1100
- }), /*#__PURE__*/React__default.createElement(DropdownLink, {
1101
- title: "Bags",
1102
- imageSrc: bagsImage,
1103
- categoryElements: addCategoryToElements(categoryElements, categories.bags.slug),
1104
- brandElements: dropdownData.bags,
1105
- productsUrl: productsUrl,
1106
- categorySlug: categories.bags.slug,
1107
- categoryTitle: categories.bags.name,
1108
- isLoading: loading,
1109
- hasError: hasError,
1110
- LinkComponent: LinkComponent
1111
- }), /*#__PURE__*/React__default.createElement(DropdownLink, {
1112
- title: "Shoes",
1113
- imageSrc: shoesImage,
1114
- categoryElements: addCategoryToElements(categoryElements, categories.shoes.slug),
1115
- brandElements: dropdownData.shoes,
1116
- productsUrl: productsUrl,
1117
- categorySlug: categories.shoes.slug,
1118
- categoryTitle: categories.shoes.name,
1119
- isLoading: loading,
1120
- hasError: hasError,
1121
- LinkComponent: LinkComponent
1122
- }), /*#__PURE__*/React__default.createElement(DropdownLink, {
1123
- title: "Clothing",
1124
- imageSrc: clothingImage,
1125
- categoryElements: addCategoryToElements(dropdownData.apparelStyles, categories.clothing.slug),
1126
- brandElements: dropdownData.apparel,
1127
- productsUrl: productsUrl,
1128
- categorySlug: categories.clothing.slug,
1129
- categoryTitle: categories.clothing.name,
1130
- isLoading: loading,
1131
- hasError: hasError,
1132
- LinkComponent: LinkComponent
1133
- }), /*#__PURE__*/React__default.createElement(DropdownLink, {
1134
- title: "Accessories",
1135
- imageSrc: accessoriesImage,
1136
- categoryElements: removeCategoryByName(dropdownData.accessoriesCategories, 'ACCESSORIES'),
1137
- brandElements: dropdownData.accessories,
1138
- productsUrl: productsUrl,
1139
- categorySlug: categories.accessories.slug,
1140
- categoryTitle: categories.accessories.name,
1141
- isLoading: loading,
1142
- hasError: hasError,
1143
- LinkComponent: LinkComponent
1144
- }), /*#__PURE__*/React__default.createElement(DropdownLink, {
1145
- title: "Watches",
1146
- imageSrc: watchesImage,
1147
- categoryElements: addCategoryToElements(categoryElements, categories.watches.slug),
1148
- brandElements: dropdownData.watches,
1149
- productsUrl: productsUrl,
1150
- categorySlug: categories.watches.slug,
1151
- categoryTitle: categories.watches.name,
1152
- isLoading: loading,
1153
- hasError: hasError,
1154
- LinkComponent: LinkComponent
1155
- }), /*#__PURE__*/React__default.createElement("li", {
1156
- className: "navbar__link"
1094
+ }, renderDropdownLinks(), !!stores.length && /*#__PURE__*/React__default.createElement("li", {
1095
+ className: "navbar__link",
1096
+ key: "Stores"
1157
1097
  }, /*#__PURE__*/React__default.createElement(LinkComponent, {
1158
1098
  href: contactUsLink,
1159
1099
  className: "navbar__link-item navbar__link-item--desktop"
@@ -1196,7 +1136,7 @@
1196
1136
  onClick: onAccountClick
1197
1137
  }, /*#__PURE__*/React__default.createElement("span", {
1198
1138
  className: "text-sm"
1199
- }, name))), /*#__PURE__*/React__default.createElement("button", {
1139
+ }, name))), onInterestClick && /*#__PURE__*/React__default.createElement("button", {
1200
1140
  type: "button",
1201
1141
  className: "".concat(app ? 'navbar__icon--app' : 'navbar__icon'),
1202
1142
  onClick: onInterestClick
package/LuxityFooter.js CHANGED
@@ -2102,13 +2102,13 @@
2102
2102
  setError = _useForm.setError;
2103
2103
 
2104
2104
  var renderLinks = function renderLinks(links, title) {
2105
- return /*#__PURE__*/React__default.createElement("div", {
2105
+ return !!links.length && /*#__PURE__*/React__default.createElement("div", {
2106
2106
  className: "footer__link-container"
2107
2107
  }, /*#__PURE__*/React__default.createElement("div", {
2108
2108
  className: "footer__link-title"
2109
2109
  }, title), /*#__PURE__*/React__default.createElement("div", {
2110
2110
  className: "footer__links"
2111
- }, !!links.length && links.map(function (link) {
2111
+ }, links.map(function (link) {
2112
2112
  return /*#__PURE__*/React__default.createElement("div", {
2113
2113
  className: "footer__link-wrapper",
2114
2114
  key: link.label
@@ -2291,13 +2291,13 @@
2291
2291
  }), /*#__PURE__*/React__default.createElement(AccordionSection, {
2292
2292
  title: "POPULAR",
2293
2293
  links: popularLinks
2294
- }), /*#__PURE__*/React__default.createElement(AccordionSection, {
2294
+ }), !!sellLinks.length && /*#__PURE__*/React__default.createElement(AccordionSection, {
2295
2295
  title: "SELL",
2296
2296
  links: sellLinks
2297
2297
  }), /*#__PURE__*/React__default.createElement(AccordionSection, {
2298
2298
  title: "COMPANY",
2299
2299
  links: companyLinks
2300
- }), /*#__PURE__*/React__default.createElement(AccordionSection, {
2300
+ }), !!storeLinks.length && /*#__PURE__*/React__default.createElement(AccordionSection, {
2301
2301
  title: "CONNECT",
2302
2302
  links: storeLinks
2303
2303
  }), /*#__PURE__*/React__default.createElement("div", {