Skip to content

⬅️ Back to Table of Contents

📄 useDebouncedToggle.ts

📊 Analysis Summary

Metric Count
🔧 Functions 1
📦 Imports 3
📊 Variables & Constants 1

📚 Table of Contents

🛠️ File Location:

📂 packages/website/src/hooks/useDebouncedToggle.ts

📦 Imports

Name Source
useCallback react
useRef react
useState react

Variables & Constants

Name Type Kind Value Exported
timeoutId any const timeoutIdRef.current

Functions

useDebouncedToggle(value: T, timeout: number): [T, (data: T) => void]

Code
export function useDebouncedToggle<T>(
  value: T,
  timeout = 1000,
): [T, (data: T) => void] {
  const [state, setState] = useState<T>(value);
  const timeoutIdRef = useRef<NodeJS.Timeout>();

  const update = useCallback(
    (data: T) => {
      setState(data);
      const timeoutId = timeoutIdRef.current;
      if (timeoutId) {
        timeoutIdRef.current = undefined;
        clearTimeout(timeoutId);
      }
      timeoutIdRef.current = setTimeout(() => {
        setState(value);
      }, timeout);
    },
    [timeout, value],
  );

  return [state, update];
}
  • Parameters:
  • value: T
  • timeout: number
  • Return Type: [T, (data: T) => void]
  • Calls:
  • useState (from react)
  • useRef (from react)
  • useCallback (from react)
  • setState
  • clearTimeout
  • setTimeout