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();
|
||
|
};
|
||
|
};
|