forked from pu428f3pz/InternshipProject
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
35 lines
856 B
35 lines
856 B
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) {
|
|
if (!calledRef.current || force === true) {
|
|
if (callback() === false) {
|
|
// Not delay since callback cancelled self
|
|
return;
|
|
}
|
|
|
|
calledRef.current = true;
|
|
cancelTrigger();
|
|
timeoutRef.current = window.setTimeout(function () {
|
|
calledRef.current = false;
|
|
}, buffer);
|
|
} else {
|
|
cancelTrigger();
|
|
timeoutRef.current = window.setTimeout(function () {
|
|
calledRef.current = false;
|
|
trigger();
|
|
}, buffer);
|
|
}
|
|
}
|
|
|
|
return [trigger, function () {
|
|
calledRef.current = false;
|
|
cancelTrigger();
|
|
}];
|
|
}); |