| Server IP : 87.98.154.146 / Your IP : 216.73.216.165 Web Server : Apache System : Linux webm004.cluster126.gra.hosting.ovh.net 6.18.42-ovh-vps-grsec-zfs+ #1 SMP PREEMPT_DYNAMIC Wed Aug 5 15:59:48 CEST 2026 x86_64 User : ohklomafyi ( 52085) PHP Version : 7.4.33 Disable Function : _dyuweyrj4,_dyuweyrj4r,dl MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /home/ohklomafyi/www/wp-content/plugins/jetpack/extensions/shared/ |
Upload File : |
import { useCallback, useEffect, useRef } from '@wordpress/element';
interface RafHandle {
id: number;
}
const setRafInterval = ( callback: () => void, timeout: number = 0 ) => {
const interval = timeout < 0 ? 0 : timeout;
const handle: RafHandle = {
id: 0,
};
let startTime = Date.now();
const loop = () => {
const nowTime = Date.now();
if ( nowTime - startTime >= interval ) {
startTime = nowTime;
callback();
}
handle.id = requestAnimationFrame( loop );
};
handle.id = requestAnimationFrame( loop );
return handle;
};
const clearRafInterval = ( handle?: RafHandle | null ) => {
if ( handle ) {
cancelAnimationFrame( handle.id );
}
};
/**
* Invoke a function on an interval that uses requestAnimationFrame.
*
* @param {Function} callback - Function to invoke
* @param {number} timeout - Interval timout in MS.
*
* @return {Function} Function to clear the interval.
*/
const useRafInterval = ( callback: () => void, timeout = 0 ) => {
const timerRef = useRef< RafHandle >();
const callbackRef = useRef( callback );
callbackRef.current = callback;
useEffect( () => {
timerRef.current = setRafInterval( () => {
callbackRef.current();
}, timeout );
return () => {
clearRafInterval( timerRef.current );
};
}, [ timeout ] );
const clear = useCallback( () => {
clearRafInterval( timerRef.current );
}, [] );
return clear;
};
export default useRafInterval;