UNPKG

@atlaskit/navigation-system

Version:

The latest navigation system for Atlassian apps.

68 lines (66 loc) • 3.07 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.useSideNavToggleKeyboardShortcut = useSideNavToggleKeyboardShortcut; var _react = require("react"); var _bindEventListener = require("bind-event-listener"); var _useStableRef = _interopRequireDefault(require("@atlaskit/ds-lib/use-stable-ref")); var _useOpenLayerObserver = require("@atlaskit/layering/use-open-layer-observer"); var _fg = require("@atlaskit/platform-feature-flags/fg"); var _hasOpenDialogOrPopover = require("@atlaskit/top-layer/page-surface/has-open-dialog-or-popover"); var _requestClosePopovers = require("@atlaskit/top-layer/page-surface/request-close-popovers"); var _useIsSideNavShortcutEnabled = require("./use-is-side-nav-shortcut-enabled"); var _useToggleSideNav = require("./use-toggle-side-nav"); /** * Binds the keyboard shortcut to toggle the side nav. */ function useSideNavToggleKeyboardShortcut(_ref) { var canToggleWithShortcut = _ref.canToggleWithShortcut; var openLayerObserver = (0, _useOpenLayerObserver.useOpenLayerObserver)({ isEnabled: !(0, _fg.fg)('platform-dst-top-layer') }); var toggleVisibilityByShortcut = (0, _useToggleSideNav.useToggleSideNav)({ trigger: 'keyboard' }); var canToggleWithShortcutStableRef = (0, _useStableRef.default)(canToggleWithShortcut); var isSideNavShortcutEnabled = (0, _useIsSideNavShortcutEnabled.useIsSideNavShortcutEnabled)(); (0, _react.useEffect)(function () { if (!isSideNavShortcutEnabled) { return; } return (0, _bindEventListener.bind)(window, { type: 'keydown', listener: function listener(event) { if (event.ctrlKey && event.key === '[') { if (canToggleWithShortcutStableRef.current && !canToggleWithShortcutStableRef.current()) { // Return early if the callback returns false. // If the callback is not provided, we assume the shortcut is enabled. return; } if (event.repeat) { // Ignore repeated keydown events from holding down the keys return; } if ((0, _fg.fg)('platform-dst-top-layer') && (0, _hasOpenDialogOrPopover.hasOpenDialogOrPopover)({ type: 'modal' })) { // Return early if there are any open modal dialogs return; } if (openLayerObserver && openLayerObserver.getCount({ type: 'modal' }) > 0) { // Return early if there are any open modals return; } // Not gated. Top-layer tooltips (`platform-dst-top-layer-tooltip`) are not known to the observer. (0, _requestClosePopovers.requestClosePopovers)(); openLayerObserver === null || openLayerObserver === void 0 || openLayerObserver.closeLayers(); toggleVisibilityByShortcut(); } } }); }, [canToggleWithShortcutStableRef, isSideNavShortcutEnabled, openLayerObserver, toggleVisibilityByShortcut]); }