22 lines
578 B
TypeScript
22 lines
578 B
TypeScript
// A simple debounce function
|
|
export const debounce = <F extends (...args: any[]) => any>(func: F, waitFor: number) => {
|
|
let timeout: ReturnType<typeof setTimeout> | null = null;
|
|
|
|
const debounced = (...args: Parameters<F>) => {
|
|
if (timeout !== null) {
|
|
clearTimeout(timeout);
|
|
timeout = null;
|
|
}
|
|
timeout = setTimeout(() => func(...args), waitFor);
|
|
};
|
|
|
|
const cancel = () => {
|
|
if (timeout !== null) {
|
|
clearTimeout(timeout);
|
|
timeout = null;
|
|
}
|
|
};
|
|
|
|
return [debounced, cancel] as [(...args: Parameters<F>) => void, () => void];
|
|
};
|