UNPKG

@atlaskit/editor-common

Version:

A package that contains common classes and components for editor and renderer

34 lines (33 loc) 1.26 kB
import { useEffect, useRef } from 'react'; export const useEscapeClickaway = (onEscape, onClickAway) => { const ref = useRef(null); useEffect(() => { const handleClickAway = event => { const el = ref.current; if (event.target instanceof Element && el && !el.contains(event.target)) { onClickAway(); } }; const handleKeydown = event => { if (event.key === 'Escape') { event.preventDefault(); onEscape(); } }; // Ignored via go/ees005 // eslint-disable-next-line @repo/internal/dom-events/no-unsafe-event-listeners document.addEventListener('mousedown', handleClickAway); // Ignored via go/ees005 // eslint-disable-next-line @repo/internal/dom-events/no-unsafe-event-listeners document.addEventListener('keydown', handleKeydown); return () => { // Ignored via go/ees005 // eslint-disable-next-line @repo/internal/dom-events/no-unsafe-event-listeners document.removeEventListener('mousedown', handleClickAway); // Ignored via go/ees005 // eslint-disable-next-line @repo/internal/dom-events/no-unsafe-event-listeners document.removeEventListener('keydown', handleKeydown); }; }, [onClickAway, onEscape]); return ref; };