From 80b38f7dbb335dc3f0d1825b851558aba1b280f6 Mon Sep 17 00:00:00 2001 From: Sven Reglitzki Date: Mon, 29 May 2017 11:11:30 +0200 Subject: [PATCH] fix(snack-bar): Clear duration timeout on dismiss When a duration is passed to MdSnackBar.prototype.openFromComponent(), a timeout is created. This timeout is now cleared when dismissing the snackbar. Fixes #4859 --- src/lib/snack-bar/snack-bar-ref.ts | 9 +++++++++ src/lib/snack-bar/snack-bar.ts | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/lib/snack-bar/snack-bar-ref.ts b/src/lib/snack-bar/snack-bar-ref.ts index c4e45c59a67f..9743fe9e8366 100644 --- a/src/lib/snack-bar/snack-bar-ref.ts +++ b/src/lib/snack-bar/snack-bar-ref.ts @@ -31,6 +31,9 @@ export class MdSnackBarRef { /** Subject for notifying the user that the snack bar action was called. */ private _onAction: Subject = new Subject(); + /** Timeout handle for the dismiss timeout cleanup. */ + private _dismissTimeoutHandle: number; + constructor(instance: T, containerInstance: MdSnackBarContainer, private _overlayRef: OverlayRef) { @@ -47,6 +50,12 @@ export class MdSnackBarRef { if (!this._afterClosed.closed) { this.containerInstance.exit(); } + clearTimeout(this._dismissTimeoutHandle); + } + + /** Dismisses the snack bar after some duration */ + dismissAfter(duration: number): void { + this._dismissTimeoutHandle = setTimeout(() => this.dismiss(), duration); } /** Marks the snackbar action clicked. */ diff --git a/src/lib/snack-bar/snack-bar.ts b/src/lib/snack-bar/snack-bar.ts index 473bd0ef8925..44f270eebf91 100644 --- a/src/lib/snack-bar/snack-bar.ts +++ b/src/lib/snack-bar/snack-bar.ts @@ -81,7 +81,7 @@ export class MdSnackBar { // If a dismiss timeout is provided, set up dismiss based on after the snackbar is opened. if (config.duration > 0) { snackBarRef.afterOpened().subscribe(() => { - setTimeout(() => snackBarRef.dismiss(), config.duration); + snackBarRef.dismissAfter(config.duration); }); }