@atlaskit/editor-common
Version:
A package that contains common classes and components for editor and renderer
34 lines (33 loc) • 1.26 kB
JavaScript
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;
};