@bonlineza/luxity-lib 2.32.6 → 2.32.8

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
@@ -14002,7 +14002,6 @@
14002
14002
  _formControl.current.formState = getProxyFormState(formState, control);
14003
14003
  return _formControl.current;
14004
14004
  }
14005
- //# sourceMappingURL=index.esm.mjs.map
14006
14005
 
14007
14006
  var _excluded$8 = ["ref"];
14008
14007
 
@@ -14401,6 +14400,133 @@
14401
14400
 
14402
14401
  var index$6 = themed(LuxityFooter);
14403
14402
 
14403
+ var cssUnit = {
14404
+ cm: true,
14405
+ mm: true,
14406
+ in: true,
14407
+ px: true,
14408
+ pt: true,
14409
+ pc: true,
14410
+ em: true,
14411
+ ex: true,
14412
+ ch: true,
14413
+ rem: true,
14414
+ vw: true,
14415
+ vh: true,
14416
+ vmin: true,
14417
+ vmax: true,
14418
+ "%": true,
14419
+ };
14420
+ /**
14421
+ * If size is a number, append px to the value as default unit.
14422
+ * If size is a string, validate against list of valid units.
14423
+ * If unit is valid, return size as is.
14424
+ * If unit is invalid, console warn issue, replace with px as the unit.
14425
+ *
14426
+ * @param {(number | string)} size
14427
+ * @return {LengthObject} LengthObject
14428
+ */
14429
+ function parseLengthAndUnit(size) {
14430
+ if (typeof size === "number") {
14431
+ return {
14432
+ value: size,
14433
+ unit: "px",
14434
+ };
14435
+ }
14436
+ var value;
14437
+ var valueString = (size.match(/^[0-9.]*/) || "").toString();
14438
+ if (valueString.includes(".")) {
14439
+ value = parseFloat(valueString);
14440
+ }
14441
+ else {
14442
+ value = parseInt(valueString, 10);
14443
+ }
14444
+ var unit = (size.match(/[^0-9]*$/) || "").toString();
14445
+ if (cssUnit[unit]) {
14446
+ return {
14447
+ value: value,
14448
+ unit: unit,
14449
+ };
14450
+ }
14451
+ console.warn("React Spinners: ".concat(size, " is not a valid css value. Defaulting to ").concat(value, "px."));
14452
+ return {
14453
+ value: value,
14454
+ unit: "px",
14455
+ };
14456
+ }
14457
+ /**
14458
+ * Take value as an input and return valid css value
14459
+ *
14460
+ * @param {(number | string)} value
14461
+ * @return {string} valid css value
14462
+ */
14463
+ function cssValue(value) {
14464
+ var lengthWithunit = parseLengthAndUnit(value);
14465
+ return "".concat(lengthWithunit.value).concat(lengthWithunit.unit);
14466
+ }
14467
+
14468
+ var createAnimation = function (loaderName, frames, suffix) {
14469
+ var animationName = "react-spinners-".concat(loaderName, "-").concat(suffix);
14470
+ if (typeof window == "undefined" || !window.document) {
14471
+ return animationName;
14472
+ }
14473
+ var styleEl = document.createElement("style");
14474
+ document.head.appendChild(styleEl);
14475
+ var styleSheet = styleEl.sheet;
14476
+ var keyFrames = "\n @keyframes ".concat(animationName, " {\n ").concat(frames, "\n }\n ");
14477
+ if (styleSheet) {
14478
+ styleSheet.insertRule(keyFrames, 0);
14479
+ }
14480
+ return animationName;
14481
+ };
14482
+
14483
+ var __assign = (undefined && undefined.__assign) || function () {
14484
+ __assign = Object.assign || function(t) {
14485
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
14486
+ s = arguments[i];
14487
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
14488
+ t[p] = s[p];
14489
+ }
14490
+ return t;
14491
+ };
14492
+ return __assign.apply(this, arguments);
14493
+ };
14494
+ var __rest = (undefined && undefined.__rest) || function (s, e) {
14495
+ var t = {};
14496
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
14497
+ t[p] = s[p];
14498
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
14499
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
14500
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
14501
+ t[p[i]] = s[p[i]];
14502
+ }
14503
+ return t;
14504
+ };
14505
+ var beat = createAnimation("BeatLoader", "50% {transform: scale(0.75);opacity: 0.2} 100% {transform: scale(1);opacity: 1}", "beat");
14506
+ function BeatLoader(_a) {
14507
+ var _b = _a.loading, loading = _b === void 0 ? true : _b, _c = _a.color, color = _c === void 0 ? "#000000" : _c, _d = _a.speedMultiplier, speedMultiplier = _d === void 0 ? 1 : _d, _e = _a.cssOverride, cssOverride = _e === void 0 ? {} : _e, _f = _a.size, size = _f === void 0 ? 15 : _f, _g = _a.margin, margin = _g === void 0 ? 2 : _g, additionalprops = __rest(_a, ["loading", "color", "speedMultiplier", "cssOverride", "size", "margin"]);
14508
+ var wrapper = __assign({ display: "inherit" }, cssOverride);
14509
+ var style = function (i) {
14510
+ return {
14511
+ display: "inline-block",
14512
+ backgroundColor: color,
14513
+ width: cssValue(size),
14514
+ height: cssValue(size),
14515
+ margin: cssValue(margin),
14516
+ borderRadius: "100%",
14517
+ animation: "".concat(beat, " ").concat(0.7 / speedMultiplier, "s ").concat(i % 2 ? "0s" : "".concat(0.35 / speedMultiplier, "s"), " infinite linear"),
14518
+ animationFillMode: "both",
14519
+ };
14520
+ };
14521
+ if (!loading) {
14522
+ return null;
14523
+ }
14524
+ return (React.createElement("span", __assign({ style: wrapper }, additionalprops),
14525
+ React.createElement("span", { style: style(1) }),
14526
+ React.createElement("span", { style: style(2) }),
14527
+ React.createElement("span", { style: style(3) })));
14528
+ }
14529
+
14404
14530
  var getBrands = function getBrands() {
14405
14531
  return {
14406
14532
  query: "{\n latest_arrivals: luxity_brands(has_products: true, limit: 1000, page: 1, sort_by: \"name|asc\") {data {id name slug}}\n bags: luxity_brands(has_products: true, limit: 1000, page: 1, category_type: BAGS, sort_by: \"name|asc\") {data {id name slug}}\n shoes: luxity_brands(has_products: true, limit: 1000, page: 1, category_type: SHOES, sort_by: \"name|asc\") {data {id name slug}}\n apparel: luxity_brands(has_products: true, limit: 1000, page: 1, category_type: APPAREL, sort_by: \"name|asc\") {data {id name slug}}\n accessories: luxity_brands(has_products: true, limit: 1000, page: 1, category_type: ACCESSORIES, sort_by: \"name|asc\") {data {id name slug}}\n watches: luxity_brands(has_products: true, limit: 1000, page: 1, category_type: WATCHES, sort_by: \"name|asc\") {data {id name slug}}\n accessories_categories: luxity_accessories_categories_list { id name slug }\n apparel_styles: luxity_apparel_styles_list { name slug }\n } "
@@ -14553,22 +14679,21 @@
14553
14679
 
14554
14680
  var SearchResults = function SearchResults(_ref) {
14555
14681
  var searchValue = _ref.searchValue,
14556
- searchLoading = _ref.searchLoading,
14557
14682
  searchResults = _ref.searchResults,
14558
14683
  onViewAll = _ref.onViewAll,
14559
14684
  searchResultsRef = _ref.searchResultsRef,
14560
14685
  onSearchSubmit = _ref.onSearchSubmit,
14561
14686
  setSearchValue = _ref.setSearchValue;
14562
14687
 
14563
- if (searchValue.trim() !== '') {
14688
+ if (searchValue.trim().length >= 3) {
14689
+ if (searchResults.brands.length === 0 && searchResults.products.length === 0) {
14690
+ return null;
14691
+ }
14692
+
14564
14693
  return /*#__PURE__*/React__default.createElement("div", {
14565
14694
  className: "z-50 absolute md:top-14 font-body bg-white w-full lg:w-1/2 flex flex-col md:flex-row md:divide-x divide-black lg:mt-1 shadow-md",
14566
14695
  ref: searchResultsRef
14567
- }, searchLoading ? /*#__PURE__*/React__default.createElement("div", {
14568
- className: "w-full py-20 flex items-center justify-center"
14569
- }, "Searching ...") : /*#__PURE__*/React__default.createElement(React__default.Fragment, null, searchResults.brands.length === 0 && searchResults.products.length === 0 ? /*#__PURE__*/React__default.createElement("div", {
14570
- className: "w-full py-20 flex items-center justify-center"
14571
- }, "No products found") : /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement("div", {
14696
+ }, /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement("div", {
14572
14697
  className: "w-full lg:w-1/3"
14573
14698
  }, /*#__PURE__*/React__default.createElement("p", {
14574
14699
  className: "font-bold p-2 px-4"
@@ -14599,7 +14724,7 @@
14599
14724
  setSearchValue('');
14600
14725
  },
14601
14726
  className: "bottom-0 mt-5 py-3 w-full font-body text-center text-white uppercase bg-black hover:bg-gray-950 border border-black transition-all ease-in-out duration-300 cursor-pointer"
14602
- }, "View all")))));
14727
+ }, "View all"))));
14603
14728
  }
14604
14729
 
14605
14730
  return null;
@@ -14666,7 +14791,7 @@
14666
14791
  hasError = _useState8[0],
14667
14792
  setHasError = _useState8[1];
14668
14793
 
14669
- var _useState9 = React.useState(true),
14794
+ var _useState9 = React.useState(false),
14670
14795
  _useState10 = _slicedToArray(_useState9, 2),
14671
14796
  searchLoading = _useState10[0],
14672
14797
  setSearchLoading = _useState10[1];
@@ -14680,6 +14805,50 @@
14680
14805
  setSearchResults = _useState12[1];
14681
14806
 
14682
14807
  var searchResultsRef = React.useRef(null);
14808
+
14809
+ var debounce = function debounce(func, wait) {
14810
+ var timeout;
14811
+ return function executedFunction() {
14812
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
14813
+ args[_key] = arguments[_key];
14814
+ }
14815
+
14816
+ var later = function later() {
14817
+ clearTimeout(timeout);
14818
+ func.apply(void 0, args);
14819
+ };
14820
+
14821
+ clearTimeout(timeout);
14822
+ timeout = setTimeout(later, wait);
14823
+ };
14824
+ };
14825
+
14826
+ var debouncedSearch = React.useCallback(debounce(function (nextValue) {
14827
+ setSearchLoading(true);
14828
+ axios.post(endpoint, searchProducts(nextValue, 6)).then(function (response) {
14829
+ setSearchResults(response.data.data.luxity_products_serach_results);
14830
+ var ids = response.data.data.luxity_products_serach_results.luxity_product_ids;
14831
+ onProductIdsReceived(ids);
14832
+ setSearchLoading(false);
14833
+ }).catch(function () {
14834
+ setSearchLoading(false);
14835
+ });
14836
+ }, 500), [endpoint]);
14837
+
14838
+ var handleChange = function handleChange(event) {
14839
+ var value = event.target.value;
14840
+ setSearchValue(value);
14841
+
14842
+ if (value.trim().length >= 3) {
14843
+ debouncedSearch(value);
14844
+ } else {
14845
+ setSearchResults({
14846
+ brands: [],
14847
+ products: []
14848
+ });
14849
+ }
14850
+ };
14851
+
14683
14852
  React.useEffect(function () {
14684
14853
  var handleClickOutside = function handleClickOutside(event) {
14685
14854
  if (searchResultsRef.current && !searchResultsRef.current.contains(event.target)) {
@@ -14731,30 +14900,6 @@
14731
14900
  return setHasError(true);
14732
14901
  });
14733
14902
  }, [endpoint]);
14734
-
14735
- var handleChange = function handleChange(event) {
14736
- var value = event.target.value;
14737
- setSearchValue(value);
14738
- onSearch(value);
14739
-
14740
- if (value.trim() !== '') {
14741
- setSearchLoading(true);
14742
- axios.post(endpoint, searchProducts(value, 6)).then(function (response) {
14743
- setSearchResults(response.data.data.luxity_products_serach_results);
14744
- var ids = response.data.data.luxity_products_serach_results.luxity_product_ids;
14745
- onProductIdsReceived(ids);
14746
- setSearchLoading(false);
14747
- }).catch(function () {
14748
- setSearchLoading(false);
14749
- });
14750
- } else {
14751
- setSearchResults({
14752
- brands: [],
14753
- products: []
14754
- });
14755
- }
14756
- };
14757
-
14758
14903
  return /*#__PURE__*/React__default.createElement("div", {
14759
14904
  className: "navbar"
14760
14905
  }, /*#__PURE__*/React__default.createElement("div", {
@@ -14786,9 +14931,14 @@
14786
14931
  onChange: handleChange,
14787
14932
  onKeyDown: handleKeyDown,
14788
14933
  onClick: onSearch
14934
+ }), searchLoading && /*#__PURE__*/React__default.createElement(BeatLoader, {
14935
+ color: "#000000",
14936
+ loading: searchLoading,
14937
+ size: 5,
14938
+ "aria-label": "Loading Spinner",
14939
+ "data-testid": "loader"
14789
14940
  })), /*#__PURE__*/React__default.createElement(SearchResults, {
14790
14941
  searchValue: searchValue,
14791
- searchLoading: searchLoading,
14792
14942
  searchResults: searchResults,
14793
14943
  onViewAll: function onViewAll() {
14794
14944
  onSearchSubmit(searchValue);
@@ -15044,7 +15194,7 @@
15044
15194
  className: "side-nav__elements"
15045
15195
  }, categoryElements.map(function (category) {
15046
15196
  return /*#__PURE__*/React__default.createElement("a", {
15047
- href: "".concat(productUrl, "/").concat(category.slug),
15197
+ href: "".concat(productUrl, "/").concat(['new', 'apparel', 'accessories'].includes(categorySlug) ? category.slug : "".concat(categorySlug, "/").concat(category.slug)),
15048
15198
  className: "side-nav__element"
15049
15199
  }, category.name.toLowerCase());
15050
15200
  })), /*#__PURE__*/React__default.createElement("br", null), /*#__PURE__*/React__default.createElement("div", {
@@ -15052,11 +15202,11 @@
15052
15202
  }, /*#__PURE__*/React__default.createElement("div", {
15053
15203
  className: "side-nav__sub-menu-title"
15054
15204
  }, subMenuBrandsTitle), /*#__PURE__*/React__default.createElement("a", {
15055
- href: "".concat(productUrl, "/brands"),
15205
+ href: "".concat(productUrl, "/").concat(categorySlug),
15056
15206
  className: "side-nav__element"
15057
15207
  }, "All Brands"), !!brandsList.length && brandsList.map(function (brand) {
15058
15208
  return /*#__PURE__*/React__default.createElement("a", {
15059
- href: "".concat(productUrl, "/").concat(categorySlug, "/").concat(brand.slug),
15209
+ href: "".concat(productUrl, "/").concat(categorySlug === 'new' ? 'brands' : categorySlug, "/").concat(brand.slug),
15060
15210
  className: "side-nav__element"
15061
15211
  }, brand.name);
15062
15212
  })))));
@@ -15098,7 +15248,7 @@
15098
15248
  latestArrivals: [],
15099
15249
  bags: [],
15100
15250
  shoes: [],
15101
- clothing: [],
15251
+ apparel: [],
15102
15252
  accessories: [],
15103
15253
  watches: [],
15104
15254
  accessoriesCategories: [],
@@ -15227,7 +15377,7 @@
15227
15377
  type: "button",
15228
15378
  className: "side-nav__menu-title-wrapper",
15229
15379
  onClick: function onClick() {
15230
- return onSubMenuClick('clothing');
15380
+ return onSubMenuClick('apparel');
15231
15381
  }
15232
15382
  }, /*#__PURE__*/React__default.createElement("span", {
15233
15383
  className: "side-nav__menu-title"
@@ -15345,14 +15495,14 @@
15345
15495
  isLoading: loading,
15346
15496
  hasError: hasError
15347
15497
  }), /*#__PURE__*/React__default.createElement(BrandsDropDown, {
15348
- subMenuOpen: subMenuOpen && displayedSubMenu === 'clothing',
15498
+ subMenuOpen: subMenuOpen && displayedSubMenu === 'apparel',
15349
15499
  onBackClick: onBackClick,
15350
15500
  backIcon: backIcon,
15351
15501
  subMenuCategoryTitle: "Department",
15352
15502
  productUrl: productUrl,
15353
15503
  categoryElements: dropdownData.apparelStyles,
15354
15504
  subMenuBrandsTitle: "Clothing Brands",
15355
- brandsList: dropdownData.clothing,
15505
+ brandsList: dropdownData.apparel,
15356
15506
  categorySlug: displayedSubMenu,
15357
15507
  isLoading: loading,
15358
15508
  hasError: hasError
@@ -15569,7 +15719,6 @@
15569
15719
  var logoSrc = _ref.logoSrc,
15570
15720
  menuIcon = _ref.menuIcon,
15571
15721
  inputSearchIcon = _ref.inputSearchIcon,
15572
- onSearch = _ref.onSearch,
15573
15722
  onCartClick = _ref.onCartClick,
15574
15723
  cartIcon = _ref.cartIcon,
15575
15724
  cartCount = _ref.cartCount,
@@ -15621,7 +15770,7 @@
15621
15770
  showSideNav = _useState6[0],
15622
15771
  setShowSideNav = _useState6[1];
15623
15772
 
15624
- var _useState7 = React.useState(true),
15773
+ var _useState7 = React.useState(false),
15625
15774
  _useState8 = _slicedToArray(_useState7, 2),
15626
15775
  searchLoading = _useState8[0],
15627
15776
  setSearchLoading = _useState8[1];
@@ -15634,21 +15783,41 @@
15634
15783
  searchResults = _useState10[0],
15635
15784
  setSearchResults = _useState10[1];
15636
15785
 
15786
+ var debounce = function debounce(func, wait) {
15787
+ var timeout;
15788
+ return function executedFunction() {
15789
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
15790
+ args[_key] = arguments[_key];
15791
+ }
15792
+
15793
+ var later = function later() {
15794
+ clearTimeout(timeout);
15795
+ func.apply(void 0, args);
15796
+ };
15797
+
15798
+ clearTimeout(timeout);
15799
+ timeout = setTimeout(later, wait);
15800
+ };
15801
+ };
15802
+
15803
+ var debouncedSearch = React.useCallback(debounce(function (nextValue) {
15804
+ setSearchLoading(true);
15805
+ axios.post(endpoint, searchProducts(nextValue, 6)).then(function (response) {
15806
+ setSearchResults(response.data.data.luxity_products_serach_results);
15807
+ var ids = response.data.data.luxity_products_serach_results.luxity_product_ids;
15808
+ onProductIdsReceived(ids);
15809
+ setSearchLoading(false);
15810
+ }).catch(function () {
15811
+ setSearchLoading(false);
15812
+ });
15813
+ }, 500), [endpoint]);
15814
+
15637
15815
  var handleChange = function handleChange(event) {
15638
15816
  var value = event.target.value;
15639
15817
  setSearchValue(value);
15640
- onSearch(value);
15641
-
15642
- if (value.trim() !== '') {
15643
- setSearchLoading(true);
15644
- axios.post(endpoint, searchProducts(value, 6)).then(function (response) {
15645
- setSearchResults(response.data.data.luxity_products_serach_results);
15646
- var ids = response.data.data.luxity_products_serach_results.luxity_product_ids;
15647
- onProductIdsReceived(ids);
15648
- setSearchLoading(false);
15649
- }).catch(function () {
15650
- setSearchLoading(false);
15651
- });
15818
+
15819
+ if (value.trim().length >= 3) {
15820
+ debouncedSearch(value);
15652
15821
  } else {
15653
15822
  setSearchResults({
15654
15823
  brands: [],
@@ -15792,6 +15961,12 @@
15792
15961
  value: searchValue,
15793
15962
  onChange: handleChange,
15794
15963
  onKeyDown: handleKeyDown
15964
+ }), searchLoading && /*#__PURE__*/React__default.createElement(BeatLoader, {
15965
+ color: "#000000",
15966
+ loading: searchLoading,
15967
+ size: 5,
15968
+ "aria-label": "Loading Spinner",
15969
+ "data-testid": "loader"
15795
15970
  })), /*#__PURE__*/React__default.createElement("button", {
15796
15971
  type: "button",
15797
15972
  onClick: onSearchClick
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bonlineza/luxity-lib",
3
- "version": "2.32.6",
3
+ "version": "2.32.8",
4
4
  "scripts": {
5
5
  "start": "start-storybook -p 9001 -c .storybook -s ./public",
6
6
  "clean": "rimraf ./build/*.*",
@@ -31,6 +31,7 @@
31
31
  "dependencies": {
32
32
  "@bonlineza/b-lib": "^4.0.0",
33
33
  "js-cookie": "^2.2.0",
34
+ "lodash.debounce": "^4.0.8",
34
35
  "numeral": "^2.0.6",
35
36
  "polished": "^3.6.5",
36
37
  "prop-types": "^15.7.2",
@@ -42,6 +43,7 @@
42
43
  "react-is": "^16.13.1",
43
44
  "react-notify-toast": "^0.5.1",
44
45
  "react-select": "^2.3.0",
46
+ "react-spinners": "^0.13.8",
45
47
  "regenerator-runtime": "^0.13.7",
46
48
  "styled-system": "^5.1.5"
47
49
  },
@@ -0,0 +1,6 @@
1
+ module.exports = {
2
+ plugins: {
3
+ tailwindcss: {},
4
+ autoprefixer: {},
5
+ },
6
+ };
package/build/.gitignore DELETED
@@ -1,3 +0,0 @@
1
- bundle.css
2
- bundle.js
3
- constants.js
package/build/.npmignore DELETED
File without changes