Skip to content

Commit 27c04ed

Browse files
committed
fixup! fix(cdk-experimental/menu) make trigger items behave like normal items when pressing left/right
1 parent 7869efd commit 27c04ed

File tree

6 files changed

+64
-7
lines changed

6 files changed

+64
-7
lines changed

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

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,6 @@ export class CdkMenuBar extends CdkMenuBase implements AfterContentInit, OnDestr
6868
super.ngAfterContentInit();
6969
this._subscribeToMenuStackEmptied();
7070
this._subscribeToMouseManager();
71-
7271
this._menuAim?.initialize(this, this.pointerTracker!);
7372
}
7473

@@ -132,8 +131,6 @@ export class CdkMenuBar extends CdkMenuBase implements AfterContentInit, OnDestr
132131
this._ngZone.runOutsideAngular(() => {
133132
this.pointerTracker = new PointerFocusTracker(this.items);
134133
this.pointerTracker.entered.pipe(takeUntil(this.destroyed)).subscribe(item => {
135-
// TODO(mmalerba): Why does the menu bar do this in a hasOpenSubmenu check
136-
// when menu just does it regardless?
137134
if (this.hasOpenSubmenu()) {
138135
this.keyManager.setActiveItem(item);
139136
}
@@ -151,8 +148,6 @@ export class CdkMenuBar extends CdkMenuBase implements AfterContentInit, OnDestr
151148
case FocusNext.nextItem:
152149
keyManager.setFocusOrigin('keyboard');
153150
keyManager.setNextItemActive();
154-
// TODO(mmalerba): This seems similar to what menu does, but menu bar also calls openMenu
155-
// figure out why this is different.
156151
keyManager.activeItem?.getMenuTrigger()?.openMenu();
157152
break;
158153

src/cdk-experimental/menu/menu-item-trigger.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ import {DOWN_ARROW, ENTER, LEFT_ARROW, RIGHT_ARROW, SPACE, UP_ARROW} from '@angu
3636
import {fromEvent, merge, Subject} from 'rxjs';
3737
import {filter, takeUntil} from 'rxjs/operators';
3838
import {CDK_MENU, Menu} from './menu-interface';
39-
import {FocusNext, MENU_STACK, MenuStack} from './menu-stack';
39+
import {MENU_STACK, MenuStack} from './menu-stack';
4040
import {MENU_AIM, MenuAim} from './menu-aim';
4141
import {MENU_TRIGGER, MenuTrigger} from './menu-trigger';
4242

src/cdk-experimental/menu/menu.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,9 @@ export class CdkMenu extends CdkMenuBase implements AfterContentInit, OnDestroy
141141
* Complete the change emitter if there are any nested MenuGroups or register to complete the
142142
* change emitter if a MenuGroup is rendered at some point
143143
*/
144-
// TODO(mmalerba): I don't understand why we're doing this, seems odd.
144+
// TODO(mmalerba): This doesnt' quite work. It causes change events to stop
145+
// firing for radio items directly in the menu if a second group of options
146+
// is added in a menu-group.
145147
private _completeChangeEmitter() {
146148
if (this._hasNestedGroups()) {
147149
this.change.complete();

src/dev-app/cdk-experimental-menu/cdk-menu-demo.css

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,11 @@
33
flex-direction: column;
44
}
55

6+
.example-menu .cdk-menu-group {
7+
display: flex;
8+
flex-direction: column;
9+
}
10+
611
.example-menu-container + .example-menu-container {
712
/* add some buffer for the opened menu */
813
margin-top: 140px;
@@ -28,3 +33,7 @@ demo-custom-position {
2833
z-index: 1;
2934
outline: 2px solid;
3035
}
36+
37+
.cdk-menu-item[aria-checked='true'] {
38+
box-shadow: inset 0 0 0 100px rgba(0, 0, 255, 0.5);
39+
}

src/dev-app/cdk-experimental-menu/cdk-menu-demo.html

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,3 +151,42 @@ <h4>Custom Context Menu Position (Centered on Cursor)</h4>
151151
</div>
152152
</ng-template>
153153
</div>
154+
155+
<div class="example-menu-container">
156+
<h3>Radio items</h3>
157+
<button cdkMenuItem [cdkMenuTriggerFor]="sizeMenu">Size menu (items directly in menu)</button>
158+
<button cdkMenuItem [cdkMenuTriggerFor]="colorMenu">Color menu (items in menu group)</button>
159+
<button cdkMenuItem [cdkMenuTriggerFor]="sizeAndColorMenu">Size & Color menu (items in directly in menu & in menu group)</button>
160+
161+
<ng-template #sizeMenu>
162+
<div class="example-menu" cdkMenu (change)="onSizeChange($event)">
163+
<button [checked]="size === 'Small'" cdkMenuItemRadio>Small</button>
164+
<button [checked]="size === 'Normal'" cdkMenuItemRadio>Normal</button>
165+
<button [checked]="size === 'Large'" cdkMenuItemRadio>Large</button>
166+
</div>
167+
</ng-template>
168+
169+
<ng-template #colorMenu>
170+
<div class="example-menu" cdkMenu>
171+
<div cdkMenuGroup (change)="onColorChange($event)">
172+
<button [checked]="color === 'Red'" cdkMenuItemRadio>Red</button>
173+
<button [checked]="color === 'Green'" cdkMenuItemRadio>Green</button>
174+
<button [checked]="color === 'Blue'" cdkMenuItemRadio>Blue</button>
175+
</div>
176+
</div>
177+
</ng-template>
178+
179+
<ng-template #sizeAndColorMenu>
180+
<div class="example-menu" cdkMenu (change)="onSizeChange($event)">
181+
<button [checked]="size === 'Small'" cdkMenuItemRadio>Small</button>
182+
<button [checked]="size === 'Normal'" cdkMenuItemRadio>Normal</button>
183+
<button [checked]="size === 'Large'" cdkMenuItemRadio>Large</button>
184+
<hr />
185+
<div cdkMenuGroup (change)="onColorChange($event)">
186+
<button [checked]="color === 'Red'" cdkMenuItemRadio>Red</button>
187+
<button [checked]="color === 'Green'" cdkMenuItemRadio>Green</button>
188+
<button [checked]="color === 'Blue'" cdkMenuItemRadio>Blue</button>
189+
</div>
190+
</div>
191+
</ng-template>
192+
</div>

src/dev-app/cdk-experimental-menu/cdk-menu-demo.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
import {Component} from '@angular/core';
1010
import {ConnectedPosition} from '@angular/cdk/overlay';
11+
import {CdkMenuItem} from '@angular/cdk-experimental/menu';
1112

1213
@Component({
1314
templateUrl: 'cdk-menu-demo.html',
@@ -17,4 +18,15 @@ export class CdkMenuDemo {
1718
customPosition = [
1819
{originX: 'center', originY: 'center', overlayX: 'center', overlayY: 'center'},
1920
] as ConnectedPosition[];
21+
22+
size: string | undefined = 'Normal';
23+
color: string | undefined = 'Red';
24+
25+
onSizeChange(item: CdkMenuItem) {
26+
this.size = item._elementRef.nativeElement.textContent?.trim();
27+
}
28+
29+
onColorChange(item: CdkMenuItem) {
30+
this.color = item._elementRef.nativeElement.textContent?.trim();
31+
}
2032
}

0 commit comments

Comments
 (0)