@mantine/hooks
Version:
A collection of 50+ hooks for state and UI management
1 lines • 2.08 kB
Source Map (JSON)
{"version":3,"file":"use-debounced-value.cjs","names":[],"sources":["../../src/use-debounced-value/use-debounced-value.ts"],"sourcesContent":["import { useCallback, useEffect, useRef, useState } from 'react';\n\nexport interface UseDebouncedValueOptions {\n leading?: boolean;\n}\n\nexport type UseDebouncedValueReturnValue<T> = [T, () => void];\n\nexport function useDebouncedValue<T = any>(\n value: T,\n wait: number,\n options: UseDebouncedValueOptions = { leading: false }\n): UseDebouncedValueReturnValue<T> {\n const [_value, setValue] = useState(value);\n const mountedRef = useRef(false);\n const timeoutRef = useRef<number | null>(null);\n const cooldownRef = useRef(false);\n\n const cancel = useCallback(() => window.clearTimeout(timeoutRef.current!), []);\n\n useEffect(() => {\n if (mountedRef.current) {\n if (!cooldownRef.current && options.leading) {\n cooldownRef.current = true;\n setValue(value);\n } else {\n cancel();\n timeoutRef.current = window.setTimeout(() => {\n cooldownRef.current = false;\n setValue(value);\n }, wait);\n }\n }\n }, [value, options.leading, wait]);\n\n useEffect(() => {\n mountedRef.current = true;\n return cancel;\n }, []);\n\n return [_value, cancel];\n}\n\nexport namespace useDebouncedValue {\n export type Options = UseDebouncedValueOptions;\n export type ReturnValue<T> = UseDebouncedValueReturnValue<T>;\n}\n"],"mappings":";;;AAQA,SAAgB,kBACd,OACA,MACA,UAAoC,EAAE,SAAS,OAAO,EACrB;CACjC,MAAM,CAAC,QAAQ,aAAA,GAAA,MAAA,UAAqB,MAAM;CAC1C,MAAM,cAAA,GAAA,MAAA,QAAoB,MAAM;CAChC,MAAM,cAAA,GAAA,MAAA,QAAmC,KAAK;CAC9C,MAAM,eAAA,GAAA,MAAA,QAAqB,MAAM;CAEjC,MAAM,UAAA,GAAA,MAAA,mBAA2B,OAAO,aAAa,WAAW,QAAS,EAAE,EAAE,CAAC;AAE9E,EAAA,GAAA,MAAA,iBAAgB;AACd,MAAI,WAAW,QACb,KAAI,CAAC,YAAY,WAAW,QAAQ,SAAS;AAC3C,eAAY,UAAU;AACtB,YAAS,MAAM;SACV;AACL,WAAQ;AACR,cAAW,UAAU,OAAO,iBAAiB;AAC3C,gBAAY,UAAU;AACtB,aAAS,MAAM;MACd,KAAK;;IAGX;EAAC;EAAO,QAAQ;EAAS;EAAK,CAAC;AAElC,EAAA,GAAA,MAAA,iBAAgB;AACd,aAAW,UAAU;AACrB,SAAO;IACN,EAAE,CAAC;AAEN,QAAO,CAAC,QAAQ,OAAO"}