@deep-foundation/deepcase
Version:
[](https://gitpod.io/#https://github.com/deep-foundation/deepcase) [](https://discord.gg/deep-
42 lines • 1.56 kB
JavaScript
import { useEffect, useRef, useState } from "react";
export function useDelayedInterval(callback, delay = 1000, deps = []) {
const intervalReadyRef = useRef(true);
const timeoutRef = useRef();
useEffect(() => {
const interval = setInterval(() => {
if (intervalReadyRef.current) {
intervalReadyRef.current = false;
callback().then(() => {
clearTimeout(timeoutRef.current);
timeoutRef.current = setTimeout(() => {
intervalReadyRef.current = true;
}, delay);
}, () => {
clearTimeout(timeoutRef.current);
timeoutRef.current = setTimeout(() => {
intervalReadyRef.current = true;
}, delay);
});
}
}, delay);
return () => {
clearTimeout(timeoutRef.current);
clearInterval(interval);
};
}, deps);
}
export function useDelayRefetch(query, variables, delay = 1000) {
const useDelayedIntervalRef = useRef();
const qRef = useRef();
qRef.current = query;
useDelayedIntervalRef.current = variables;
const [results, setResults] = useState();
useDelayedInterval(() => new Promise((res) => {
qRef.current.refetch(useDelayedIntervalRef.current.variables).then((r) => {
setResults(r);
res(undefined);
});
}));
return results;
}
//# sourceMappingURL=use-delayed-interval.js.map