mirror of
https://github.com/ionic-team/ionic-framework.git
synced 2026-03-13 10:22:08 +08:00
fix(menu): hardware back button now dismisses side menu if open (#20558)
fixes #20559
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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';
|
||||
@@ -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,
|
||||
|
||||
@@ -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[]>();
|
||||
@@ -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);
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user