export function createDebounced<T>(value: Accessor<T>, delay: number): Accessor<[T, number]> {
const [debounced, setDebounced] = createSignal<[T, number]>([value(), 0]);
createEffect(() => {
if (isServer) return; // avoiding setting timeout on server-side
const val = value();
const timeoutId = setTimeout(() => setDebounced(([_, prevUpdate]) => [val, prevUpdate + 1]), delay);
onCleanup(() => clearTimeout(timeoutId));
});
return debounced;
}
export function createDebounced<T>(value: Accessor<T>, delay: number): Accessor<[T, number]> {
const [debounced, setDebounced] = createSignal<[T, number]>([value(), 0]);
createEffect(() => {
if (isServer) return; // avoiding setting timeout on server-side
const val = value();
const timeoutId = setTimeout(() => setDebounced(([_, prevUpdate]) => [val, prevUpdate + 1]), delay);
onCleanup(() => clearTimeout(timeoutId));
});
return debounced;
}