mirror of
https://github.com/glitch-soc/mastodon.git
synced 2025-12-14 08:19:05 +00:00
40 lines
874 B
TypeScript
40 lines
874 B
TypeScript
import { useEffect, useLayoutEffect, useRef } from 'react';
|
|
|
|
/**
|
|
* Hook to create an interval that invokes a callback function
|
|
* at a specified delay using the setInterval API.
|
|
* Based on https://usehooks-ts.com/react-hook/use-interval
|
|
*/
|
|
export function useInterval(
|
|
callback: () => void,
|
|
{
|
|
delay,
|
|
isEnabled = true,
|
|
}: {
|
|
delay: number;
|
|
isEnabled?: boolean;
|
|
},
|
|
) {
|
|
// Write callback to a ref so we can omit it from
|
|
// the interval effect's dependency array
|
|
const callbackRef = useRef(callback);
|
|
useLayoutEffect(() => {
|
|
callbackRef.current = callback;
|
|
}, [callback]);
|
|
|
|
// Set up the interval.
|
|
useEffect(() => {
|
|
if (!isEnabled) {
|
|
return;
|
|
}
|
|
|
|
const intervalId = setInterval(() => {
|
|
callbackRef.current();
|
|
}, delay);
|
|
|
|
return () => {
|
|
clearInterval(intervalId);
|
|
};
|
|
}, [delay, isEnabled]);
|
|
}
|