import { createEffect, onCleanup } from "solid-js"; const random = (min: number, max: number) => Math.floor(Math.random() * (max - min)) + min; export const useRandomInterval = ( callback: () => void, minDelay: number | null, maxDelay: number | null, ) => { let timeoutId: number | undefined; let savedCallback = callback; createEffect(() => { savedCallback = callback; }); createEffect(() => { if (typeof minDelay !== "number" || typeof maxDelay !== "number") return; const handleTick = () => { const nextTickAt = random(minDelay, maxDelay); timeoutId = window.setTimeout(() => { savedCallback(); handleTick(); }, nextTickAt); }; handleTick(); onCleanup(() => { if (timeoutId !== undefined) { clearTimeout(timeoutId); } }); }); const cancel = () => { if (timeoutId !== undefined) { clearTimeout(timeoutId); } }; return cancel; };