Files
mattermost-mobile/app/helpers/api/general.ts

31 lines
920 B
TypeScript

// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
// Debounce function based on underscores modified to use es6 and a cb
export function debounce(func: (...args: any) => unknown, wait: number, immediate?: boolean, cb?: () => unknown) {
let timeout: NodeJS.Timeout|null;
return function fx(...args: any[]) {
const runLater = () => {
timeout = null;
if (!immediate) {
Reflect.apply(func, this, args);
if (cb) {
cb();
}
}
};
const callNow = immediate && !timeout;
if (timeout) {
clearTimeout(timeout);
}
timeout = setTimeout(runLater, wait);
if (callNow) {
Reflect.apply(func, this, args);
if (cb) {
cb();
}
}
};
}