blob: 51f5dd178866681811130ba45d531e74ffe5f6fd (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
/**
* @see https://github.com/mantinedev/mantine/blob/master/packages/@mantine/hooks/src/use-debounced-callback/use-debounced-callback.ts
*/
import * as React from "react"
import { useCallbackRef } from "@/hooks/use-callback-ref"
export function useDebouncedCallback<T extends (...args: never[]) => unknown>(
callback: T,
delay: number
) {
const handleCallback = useCallbackRef(callback)
const debounceTimerRef = React.useRef(0)
React.useEffect(() => () => window.clearTimeout(debounceTimerRef.current), [])
const setValue = React.useCallback(
(...args: Parameters<T>) => {
window.clearTimeout(debounceTimerRef.current)
debounceTimerRef.current = window.setTimeout(
() => handleCallback(...args),
delay
)
},
[handleCallback, delay]
)
return setValue
}
|