35 lines
837 B
JavaScript
35 lines
837 B
JavaScript
import React from 'react';
|
|
export default (function (callback, buffer) {
|
|
var calledRef = React.useRef(false);
|
|
var timeoutRef = React.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();
|
|
}];
|
|
}); |