Skip to content

Commit b82b001

Browse files
committed
fix(cdk-experimental/menu): keep context menus open when mouse is released
1 parent 2575b00 commit b82b001

File tree

1 file changed

+17
-14
lines changed

1 file changed

+17
-14
lines changed

src/cdk-experimental/menu/context-menu.ts

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -8,28 +8,28 @@
88

99
import {
1010
Directive,
11-
Input,
12-
ViewContainerRef,
13-
Output,
1411
EventEmitter,
15-
Optional,
16-
OnDestroy,
1712
Inject,
1813
Injectable,
1914
InjectionToken,
15+
Input,
16+
OnDestroy,
17+
Optional,
18+
Output,
19+
ViewContainerRef,
2020
} from '@angular/core';
2121
import {Directionality} from '@angular/cdk/bidi';
2222
import {
23-
OverlayRef,
23+
ConnectedPosition,
24+
FlexibleConnectedPositionStrategy,
2425
Overlay,
2526
OverlayConfig,
26-
FlexibleConnectedPositionStrategy,
27-
ConnectedPosition,
27+
OverlayRef,
2828
} from '@angular/cdk/overlay';
29-
import {TemplatePortal, Portal} from '@angular/cdk/portal';
30-
import {coerceBooleanProperty, BooleanInput} from '@angular/cdk/coercion';
31-
import {Subject, merge} from 'rxjs';
32-
import {takeUntil} from 'rxjs/operators';
29+
import {Portal, TemplatePortal} from '@angular/cdk/portal';
30+
import {BooleanInput, coerceBooleanProperty} from '@angular/cdk/coercion';
31+
import {merge, partition, Subject} from 'rxjs';
32+
import {skip, takeUntil} from 'rxjs/operators';
3333
import {CdkMenuPanel} from './menu-panel';
3434
import {MenuStack} from './menu-stack';
3535
import {throwExistingMenuStackError} from './menu-errors';
@@ -287,8 +287,11 @@ export class CdkContextMenuTrigger implements OnDestroy {
287287
*/
288288
private _subscribeToOutsideClicks() {
289289
if (this._overlayRef) {
290-
this._overlayRef
291-
.outsidePointerEvents()
290+
const allClicks = this._overlayRef.outsidePointerEvents();
291+
const [auxClicks, nonAuxClicks] = partition(allClicks, ({type}) => type === 'auxclick');
292+
// Skip the first auxclick event because it fires on mouseup after the
293+
// contextmenu event that opened the menu.
294+
merge(nonAuxClicks, auxClicks.pipe(skip(1)))
292295
.pipe(takeUntil(this._stopOutsideClicksListener))
293296
.subscribe(event => {
294297
if (!isClickInsideMenuOverlay(event.target as Element)) {

0 commit comments

Comments
 (0)