Skip to content

Commit f0727d3

Browse files
committed
fix(dialog): don't provide directionality if user injector has one already
Switches the dialog injector to provide the `Directionality` only when the user-provided injector doesn't have one already. Relates to angular#9996.
1 parent f38bcd9 commit f0727d3

File tree

2 files changed

+23
-15
lines changed

2 files changed

+23
-15
lines changed

src/cdk-experimental/dialog/dialog.ts

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -262,13 +262,17 @@ export class Dialog {
262262
const userInjector = config && config.viewContainerRef && config.viewContainerRef.injector;
263263
const injectionTokens = new WeakMap();
264264

265-
injectionTokens.set(this.injector.get(DIALOG_REF), dialogRef);
266-
injectionTokens.set(this.injector.get(DIALOG_CONTAINER), dialogContainer);
267-
injectionTokens.set(DIALOG_DATA, config.data);
268-
injectionTokens.set(Directionality, {
269-
value: config.direction,
270-
change: observableOf()
271-
});
265+
injectionTokens
266+
.set(this.injector.get(DIALOG_REF), dialogRef)
267+
.set(this.injector.get(DIALOG_CONTAINER), dialogContainer)
268+
.set(DIALOG_DATA, config.data);
269+
270+
if (!userInjector || !userInjector.get(Directionality, null)) {
271+
injectionTokens.set(Directionality, {
272+
value: config.direction,
273+
change: observableOf()
274+
});
275+
}
272276

273277
return new PortalInjector(userInjector || this.injector, injectionTokens);
274278
}

src/lib/dialog/dialog.ts

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -269,17 +269,21 @@ export class MatDialog {
269269
const userInjector = config && config.viewContainerRef && config.viewContainerRef.injector;
270270
const injectionTokens = new WeakMap();
271271

272-
injectionTokens.set(MatDialogRef, dialogRef);
273272
// The MatDialogContainer is injected in the portal as the MatDialogContainer and the dialog's
274273
// content are created out of the same ViewContainerRef and as such, are siblings for injector
275-
// purposes. To allow the hierarchy that is expected, the MatDialogContainer is explicitly
274+
// purposes. To allow the hierarchy that is expected, the MatDialogContainer is explicitly
276275
// added to the injection tokens.
277-
injectionTokens.set(MatDialogContainer, dialogContainer);
278-
injectionTokens.set(MAT_DIALOG_DATA, config.data);
279-
injectionTokens.set(Directionality, {
280-
value: config.direction,
281-
change: observableOf()
282-
});
276+
injectionTokens
277+
.set(MatDialogContainer, dialogContainer)
278+
.set(MAT_DIALOG_DATA, config.data)
279+
.set(MatDialogRef, dialogRef);
280+
281+
if (!userInjector || !userInjector.get(Directionality, null)) {
282+
injectionTokens.set(Directionality, {
283+
value: config.direction,
284+
change: observableOf()
285+
});
286+
}
283287

284288
return new PortalInjector(userInjector || this._injector, injectionTokens);
285289
}

0 commit comments

Comments
 (0)