MCPcopy Index your code
hub / github.com/bytebase/bytebase / useDelayedValue

Function useDelayedValue

frontend/src/react/hooks/useDelayedValue.ts:33–68  ·  view source on GitHub ↗
(
  initialValue: T,
  options: UseDelayedValueOptions = {}
)

Source from the content-addressed store, hash-verified

31 * after the component has gone away.
32 */
33export function useDelayedValue<T>(
34 initialValue: T,
35 options: UseDelayedValueOptions = {}
36): UseDelayedValueResult<T> {
37 const { delayBefore = 0, delayAfter = 0 } = options;
38 const [value, setValue] = useState<T>(initialValue);
39 const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);
40
41 const cancel = useCallback(() => {
42 if (timerRef.current !== null) {
43 clearTimeout(timerRef.current);
44 timerRef.current = null;
45 }
46 }, []);
47
48 const update = useCallback<DelayedValueUpdate<T>>(
49 (next, direction, overrideDelay) => {
50 const delay =
51 overrideDelay ?? (direction === "before" ? delayBefore : delayAfter);
52 cancel();
53 if (delay > 0) {
54 timerRef.current = setTimeout(() => {
55 timerRef.current = null;
56 setValue(next);
57 }, delay);
58 } else {
59 setValue(next);
60 }
61 },
62 [cancel, delayBefore, delayAfter]
63 );
64
65 useEffect(() => cancel, [cancel]);
66
67 return { value, update, cancel };
68}

Callers 2

HoverStateProviderFunction · 0.90
HarnessFunction · 0.90

Calls 1

cancelFunction · 0.85

Tested by 1

HarnessFunction · 0.72