Skip to content

Commit

Permalink
fix(dialog): don't provide directionality if user injector has one al…
Browse files Browse the repository at this point in the history
…ready (angular#10004)

Switches the dialog injector to provide the `Directionality` only when the user-provided injector doesn't have one already.

Relates to angular#9996.
  • Loading branch information
crisbeto authored and jelbourn committed Feb 26, 2018
1 parent 8a402d0 commit e3d7aec
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 15 deletions.
18 changes: 11 additions & 7 deletions src/cdk-experimental/dialog/dialog.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
Expand Down
20 changes: 12 additions & 8 deletions src/lib/dialog/dialog.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
Expand Down

0 comments on commit e3d7aec

Please sign in to comment.