* Handle keyboard events for the Menu. * @param event The keyboard event to be handled.
(event: KeyboardEvent)
| 59 | * @param event The keyboard event to be handled. |
| 60 | */ |
| 61 | _handleKeyEvent(event: KeyboardEvent) { |
| 62 | const keyManager = this.keyManager; |
| 63 | switch (event.keyCode) { |
| 64 | case UP_ARROW: |
| 65 | case DOWN_ARROW: |
| 66 | case LEFT_ARROW: |
| 67 | case RIGHT_ARROW: |
| 68 | if (!hasModifierKey(event)) { |
| 69 | const horizontalArrows = event.keyCode === LEFT_ARROW || event.keyCode === RIGHT_ARROW; |
| 70 | // For a horizontal menu if the left/right keys were clicked, or a vertical menu if the |
| 71 | // up/down keys were clicked: if the current menu is open, close it then focus and open the |
| 72 | // next menu. |
| 73 | if (horizontalArrows) { |
| 74 | event.preventDefault(); |
| 75 | |
| 76 | const prevIsOpen = keyManager.activeItem?.isMenuOpen(); |
| 77 | keyManager.activeItem?.getMenuTrigger()?.close(); |
| 78 | |
| 79 | keyManager.setFocusOrigin('keyboard'); |
| 80 | keyManager.onKeydown(event); |
| 81 | if (prevIsOpen) { |
| 82 | keyManager.activeItem?.getMenuTrigger()?.open(); |
| 83 | } |
| 84 | } |
| 85 | } |
| 86 | break; |
| 87 | |
| 88 | case ESCAPE: |
| 89 | if (!hasModifierKey(event)) { |
| 90 | event.preventDefault(); |
| 91 | keyManager.activeItem?.getMenuTrigger()?.close(); |
| 92 | } |
| 93 | break; |
| 94 | |
| 95 | case TAB: |
| 96 | if (!hasModifierKey(event, 'altKey', 'metaKey', 'ctrlKey')) { |
| 97 | keyManager.activeItem?.getMenuTrigger()?.close(); |
| 98 | } |
| 99 | break; |
| 100 | |
| 101 | default: |
| 102 | keyManager.onKeydown(event); |
| 103 | } |
| 104 | } |
| 105 | |
| 106 | /** |
| 107 | * Set focus to either the current, previous or next item based on the FocusNext event, then |
nothing calls this directly
no test coverage detected