diff --git a/packages/angular/demo/src/app/alert/alert-page.component.ts b/packages/angular/demo/src/app/alert/alert-page.component.ts
index d54a12f001..53d4f275e9 100644
--- a/packages/angular/demo/src/app/alert/alert-page.component.ts
+++ b/packages/angular/demo/src/app/alert/alert-page.component.ts
@@ -13,7 +13,7 @@ import { AlertController } from '@ionic/angular';
- Blah
+ Open Basic Alert
@@ -34,20 +34,25 @@ export class AlertPageComponent {
text: 'Cancel',
role: 'Cancel',
handler: () => {
- console.log('cancel');
+ // console.log('cancel');
}
},
{
text: 'Okay',
role: 'Okay',
handler: () => {
- console.log('okay');
+ // console.log('okay');
}
}
]
});
- alert.present();
+ alert.present().then(() => {
+ return alert.dismiss();
+
+ }).then(() => {
+ console.log('dismissed');
+ });
}
}
diff --git a/packages/angular/package-lock.json b/packages/angular/package-lock.json
index f92f199e06..0b02f527f8 100644
--- a/packages/angular/package-lock.json
+++ b/packages/angular/package-lock.json
@@ -86,9 +86,9 @@
"dev": true
},
"@stencil/core": {
- "version": "0.0.8-6",
- "resolved": "https://registry.npmjs.org/@stencil/core/-/core-0.0.8-6.tgz",
- "integrity": "sha512-6lgZvuPuQbcRsqwi01Xu1HQ1XKK8dwJwO5WVcGKXVdpJ5YFvmT2W/Ocw+NwIRoJyblDlJrC1qs58yHU/Z4hgbw==",
+ "version": "0.0.8-7",
+ "resolved": "https://registry.npmjs.org/@stencil/core/-/core-0.0.8-7.tgz",
+ "integrity": "sha512-amU64qvwEhyXoZ4ZXJz8H4tngRT3lcPwlk7jIDZ6dxyS9VL/AePPGtnKAzXQCwQy08/NmKjEfd3W3c2OP4goUQ==",
"dev": true,
"requires": {
"chokidar": "1.7.0",
@@ -97,15 +97,15 @@
"rollup": "0.50.0",
"rollup-plugin-commonjs": "8.2.5",
"rollup-plugin-node-resolve": "3.0.0",
- "typescript": "2.6.1",
+ "typescript": "2.6.2",
"uglify-es": "3.1.6",
"workbox-build": "2.1.1"
},
"dependencies": {
"typescript": {
- "version": "2.6.1",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.6.1.tgz",
- "integrity": "sha1-7znN6ierrAtQAkLWcmq5DgyEZjE=",
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.6.2.tgz",
+ "integrity": "sha1-PFtv1/beCRQmkCfwPAlGdY92c6Q=",
"dev": true
}
}
diff --git a/packages/angular/src/providers/alert-controller.ts b/packages/angular/src/providers/alert-controller.ts
index b74bc7d986..86eb20b256 100644
--- a/packages/angular/src/providers/alert-controller.ts
+++ b/packages/angular/src/providers/alert-controller.ts
@@ -1,5 +1,5 @@
import { Injectable } from '@angular/core';
-import { AlertOptions } from '@ionic/core';
+import { AlertDismissEvent, AlertOptions } from '@ionic/core';
import { ensureElementInBody, hydrateElement } from '../util/util';
@@ -7,7 +7,7 @@ let alertId = 0;
@Injectable()
export class AlertController {
- create(opts?: AlertOptions): any {
+ create(opts?: AlertOptions): AlertProxy {
return getAlertProxy(opts);
}
}
@@ -18,24 +18,55 @@ export function getAlertProxy(opts: AlertOptions){
state: PRESENTING,
opts: opts,
present: function() { return present(this)},
- dismiss: function() { return dismiss(this)}
+ dismiss: function() { return dismiss(this)},
+ onDidDismiss: function(callback: (data: any, role: string) => void) {
+ (this as AlertProxyInternal).onDidDismissHandler = callback;
+ },
+ onWillDismiss: function(callback: (data: any, role: string) => void) {
+ (this as AlertProxyInternal).onWillDismissHandler = callback;
+ },
}
}
-export function present(alertProxy: AlertProxyInternal): Promise {
+export function present(alertProxy: AlertProxyInternal): Promise {
+ alertProxy.state = PRESENTING;
return loadOverlay(alertProxy.opts).then((alertElement: HTMLIonAlertElement) => {
+ alertProxy.element = alertElement;
+
+ const onDidDismissHandler = (event: AlertDismissEvent) => {
+ alertElement.removeEventListener(ION_ALERT_DID_DISMISS_EVENT, onDidDismissHandler);
+ if (alertProxy.onDidDismissHandler) {
+ alertProxy.onDidDismissHandler(event.detail.data, event.detail.role);
+ }
+ };
+
+ const onWillDismissHandler = (event: AlertDismissEvent) => {
+ alertElement.removeEventListener(ION_ALERT_WILL_DISMISS_EVENT, onWillDismissHandler);
+ if (alertProxy.onWillDismissHandler) {
+ alertProxy.onWillDismissHandler(event.detail.data, event.detail.role);
+ }
+ };
+
+ alertElement.addEventListener(ION_ALERT_DID_DISMISS_EVENT, onDidDismissHandler);
+ alertElement.addEventListener(ION_ALERT_WILL_DISMISS_EVENT, onWillDismissHandler);
+
if (alertProxy.state === PRESENTING) {
return alertElement.present();
}
});
}
-export function dismiss(alertProxy: AlertProxyInternal): Promise {
- return loadOverlay(alertProxy.opts).then((alertElement: HTMLIonAlertElement) => {
+export function dismiss(alertProxy: AlertProxyInternal): Promise {
+ alertProxy.state = DISMISSING;
+ if (alertProxy.element) {
if (alertProxy.state === DISMISSING) {
- return alertElement.dismiss();
+ return alertProxy.element.dismiss();
}
- });
+ }
+ // either we're not in the dismissing state
+ // or we're calling this before the element is created
+ // so just return a resolved promise
+ return Promise.resolve();
}
export function loadOverlay(opts: AlertOptions) {
@@ -48,13 +79,21 @@ export function loadOverlay(opts: AlertOptions) {
export interface AlertProxy {
present(): Promise
dismiss(): Promise
+ onDidDismiss(callback: (data: any, role: string) => void): void;
+ onWillDismiss(callback: (data: any, role: string) => void): void;
}
export interface AlertProxyInternal extends AlertProxy {
id: number;
opts: AlertOptions;
state: number;
+ element: HTMLIonAlertElement;
+ onDidDismissHandler?: (data: any, role: string) => void;
+ onWillDismissHandler?: (data: any, role: string) => void;
}
export const PRESENTING = 1;
-export const DISMISSING = 2;
\ No newline at end of file
+export const DISMISSING = 2;
+
+const ION_ALERT_DID_DISMISS_EVENT = 'ionAlertDidDismiss';
+const ION_ALERT_WILL_DISMISS_EVENT = 'ionAlertWillDismiss';
\ No newline at end of file