24 lines
578 B
TypeScript
24 lines
578 B
TypeScript
import { debounce } from 'lodash';
|
|
|
|
import type { AppDispatch } from 'mastodon/store';
|
|
|
|
export const debounceWithDispatchAndArguments = <T>(
|
|
fn: (dispatch: AppDispatch, ...args: T[]) => void,
|
|
{ delay = 100 },
|
|
) => {
|
|
let argumentBuffer: T[] = [];
|
|
let dispatchBuffer: AppDispatch;
|
|
|
|
const wrapped = debounce(() => {
|
|
const tmpBuffer = argumentBuffer;
|
|
argumentBuffer = [];
|
|
fn(dispatchBuffer, ...tmpBuffer);
|
|
}, delay);
|
|
|
|
return (dispatch: AppDispatch, ...args: T[]) => {
|
|
dispatchBuffer = dispatch;
|
|
argumentBuffer.push(...args);
|
|
wrapped();
|
|
};
|
|
};
|