Bin
2025-12-16 9e0b2ba2c317b1a86212f24cbae3195ad1f3dbfa
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
/**
 * Returns a function, that, as long as it continues to be invoked,
 * will not be triggered. The function will be called after it
 * stops being called for N milliseconds. If `immediate` is passed,
 * trigger the function on the leading edge, instead of the trailing.
 *
 * @param {function} func
 * @param {number} wait
 * @param {boolean} immediate
 */
export const debounce = (func, wait, immediate) => {
  let timeout;
 
  return function (...args) {
    const later = () => {
      timeout = null;
      if (!immediate) {
        func.apply(this, args);
      }
    };
    const callNow = immediate && !timeout;
 
    clearTimeout(timeout);
    timeout = setTimeout(later, wait);
    if (callNow) func.apply(this, args);
  };
};