UNPKG

@zohodesk/hooks

Version:

Unified Component Library - Hooks

41 lines (34 loc) 919 B
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]); }