UNPKG

@sanity/default-layout

Version:

The default layout components for Sanity

44 lines (42 loc) 1.44 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.useSearchHotkeys = useSearchHotkeys; var _ui = require("@sanity/ui"); var _isHotkey = _interopRequireDefault(require("is-hotkey")); var _react = require("react"); var _constants = require("../constants"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var isSearchHotKey = (0, _isHotkey.default)("mod+".concat(_constants.GLOBAL_SEARCH_KEY)); var isEscape = (0, _isHotkey.default)('escape'); /** * This hook binds a global shortcut combination, as well as the ESC key, to open / close callbacks. * * It will prevent the ESC key from firing `onClose` callbacks if it's not the top most layer * (i.e. if a nested dialog is mounted). */ function useSearchHotkeys(_ref) { var open = _ref.open, onClose = _ref.onClose, onOpen = _ref.onOpen; var _useLayer = (0, _ui.useLayer)(), isTopLayer = _useLayer.isTopLayer; var handleClose = (0, _react.useCallback)(() => { onClose(); }, [onClose]); var handleGlobalKeyDown = (0, _react.useCallback)(event => { if (isSearchHotKey(event)) { event.preventDefault(); if (open) { handleClose(); } else { onOpen(); } } if (isEscape(event) && open && isTopLayer) { handleClose(); } }, [handleClose, isTopLayer, open, onOpen]); (0, _ui.useGlobalKeyDown)(handleGlobalKeyDown); }