ordering-ui-admin-external 1.45.18 → 1.45.19

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.
@@ -34,9 +34,9 @@ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length)
34
34
  function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
35
35
  function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
36
36
  var DriversGroupsList = exports.DriversGroupsList = function DriversGroupsList(props) {
37
+ var _driversGroupsState$g, _driversGroupsState$g2;
37
38
  var curDriversGroup = props.curDriversGroup,
38
39
  driversGroupsState = props.driversGroupsState,
39
- searchValue = props.searchValue,
40
40
  handleOpenDetails = props.handleOpenDetails,
41
41
  handleUpdateDriversGroup = props.handleUpdateDriversGroup,
42
42
  selectedGroupList = props.selectedGroupList,
@@ -50,16 +50,6 @@ var DriversGroupsList = exports.DriversGroupsList = function DriversGroupsList(p
50
50
  var _useLanguage = (0, _orderingComponentsAdminExternal.useLanguage)(),
51
51
  _useLanguage2 = _slicedToArray(_useLanguage, 2),
52
52
  t = _useLanguage2[1];
53
-
54
- // Get current groups
55
- var _useState = (0, _react.useState)([]),
56
- _useState2 = _slicedToArray(_useState, 2),
57
- currentGroups = _useState2[0],
58
- setCurrentGroups = _useState2[1];
59
- var _useState3 = (0, _react.useState)(null),
60
- _useState4 = _slicedToArray(_useState3, 2),
61
- totalPages = _useState4[0],
62
- setTotalPages = _useState4[1];
63
53
  var handleChangePage = function handleChangePage(page) {
64
54
  setPagination(_objectSpread(_objectSpread({}, pagination), {}, {
65
55
  currentPage: page
@@ -70,20 +60,6 @@ var DriversGroupsList = exports.DriversGroupsList = function DriversGroupsList(p
70
60
  pageSize: pageSize
71
61
  }));
72
62
  };
73
- (0, _react.useEffect)(function () {
74
- if (driversGroupsState.loading) return;
75
- var groups = [];
76
- if (searchValue) {
77
- groups = driversGroupsState.groups.filter(function (plugin) {
78
- var _plugin$name;
79
- return (_plugin$name = plugin.name) === null || _plugin$name === void 0 ? void 0 : _plugin$name.toLowerCase().includes(searchValue === null || searchValue === void 0 ? void 0 : searchValue.toLowerCase());
80
- });
81
- } else {
82
- groups = _toConsumableArray(driversGroupsState.groups);
83
- }
84
- setTotalPages(pagination.totalPages);
85
- setCurrentGroups(groups);
86
- }, [driversGroupsState, searchValue]);
87
63
  var handleClickDriverGroup = function handleClickDriverGroup(e, group) {
88
64
  var isInvalid = e.target.closest('.group-checkbox') || e.target.closest('.group-enabled');
89
65
  if (isInvalid) return;
@@ -98,12 +74,12 @@ var DriversGroupsList = exports.DriversGroupsList = function DriversGroupsList(p
98
74
  }
99
75
  };
100
76
  (0, _react.useEffect)(function () {
101
- if (!isUseQuery || !totalPages) return;
77
+ if (!isUseQuery || !pagination.totalPages) return;
102
78
  (0, _utils.addQueryToUrl)({
103
79
  page: pagination.currentPage,
104
80
  pageSize: pagination.pageSize
105
81
  });
106
- }, [pagination, totalPages]);
82
+ }, [pagination, pagination.totalPages]);
107
83
  return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_styles2.DriversGroupsContainer, null, /*#__PURE__*/_react.default.createElement(_styles2.TableWrapper, null, /*#__PURE__*/_react.default.createElement(_styles2.GroupsTable, {
108
84
  "data-tour": "tour_delivery_completed",
109
85
  disabled: isFromStore
@@ -145,7 +121,7 @@ var DriversGroupsList = exports.DriversGroupsList = function DriversGroupsList(p
145
121
  }))), !isFromStore && /*#__PURE__*/_react.default.createElement("td", null, /*#__PURE__*/_react.default.createElement(_styles2.ActionsContainer, null, /*#__PURE__*/_react.default.createElement(_styles2.EnableWrapper, null, /*#__PURE__*/_react.default.createElement(_reactLoadingSkeleton.default, {
146
122
  width: 50
147
123
  }))))));
148
- }) : currentGroups.map(function (group) {
124
+ }) : driversGroupsState === null || driversGroupsState === void 0 || (_driversGroupsState$g = driversGroupsState.groups) === null || _driversGroupsState$g === void 0 ? void 0 : _driversGroupsState$g.map(function (group) {
149
125
  var _group$administrator, _group$administrator2, _group$administrator3, _group$administrator4, _group$administrator5;
150
126
  return /*#__PURE__*/_react.default.createElement("tbody", {
151
127
  key: group.id,
@@ -179,7 +155,7 @@ var DriversGroupsList = exports.DriversGroupsList = function DriversGroupsList(p
179
155
  return handleOpenDetails(null);
180
156
  },
181
157
  disabled: actionDisabled
182
- }, t('ADD_NEW_DRIVER_GROUP', 'Add new driver group')), (currentGroups === null || currentGroups === void 0 ? void 0 : currentGroups.length) > 0 && /*#__PURE__*/_react.default.createElement(_Shared.Pagination, {
158
+ }, t('ADD_NEW_DRIVER_GROUP', 'Add new driver group')), (driversGroupsState === null || driversGroupsState === void 0 || (_driversGroupsState$g2 = driversGroupsState.groups) === null || _driversGroupsState$g2 === void 0 ? void 0 : _driversGroupsState$g2.length) > 0 && /*#__PURE__*/_react.default.createElement(_Shared.Pagination, {
183
159
  currentPage: pagination.currentPage,
184
160
  totalPages: pagination.totalPages,
185
161
  handleChangePage: handleChangePage,
@@ -54,7 +54,9 @@ var DriversGroupsListingUI = function DriversGroupsListingUI(props) {
54
54
  actionDisabled = props.actionDisabled,
55
55
  isUseQuery = props.isUseQuery,
56
56
  pagination = props.pagination,
57
- setPagination = props.setPagination;
57
+ setPagination = props.setPagination,
58
+ searchValue = props.searchValue,
59
+ onSearch = props.onSearch;
58
60
  var history = (0, _reactRouterDom.useHistory)();
59
61
  var query = new URLSearchParams((0, _reactRouterDom.useLocation)().search);
60
62
  var _useLanguage = (0, _orderingComponentsAdminExternal.useLanguage)(),
@@ -64,57 +66,53 @@ var DriversGroupsListingUI = function DriversGroupsListingUI(props) {
64
66
  _useInfoShare2 = _slicedToArray(_useInfoShare, 2),
65
67
  isCollapse = _useInfoShare2[0].isCollapse,
66
68
  handleMenuCollapse = _useInfoShare2[1].handleMenuCollapse;
67
- var _useState = (0, _react.useState)(null),
68
- _useState2 = _slicedToArray(_useState, 2),
69
- searchValue = _useState2[0],
70
- setSearchValue = _useState2[1];
71
- var _useState3 = (0, _react.useState)({
69
+ var _useState = (0, _react.useState)({
72
70
  open: false,
73
71
  content: []
74
72
  }),
75
- _useState4 = _slicedToArray(_useState3, 2),
76
- alertState = _useState4[0],
77
- setAlertState = _useState4[1];
78
- var _useState5 = (0, _react.useState)({
73
+ _useState2 = _slicedToArray(_useState, 2),
74
+ alertState = _useState2[0],
75
+ setAlertState = _useState2[1];
76
+ var _useState3 = (0, _react.useState)({
79
77
  open: false,
80
78
  content: null,
81
79
  handleOnAccept: null
82
80
  }),
81
+ _useState4 = _slicedToArray(_useState3, 2),
82
+ confirm = _useState4[0],
83
+ setConfirm = _useState4[1];
84
+ var _useState5 = (0, _react.useState)(0),
83
85
  _useState6 = _slicedToArray(_useState5, 2),
84
- confirm = _useState6[0],
85
- setConfirm = _useState6[1];
86
- var _useState7 = (0, _react.useState)(0),
86
+ moveDistance = _useState6[0],
87
+ setMoveDistance = _useState6[1];
88
+ var _useState7 = (0, _react.useState)(false),
87
89
  _useState8 = _slicedToArray(_useState7, 2),
88
- moveDistance = _useState8[0],
89
- setMoveDistance = _useState8[1];
90
- var _useState9 = (0, _react.useState)(false),
90
+ openDetails = _useState8[0],
91
+ setOpenDetails = _useState8[1];
92
+ var _useState9 = (0, _react.useState)(null),
91
93
  _useState10 = _slicedToArray(_useState9, 2),
92
- openDetails = _useState10[0],
93
- setOpenDetails = _useState10[1];
94
+ curDriversGroup = _useState10[0],
95
+ setCurDriversGroup = _useState10[1];
94
96
  var _useState11 = (0, _react.useState)(null),
95
97
  _useState12 = _slicedToArray(_useState11, 2),
96
- curDriversGroup = _useState12[0],
97
- setCurDriversGroup = _useState12[1];
98
- var _useState13 = (0, _react.useState)(null),
98
+ curDriversGroupId = _useState12[0],
99
+ setCurDriversGroupId = _useState12[1];
100
+ var _useState13 = (0, _react.useState)(false),
99
101
  _useState14 = _slicedToArray(_useState13, 2),
100
- curDriversGroupId = _useState14[0],
101
- setCurDriversGroupId = _useState14[1];
102
+ isExtendExtraOpen = _useState14[0],
103
+ setIsExtendExtraOpen = _useState14[1];
102
104
  var _useState15 = (0, _react.useState)(false),
103
105
  _useState16 = _slicedToArray(_useState15, 2),
104
- isExtendExtraOpen = _useState16[0],
105
- setIsExtendExtraOpen = _useState16[1];
106
+ isAddMode = _useState16[0],
107
+ setIsAddMode = _useState16[1];
106
108
  var _useState17 = (0, _react.useState)(false),
107
109
  _useState18 = _slicedToArray(_useState17, 2),
108
- isAddMode = _useState18[0],
109
- setIsAddMode = _useState18[1];
110
- var _useState19 = (0, _react.useState)(false),
110
+ isTourOpen = _useState18[0],
111
+ setIsTourOpen = _useState18[1];
112
+ var _useState19 = (0, _react.useState)(4),
111
113
  _useState20 = _slicedToArray(_useState19, 2),
112
- isTourOpen = _useState20[0],
113
- setIsTourOpen = _useState20[1];
114
- var _useState21 = (0, _react.useState)(4),
115
- _useState22 = _slicedToArray(_useState21, 2),
116
- currentTourStep = _useState22[0],
117
- setCurrentTourStep = _useState22[1];
114
+ currentTourStep = _useState20[0],
115
+ setCurrentTourStep = _useState20[1];
118
116
  var handleOpenDetails = function handleOpenDetails(driverGroup) {
119
117
  setMoveDistance(0);
120
118
  setCurDriversGroup(driverGroup);
@@ -241,9 +239,7 @@ var DriversGroupsListingUI = function DriversGroupsListingUI(props) {
241
239
  }
242
240
  }, t('DELETE', 'Delete')), /*#__PURE__*/_react.default.createElement(_Shared.SearchBar, {
243
241
  lazyLoad: true,
244
- onSearch: function onSearch(val) {
245
- return setSearchValue(val);
246
- },
242
+ onSearch: onSearch,
247
243
  search: searchValue,
248
244
  placeholder: t('SEARCH', 'Search')
249
245
  }))), !isAddMode ? /*#__PURE__*/_react.default.createElement(_DriversGroupsList.DriversGroupsList, {
@@ -15,6 +15,7 @@ var _OrdersDashboardControls = require("../OrdersDashboardControls");
15
15
  var _Shared = require("../../Shared");
16
16
  var _DriversManager = require("./DriversManager");
17
17
  var _DriversLocation = require("../DriversLocation");
18
+ var _utils = require("../../../utils");
18
19
  var _styles = require("./styles");
19
20
  var _OrdersDashboard = require("../OrdersDashboard");
20
21
  var _OrderStatusSubFilter = require("../OrderStatusSubFilter");
@@ -33,6 +34,7 @@ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r)
33
34
  function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
34
35
  function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
35
36
  function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
37
+ var DEBOUNCE_DELAY = 300;
36
38
  var OrdersManagerUI = function OrdersManagerUI(props) {
37
39
  var _configs$filter_order;
38
40
  var isSelectedOrders = props.isSelectedOrders,
@@ -162,7 +164,7 @@ var OrdersManagerUI = function OrdersManagerUI(props) {
162
164
  content: []
163
165
  });
164
166
  };
165
- var handleOpenOrderDetail = function handleOpenOrderDetail(order) {
167
+ var handleOpenOrderDetailBase = function handleOpenOrderDetailBase(order) {
166
168
  var _configs$optimize_ord;
167
169
  var isKeydown = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
168
170
  if (isTourOpen && currentTourStep === 4 && !isKeydown) {
@@ -171,7 +173,9 @@ var OrdersManagerUI = function OrdersManagerUI(props) {
171
173
  }
172
174
  (!(configs !== null && configs !== void 0 && configs.optimize_order_data) || (configs === null || configs === void 0 || (_configs$optimize_ord = configs.optimize_order_data) === null || _configs$optimize_ord === void 0 ? void 0 : _configs$optimize_ord.value) === '0') && setDetailsOrder(order);
173
175
  setOrderDetailId(order.id);
174
- setOrderForMap(order);
176
+ setOrderForMap(function (prev) {
177
+ return (prev === null || prev === void 0 ? void 0 : prev.id) === (order === null || order === void 0 ? void 0 : order.id) ? null : order;
178
+ });
175
179
  // setIsOpenOrderDetail(true)
176
180
  if (!isSelectedOrders) {
177
181
  onOrderRedirect(order.id);
@@ -187,6 +191,7 @@ var OrdersManagerUI = function OrdersManagerUI(props) {
187
191
  }, 1);
188
192
  }
189
193
  };
194
+ var handleOpenOrderDetail = (0, _utils.usePreventDoubleClick)(handleOpenOrderDetailBase, DEBOUNCE_DELAY);
190
195
  var handleSetOpenOrderDetail = function handleSetOpenOrderDetail(state) {
191
196
  setIsOpenOrderDetail(state);
192
197
  };
@@ -3,8 +3,8 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.widgetURL = exports.verifyDecimals = exports.stringToSlug = exports.sortInputFields = exports.shape = exports.setStorageItem = exports.scrollTo = exports.ribbonValues = exports.reviewCommentList = exports.removeStorageItem = exports.removeQueryToUrl = exports.queryStringToObject = exports.orderStatus = exports.orderRejectCommentList = exports.optimizeImage = exports.getUniqueId = exports.getStorageItem = exports.getStarWidth = exports.getSeconds = exports.getOrderStatusPrefix = exports.getOrderStatus = exports.getOrderStatuPickUp = exports.getMinutes = exports.getLocale = exports.getIconCard = exports.getHours = exports.getCurrenySymbol = exports.getCurrentDiffDays = exports.getAttributeName = exports.getAgoMinutes = exports.formatUrlVideo = exports.formatSeconds = exports.firstLetterCapital = exports.findExitingCountryPhoneCode = exports.findExitingCode = exports.fieldsToSort = exports.disableReasons = exports.convertHoursToMinutes = exports.convertHMS = exports.checkValidUrlFormat = exports.checkSiteUrl = exports.checkPreSiteUrl = exports.capitalize = exports.bytesConverter = exports.addQueryToUrl = exports.TwentyFourHours = exports.TwelveHours = exports.DriverTipsOptions = void 0;
7
- var _react = _interopRequireDefault(require("react"));
6
+ exports.widgetURL = exports.verifyDecimals = exports.usePreventDoubleClick = exports.stringToSlug = exports.sortInputFields = exports.shape = exports.setStorageItem = exports.scrollTo = exports.ribbonValues = exports.reviewCommentList = exports.removeStorageItem = exports.removeQueryToUrl = exports.queryStringToObject = exports.orderStatus = exports.orderRejectCommentList = exports.optimizeImage = exports.getUniqueId = exports.getStorageItem = exports.getStarWidth = exports.getSeconds = exports.getOrderStatusPrefix = exports.getOrderStatus = exports.getOrderStatuPickUp = exports.getMinutes = exports.getLocale = exports.getIconCard = exports.getHours = exports.getCurrenySymbol = exports.getCurrentDiffDays = exports.getAttributeName = exports.getAgoMinutes = exports.formatUrlVideo = exports.formatSeconds = exports.firstLetterCapital = exports.findExitingCountryPhoneCode = exports.findExitingCode = exports.fieldsToSort = exports.disableReasons = exports.convertHoursToMinutes = exports.convertHMS = exports.checkValidUrlFormat = exports.checkSiteUrl = exports.checkPreSiteUrl = exports.capitalize = exports.bytesConverter = exports.addQueryToUrl = exports.TwentyFourHours = exports.TwelveHours = exports.DriverTipsOptions = void 0;
7
+ var _react = _interopRequireWildcard(require("react"));
8
8
  var _FaCcMastercard = _interopRequireDefault(require("@meronex/icons/fa/FaCcMastercard"));
9
9
  var _FaCcVisa = _interopRequireDefault(require("@meronex/icons/fa/FaCcVisa"));
10
10
  var _FaCreditCard = _interopRequireDefault(require("@meronex/icons/fa/FaCreditCard"));
@@ -12,6 +12,8 @@ var _moment = _interopRequireDefault(require("moment"));
12
12
  var _orderingComponentsAdminExternal = require("ordering-components-admin-external");
13
13
  var _currency = require("../config/currency.js");
14
14
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
15
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
16
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
15
17
  function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }
16
18
  function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator.return && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, catch: function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; }
17
19
  function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
@@ -896,6 +898,8 @@ var removeQueryToUrl = exports.removeQueryToUrl = function removeQueryToUrl(remo
896
898
  history.replaceState(null, '', "".concat(location.pathname));
897
899
  }
898
900
  };
901
+ var TwelveHours = exports.TwelveHours = ['12:00 AM', '01:00 AM', '02:00 AM', '03:00 AM', '04:00 AM', '05:00 AM', '06:00 AM', '07:00 AM', '08:00 AM', '09:00 AM', '10:00 AM', '11:00 AM', '12:00 PM', '01:00 PM', '02:00 PM', '03:00 PM', '04:00 PM', '05:00 PM', '06:00 PM', '07:00 PM', '08:00 PM', '09:00 PM', '10:00 PM', '11:00 PM'];
902
+ var TwentyFourHours = exports.TwentyFourHours = ['00:00', '01:00', '02:00', '03:00', '04:00', '05:00', '06:00', '07:00', '08:00', '09:00', '10:00', '11:00', '12:00', '13:00', '14:00', '15:00', '16:00', '17:00', '18:00', '19:00', '20:00', '21:00', '22:00', '23:00'];
899
903
  var disableReasons = exports.disableReasons = function disableReasons() {
900
904
  var _useLanguage3 = (0, _orderingComponentsAdminExternal.useLanguage)(),
901
905
  _useLanguage4 = _slicedToArray(_useLanguage3, 2),
@@ -933,8 +937,6 @@ var disableReasons = exports.disableReasons = function disableReasons() {
933
937
  };
934
938
  return disableReasonDictionary;
935
939
  };
936
- var TwelveHours = exports.TwelveHours = ['12:00 AM', '01:00 AM', '02:00 AM', '03:00 AM', '04:00 AM', '05:00 AM', '06:00 AM', '07:00 AM', '08:00 AM', '09:00 AM', '10:00 AM', '11:00 AM', '12:00 PM', '01:00 PM', '02:00 PM', '03:00 PM', '04:00 PM', '05:00 PM', '06:00 PM', '07:00 PM', '08:00 PM', '09:00 PM', '10:00 PM', '11:00 PM'];
937
- var TwentyFourHours = exports.TwentyFourHours = ['00:00', '01:00', '02:00', '03:00', '04:00', '05:00', '06:00', '07:00', '08:00', '09:00', '10:00', '11:00', '12:00', '13:00', '14:00', '15:00', '16:00', '17:00', '18:00', '19:00', '20:00', '21:00', '22:00', '23:00'];
938
940
  var getAttributeName = exports.getAttributeName = function getAttributeName(key) {
939
941
  var _useLanguage5 = (0, _orderingComponentsAdminExternal.useLanguage)(),
940
942
  _useLanguage6 = _slicedToArray(_useLanguage5, 2),
@@ -1011,4 +1013,17 @@ var getAttributeName = exports.getAttributeName = function getAttributeName(key)
1011
1013
  } else {
1012
1014
  return key;
1013
1015
  }
1016
+ };
1017
+ var usePreventDoubleClick = exports.usePreventDoubleClick = function usePreventDoubleClick(_callback) {
1018
+ var delay = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 300;
1019
+ var clickTimeRef = (0, _react.useRef)(0);
1020
+ var handleClick = (0, _react.useCallback)(function () {
1021
+ var currentTime = new Date().getTime();
1022
+ if (currentTime - clickTimeRef.current < delay) {
1023
+ return;
1024
+ }
1025
+ clickTimeRef.current = currentTime;
1026
+ _callback.apply(void 0, arguments);
1027
+ }, [_callback, delay]);
1028
+ return handleClick;
1014
1029
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ordering-ui-admin-external",
3
- "version": "1.45.18",
3
+ "version": "1.45.19",
4
4
  "description": "Ordering UI Admin Components",
5
5
  "main": "./_modules/index.js",
6
6
  "exports": {
@@ -83,7 +83,7 @@
83
83
  "lodash": "^4.17.20",
84
84
  "moment": "^2.29.1",
85
85
  "moment-range": "^4.0.2",
86
- "ordering-components-admin-external": "1.43.71",
86
+ "ordering-components-admin-external": "1.43.72",
87
87
  "polished": "^3.6.7",
88
88
  "prop-types": "^15.7.2",
89
89
  "react-big-calendar": "^1.4.2",
@@ -1,4 +1,4 @@
1
- import React, { useState, useEffect } from 'react'
1
+ import React, { useEffect } from 'react'
2
2
  import { useLanguage } from 'ordering-components-admin-external'
3
3
  import Skeleton from 'react-loading-skeleton'
4
4
  import MdCheckBoxOutlineBlank from '@meronex/icons/md/MdCheckBoxOutlineBlank'
@@ -29,7 +29,6 @@ export const DriversGroupsList = (props) => {
29
29
  const {
30
30
  curDriversGroup,
31
31
  driversGroupsState,
32
- searchValue,
33
32
  handleOpenDetails,
34
33
  handleUpdateDriversGroup,
35
34
  selectedGroupList,
@@ -44,10 +43,6 @@ export const DriversGroupsList = (props) => {
44
43
 
45
44
  const [, t] = useLanguage()
46
45
 
47
- // Get current groups
48
- const [currentGroups, setCurrentGroups] = useState([])
49
- const [totalPages, setTotalPages] = useState(null)
50
-
51
46
  const handleChangePage = (page) => {
52
47
  setPagination({
53
48
  ...pagination,
@@ -62,18 +57,6 @@ export const DriversGroupsList = (props) => {
62
57
  })
63
58
  }
64
59
 
65
- useEffect(() => {
66
- if (driversGroupsState.loading) return
67
- let groups = []
68
- if (searchValue) {
69
- groups = driversGroupsState.groups.filter(plugin => plugin.name?.toLowerCase().includes(searchValue?.toLowerCase()))
70
- } else {
71
- groups = [...driversGroupsState.groups]
72
- }
73
- setTotalPages(pagination.totalPages)
74
- setCurrentGroups(groups)
75
- }, [driversGroupsState, searchValue])
76
-
77
60
  const handleClickDriverGroup = (e, group) => {
78
61
  const isInvalid = e.target.closest('.group-checkbox') || e.target.closest('.group-enabled')
79
62
  if (isInvalid) return
@@ -90,12 +73,12 @@ export const DriversGroupsList = (props) => {
90
73
  }
91
74
 
92
75
  useEffect(() => {
93
- if (!isUseQuery || !totalPages) return
76
+ if (!isUseQuery || !pagination.totalPages) return
94
77
  addQueryToUrl({
95
78
  page: pagination.currentPage,
96
79
  pageSize: pagination.pageSize
97
80
  })
98
- }, [pagination, totalPages])
81
+ }, [pagination, pagination.totalPages])
99
82
 
100
83
  return (
101
84
  <>
@@ -191,7 +174,7 @@ export const DriversGroupsList = (props) => {
191
174
  </tbody>
192
175
  ))
193
176
  ) : (
194
- currentGroups.map(group => (
177
+ driversGroupsState?.groups?.map(group => (
195
178
  <tbody
196
179
  key={group.id}
197
180
  className={group.id === parseInt(curDriversGroup?.id) ? 'active' : null}
@@ -275,7 +258,7 @@ export const DriversGroupsList = (props) => {
275
258
  {t('ADD_NEW_DRIVER_GROUP', 'Add new driver group')}
276
259
  </LinkButton>
277
260
  )}
278
- {currentGroups?.length > 0 && (
261
+ {driversGroupsState?.groups?.length > 0 && (
279
262
  <Pagination
280
263
  currentPage={pagination.currentPage}
281
264
  totalPages={pagination.totalPages}
@@ -38,14 +38,15 @@ const DriversGroupsListingUI = (props) => {
38
38
  actionDisabled,
39
39
  isUseQuery,
40
40
  pagination,
41
- setPagination
41
+ setPagination,
42
+ searchValue,
43
+ onSearch
42
44
  } = props
43
45
 
44
46
  const history = useHistory()
45
47
  const query = new URLSearchParams(useLocation().search)
46
48
  const [, t] = useLanguage()
47
49
  const [{ isCollapse }, { handleMenuCollapse }] = useInfoShare()
48
- const [searchValue, setSearchValue] = useState(null)
49
50
  const [alertState, setAlertState] = useState({ open: false, content: [] })
50
51
  const [confirm, setConfirm] = useState({ open: false, content: null, handleOnAccept: null })
51
52
  const [moveDistance, setMoveDistance] = useState(0)
@@ -193,7 +194,7 @@ const DriversGroupsListingUI = (props) => {
193
194
  </Button>
194
195
  <SearchBar
195
196
  lazyLoad
196
- onSearch={val => setSearchValue(val)}
197
+ onSearch={onSearch}
197
198
  search={searchValue}
198
199
  placeholder={t('SEARCH', 'Search')}
199
200
  />
@@ -8,7 +8,7 @@ import { OrdersDashboardControls } from '../OrdersDashboardControls'
8
8
  import { Alert } from '../../Shared'
9
9
  import { DriversManager } from './DriversManager'
10
10
  import { DriversLocation } from '../DriversLocation'
11
-
11
+ import { usePreventDoubleClick } from '../../../utils'
12
12
  import {
13
13
  MainContentContainer,
14
14
  TopContent,
@@ -28,6 +28,8 @@ import { OrderStatusSubFilter } from '../OrderStatusSubFilter'
28
28
  import { OrderNotification } from '../OrderNotification'
29
29
  import { WizardOrders } from '../WizardOrders'
30
30
 
31
+ const DEBOUNCE_DELAY = 300
32
+
31
33
  const OrdersManagerUI = (props) => {
32
34
  const {
33
35
  isSelectedOrders,
@@ -110,14 +112,14 @@ const OrdersManagerUI = (props) => {
110
112
  })
111
113
  }
112
114
 
113
- const handleOpenOrderDetail = (order, isKeydown = false) => {
115
+ const handleOpenOrderDetailBase = (order, isKeydown = false) => {
114
116
  if (isTourOpen && currentTourStep === 4 && !isKeydown) {
115
117
  setIsTourOpen(false)
116
118
  return
117
119
  }
118
120
  (!configs?.optimize_order_data || (configs?.optimize_order_data?.value === '0')) && setDetailsOrder(order)
119
121
  setOrderDetailId(order.id)
120
- setOrderForMap(order)
122
+ setOrderForMap((prev) => (prev?.id === order?.id ? null : order))
121
123
  // setIsOpenOrderDetail(true)
122
124
  if (!isSelectedOrders) {
123
125
  onOrderRedirect(order.id)
@@ -134,6 +136,8 @@ const OrdersManagerUI = (props) => {
134
136
  }
135
137
  }
136
138
 
139
+ const handleOpenOrderDetail = usePreventDoubleClick(handleOpenOrderDetailBase, DEBOUNCE_DELAY)
140
+
137
141
  const handleSetOpenOrderDetail = (state) => {
138
142
  setIsOpenOrderDetail(state)
139
143
  }
@@ -1,4 +1,4 @@
1
- import React from 'react'
1
+ import React, { useCallback, useRef } from 'react'
2
2
  import FaCcMastercard from '@meronex/icons/fa/FaCcMastercard'
3
3
  import FaCcVisa from '@meronex/icons/fa/FaCcVisa'
4
4
  import FaCreditCard from '@meronex/icons/fa/FaCreditCard'
@@ -627,42 +627,6 @@ export const removeQueryToUrl = (removeKeys) => {
627
627
  }
628
628
  }
629
629
 
630
- export const disableReasons = () => {
631
- const [, t] = useLanguage()
632
- const disableReasonDictionary = {
633
- SALE_DIVIATION: t('SALE_DIVIATION', 'Sale Diviation'),
634
- MOTORCYCLE_FAILURE: t('MOTORCYCLE_FAILURE', 'Motorcycle failure'),
635
- NO_DRIVERS: t('NO_DRIVERS', 'No drivers'),
636
- OVEN_FAILURE: t('OVEN_FAILURE', 'Oven failure'),
637
- EXCESS_ORDERS: t('EXCESS_ORDERS', 'Excess orders'),
638
- NO_ELECTRIC_POWER: t('NO_ELECTRIC_POWER', 'No electric power'),
639
- NO_GAS: t('NO_GAS', 'No gas'),
640
- CONECTION_FAILURE: t('CONECTION_FAILURE', 'Conection failure'),
641
- NO_WATER: t('NO_WATER', 'No water'),
642
- SYSTEM_FAILURE: t('SYSTEM_FAILURE', 'System failure'),
643
- STREETS_CLOSED: t('STREETS_CLOSED', 'Streets closed'),
644
- NO_SERVICE: t('NO_SERVICE', 'No service'),
645
- UNSAFETY: t('UNSAFETY', 'Unsafety'),
646
- MAINTENANCE_IN_STORE: t('MAINTENANCE_IN_STORE', 'Maintenance in store'),
647
- RAINING: t('RAINING', 'Raining'),
648
- STORE_EVENT: t('STORE_EVENT', 'Store event'),
649
- PROBLEM_WITH_POWER: t('PROBLEM_WITH_POWER', 'Problem with power'),
650
- DRIVER_ACCIDENT: t('DRIVER_ACCIDENT', 'Driver accident'),
651
- MAINTENANCE_SYSTEM_IN_STORE: t('MAINTENANCE_SYSTEM_IN_STORE', 'Maintenance system in store'),
652
- PROBLEM_WITH_GAS: t('PROBLEM_WITH_GAS', 'Problem with gas'),
653
- ROLLER_FAILURE: t('ROLLER_FAILURE', 'Roller failure'),
654
- WEATHER: t('WEATHER', 'Weather'),
655
- GAS_LEAK: t('GAS_LEAK', 'Gas leak'),
656
- MANIFESTATION: t('MANIFESTATION', 'Manifestation'),
657
- LACK_OF_STAFF: t('LACK_OF_STAFF', 'Lack of Staff'),
658
- MIXER_FAILURE: t('MIXER_FAILURE', 'Mixer failure'),
659
- AUTOMATICS: t('AUTOMATICS', 'Automatics'),
660
- PRODUCT_SHORTAGE: t('PRODUCT_SHORTAGE', 'Product shortage'),
661
- TERMINAL_FAILURES: t('TERMINAL_FAILURES', 'Terminal failures')
662
- }
663
- return disableReasonDictionary
664
- }
665
-
666
630
  export const TwelveHours = [
667
631
  '12:00 AM',
668
632
  '01:00 AM',
@@ -717,6 +681,42 @@ export const TwentyFourHours = [
717
681
  '23:00'
718
682
  ]
719
683
 
684
+ export const disableReasons = () => {
685
+ const [, t] = useLanguage()
686
+ const disableReasonDictionary = {
687
+ SALE_DIVIATION: t('SALE_DIVIATION', 'Sale Diviation'),
688
+ MOTORCYCLE_FAILURE: t('MOTORCYCLE_FAILURE', 'Motorcycle failure'),
689
+ NO_DRIVERS: t('NO_DRIVERS', 'No drivers'),
690
+ OVEN_FAILURE: t('OVEN_FAILURE', 'Oven failure'),
691
+ EXCESS_ORDERS: t('EXCESS_ORDERS', 'Excess orders'),
692
+ NO_ELECTRIC_POWER: t('NO_ELECTRIC_POWER', 'No electric power'),
693
+ NO_GAS: t('NO_GAS', 'No gas'),
694
+ CONECTION_FAILURE: t('CONECTION_FAILURE', 'Conection failure'),
695
+ NO_WATER: t('NO_WATER', 'No water'),
696
+ SYSTEM_FAILURE: t('SYSTEM_FAILURE', 'System failure'),
697
+ STREETS_CLOSED: t('STREETS_CLOSED', 'Streets closed'),
698
+ NO_SERVICE: t('NO_SERVICE', 'No service'),
699
+ UNSAFETY: t('UNSAFETY', 'Unsafety'),
700
+ MAINTENANCE_IN_STORE: t('MAINTENANCE_IN_STORE', 'Maintenance in store'),
701
+ RAINING: t('RAINING', 'Raining'),
702
+ STORE_EVENT: t('STORE_EVENT', 'Store event'),
703
+ PROBLEM_WITH_POWER: t('PROBLEM_WITH_POWER', 'Problem with power'),
704
+ DRIVER_ACCIDENT: t('DRIVER_ACCIDENT', 'Driver accident'),
705
+ MAINTENANCE_SYSTEM_IN_STORE: t('MAINTENANCE_SYSTEM_IN_STORE', 'Maintenance system in store'),
706
+ PROBLEM_WITH_GAS: t('PROBLEM_WITH_GAS', 'Problem with gas'),
707
+ ROLLER_FAILURE: t('ROLLER_FAILURE', 'Roller failure'),
708
+ WEATHER: t('WEATHER', 'Weather'),
709
+ GAS_LEAK: t('GAS_LEAK', 'Gas leak'),
710
+ MANIFESTATION: t('MANIFESTATION', 'Manifestation'),
711
+ LACK_OF_STAFF: t('LACK_OF_STAFF', 'Lack of Staff'),
712
+ MIXER_FAILURE: t('MIXER_FAILURE', 'Mixer failure'),
713
+ AUTOMATICS: t('AUTOMATICS', 'Automatics'),
714
+ PRODUCT_SHORTAGE: t('PRODUCT_SHORTAGE', 'Product shortage'),
715
+ TERMINAL_FAILURES: t('TERMINAL_FAILURES', 'Terminal failures')
716
+ }
717
+ return disableReasonDictionary
718
+ }
719
+
720
720
  export const getAttributeName = (key) => {
721
721
  const [, t] = useLanguage()
722
722
  const attributes = [
@@ -749,3 +749,18 @@ export const getAttributeName = (key) => {
749
749
  return key
750
750
  }
751
751
  }
752
+
753
+ export const usePreventDoubleClick = (_callback, delay = 300) => {
754
+ const clickTimeRef = useRef(0)
755
+
756
+ const handleClick = useCallback((...args) => {
757
+ const currentTime = new Date().getTime()
758
+ if (currentTime - clickTimeRef.current < delay) {
759
+ return
760
+ }
761
+ clickTimeRef.current = currentTime
762
+ _callback(...args)
763
+ }, [_callback, delay])
764
+
765
+ return handleClick
766
+ }