@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.
@@ -0,0 +1,186 @@
1
+ (function (global, factory) {
2
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('react')) :
3
+ typeof define === 'function' && define.amd ? define(['react'], factory) :
4
+ (global = global || self, global.LuxityAppSideNav = factory(global.React));
5
+ }(this, (function (React) { 'use strict';
6
+
7
+ React = React && Object.prototype.hasOwnProperty.call(React, 'default') ? React['default'] : React;
8
+
9
+ var LuxityAppSideNav = function LuxityAppSideNav(_ref) {
10
+ var closeIcon = _ref.closeIcon,
11
+ accountIcon = _ref.accountIcon,
12
+ orderIcon = _ref.orderIcon,
13
+ saleIcon = _ref.saleIcon,
14
+ onDashboardClick = _ref.onDashboardClick,
15
+ onLogoutClick = _ref.onLogoutClick,
16
+ bugReportLink = _ref.bugReportLink,
17
+ onLuxityShopClick = _ref.onLuxityShopClick,
18
+ onInterestClick = _ref.onInterestClick,
19
+ onAddressClick = _ref.onAddressClick,
20
+ onCouponsClick = _ref.onCouponsClick,
21
+ onEditProfileClick = _ref.onEditProfileClick,
22
+ onCurrentOrdersClick = _ref.onCurrentOrdersClick,
23
+ onPastOrdersClick = _ref.onPastOrdersClick,
24
+ onPastSalesClick = _ref.onPastSalesClick,
25
+ onPaidOutClick = _ref.onPaidOutClick,
26
+ showSideNav = _ref.showSideNav,
27
+ onMenuClick = _ref.onMenuClick;
28
+
29
+ var onCloseSideNav = function onCloseSideNav(e) {
30
+ onMenuClick();
31
+
32
+ if (e.key === 'Enter') {
33
+ e.preventDefault();
34
+ }
35
+ };
36
+
37
+ return /*#__PURE__*/React.createElement("div", {
38
+ className: "side-nav"
39
+ }, /*#__PURE__*/React.createElement("div", {
40
+ role: "button",
41
+ tabIndex: 0,
42
+ className: "side-nav__overlay ".concat(showSideNav ? 'side-nav__overlay--visible' : 'side-nav__overlay--hidden', " "),
43
+ onClick: onCloseSideNav,
44
+ onKeyDown: onCloseSideNav
45
+ }), /*#__PURE__*/React.createElement("div", {
46
+ className: "side-nav__content ".concat(showSideNav ? 'side-nav__content--open' : 'side-nav__content--closed')
47
+ }, /*#__PURE__*/React.createElement("button", {
48
+ type: "button",
49
+ onClick: onMenuClick,
50
+ className: "side-nav__icon-container"
51
+ }, /*#__PURE__*/React.createElement("img", {
52
+ src: closeIcon,
53
+ alt: "close-icon",
54
+ className: "side-nav__close-icon"
55
+ })), /*#__PURE__*/React.createElement("div", {
56
+ className: "side-nav__menu-items-wrapper"
57
+ }, /*#__PURE__*/React.createElement("div", {
58
+ className: "side-nav__menu-item"
59
+ }, /*#__PURE__*/React.createElement("button", {
60
+ type: "button",
61
+ className: "side-nav__menu-title-wrapper"
62
+ }, /*#__PURE__*/React.createElement("span", {
63
+ className: "side-nav__menu-title"
64
+ }, /*#__PURE__*/React.createElement("img", {
65
+ src: accountIcon,
66
+ alt: "close-icon",
67
+ className: "side-nav__menu-icon"
68
+ }), "My Account"))), /*#__PURE__*/React.createElement("div", {
69
+ className: "side-nav__menu-item"
70
+ }, /*#__PURE__*/React.createElement("button", {
71
+ type: "button",
72
+ className: "side-nav__menu-title-wrapper",
73
+ onClick: onInterestClick
74
+ }, /*#__PURE__*/React.createElement("span", {
75
+ className: "side-nav__menu-title"
76
+ }, "Interests"))), /*#__PURE__*/React.createElement("div", {
77
+ className: "side-nav__menu-item"
78
+ }, /*#__PURE__*/React.createElement("button", {
79
+ type: "button",
80
+ className: "side-nav__menu-title-wrapper",
81
+ onClick: onAddressClick
82
+ }, /*#__PURE__*/React.createElement("span", {
83
+ className: "side-nav__menu-title"
84
+ }, "Addresses"))), /*#__PURE__*/React.createElement("div", {
85
+ className: "side-nav__menu-item"
86
+ }, /*#__PURE__*/React.createElement("button", {
87
+ type: "button",
88
+ className: "side-nav__menu-title-wrapper",
89
+ onClick: onCouponsClick
90
+ }, /*#__PURE__*/React.createElement("span", {
91
+ className: "side-nav__menu-title"
92
+ }, "Coupons"))), /*#__PURE__*/React.createElement("div", {
93
+ className: "side-nav__menu-item"
94
+ }, /*#__PURE__*/React.createElement("button", {
95
+ type: "button",
96
+ className: "side-nav__menu-title-wrapper",
97
+ onClick: onEditProfileClick
98
+ }, /*#__PURE__*/React.createElement("span", {
99
+ className: "side-nav__menu-title"
100
+ }, "Edit Profile"))), /*#__PURE__*/React.createElement("div", {
101
+ className: "side-nav__menu-divider"
102
+ }, " "), /*#__PURE__*/React.createElement("div", {
103
+ className: "side-nav__menu-item"
104
+ }, /*#__PURE__*/React.createElement("button", {
105
+ type: "button",
106
+ className: "side-nav__menu-title-wrapper"
107
+ }, /*#__PURE__*/React.createElement("span", {
108
+ className: "side-nav__menu-title"
109
+ }, /*#__PURE__*/React.createElement("img", {
110
+ src: orderIcon,
111
+ alt: "close-icon",
112
+ className: "side-nav__menu-icon"
113
+ }), "My Orders"))), /*#__PURE__*/React.createElement("div", {
114
+ className: "side-nav__menu-item"
115
+ }, /*#__PURE__*/React.createElement("button", {
116
+ type: "button",
117
+ className: "side-nav__menu-title-wrapper",
118
+ onClick: onCurrentOrdersClick
119
+ }, /*#__PURE__*/React.createElement("span", {
120
+ className: "side-nav__menu-title"
121
+ }, "Current Orders"))), /*#__PURE__*/React.createElement("div", {
122
+ className: "side-nav__menu-item"
123
+ }, /*#__PURE__*/React.createElement("button", {
124
+ type: "button",
125
+ className: "side-nav__menu-title-wrapper",
126
+ onClick: onPastOrdersClick
127
+ }, /*#__PURE__*/React.createElement("span", {
128
+ className: "side-nav__menu-title"
129
+ }, "Past Orders"))), /*#__PURE__*/React.createElement("div", {
130
+ className: "side-nav__menu-divider"
131
+ }, " "), /*#__PURE__*/React.createElement("div", {
132
+ className: "side-nav__menu-item"
133
+ }, /*#__PURE__*/React.createElement("button", {
134
+ type: "button",
135
+ className: "side-nav__menu-title-wrapper"
136
+ }, /*#__PURE__*/React.createElement("span", {
137
+ className: "side-nav__menu-title"
138
+ }, /*#__PURE__*/React.createElement("img", {
139
+ src: saleIcon,
140
+ alt: "close-icon",
141
+ className: "side-nav__menu-icon"
142
+ }), "My Sales"))), /*#__PURE__*/React.createElement("div", {
143
+ className: "side-nav__menu-item"
144
+ }, /*#__PURE__*/React.createElement("button", {
145
+ type: "button",
146
+ className: "side-nav__menu-title-wrapper",
147
+ onClick: onPastSalesClick
148
+ }, /*#__PURE__*/React.createElement("span", {
149
+ className: "side-nav__menu-title"
150
+ }, "Sales & Consignments"))), /*#__PURE__*/React.createElement("div", {
151
+ className: "side-nav__menu-item"
152
+ }, /*#__PURE__*/React.createElement("button", {
153
+ type: "button",
154
+ className: "side-nav__menu-title-wrapper",
155
+ onClick: onPaidOutClick
156
+ }, /*#__PURE__*/React.createElement("span", {
157
+ className: "side-nav__menu-title"
158
+ }, "Paid Out"))), /*#__PURE__*/React.createElement("div", {
159
+ className: "side-nav__menu-item"
160
+ }, /*#__PURE__*/React.createElement("button", {
161
+ type: "button",
162
+ className: "side-nav__block-button",
163
+ onClick: onLuxityShopClick
164
+ }, "LUXITY SHOP")), /*#__PURE__*/React.createElement("div", {
165
+ className: "side-nav__menu-item"
166
+ }, /*#__PURE__*/React.createElement("button", {
167
+ type: "button",
168
+ className: "side-nav__sub-link",
169
+ onClick: onDashboardClick
170
+ }, "Dashboard")), /*#__PURE__*/React.createElement("div", {
171
+ className: "side-nav__menu-item"
172
+ }, /*#__PURE__*/React.createElement("a", {
173
+ href: bugReportLink,
174
+ className: "side-nav__sub-link"
175
+ }, "Help")), /*#__PURE__*/React.createElement("div", {
176
+ className: "side-nav__menu-item"
177
+ }, /*#__PURE__*/React.createElement("button", {
178
+ type: "button",
179
+ className: "side-nav__sub-link",
180
+ onClick: onLogoutClick
181
+ }, "Logout")))));
182
+ };
183
+
184
+ return LuxityAppSideNav;
185
+
186
+ })));
@@ -107,6 +107,133 @@
107
107
  throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
108
108
  }
109
109
 
110
+ var cssUnit = {
111
+ cm: true,
112
+ mm: true,
113
+ in: true,
114
+ px: true,
115
+ pt: true,
116
+ pc: true,
117
+ em: true,
118
+ ex: true,
119
+ ch: true,
120
+ rem: true,
121
+ vw: true,
122
+ vh: true,
123
+ vmin: true,
124
+ vmax: true,
125
+ "%": true,
126
+ };
127
+ /**
128
+ * If size is a number, append px to the value as default unit.
129
+ * If size is a string, validate against list of valid units.
130
+ * If unit is valid, return size as is.
131
+ * If unit is invalid, console warn issue, replace with px as the unit.
132
+ *
133
+ * @param {(number | string)} size
134
+ * @return {LengthObject} LengthObject
135
+ */
136
+ function parseLengthAndUnit(size) {
137
+ if (typeof size === "number") {
138
+ return {
139
+ value: size,
140
+ unit: "px",
141
+ };
142
+ }
143
+ var value;
144
+ var valueString = (size.match(/^[0-9.]*/) || "").toString();
145
+ if (valueString.includes(".")) {
146
+ value = parseFloat(valueString);
147
+ }
148
+ else {
149
+ value = parseInt(valueString, 10);
150
+ }
151
+ var unit = (size.match(/[^0-9]*$/) || "").toString();
152
+ if (cssUnit[unit]) {
153
+ return {
154
+ value: value,
155
+ unit: unit,
156
+ };
157
+ }
158
+ console.warn("React Spinners: ".concat(size, " is not a valid css value. Defaulting to ").concat(value, "px."));
159
+ return {
160
+ value: value,
161
+ unit: "px",
162
+ };
163
+ }
164
+ /**
165
+ * Take value as an input and return valid css value
166
+ *
167
+ * @param {(number | string)} value
168
+ * @return {string} valid css value
169
+ */
170
+ function cssValue(value) {
171
+ var lengthWithunit = parseLengthAndUnit(value);
172
+ return "".concat(lengthWithunit.value).concat(lengthWithunit.unit);
173
+ }
174
+
175
+ var createAnimation = function (loaderName, frames, suffix) {
176
+ var animationName = "react-spinners-".concat(loaderName, "-").concat(suffix);
177
+ if (typeof window == "undefined" || !window.document) {
178
+ return animationName;
179
+ }
180
+ var styleEl = document.createElement("style");
181
+ document.head.appendChild(styleEl);
182
+ var styleSheet = styleEl.sheet;
183
+ var keyFrames = "\n @keyframes ".concat(animationName, " {\n ").concat(frames, "\n }\n ");
184
+ if (styleSheet) {
185
+ styleSheet.insertRule(keyFrames, 0);
186
+ }
187
+ return animationName;
188
+ };
189
+
190
+ var __assign = (undefined && undefined.__assign) || function () {
191
+ __assign = Object.assign || function(t) {
192
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
193
+ s = arguments[i];
194
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
195
+ t[p] = s[p];
196
+ }
197
+ return t;
198
+ };
199
+ return __assign.apply(this, arguments);
200
+ };
201
+ var __rest = (undefined && undefined.__rest) || function (s, e) {
202
+ var t = {};
203
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
204
+ t[p] = s[p];
205
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
206
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
207
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
208
+ t[p[i]] = s[p[i]];
209
+ }
210
+ return t;
211
+ };
212
+ var beat = createAnimation("BeatLoader", "50% {transform: scale(0.75);opacity: 0.2} 100% {transform: scale(1);opacity: 1}", "beat");
213
+ function BeatLoader(_a) {
214
+ 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"]);
215
+ var wrapper = __assign({ display: "inherit" }, cssOverride);
216
+ var style = function (i) {
217
+ return {
218
+ display: "inline-block",
219
+ backgroundColor: color,
220
+ width: cssValue(size),
221
+ height: cssValue(size),
222
+ margin: cssValue(margin),
223
+ borderRadius: "100%",
224
+ animation: "".concat(beat, " ").concat(0.7 / speedMultiplier, "s ").concat(i % 2 ? "0s" : "".concat(0.35 / speedMultiplier, "s"), " infinite linear"),
225
+ animationFillMode: "both",
226
+ };
227
+ };
228
+ if (!loading) {
229
+ return null;
230
+ }
231
+ return (React.createElement("span", __assign({ style: wrapper }, additionalprops),
232
+ React.createElement("span", { style: style(1) }),
233
+ React.createElement("span", { style: style(2) }),
234
+ React.createElement("span", { style: style(3) })));
235
+ }
236
+
110
237
  var getBrands = function getBrands() {
111
238
  return {
112
239
  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 } "
@@ -259,22 +386,21 @@
259
386
 
260
387
  var SearchResults = function SearchResults(_ref) {
261
388
  var searchValue = _ref.searchValue,
262
- searchLoading = _ref.searchLoading,
263
389
  searchResults = _ref.searchResults,
264
390
  onViewAll = _ref.onViewAll,
265
391
  searchResultsRef = _ref.searchResultsRef,
266
392
  onSearchSubmit = _ref.onSearchSubmit,
267
393
  setSearchValue = _ref.setSearchValue;
268
394
 
269
- if (searchValue.trim() !== '') {
395
+ if (searchValue.trim().length >= 3) {
396
+ if (searchResults.brands.length === 0 && searchResults.products.length === 0) {
397
+ return null;
398
+ }
399
+
270
400
  return /*#__PURE__*/React__default.createElement("div", {
271
401
  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",
272
402
  ref: searchResultsRef
273
- }, searchLoading ? /*#__PURE__*/React__default.createElement("div", {
274
- className: "w-full py-20 flex items-center justify-center"
275
- }, "Searching ...") : /*#__PURE__*/React__default.createElement(React__default.Fragment, null, searchResults.brands.length === 0 && searchResults.products.length === 0 ? /*#__PURE__*/React__default.createElement("div", {
276
- className: "w-full py-20 flex items-center justify-center"
277
- }, "No products found") : /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement("div", {
403
+ }, /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement("div", {
278
404
  className: "w-full lg:w-1/3"
279
405
  }, /*#__PURE__*/React__default.createElement("p", {
280
406
  className: "font-bold p-2 px-4"
@@ -305,7 +431,7 @@
305
431
  setSearchValue('');
306
432
  },
307
433
  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"
308
- }, "View all")))));
434
+ }, "View all"))));
309
435
  }
310
436
 
311
437
  return null;
@@ -372,7 +498,7 @@
372
498
  hasError = _useState8[0],
373
499
  setHasError = _useState8[1];
374
500
 
375
- var _useState9 = React.useState(true),
501
+ var _useState9 = React.useState(false),
376
502
  _useState10 = _slicedToArray(_useState9, 2),
377
503
  searchLoading = _useState10[0],
378
504
  setSearchLoading = _useState10[1];
@@ -386,6 +512,50 @@
386
512
  setSearchResults = _useState12[1];
387
513
 
388
514
  var searchResultsRef = React.useRef(null);
515
+
516
+ var debounce = function debounce(func, wait) {
517
+ var timeout;
518
+ return function executedFunction() {
519
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
520
+ args[_key] = arguments[_key];
521
+ }
522
+
523
+ var later = function later() {
524
+ clearTimeout(timeout);
525
+ func.apply(void 0, args);
526
+ };
527
+
528
+ clearTimeout(timeout);
529
+ timeout = setTimeout(later, wait);
530
+ };
531
+ };
532
+
533
+ var debouncedSearch = React.useCallback(debounce(function (nextValue) {
534
+ setSearchLoading(true);
535
+ axios.post(endpoint, searchProducts(nextValue, 6)).then(function (response) {
536
+ setSearchResults(response.data.data.luxity_products_serach_results);
537
+ var ids = response.data.data.luxity_products_serach_results.luxity_product_ids;
538
+ onProductIdsReceived(ids);
539
+ setSearchLoading(false);
540
+ }).catch(function () {
541
+ setSearchLoading(false);
542
+ });
543
+ }, 500), [endpoint]);
544
+
545
+ var handleChange = function handleChange(event) {
546
+ var value = event.target.value;
547
+ setSearchValue(value);
548
+
549
+ if (value.trim().length >= 3) {
550
+ debouncedSearch(value);
551
+ } else {
552
+ setSearchResults({
553
+ brands: [],
554
+ products: []
555
+ });
556
+ }
557
+ };
558
+
389
559
  React.useEffect(function () {
390
560
  var handleClickOutside = function handleClickOutside(event) {
391
561
  if (searchResultsRef.current && !searchResultsRef.current.contains(event.target)) {
@@ -437,30 +607,6 @@
437
607
  return setHasError(true);
438
608
  });
439
609
  }, [endpoint]);
440
-
441
- var handleChange = function handleChange(event) {
442
- var value = event.target.value;
443
- setSearchValue(value);
444
- onSearch(value);
445
-
446
- if (value.trim() !== '') {
447
- setSearchLoading(true);
448
- axios.post(endpoint, searchProducts(value, 6)).then(function (response) {
449
- setSearchResults(response.data.data.luxity_products_serach_results);
450
- var ids = response.data.data.luxity_products_serach_results.luxity_product_ids;
451
- onProductIdsReceived(ids);
452
- setSearchLoading(false);
453
- }).catch(function () {
454
- setSearchLoading(false);
455
- });
456
- } else {
457
- setSearchResults({
458
- brands: [],
459
- products: []
460
- });
461
- }
462
- };
463
-
464
610
  return /*#__PURE__*/React__default.createElement("div", {
465
611
  className: "navbar"
466
612
  }, /*#__PURE__*/React__default.createElement("div", {
@@ -492,9 +638,14 @@
492
638
  onChange: handleChange,
493
639
  onKeyDown: handleKeyDown,
494
640
  onClick: onSearch
641
+ }), searchLoading && /*#__PURE__*/React__default.createElement(BeatLoader, {
642
+ color: "#000000",
643
+ loading: searchLoading,
644
+ size: 5,
645
+ "aria-label": "Loading Spinner",
646
+ "data-testid": "loader"
495
647
  })), /*#__PURE__*/React__default.createElement(SearchResults, {
496
648
  searchValue: searchValue,
497
- searchLoading: searchLoading,
498
649
  searchResults: searchResults,
499
650
  onViewAll: function onViewAll() {
500
651
  onSearchSubmit(searchValue);