Preview: useRateLimitedCursor.js
Size: 711 B
/home/nshryvcy/radiantskinclinics.org/wp-content/plugins/extendify_old/src/AutoLaunch/hooks/useRateLimitedCursor.js
import { useEffect, useRef } from '@wordpress/element';
export const useRateLimitedCursor = (cb, intervalMs = 2000, deps = []) => {
const lastAtRef = useRef(0);
const timerRef = useRef(null);
useEffect(() => {
const schedule = () => {
clearTimeout(timerRef.current);
const now = Date.now();
const wait = Math.max(0, lastAtRef.current + intervalMs - now);
const run = () => {
lastAtRef.current = Date.now();
const hasMore = cb();
if (hasMore) schedule();
};
if (wait === 0) run();
else timerRef.current = setTimeout(run, wait);
};
schedule();
return () => {
clearTimeout(timerRef.current);
timerRef.current = null;
};
}, [cb, intervalMs, ...deps]);
};
Directory Contents
Dirs: 0 × Files: 4