UNPKG

@redocly/theme

Version:

Shared UI components lib

24 lines (21 loc) 706 B
import { useEffect } from 'react'; import type { RefObject } from 'react'; export function useOutsideClick( ref: RefObject<HTMLElement | null>, handler?: (event: MouseEvent | TouchEvent) => void, ): void { useEffect(() => { const listener = (event: MouseEvent | TouchEvent) => { if (!handler || !ref.current || ref.current.contains(event.target as Node)) { return; } handler(event); }; document.addEventListener('mousedown', listener); document.addEventListener('touchstart', listener); return () => { document.removeEventListener('mousedown', listener); document.removeEventListener('touchstart', listener); }; }, [ref, handler]); }