@keycloakify/keycloak-account-ui
Version:
Repackaged Keycloak Account UI
32 lines • 1.11 kB
JavaScript
import { useEffect, useRef, useCallback } from "react";
export function useSetTimeout() {
const didUnmountRef = useRef(false);
const scheduledTimersRef = useRef(new Set());
useEffect(() => {
didUnmountRef.current = false;
return () => {
didUnmountRef.current = true;
clearAll();
};
}, []);
function clearAll() {
scheduledTimersRef.current.forEach((timer) => clearTimeout(timer));
scheduledTimersRef.current.clear();
}
return useCallback((callback, delay) => {
if (didUnmountRef.current) {
throw new Error("Can't schedule a timeout on an unmounted component.");
}
const timer = Number(setTimeout(handleCallback, delay));
scheduledTimersRef.current.add(timer);
function handleCallback() {
scheduledTimersRef.current.delete(timer);
callback();
}
return function cancelTimeout() {
clearTimeout(timer);
scheduledTimersRef.current.delete(timer);
};
}, []);
}
//# sourceMappingURL=useSetTimeout.js.map