Skip to content

Commit 0f1d130

Browse files
committed
refactor(overlay): use key event dispatcher for CdkConnectedOverlay
Switched the `CdkConnectedOverlay` directive to use the key event dispatcher rather than listening to events on the document.
1 parent 27dfd15 commit 0f1d130

File tree

2 files changed

+7
-2
lines changed

2 files changed

+7
-2
lines changed

src/cdk/overlay/overlay-directives.spec.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ describe('Overlay directives', () => {
110110
fixture.componentInstance.isOpen = true;
111111
fixture.detectChanges();
112112

113-
dispatchKeyboardEvent(document, 'keydown', ESCAPE);
113+
dispatchKeyboardEvent(document.body, 'keydown', ESCAPE);
114114
fixture.detectChanges();
115115

116116
expect(overlayContainerElement.textContent!.trim()).toBe('',
@@ -342,4 +342,3 @@ class ConnectedOverlayPropertyInitOrder {
342342
@ViewChild(CdkConnectedOverlay) connectedOverlayDirective: CdkConnectedOverlay;
343343
@ViewChild('trigger') trigger: CdkOverlayOrigin;
344344
}
345-

src/cdk/overlay/overlay-directives.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -330,6 +330,12 @@ export class CdkConnectedOverlay implements OnDestroy, OnChanges {
330330
private _attachOverlay() {
331331
if (!this._overlayRef) {
332332
this._createOverlay();
333+
334+
this._overlayRef!.keydownEvents().subscribe((event: KeyboardEvent) => {
335+
if (event.keyCode === ESCAPE) {
336+
this._detachOverlay();
337+
}
338+
});
333339
}
334340

335341
this._position.withDirection(this.dir);

0 commit comments

Comments
 (0)