@dnb/eufemia
Version:
DNB Eufemia Design System UI Library
105 lines (104 loc) • 4.35 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.debounce = debounce;
exports.debounceAsync = debounceAsync;
require("core-js/modules/web.dom-collections.iterator.js");
var _isAsync = require("./isAsync");
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
function debounceAsync(debouncedFunction) {
let wait = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 500;
let opts = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
return debounce(debouncedFunction, wait, _objectSpread(_objectSpread({}, opts), {}, {
async: true
}));
}
function debounce(debouncedFunction) {
let wait = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 500;
let {
immediate = false,
instance = null,
async = false
} = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
let timeout;
let recall;
let resolvePromise;
let rejectPromise;
let canceled = false;
const customCancels = [];
const cancel = () => {
var _resolvePromise;
canceled = true;
clearTimeout(timeout);
(_resolvePromise = resolvePromise) === null || _resolvePromise === void 0 ? void 0 : _resolvePromise();
customCancels.forEach(fn => {
fn();
});
};
const addCancelEvent = fn => {
if (!customCancels.includes(fn)) {
customCancels.push(fn);
}
return () => {
return canceled;
};
};
function executedFunction() {
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
if (typeof recall === 'function') {
recall();
}
canceled = false;
const inst = instance || this || {};
inst.cancel = cancel;
inst.addCancelEvent = addCancelEvent;
const later = callNow => {
timeout = null;
if (callNow || !immediate) {
try {
var _resolvePromise2;
recall = debouncedFunction.apply(inst, args);
(_resolvePromise2 = resolvePromise) === null || _resolvePromise2 === void 0 ? void 0 : _resolvePromise2(recall);
} catch (error) {
var _rejectPromise;
(_rejectPromise = rejectPromise) === null || _rejectPromise === void 0 ? void 0 : _rejectPromise(error);
}
}
};
const callNow = immediate && !timeout;
clearTimeout(timeout);
timeout = setTimeout(later, wait);
if (callNow) {
later(true);
}
if (async) {
return new Promise((resolve, reject) => {
resolvePromise = resolve;
rejectPromise = reject;
});
}
return recall;
}
function syncFunction() {
return executedFunction(...arguments);
}
syncFunction.cancel = cancel;
syncFunction.addCancelEvent = addCancelEvent;
async function asyncFunction() {
return executedFunction(...arguments);
}
asyncFunction.cancel = cancel;
asyncFunction.addCancelEvent = addCancelEvent;
if ((0, _isAsync.isAsync)(debouncedFunction)) {
return asyncFunction;
}
return syncFunction;
}
//# sourceMappingURL=debounce.js.map