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 { GestureController, BlockerDelegate, BLOCK_ALL } from '../../gestures/gesture-controller';
import { isDefined, isUndefined, assert } from '../../util/util';
import { KEY_ESCAPE } from '../../platform/key';
import { LoadingOptions } from './loading-options';
import { NavParams } from '../../navigation/nav-params';
import { Platform } from '../../platform/platform';
@ -14,7 +15,7 @@ import { ViewController } from '../../navigation/view-controller';
@Component({
selector: 'ion-loading',
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 *ngIf="showSpinner" class="loading-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> {
if (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. |
* | cssClass |`string` | Additional classes for custom styles, separated by spaces. |
* | 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. |
* | 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;
cssClass?: string;
showBackdrop?: boolean;
enableBackdropDismiss?: boolean;
dismissOnPageChange?: boolean;
duration?: number;
}

View File

@ -16,6 +16,7 @@ export class Loading extends ViewController {
constructor(app: App, opts: LoadingOptions = {}, config: Config) {
opts.showBackdrop = isPresent(opts.showBackdrop) ? !!opts.showBackdrop : true;
opts.enableBackdropDismiss = isPresent(opts.enableBackdropDismiss) ? !!opts.enableBackdropDismiss : false;
opts.dismissOnPageChange = isPresent(opts.dismissOnPageChange) ? !!opts.dismissOnPageChange : false;
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)="presentLoadingDismissNav()">Dismiss Page Change</button>
<button ion-button block (click)="presentLoadingOpenDismiss()">Open->Dismiss (x2)</button>
<button ion-button block (click)="presentLoadingBackdropDismiss()">Backdrop Dismiss</button>
</ion-content>

View File

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