@@ -11,7 +11,6 @@ import {
1111 ChangeDetectorRef ,
1212 Directive ,
1313 inject ,
14- Injectable ,
1514 Injector ,
1615 Input ,
1716 OnDestroy ,
@@ -28,7 +27,7 @@ import {_getEventTarget} from '../platform';
2827import { merge , partition } from 'rxjs' ;
2928import { skip , takeUntil , skipWhile } from 'rxjs/operators' ;
3029import { 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' ;
3231
3332/** The preferred menu positions for the context menu. */
3433const CONTEXT_MENU_POSITIONS = STANDARD_DROPDOWN_BELOW_POSITIONS . map ( position => {
@@ -39,23 +38,11 @@ const CONTEXT_MENU_POSITIONS = STANDARD_DROPDOWN_BELOW_POSITIONS.map(position =>
3938 return { ...position , offsetX, offsetY} ;
4039} ) ;
4140
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- }
41+ /**
42+ * @deprecated Will be removed. Use `MenuTracker` instead.
43+ * @breaking -change 22.0.0
44+ */
45+ export { MenuTracker as ContextMenuTracker } ;
5946
6047/** The coordinates where the context menu should open. */
6148export type ContextMenuCoordinates = { x : number ; y : number } ;
@@ -85,7 +72,10 @@ export type ContextMenuCoordinates = {x: number; y: number};
8572export class CdkContextMenuTrigger extends CdkMenuTriggerBase implements OnDestroy {
8673 private readonly _injector = inject ( Injector ) ;
8774 private readonly _directionality = inject ( Directionality , { optional : true } ) ;
88- private readonly _contextMenuTracker = inject ( ContextMenuTracker ) ;
75+
76+ /** The app's menu tracking registry */
77+ private readonly _menuTracker = inject ( MenuTracker ) ;
78+
8979 private readonly _changeDetectorRef = inject ( ChangeDetectorRef ) ;
9080
9181 /** Whether the context menu is disabled. */
@@ -124,7 +114,7 @@ export class CdkContextMenuTrigger extends CdkMenuTriggerBase implements OnDestr
124114 // resulting in multiple stacked context menus being displayed.
125115 event . stopPropagation ( ) ;
126116
127- this . _contextMenuTracker . update ( this ) ;
117+ this . _menuTracker . update ( this ) ;
128118 this . _open ( event , { x : event . clientX , y : event . clientY } ) ;
129119
130120 // A context menu can be triggered via a mouse right click or a keyboard shortcut.
0 commit comments