Skip to content

Commit 84b98e4

Browse files
committed
fix(dialog): directionality not injected into child components
Since the `direction` option from the overlay only sets the `dir` attribute, it means that any components that depend on the `Directionality` service (e.g. `md-slider`) won't be able to pick it up. These changes add the proper direction to the custom dialog injector.
1 parent dbae360 commit 84b98e4

File tree

2 files changed

+17
-1
lines changed

2 files changed

+17
-1
lines changed

src/lib/dialog/dialog.spec.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import {By} from '@angular/platform-browser';
2222
import {NoopAnimationsModule} from '@angular/platform-browser/animations';
2323
import {Location} from '@angular/common';
2424
import {SpyLocation} from '@angular/common/testing';
25+
import {Directionality} from '@angular/cdk/bidi';
2526
import {MdDialogContainer} from './dialog-container';
2627
import {OverlayContainer} from '@angular/cdk/overlay';
2728
import {ESCAPE} from '@angular/cdk/keycodes';
@@ -433,6 +434,14 @@ describe('MdDialog', () => {
433434
expect(overlayPane.getAttribute('dir')).toBe('rtl');
434435
});
435436

437+
it('should inject the correct layout direction in the component instance', () => {
438+
const dialogRef = dialog.open(PizzaMsg, { direction: 'rtl' });
439+
440+
viewContainerFixture.detectChanges();
441+
442+
expect(dialogRef.componentInstance.directionality.value).toBe('rtl');
443+
});
444+
436445
it('should close all of the dialogs', async(() => {
437446
dialog.open(PizzaMsg);
438447
dialog.open(PizzaMsg);
@@ -970,7 +979,8 @@ class ComponentWithTemplateRef {
970979
@Component({template: '<p>Pizza</p> <input> <button>Close</button>'})
971980
class PizzaMsg {
972981
constructor(public dialogRef: MdDialogRef<PizzaMsg>,
973-
public dialogInjector: Injector) {}
982+
public dialogInjector: Injector,
983+
public directionality: Directionality) {}
974984
}
975985

976986
@Component({

src/lib/dialog/dialog.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,14 @@ import {
2828
TemplateRef,
2929
} from '@angular/core';
3030
import {extendObject} from '@angular/material/core';
31+
import {Directionality} from '@angular/cdk/bidi';
3132
import {Observable} from 'rxjs/Observable';
3233
import {defer} from 'rxjs/observable/defer';
3334
import {Subject} from 'rxjs/Subject';
3435
import {MdDialogConfig} from './dialog-config';
3536
import {MdDialogContainer} from './dialog-container';
3637
import {MdDialogRef} from './dialog-ref';
38+
import {of as observableOf} from 'rxjs/observable/of';
3739

3840

3941
export const MD_DIALOG_DATA = new InjectionToken<any>('MdDialogData');
@@ -277,6 +279,10 @@ export class MdDialog {
277279
injectionTokens.set(MdDialogRef, dialogRef);
278280
injectionTokens.set(MdDialogContainer, dialogContainer);
279281
injectionTokens.set(MD_DIALOG_DATA, config.data);
282+
injectionTokens.set(Directionality, {
283+
value: config.direction,
284+
change: observableOf()
285+
});
280286

281287
return new PortalInjector(userInjector || this._injector, injectionTokens);
282288
}

0 commit comments

Comments
 (0)