48 lines
1.1 KiB
JavaScript
48 lines
1.1 KiB
JavaScript
|
"use strict";
|
||
|
|
||
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
exports.default = void 0;
|
||
|
|
||
|
var _react = _interopRequireDefault(require("react"));
|
||
|
|
||
|
var _default = function _default(callback, buffer) {
|
||
|
var calledRef = _react.default.useRef(false);
|
||
|
|
||
|
var timeoutRef = _react.default.useRef(null);
|
||
|
|
||
|
function cancelTrigger() {
|
||
|
window.clearTimeout(timeoutRef.current);
|
||
|
}
|
||
|
|
||
|
function trigger(force) {
|
||
|
cancelTrigger();
|
||
|
|
||
|
if (!calledRef.current || force === true) {
|
||
|
if (callback(force) === false) {
|
||
|
// Not delay since callback cancelled self
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
calledRef.current = true;
|
||
|
timeoutRef.current = window.setTimeout(function () {
|
||
|
calledRef.current = false;
|
||
|
}, buffer);
|
||
|
} else {
|
||
|
timeoutRef.current = window.setTimeout(function () {
|
||
|
calledRef.current = false;
|
||
|
trigger();
|
||
|
}, buffer);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return [trigger, function () {
|
||
|
calledRef.current = false;
|
||
|
cancelTrigger();
|
||
|
}];
|
||
|
};
|
||
|
|
||
|
exports.default = _default;
|