Skip to content

Commit 8fa0939

Browse files
committed
fix(cdk-experimental/menu) make trigger items behave like normal items when pressing left/right
1 parent a3ebeb9 commit 8fa0939

File tree

3 files changed

+28
-24
lines changed

3 files changed

+28
-24
lines changed

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

Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -219,26 +219,18 @@ export class CdkMenuItemTrigger extends MenuTrigger implements OnDestroy {
219219
break;
220220

221221
case RIGHT_ARROW:
222-
if (this._parentMenu && this._isParentVertical()) {
222+
if (this._parentMenu && this._isParentVertical() && this._directionality?.value !== 'rtl') {
223223
event.preventDefault();
224-
if (this._directionality?.value === 'rtl') {
225-
this.menuStack.close(this._parentMenu, FocusNext.currentItem);
226-
} else {
227-
this.openMenu();
228-
this.childMenu?.focusFirstItem('keyboard');
229-
}
224+
this.openMenu();
225+
this.childMenu?.focusFirstItem('keyboard');
230226
}
231227
break;
232228

233229
case LEFT_ARROW:
234-
if (this._parentMenu && this._isParentVertical()) {
230+
if (this._parentMenu && this._isParentVertical() && this._directionality?.value === 'rtl') {
235231
event.preventDefault();
236-
if (this._directionality?.value === 'rtl') {
237-
this.openMenu();
238-
this.childMenu?.focusFirstItem('keyboard');
239-
} else {
240-
this.menuStack.close(this._parentMenu, FocusNext.currentItem);
241-
}
232+
this.openMenu();
233+
this.childMenu?.focusFirstItem('keyboard');
242234
}
243235
break;
244236

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

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -189,20 +189,26 @@ export class CdkMenuItem implements FocusableOption, FocusableElement, Toggler,
189189
break;
190190

191191
case RIGHT_ARROW:
192-
if (this._parentMenu && this._isParentVertical() && !this.hasMenu()) {
193-
event.preventDefault();
194-
this._dir?.value === 'rtl'
195-
? this._menuStack?.close(this._parentMenu, FocusNext.previousItem)
196-
: this._menuStack?.closeAll(FocusNext.nextItem);
192+
if (this._parentMenu && this._isParentVertical()) {
193+
if (this._dir?.value === 'rtl') {
194+
event.preventDefault();
195+
this._menuStack?.close(this._parentMenu, FocusNext.previousItem);
196+
} else if (!this.hasMenu()) {
197+
event.preventDefault();
198+
this._menuStack?.closeAll(FocusNext.nextItem);
199+
}
197200
}
198201
break;
199202

200203
case LEFT_ARROW:
201-
if (this._parentMenu && this._isParentVertical() && !this.hasMenu()) {
202-
event.preventDefault();
203-
this._dir?.value === 'rtl'
204-
? this._menuStack?.closeAll(FocusNext.nextItem)
205-
: this._menuStack?.close(this._parentMenu, FocusNext.previousItem);
204+
if (this._parentMenu && this._isParentVertical()) {
205+
if (this._dir?.value !== 'rtl') {
206+
event.preventDefault();
207+
this._menuStack?.close(this._parentMenu, FocusNext.previousItem);
208+
} else if (!this.hasMenu()) {
209+
event.preventDefault();
210+
this._menuStack?.closeAll(FocusNext.nextItem);
211+
}
206212
}
207213
break;
208214
}

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,3 +22,9 @@ demo-custom-position {
2222
display: block;
2323
margin-top: 20px;
2424
}
25+
26+
.example-menu-container .cdk-menu-item:focus {
27+
position: relative;
28+
z-index: 1;
29+
outline: 2px solid;
30+
}

0 commit comments

Comments
 (0)