@@ -11,7 +11,6 @@ import {
11
11
ChangeDetectorRef ,
12
12
Directive ,
13
13
inject ,
14
- Injectable ,
15
14
Injector ,
16
15
Input ,
17
16
OnDestroy ,
@@ -28,7 +27,7 @@ import {_getEventTarget} from '../platform';
28
27
import { merge , partition } from 'rxjs' ;
29
28
import { skip , takeUntil , skipWhile } from 'rxjs/operators' ;
30
29
import { MENU_STACK , MenuStack } from './menu-stack' ;
31
- import { CdkMenuTriggerBase , MENU_TRIGGER } from './menu-trigger-base' ;
30
+ import { CdkMenuTriggerBase , MENU_TRIGGER , MenuTracker } from './menu-trigger-base' ;
32
31
33
32
/** The preferred menu positions for the context menu. */
34
33
const CONTEXT_MENU_POSITIONS = STANDARD_DROPDOWN_BELOW_POSITIONS . map ( position => {
@@ -39,24 +38,6 @@ const CONTEXT_MENU_POSITIONS = STANDARD_DROPDOWN_BELOW_POSITIONS.map(position =>
39
38
return { ...position , offsetX, offsetY} ;
40
39
} ) ;
41
40
42
- /** Tracks the last open context menu trigger across the entire application. */
43
- @Injectable ( { providedIn : 'root' } )
44
- export class ContextMenuTracker {
45
- /** The last open context menu trigger. */
46
- private static _openContextMenuTrigger ?: CdkContextMenuTrigger ;
47
-
48
- /**
49
- * Close the previous open context menu and set the given one as being open.
50
- * @param trigger The trigger for the currently open Context Menu.
51
- */
52
- update ( trigger : CdkContextMenuTrigger ) {
53
- if ( ContextMenuTracker . _openContextMenuTrigger !== trigger ) {
54
- ContextMenuTracker . _openContextMenuTrigger ?. close ( ) ;
55
- ContextMenuTracker . _openContextMenuTrigger = trigger ;
56
- }
57
- }
58
- }
59
-
60
41
/** The coordinates where the context menu should open. */
61
42
export type ContextMenuCoordinates = { x : number ; y : number } ;
62
43
@@ -85,7 +66,10 @@ export type ContextMenuCoordinates = {x: number; y: number};
85
66
export class CdkContextMenuTrigger extends CdkMenuTriggerBase implements OnDestroy {
86
67
private readonly _injector = inject ( Injector ) ;
87
68
private readonly _directionality = inject ( Directionality , { optional : true } ) ;
88
- private readonly _contextMenuTracker = inject ( ContextMenuTracker ) ;
69
+
70
+ /** The app's menu tracking registry */
71
+ private readonly _menuTracker = inject ( MenuTracker ) ;
72
+
89
73
private readonly _changeDetectorRef = inject ( ChangeDetectorRef ) ;
90
74
91
75
/** Whether the context menu is disabled. */
@@ -124,7 +108,7 @@ export class CdkContextMenuTrigger extends CdkMenuTriggerBase implements OnDestr
124
108
// resulting in multiple stacked context menus being displayed.
125
109
event . stopPropagation ( ) ;
126
110
127
- this . _contextMenuTracker . update ( this ) ;
111
+ this . _menuTracker . update ( this ) ;
128
112
this . _open ( event , { x : event . clientX , y : event . clientY } ) ;
129
113
130
114
// A context menu can be triggered via a mouse right click or a keyboard shortcut.
0 commit comments