* esm * wip * wip * wip * wip * wip * wip * subscription notice * wip * wip * wip * fix envs * fix: update docker build * fix * esm/types * delete dashboard :D * add patches to dockerfiles * update packages + catalogs + ts * wip * remove native libs * ts * improvements * fix redirects and fetching session * try fix favicon * fixes * fix * order and resize reportds within a dashboard * improvements * wip * added userjot to dashboard * fix * add op * wip * different cache key * improve date picker * fix table * event details loading * redo onboarding completely * fix login * fix * fix * extend session, billing and improve bars * fix * reduce price on 10M
29 lines
702 B
TypeScript
29 lines
702 B
TypeScript
import * as React from 'react';
|
|
|
|
import { useCallbackRef } from '@/hooks/use-callback-ref';
|
|
|
|
export function useDebouncedCallback<T extends (...args: never[]) => unknown>(
|
|
callback: T,
|
|
delay: number,
|
|
) {
|
|
const handleCallback = useCallbackRef(callback);
|
|
const debounceTimerRef = React.useRef(0);
|
|
React.useEffect(
|
|
() => () => window.clearTimeout(debounceTimerRef.current),
|
|
[],
|
|
);
|
|
|
|
const setValue = React.useCallback(
|
|
(...args: Parameters<T>) => {
|
|
window.clearTimeout(debounceTimerRef.current);
|
|
debounceTimerRef.current = window.setTimeout(
|
|
() => handleCallback(...args),
|
|
delay,
|
|
);
|
|
},
|
|
[handleCallback, delay],
|
|
);
|
|
|
|
return setValue;
|
|
}
|