@schema-render/core-react
Version:
Through a set of simple JSON Schema, efficiently build a set of forms.
70 lines (69 loc) • 2.87 kB
JavaScript
/**
* Fork from https://github.com/alibaba/hooks/blob/master/packages/hooks/src/useDebounceFn/index.ts
*/ "use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, "default", {
enumerable: true,
get: function() {
return _default;
}
});
var _react = require("react");
var _tinyLodash = require("../utils/tinyLodash");
var _useLatest = /*#__PURE__*/ _interop_require_default(require("./useLatest"));
var _useUnmount = /*#__PURE__*/ _interop_require_default(require("./useUnmount"));
function _array_like_to_array(arr, len) {
if (len == null || len > arr.length) len = arr.length;
for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
return arr2;
}
function _array_without_holes(arr) {
if (Array.isArray(arr)) return _array_like_to_array(arr);
}
function _interop_require_default(obj) {
return obj && obj.__esModule ? obj : {
default: obj
};
}
function _iterable_to_array(iter) {
if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
}
function _non_iterable_spread() {
throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
}
function _to_consumable_array(arr) {
return _array_without_holes(arr) || _iterable_to_array(arr) || _unsupported_iterable_to_array(arr) || _non_iterable_spread();
}
function _unsupported_iterable_to_array(o, minLen) {
if (!o) return;
if (typeof o === "string") return _array_like_to_array(o, minLen);
var n = Object.prototype.toString.call(o).slice(8, -1);
if (n === "Object" && o.constructor) n = o.constructor.name;
if (n === "Map" || n === "Set") return Array.from(n);
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
}
function useDebounceFn(fn, options) {
var fnRef = (0, _useLatest.default)(fn);
var _options_wait;
var wait = (_options_wait = options === null || options === void 0 ? void 0 : options.wait) !== null && _options_wait !== void 0 ? _options_wait : 1000;
var debounced = (0, _react.useMemo)(function() {
return (0, _tinyLodash.debounce)(function() {
for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){
args[_key] = arguments[_key];
}
var _fnRef;
return (_fnRef = fnRef).current.apply(_fnRef, _to_consumable_array(args));
}, wait);
}, // eslint-disable-next-line react-hooks/exhaustive-deps
[]);
(0, _useUnmount.default)(function() {
return debounced.cancel();
});
return {
run: debounced,
cancel: debounced.cancel
};
}
var _default = useDebounceFn;