Files
ionic-framework/core/src/components/popover-controller/popover-controller.tsx
Manu Mtz.-Almeida 2ff585f305 test(nav): fix test
2018-08-07 23:23:17 +02:00

55 lines
1.4 KiB
TypeScript

import { Component, Listen, Method, Prop } from '@stencil/core';
import { OverlayController, PopoverOptions } from '../../interface';
import { createOverlay, dismissOverlay, getTopOverlay, removeLastOverlay } from '../../utils/overlays';
@Component({
tag: 'ion-popover-controller'
})
export class PopoverController implements OverlayController {
private popovers = new Map<number, HTMLIonPopoverElement>();
@Prop({ context: 'document' }) doc!: Document;
@Listen('body:ionPopoverWillPresent')
protected popoverWillPresent(ev: any) {
this.popovers.set(ev.target.overlayId, ev.target);
}
@Listen('body:ionPopoverWillDismiss')
@Listen('body:ionPopoverDidUnload')
protected popoverWillDismiss(ev: any) {
this.popovers.delete(ev.target.overlayId);
}
@Listen('body:keyup.escape')
protected escapeKeyUp() {
removeLastOverlay(this.popovers);
}
/**
* Create a popover overlay with popover options.
*/
@Method()
create(opts?: PopoverOptions): Promise<HTMLIonPopoverElement> {
return createOverlay(this.doc.createElement('ion-popover'), opts);
}
/**
* Dismiss the open popover overlay.
*/
@Method()
dismiss(data?: any, role?: string, popoverId = -1) {
return dismissOverlay(data, role, this.popovers, popoverId);
}
/**
* Get the most recently opened popover overlay.
*/
@Method()
getTop(): HTMLIonPopoverElement {
return getTopOverlay(this.popovers);
}
}