feat(loading): add enableBackdropDismiss to Loading (#11937)

closes #7975
This commit is contained in:
imgx64
2017-06-08 06:40:28 -08:00
committed by Brandy Carney
parent dc6c5863fb
commit d0ae810bae
6 changed files with 33 additions and 2 deletions

View File

@ -1,8 +1,9 @@
import { Component, ElementRef, Renderer, ViewEncapsulation } from '@angular/core'; import { Component, ElementRef, HostListener, Renderer, ViewEncapsulation } from '@angular/core';
import { Config } from '../../config/config'; import { Config } from '../../config/config';
import { GestureController, BlockerDelegate, BLOCK_ALL } from '../../gestures/gesture-controller'; import { GestureController, BlockerDelegate, BLOCK_ALL } from '../../gestures/gesture-controller';
import { isDefined, isUndefined, assert } from '../../util/util'; import { isDefined, isUndefined, assert } from '../../util/util';
import { KEY_ESCAPE } from '../../platform/key';
import { LoadingOptions } from './loading-options'; import { LoadingOptions } from './loading-options';
import { NavParams } from '../../navigation/nav-params'; import { NavParams } from '../../navigation/nav-params';
import { Platform } from '../../platform/platform'; import { Platform } from '../../platform/platform';
@ -14,7 +15,7 @@ import { ViewController } from '../../navigation/view-controller';
@Component({ @Component({
selector: 'ion-loading', selector: 'ion-loading',
template: template:
'<ion-backdrop [hidden]="!d.showBackdrop"></ion-backdrop>' + '<ion-backdrop [hidden]="!d.showBackdrop" (click)="bdClick()" [class.backdrop-no-tappable]="!d.enableBackdropDismiss"></ion-backdrop>' +
'<div class="loading-wrapper">' + '<div class="loading-wrapper">' +
'<div *ngIf="showSpinner" class="loading-spinner">' + '<div *ngIf="showSpinner" class="loading-spinner">' +
'<ion-spinner [name]="d.spinner"></ion-spinner>' + '<ion-spinner [name]="d.spinner"></ion-spinner>' +
@ -87,6 +88,19 @@ export class LoadingCmp {
} }
@HostListener('body:keyup', ['$event'])
keyUp(ev: KeyboardEvent) {
if (this._viewCtrl.isLast() && ev.keyCode === KEY_ESCAPE) {
this.bdClick();
}
}
bdClick() {
if (this.d.enableBackdropDismiss) {
this.dismiss('backdrop');
}
}
dismiss(role: string): Promise<any> { dismiss(role: string): Promise<any> {
if (this.durationTimeout) { if (this.durationTimeout) {
clearTimeout(this.durationTimeout); clearTimeout(this.durationTimeout);

View File

@ -107,6 +107,7 @@ import { LoadingOptions } from './loading-options';
* | content |`string` | The html content for the loading indicator. | * | content |`string` | The html content for the loading indicator. |
* | cssClass |`string` | Additional classes for custom styles, separated by spaces. | * | cssClass |`string` | Additional classes for custom styles, separated by spaces. |
* | showBackdrop |`boolean` | Whether to show the backdrop. Default true. | * | showBackdrop |`boolean` | Whether to show the backdrop. Default true. |
* | enableBackdropDismiss | `boolean` | Whether the loading indicator should be dismissed by tapping the backdrop. Default false. |
* | dismissOnPageChange |`boolean` | Whether to dismiss the indicator when navigating to a new page. Default false. | * | dismissOnPageChange |`boolean` | Whether to dismiss the indicator when navigating to a new page. Default false. |
* | duration |`number` | How many milliseconds to wait before hiding the indicator. By default, it will show until `dismiss()` is called. | * | duration |`number` | How many milliseconds to wait before hiding the indicator. By default, it will show until `dismiss()` is called. |
* *

View File

@ -4,6 +4,7 @@ export interface LoadingOptions {
content?: string; content?: string;
cssClass?: string; cssClass?: string;
showBackdrop?: boolean; showBackdrop?: boolean;
enableBackdropDismiss?: boolean;
dismissOnPageChange?: boolean; dismissOnPageChange?: boolean;
duration?: number; duration?: number;
} }

View File

@ -16,6 +16,7 @@ export class Loading extends ViewController {
constructor(app: App, opts: LoadingOptions = {}, config: Config) { constructor(app: App, opts: LoadingOptions = {}, config: Config) {
opts.showBackdrop = isPresent(opts.showBackdrop) ? !!opts.showBackdrop : true; opts.showBackdrop = isPresent(opts.showBackdrop) ? !!opts.showBackdrop : true;
opts.enableBackdropDismiss = isPresent(opts.enableBackdropDismiss) ? !!opts.enableBackdropDismiss : false;
opts.dismissOnPageChange = isPresent(opts.dismissOnPageChange) ? !!opts.dismissOnPageChange : false; opts.dismissOnPageChange = isPresent(opts.dismissOnPageChange) ? !!opts.dismissOnPageChange : false;
super(LoadingCmp, opts, null); super(LoadingCmp, opts, null);

View File

@ -23,6 +23,7 @@
<button ion-button block (click)="presentLoadingMultipleNav()" color="danger">Multiple Nav Loading</button> <button ion-button block (click)="presentLoadingMultipleNav()" color="danger">Multiple Nav Loading</button>
<button ion-button block (click)="presentLoadingDismissNav()">Dismiss Page Change</button> <button ion-button block (click)="presentLoadingDismissNav()">Dismiss Page Change</button>
<button ion-button block (click)="presentLoadingOpenDismiss()">Open->Dismiss (x2)</button> <button ion-button block (click)="presentLoadingOpenDismiss()">Open->Dismiss (x2)</button>
<button ion-button block (click)="presentLoadingBackdropDismiss()">Backdrop Dismiss</button>
</ion-content> </ion-content>

View File

@ -268,4 +268,17 @@ export class PageOne {
loading2.present(); loading2.present();
loading2.dismiss(); loading2.dismiss();
} }
presentLoadingBackdropDismiss() {
const loading = this.loadingCtrl.create({
content: 'Tap on backdrop to dismiss',
enableBackdropDismiss: true
});
loading.onDidDismiss(() => {
console.log('Dismissed loading');
});
loading.present();
}
} }