From e3d7aeccc623b1dcb70620b7d04fe9a221f0f49f Mon Sep 17 00:00:00 2001 From: Kristiyan Kostadinov Date: Mon, 26 Feb 2018 16:05:26 +0100 Subject: [PATCH] fix(dialog): don't provide directionality if user injector has one already (#10004) Switches the dialog injector to provide the `Directionality` only when the user-provided injector doesn't have one already. Relates to #9996. --- src/cdk-experimental/dialog/dialog.ts | 18 +++++++++++------- src/lib/dialog/dialog.ts | 20 ++++++++++++-------- 2 files changed, 23 insertions(+), 15 deletions(-) diff --git a/src/cdk-experimental/dialog/dialog.ts b/src/cdk-experimental/dialog/dialog.ts index a81d2aeeab7..12f7e81ac19 100644 --- a/src/cdk-experimental/dialog/dialog.ts +++ b/src/cdk-experimental/dialog/dialog.ts @@ -264,13 +264,17 @@ export class Dialog { const userInjector = config && config.viewContainerRef && config.viewContainerRef.injector; const injectionTokens = new WeakMap(); - injectionTokens.set(this.injector.get(DIALOG_REF), dialogRef); - injectionTokens.set(this.injector.get(DIALOG_CONTAINER), dialogContainer); - injectionTokens.set(DIALOG_DATA, config.data); - injectionTokens.set(Directionality, { - value: config.direction, - change: observableOf() - }); + injectionTokens + .set(this.injector.get(DIALOG_REF), dialogRef) + .set(this.injector.get(DIALOG_CONTAINER), dialogContainer) + .set(DIALOG_DATA, config.data); + + if (!userInjector || !userInjector.get(Directionality, null)) { + injectionTokens.set(Directionality, { + value: config.direction, + change: observableOf() + }); + } return new PortalInjector(userInjector || this.injector, injectionTokens); } diff --git a/src/lib/dialog/dialog.ts b/src/lib/dialog/dialog.ts index cd34ac7eb74..6c534f60e36 100644 --- a/src/lib/dialog/dialog.ts +++ b/src/lib/dialog/dialog.ts @@ -269,17 +269,21 @@ export class MatDialog { const userInjector = config && config.viewContainerRef && config.viewContainerRef.injector; const injectionTokens = new WeakMap(); - injectionTokens.set(MatDialogRef, dialogRef); // The MatDialogContainer is injected in the portal as the MatDialogContainer and the dialog's // content are created out of the same ViewContainerRef and as such, are siblings for injector - // purposes. To allow the hierarchy that is expected, the MatDialogContainer is explicitly + // purposes. To allow the hierarchy that is expected, the MatDialogContainer is explicitly // added to the injection tokens. - injectionTokens.set(MatDialogContainer, dialogContainer); - injectionTokens.set(MAT_DIALOG_DATA, config.data); - injectionTokens.set(Directionality, { - value: config.direction, - change: observableOf() - }); + injectionTokens + .set(MatDialogContainer, dialogContainer) + .set(MAT_DIALOG_DATA, config.data) + .set(MatDialogRef, dialogRef); + + if (!userInjector || !userInjector.get(Directionality, null)) { + injectionTokens.set(Directionality, { + value: config.direction, + change: observableOf() + }); + } return new PortalInjector(userInjector || this._injector, injectionTokens); }