All files / libs/ext/react/hooks/src/lib/use-window-event use-window-event.ts

0% Statements 0/21
0% Branches 0/1
0% Functions 0/1
0% Lines 0/21

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22                                           
import { useEffect, useRef } from 'react';

export const useWindowEvent = <TEventType extends string>(
  type: TEventType,
  listener: TEventType extends keyof WindowEventMap
    ? (ev: WindowEventMap[TEventType]) => void
    : (ev: CustomEvent) => void,
  options?: AddEventListenerOptions | boolean,
) => {
  const listenerRef = useRef(listener);
  listenerRef.current = listener;

  useEffect(() => {
    const handler = listenerRef.current as EventListener;

    globalThis.addEventListener(type, handler, options);
    return () => {
      globalThis.removeEventListener(type, handler, options);
    };
  }, [type, options]);
};