All files / utils debounce.ts

100% Statements 32/32
100% Branches 3/3
100% Functions 2/2
100% Lines 32/32

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 331x 1x 1x 1x 1x 1x 1x 1x 1x 1x 11x 11x 11x 100x 100x 100x 100x 100x 1x 1x 1x 1x 1x 100x 100x 100x 100x 100x 100x 11x 1x 1x  
/* eslint-disable func-names */
/* eslint-disable prefer-rest-params */
/* eslint-disable @typescript-eslint/no-this-alias */
/**
 * This function debounce the received function
 * @param { function } 	func				Function to be debounced
 * @param { number } 		wait				Time to wait before execut the function
 * @param { boolean } 	immediate		Param to define if the function will be executed immediately
 */
const debounce = (func: { (): void; (): void; apply?: any }, wait?: number, immediate?: true) => {
  let timeout: string | number | NodeJS.Timeout | null | undefined
 
  return function () {
    // @ts-ignore
    const context = this
    const args = arguments
 
    const later = () => {
      timeout = null
      if (!immediate) {
        func.apply(context, args)
      }
    }
 
    // @ts-ignore
    clearTimeout(timeout)
 
    timeout = setTimeout(later, wait)
  }
}
 
export default debounce