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(); }]; });