@langgraph-js/sdk
Version:
The UI SDK for LangGraph - seamlessly integrate your AI agents with frontend interfaces
30 lines (26 loc) • 961 B
text/typescript
/**
* Creates a debounced function that executes once per animation frame
* @param callback - The function to debounce
* @returns A function that executes the callback on the next animation frame
*/
export function rafDebounce<T extends (...args: any[]) => any>(callback: T): (...args: Parameters<T>) => void {
let rafId: number | null = null;
let lastArgs: Parameters<T> | null = null;
// Return the debounced function
return function (...args: Parameters<T>): void {
// Store the most recent arguments
lastArgs = args;
// Cancel any pending animation frame
if (rafId !== null) {
cancelAnimationFrame(rafId);
}
// Schedule execution on the next animation frame
rafId = requestAnimationFrame(() => {
if (lastArgs !== null) {
callback(...lastArgs);
lastArgs = null;
}
rafId = null;
});
};
}