3 changed files with 40 additions and 19 deletions
@ -0,0 +1,23 @@
|
||||
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(); |
||||
}; |
||||
}; |
||||
Loading…
Reference in new issue