diff --git a/src/cdk/overlay/overlay-config.ts b/src/cdk/overlay/overlay-config.ts index ed12730a7fff..f9b8bc30f799 100644 --- a/src/cdk/overlay/overlay-config.ts +++ b/src/cdk/overlay/overlay-config.ts @@ -52,7 +52,9 @@ export class OverlayConfig { constructor(config?: OverlayConfig) { if (config) { - Object.keys(config).forEach(key => this[key] = config[key]); + Object.keys(config) + .filter(key => typeof config[key] !== 'undefined') + .forEach(key => this[key] = config[key]); } } } diff --git a/src/cdk/overlay/overlay.spec.ts b/src/cdk/overlay/overlay.spec.ts index e896ad8dce2f..38d9e36ae0d9 100644 --- a/src/cdk/overlay/overlay.spec.ts +++ b/src/cdk/overlay/overlay.spec.ts @@ -239,6 +239,16 @@ describe('Overlay', () => { expect(callbackOrder).toEqual(['attach', 'detach']); }); + it('should default to the ltr direction', () => { + const overlayRef = overlay.create({hasBackdrop: true}); + expect(overlayRef.getConfig().direction).toBe('ltr'); + }); + + it('should skip undefined values when applying the defaults', () => { + const overlayRef = overlay.create({direction: undefined}); + expect(overlayRef.getConfig().direction).toBe('ltr'); + }); + describe('positioning', () => { let config: OverlayConfig; diff --git a/src/cdk/overlay/overlay.ts b/src/cdk/overlay/overlay.ts index c6e75901f13e..20ef18f06974 100644 --- a/src/cdk/overlay/overlay.ts +++ b/src/cdk/overlay/overlay.ts @@ -27,10 +27,6 @@ import {DOCUMENT} from '@angular/common'; /** Next overlay unique ID. */ let nextUniqueId = 0; -/** The default config for newly created overlays. */ -let defaultConfig = new OverlayConfig(); - - /** * Service to create Overlays. Overlays are dynamically added pieces of floating UI, meant to be * used as a low-level building building block for other components. Dialogs, tooltips, menus, @@ -58,10 +54,11 @@ export class Overlay { * @param config Configuration applied to the overlay. * @returns Reference to the created overlay. */ - create(config: OverlayConfig = defaultConfig): OverlayRef { + create(config?: OverlayConfig): OverlayRef { const pane = this._createPaneElement(); const portalOutlet = this._createPortalOutlet(pane); - return new OverlayRef(portalOutlet, pane, config, this._ngZone, this._keyboardDispatcher); + return new OverlayRef(portalOutlet, pane, new OverlayConfig(config), this._ngZone, + this._keyboardDispatcher); } /**