Skip to content

Commit

Permalink
fix(menu): hardware back button now dismisses side menu if open (#20558)
Browse files Browse the repository at this point in the history
fixes #20559
  • Loading branch information
liamdebeasi committed Feb 24, 2020
1 parent 8d3ce8d commit 6b2a929
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 2 deletions.
3 changes: 3 additions & 0 deletions core/src/utils/hardware-back-button.ts
Expand Up @@ -55,3 +55,6 @@ const executeAction = async (handler: Handler | undefined) => {
console.error(e);
}
};

export const OVERLAY_BACK_BUTTON_PRIORITY = 100;
export const MENU_BACK_BUTTON_PRIORITY = 99; // 1 less than overlay priority since menu is displayed behind overlays
13 changes: 12 additions & 1 deletion core/src/utils/menu-controller/index.ts
@@ -1,4 +1,5 @@
import { AnimationBuilder, MenuI } from '../../interface';
import { AnimationBuilder, BackButtonEvent, MenuI } from '../../interface';
import { MENU_BACK_BUTTON_PRIORITY } from '../hardware-back-button';

import { menuOverlayAnimation } from './animations/overlay';
import { menuPushAnimation } from './animations/push';
Expand Down Expand Up @@ -206,6 +207,16 @@ const createMenuController = () => {
registerAnimation('push', menuPushAnimation);
registerAnimation('overlay', menuOverlayAnimation);

const doc: Document = document;
doc.addEventListener('ionBackButton', (ev: any) => {
const openMenu = _getOpenSync();
if (openMenu) {
(ev as BackButtonEvent).detail.register(MENU_BACK_BUTTON_PRIORITY, () => {
return openMenu.close();
});
}
});

return {
registerAnimation,
get,
Expand Down
4 changes: 3 additions & 1 deletion core/src/utils/overlays.ts
@@ -1,6 +1,8 @@
import { config } from '../global/config';
import { ActionSheetOptions, AlertOptions, Animation, AnimationBuilder, BackButtonEvent, HTMLIonOverlayElement, IonicConfig, LoadingOptions, ModalOptions, OverlayInterface, PickerOptions, PopoverOptions, ToastOptions } from '../interface';

import { OVERLAY_BACK_BUTTON_PRIORITY } from './hardware-back-button';

let lastId = 0;

export const activeAnimations = new WeakMap<OverlayInterface, Animation[]>();
Expand Down Expand Up @@ -72,7 +74,7 @@ export const connectListeners = (doc: Document) => {
doc.addEventListener('ionBackButton', ev => {
const lastOverlay = getOverlay(doc);
if (lastOverlay && lastOverlay.backdropDismiss) {
(ev as BackButtonEvent).detail.register(100, () => {
(ev as BackButtonEvent).detail.register(OVERLAY_BACK_BUTTON_PRIORITY, () => {
return lastOverlay.dismiss(undefined, BACKDROP);
});
}
Expand Down

0 comments on commit 6b2a929

Please sign in to comment.