atproto explorer pdsls.dev
atproto tool
at v1.1.2 568 B view raw
1import { type Accessor, createEffect, createSignal, onCleanup } from 'solid-js'; 2 3export const createDebouncedValue = <T>( 4 accessor: Accessor<T>, 5 delay: number, 6 equals?: false | ((prev: T, next: T) => boolean), 7): Accessor<T> => { 8 const initial = accessor(); 9 const [state, setState] = createSignal(initial, { equals }); 10 11 createEffect((prev: T) => { 12 const next = accessor(); 13 14 if (prev !== next) { 15 const timeout = setTimeout(() => setState(() => next), delay); 16 onCleanup(() => clearTimeout(timeout)); 17 } 18 19 return next; 20 }, initial); 21 22 return state; 23};