mirror of
https://github.com/BlueWallet/BlueWallet.git
synced 2025-03-13 19:16:52 +01:00
27 lines
883 B
TypeScript
27 lines
883 B
TypeScript
import { useState, useEffect, useMemo } from 'react';
|
|
import debounce from '../blue_modules/debounce';
|
|
|
|
// Overload signatures
|
|
function useDebounce<T extends (...args: any[]) => any>(callback: T, delay: number): T;
|
|
function useDebounce<T>(value: T, delay: number): T;
|
|
|
|
function useDebounce<T>(value: T, delay: number): T {
|
|
const isFn = typeof value === 'function';
|
|
|
|
const debouncedFunction = useMemo(() => {
|
|
return isFn ? debounce(value as unknown as (...args: any[]) => any, delay) : null;
|
|
}, [isFn, value, delay]);
|
|
|
|
const [debouncedValue, setDebouncedValue] = useState<T>(value);
|
|
|
|
useEffect(() => {
|
|
if (!isFn) {
|
|
const handler = setTimeout(() => setDebouncedValue(value), delay);
|
|
return () => clearTimeout(handler);
|
|
}
|
|
}, [isFn, value, delay]);
|
|
|
|
return isFn ? (debouncedFunction as unknown as T) : debouncedValue;
|
|
}
|
|
|
|
export default useDebounce;
|