UNPKG

@lyra/components

Version:
70 lines (54 loc) 1.56 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _propTypes = require('prop-types'); var _propTypes2 = _interopRequireDefault(_propTypes); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function createListener(eventName) { let listeners = []; return listen; function notify(event) { listeners.forEach(l => l(event)); } function unlisten(listener) { listeners = listeners.filter(l => l !== listener); if (listeners.length === 0) { document.removeEventListener(eventName, notify); } } function listen(listener) { if (listeners.length === 0) { document.addEventListener(eventName, notify); } listeners.push(listener); return () => unlisten(listener); } } const onKeypress = createListener('keydown'); class Escapable extends _react2.default.Component { constructor(...args) { var _temp; return _temp = super(...args), this.handleKeyPress = event => { if (this.props.onEscape && event.key === 'Escape') { this.props.onEscape(event); } }, _temp; } componentWillMount() { this.removeListener = onKeypress(this.handleKeyPress); } componentWillUnmount() { this.removeListener(); } render() { return this.props.children || null; } } exports.default = Escapable; Escapable.propTypes = { onEscape: _propTypes2.default.func.isRequired, children: _propTypes2.default.node };