forked from Ivasoft/mattermost-mobile
31 lines
920 B
TypeScript
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();
|
|
}
|
|
}
|
|
};
|
|
}
|