UNPKG

@toolpad/utils

Version:

Shared utilities used by Toolpad packages.

1 lines 1.67 kB
{"version":3,"sources":["../../src/hooks/useDebounced.ts"],"sourcesContent":["import * as React from 'react';\n\n/**\n * This hook allows you to debounce any fast changing value. The debounced value will only\n * reflect the latest value when the useDebounce hook has not been called for the specified\n * time period.\n *\n * Inspired by https://usehooks.com/useDebounce/\n */\nexport default function useDebounced<T>(value: T, delay: number): T {\n const [debouncedValue, setDebouncedValue] = React.useState(() => value);\n const timeoutIdRef = React.useRef<NodeJS.Timeout | null>(null);\n\n React.useEffect(\n () => () => {\n if (timeoutIdRef.current) {\n clearTimeout(timeoutIdRef.current);\n timeoutIdRef.current = null;\n }\n },\n [],\n );\n\n React.useEffect(() => {\n timeoutIdRef.current = setTimeout(() => setDebouncedValue(() => value), delay);\n\n return () => {\n if (timeoutIdRef.current) {\n clearTimeout(timeoutIdRef.current);\n timeoutIdRef.current = null;\n }\n };\n }, [value, delay]);\n\n return debouncedValue;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAAuB;AASR,SAAR,aAAiC,OAAU,OAAkB;AAClE,QAAM,CAAC,gBAAgB,iBAAiB,IAAU,eAAS,MAAM,KAAK;AACtE,QAAM,eAAqB,aAA8B,IAAI;AAE7D,EAAM;AAAA,IACJ,MAAM,MAAM;AACV,UAAI,aAAa,SAAS;AACxB,qBAAa,aAAa,OAAO;AACjC,qBAAa,UAAU;AAAA,MACzB;AAAA,IACF;AAAA,IACA,CAAC;AAAA,EACH;AAEA,EAAM,gBAAU,MAAM;AACpB,iBAAa,UAAU,WAAW,MAAM,kBAAkB,MAAM,KAAK,GAAG,KAAK;AAE7E,WAAO,MAAM;AACX,UAAI,aAAa,SAAS;AACxB,qBAAa,aAAa,OAAO;AACjC,qBAAa,UAAU;AAAA,MACzB;AAAA,IACF;AAAA,EACF,GAAG,CAAC,OAAO,KAAK,CAAC;AAEjB,SAAO;AACT;","names":[]}