@sanity/default-layout
Version:
The default layout components for Sanity
44 lines (42 loc) • 1.44 kB
JavaScript
;
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);
}