@dotconnor/grommet
Version:
focus on the essential experience
70 lines (57 loc) • 2.11 kB
JavaScript
exports.__esModule = true;
exports.Keyboard = void 0;
var _react = require("react");
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
var KEYS = {
8: 'onBackspace',
9: 'onTab',
13: 'onEnter',
27: 'onEsc',
32: 'onSpace',
37: 'onLeft',
38: 'onUp',
39: 'onRight',
40: 'onDown',
188: 'onComma',
16: 'onShift'
};
var Keyboard = function Keyboard(_ref) {
var target = _ref.target,
children = _ref.children,
onKeyDown = _ref.onKeyDown,
restProps = _objectWithoutPropertiesLoose(_ref, ["target", "children", "onKeyDown"]);
var onKeyDownHandler = (0, _react.useCallback)(function (event) {
var key = event.keyCode ? event.keyCode : event.which;
var callbackName = KEYS[key];
for (var _len = arguments.length, rest = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
rest[_key - 1] = arguments[_key];
}
if (callbackName && restProps[callbackName]) {
restProps[callbackName].apply(restProps, [event].concat(rest));
}
if (onKeyDown) {
onKeyDown.apply(void 0, [event].concat(rest));
}
}, [onKeyDown, restProps]);
(0, _react.useEffect)(function () {
if (target === 'document') {
document.addEventListener('keydown', onKeyDownHandler);
}
return function () {
if (target === 'document') {
document.removeEventListener('keydown', onKeyDownHandler);
}
};
}, [onKeyDownHandler, target]);
return target === 'document' ? children : /*#__PURE__*/(0, _react.cloneElement)(_react.Children.only(children), {
onKeyDown: onKeyDownHandler
});
};
var KeyboardDoc;
if (process.env.NODE_ENV !== 'production') {
// eslint-disable-next-line global-require
KeyboardDoc = require('./doc').doc(Keyboard);
}
var KeyboardWrapper = KeyboardDoc || Keyboard;
exports.Keyboard = KeyboardWrapper;
;