From b6a52505115a1a22ead62ae96c98d8a16b83cedd Mon Sep 17 00:00:00 2001 From: farfromrefuge Date: Thu, 28 Sep 2023 02:06:36 +0000 Subject: [PATCH] feat: leading support for debounce (#10388) --- packages/core/utils/common.ts | 6 +++++- packages/core/utils/index.d.ts | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/core/utils/common.ts b/packages/core/utils/common.ts index 85c8cf5c8..273f5eb90 100644 --- a/packages/core/utils/common.ts +++ b/packages/core/utils/common.ts @@ -173,12 +173,16 @@ export function mainThreadify(func: Function): (...args: any[]) => void { }; } -export function debounce(fn: any, delay = 300) { +export function debounce(fn: any, delay = 300, { leading }: { leading?: boolean } = {}) { let timer: NodeJS.Timeout; return (...args: Array) => { + if (timer === undefined && leading) { + fn.apply(this, args); + } clearTimeout(timer); timer = setTimeout(() => { fn.apply(this, args); + timer = undefined; }, delay); }; } diff --git a/packages/core/utils/index.d.ts b/packages/core/utils/index.d.ts index 90beec410..38d273302 100644 --- a/packages/core/utils/index.d.ts +++ b/packages/core/utils/index.d.ts @@ -45,7 +45,7 @@ export function throttle(fn: any, delay?: number); * @param fn Function to debounce * @param delay Customize the delay (default is 300ms) */ -export function debounce(fn: any, delay?: number); +export function debounce(fn: any, delay?: number, options?: { leading?: boolean }); /** * Releases the reference to the wrapped native object