Skip to content

Commit 817dcfd

Browse files
crisbetokara
authored andcommitted
fix(connected-overlay): direction not being updated (#3293)
Fixes #3241.
1 parent c21ff40 commit 817dcfd

File tree

2 files changed

+25
-3
lines changed

2 files changed

+25
-3
lines changed

src/lib/core/overlay/overlay-directives.spec.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,13 @@ import {ConnectedOverlayDirective, OverlayModule} from './overlay-directives';
55
import {OverlayContainer} from './overlay-container';
66
import {ConnectedPositionStrategy} from './position/connected-position-strategy';
77
import {ConnectedOverlayPositionChange} from './position/connected-position';
8+
import {Dir} from '../rtl/dir';
89

910

1011
describe('Overlay directives', () => {
1112
let overlayContainerElement: HTMLElement;
1213
let fixture: ComponentFixture<ConnectedOverlayDirectiveTest>;
14+
let dir: {value: string};
1315

1416
beforeEach(() => {
1517
TestBed.configureTestingModule({
@@ -19,6 +21,9 @@ describe('Overlay directives', () => {
1921
{provide: OverlayContainer, useFactory: () => {
2022
overlayContainerElement = document.createElement('div');
2123
return {getContainerElement: () => overlayContainerElement};
24+
}},
25+
{provide: Dir, useFactory: () => {
26+
return dir = { value: 'ltr' };
2227
}}
2328
],
2429
});
@@ -76,6 +81,23 @@ describe('Overlay directives', () => {
7681
expect(positions.length).toBeGreaterThan(0);
7782
});
7883

84+
it('should set and update the `dir` attribute', () => {
85+
dir.value = 'rtl';
86+
fixture.componentInstance.isOpen = true;
87+
fixture.detectChanges();
88+
89+
expect(getPaneElement().getAttribute('dir')).toBe('rtl');
90+
91+
fixture.componentInstance.isOpen = false;
92+
fixture.detectChanges();
93+
94+
dir.value = 'ltr';
95+
fixture.componentInstance.isOpen = true;
96+
fixture.detectChanges();
97+
98+
expect(getPaneElement().getAttribute('dir')).toBe('ltr');
99+
});
100+
79101
describe('inputs', () => {
80102

81103
it('should set the width', () => {

src/lib/core/overlay/overlay-directives.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -210,8 +210,6 @@ export class ConnectedOverlayDirective implements OnDestroy {
210210
this._position = this._createPositionStrategy() as ConnectedPositionStrategy;
211211
overlayConfig.positionStrategy = this._position;
212212

213-
overlayConfig.direction = this.dir;
214-
215213
return overlayConfig;
216214
}
217215

@@ -223,7 +221,6 @@ export class ConnectedOverlayDirective implements OnDestroy {
223221

224222
const strategy = this._overlay.position()
225223
.connectedTo(this.origin.elementRef, originPoint, overlayPoint)
226-
.withDirection(this.dir)
227224
.withOffsetX(this.offsetX)
228225
.withOffsetY(this.offsetY);
229226

@@ -250,6 +247,9 @@ export class ConnectedOverlayDirective implements OnDestroy {
250247
this._createOverlay();
251248
}
252249

250+
this._position.withDirection(this.dir);
251+
this._overlayRef.getState().direction = this.dir;
252+
253253
if (!this._overlayRef.hasAttached()) {
254254
this._overlayRef.attach(this._templatePortal);
255255
this.attach.emit();

0 commit comments

Comments
 (0)