@zohodesk/hooks
Version:
Unified Component Library - Hooks
41 lines (34 loc) • 919 B
JavaScript
import { useEffect } from 'react';
let escapeHandlers = [];
function handleEscape(e) {
if (e.key === 'Escape' && escapeHandlers.length > 0) {
let fn = escapeHandlers[escapeHandlers.length - 1];
fn(e);
}
}
function addEscapeHandler(handler) {
if (escapeHandlers.length === 0) {
document.addEventListener('keyup', handleEscape);
}
escapeHandlers.push(handler);
}
function removeEscapeHandler(handler) {
escapeHandlers = escapeHandlers.filter(escHanlder => escHanlder !== handler);
if (escapeHandlers.length === 0) {
document.removeEventListener('keyup', handleEscape);
}
}
export default function useEscape(_ref) {
let {
callback,
isRegister = true
} = _ref;
useEffect(() => {
if (isRegister) {
addEscapeHandler(callback);
} else {
removeEscapeHandler(callback);
}
return () => removeEscapeHandler(callback);
}, [callback, isRegister]);
}