Skip to content

Commit 4f59ad0

Browse files
karammalerba
authored andcommitted
fix(autocomplete): support rtl (#2648)
1 parent 300b6d5 commit 4f59ad0

File tree

2 files changed

+25
-2
lines changed

2 files changed

+25
-2
lines changed

src/lib/autocomplete/autocomplete-trigger.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
1-
import {Directive, ElementRef, Input, ViewContainerRef, OnDestroy} from '@angular/core';
1+
import {
2+
Directive, ElementRef, Input, ViewContainerRef, Optional, OnDestroy
3+
} from '@angular/core';
24
import {Overlay, OverlayRef, OverlayState, TemplatePortal} from '../core';
35
import {MdAutocomplete} from './autocomplete';
46
import {PositionStrategy} from '../core/overlay/position/position-strategy';
57
import {Observable} from 'rxjs/Observable';
68
import {Subscription} from 'rxjs/Subscription';
79
import 'rxjs/add/observable/merge';
10+
import {Dir} from '../core/rtl/dir';
811

912
/** The panel needs a slight y-offset to ensure the input underline displays. */
1013
export const MD_AUTOCOMPLETE_PANEL_OFFSET = 6;
@@ -27,7 +30,7 @@ export class MdAutocompleteTrigger implements OnDestroy {
2730
@Input('mdAutocomplete') autocomplete: MdAutocomplete;
2831

2932
constructor(private _element: ElementRef, private _overlay: Overlay,
30-
private _viewContainerRef: ViewContainerRef) {}
33+
private _viewContainerRef: ViewContainerRef, @Optional() private _dir: Dir) {}
3134

3235
ngOnDestroy() { this._destroyPanel(); }
3336

@@ -95,6 +98,7 @@ export class MdAutocompleteTrigger implements OnDestroy {
9598
overlayState.width = this._getHostWidth();
9699
overlayState.hasBackdrop = true;
97100
overlayState.backdropClass = 'md-overlay-transparent-backdrop';
101+
overlayState.direction = this._dir ? this._dir.value : 'ltr';
98102
return overlayState;
99103
}
100104

src/lib/autocomplete/autocomplete.spec.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,14 @@ import {By} from '@angular/platform-browser';
44
import {MdAutocompleteModule, MdAutocompleteTrigger} from './index';
55
import {OverlayContainer} from '../core/overlay/overlay-container';
66
import {MdInputModule} from '../input/index';
7+
import {Dir, LayoutDirection} from '../core/rtl/dir';
78

89
describe('MdAutocomplete', () => {
910
let overlayContainerElement: HTMLElement;
11+
let dir: LayoutDirection;
1012

1113
beforeEach(async(() => {
14+
dir = 'ltr';
1215
TestBed.configureTestingModule({
1316
imports: [MdAutocompleteModule.forRoot(), MdInputModule.forRoot()],
1417
declarations: [SimpleAutocomplete],
@@ -23,6 +26,9 @@ describe('MdAutocomplete', () => {
2326

2427
return {getContainerElement: () => overlayContainerElement};
2528
}},
29+
{provide: Dir, useFactory: () => {
30+
return {value: dir};
31+
}},
2632
]
2733
});
2834

@@ -135,6 +141,19 @@ describe('MdAutocomplete', () => {
135141

136142
});
137143

144+
it('should have the correct text direction in RTL', () => {
145+
dir = 'rtl';
146+
147+
const fixture = TestBed.createComponent(SimpleAutocomplete);
148+
fixture.detectChanges();
149+
150+
fixture.componentInstance.trigger.openPanel();
151+
fixture.detectChanges();
152+
153+
const overlayPane = overlayContainerElement.querySelector('.cdk-overlay-pane');
154+
expect(overlayPane.getAttribute('dir')).toEqual('rtl');
155+
});
156+
138157
});
139158

140159
@Component({

0 commit comments

Comments
 (0)