fix(overlays): esc button works closed top overlays

fixes #14662
This commit is contained in:
Manu Mtz.-Almeida
2018-08-21 17:58:49 +02:00
parent d83e7f8840
commit c567a82bfc
9 changed files with 80 additions and 179 deletions

View File

@ -1,33 +1,15 @@
import { Component, Listen, Method, Prop } from '@stencil/core';
import { Component, Method, Prop } from '@stencil/core';
import { ModalOptions, OverlayController } from '../../interface';
import { createOverlay, dismissOverlay, getTopOverlay, removeLastOverlay } from '../../utils/overlays';
import { createOverlay, dismissOverlay, getOverlay } from '../../utils/overlays';
@Component({
tag: 'ion-modal-controller'
})
export class ModalController implements OverlayController {
private modals = new Map<number, HTMLIonModalElement>();
@Prop({ context: 'document' }) doc!: Document;
@Listen('body:ionModalWillPresent')
protected modalWillPresent(ev: any) {
this.modals.set(ev.target.overlayId, ev.target);
}
@Listen('body:ionModalWillDismiss')
@Listen('body:ionModalDidUnload')
protected modalWillDismiss(ev: any) {
this.modals.delete(ev.target.overlayId);
}
@Listen('body:keyup.escape')
protected escapeKeyUp() {
removeLastOverlay(this.modals);
}
/**
* Create a modal overlay with modal options.
*/
@ -41,7 +23,7 @@ export class ModalController implements OverlayController {
*/
@Method()
dismiss(data?: any, role?: string, modalId = -1) {
return dismissOverlay(data, role, this.modals, modalId);
return dismissOverlay(this.doc, data, role, 'ion-modal', modalId);
}
/**
@ -49,6 +31,6 @@ export class ModalController implements OverlayController {
*/
@Method()
getTop(): HTMLIonModalElement {
return getTopOverlay(this.modals);
return getOverlay(this.doc, 'ion-modal') as HTMLIonModalElement;
}
}