From 42b1d7c116d1fd65d346c27d72fb472724ca134f Mon Sep 17 00:00:00 2001 From: crisbeto Date: Wed, 9 May 2018 07:55:19 +0200 Subject: [PATCH] fix(snack-bar): snack bar not animating in if no positions are passed in Adds some better handling for the case where no positions are passed into a snack bar. Currently the snack bar attempts to animate in to an invalid animation state. Fixes #11197. --- src/lib/snack-bar/snack-bar.spec.ts | 25 +++++++++++++++++++++++++ src/lib/snack-bar/snack-bar.ts | 2 +- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/src/lib/snack-bar/snack-bar.spec.ts b/src/lib/snack-bar/snack-bar.spec.ts index 9aa242b093b2..4e3d6b26368c 100644 --- a/src/lib/snack-bar/snack-bar.spec.ts +++ b/src/lib/snack-bar/snack-bar.spec.ts @@ -422,6 +422,31 @@ describe('MatSnackBar', () => { .toContain('custom-class', 'Expected class applied through the defaults to be applied.'); })); + it('should position the snack bar correctly if no default position is defined', fakeAsync(() => { + overlayContainer.ngOnDestroy(); + viewContainerFixture.destroy(); + + TestBed + .resetTestingModule() + .overrideProvider(MAT_SNACK_BAR_DEFAULT_OPTIONS, { + deps: [], + useFactory: () => ({politeness: 'polite'}) + }) + .configureTestingModule({imports: [MatSnackBarModule, NoopAnimationsModule]}) + .compileComponents(); + + inject([MatSnackBar, OverlayContainer], (sb: MatSnackBar, oc: OverlayContainer) => { + snackBar = sb; + overlayContainer = oc; + overlayContainerElement = oc.getContainerElement(); + })(); + + const snackBarRef = snackBar.open(simpleMessage); + flush(); + + expect(snackBarRef.containerInstance._animationState).toBe('visible-bottom'); + })); + describe('with custom component', () => { it('should open a custom component', () => { const snackBarRef = snackBar.openFromComponent(BurritosNotification); diff --git a/src/lib/snack-bar/snack-bar.ts b/src/lib/snack-bar/snack-bar.ts index 1e28cf6ec9fa..b48d3202f4c4 100644 --- a/src/lib/snack-bar/snack-bar.ts +++ b/src/lib/snack-bar/snack-bar.ts @@ -142,7 +142,7 @@ export class MatSnackBar { private _attach(content: ComponentType | TemplateRef, userConfig?: MatSnackBarConfig): MatSnackBarRef> { - const config = {...this._defaultConfig, ...userConfig}; + const config = {...new MatSnackBarConfig(), ...this._defaultConfig, ...userConfig}; const overlayRef = this._createOverlay(config); const container = this._attachSnackBarContainer(overlayRef, config); const snackBarRef = new MatSnackBarRef>(container, overlayRef);