Skip to content
File

Blob: src/client/hooks/use-polling.ts

typescript22 lines
1import { useEffect, useEffectEvent } from "react";
2 
3interface UsePollingOptions {
4 enabled: boolean;
5 intervalMs: number;
6 callback(): void | Promise<void>;
7}
8 
9export const usePolling = ({ enabled, intervalMs, callback }: UsePollingOptions): void => {
10 const runCallback = useEffectEvent(callback);
11 
12 useEffect(() => {
13 if (!enabled) return;
14 
15 const interval = setInterval(() => {
16 void runCallback();
17 }, intervalMs);
18 
19 return () => clearInterval(interval);
20 }, [enabled, intervalMs]);
21};