Files
Website/resources/js/helpers/debounce.ts

28 lines
735 B
TypeScript

type DebounceCallback = (...args: unknown[]) => void;
type DebounceResult = (...args: unknown[]) => void;
/**
* Call a function after a delay once.
*
* @param {Function} fn The function to call.
* @param {number} delay The delay before calling function.
* @returns {void}
*/
export const debounce = (
fn: DebounceCallback,
delay: number
): DebounceResult => {
let timeoutID: NodeJS.Timeout | null = null;
return (...args) => {
if (timeoutID != null) {
clearTimeout(timeoutID);
}
// eslint-disable-next-line @typescript-eslint/no-this-alias
const that = this;
timeoutID = setTimeout(function () {
fn.apply(that, args);
}, delay);
};
};