Skip to content

Commit 81f690f

Browse files
committed
feat(material/menu-item): allow focus origin to be optional input in focus method
1 parent 5f2407e commit 81f690f

File tree

2 files changed

+21
-2
lines changed

2 files changed

+21
-2
lines changed

src/material/menu/menu-item.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,8 +94,8 @@ export class MatMenuItem extends _MatMenuItemMixinBase
9494
}
9595

9696
/** Focuses the menu item. */
97-
focus(origin: FocusOrigin = 'program', options?: FocusOptions): void {
98-
if (this._focusMonitor) {
97+
focus(origin?: FocusOrigin, options?: FocusOptions): void {
98+
if (this._focusMonitor && origin) {
9999
this._focusMonitor.focusVia(this._getHostElement(), origin, options);
100100
} else {
101101
this._getHostElement().focus(options);

src/material/menu/menu.spec.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -615,6 +615,25 @@ describe('MatMenu', () => {
615615
expect(items.every(item => item.getAttribute('role') === 'menuitemcheckbox')).toBe(true);
616616
});
617617

618+
it('should not change focus origin if origin not specified for menu items', () => {
619+
const fixture = createComponent(MenuWithCheckboxItems);
620+
fixture.detectChanges();
621+
fixture.componentInstance.trigger.openMenu();
622+
fixture.detectChanges();
623+
624+
let [firstMenuItemDebugEl, secondMenuItemDebugEl] =
625+
fixture.debugElement.queryAll(By.css('.mat-menu-item'))!;
626+
627+
const firstMenuItemInstance = firstMenuItemDebugEl.componentInstance as MatMenuItem;
628+
const secondMenuItemInstance = secondMenuItemDebugEl.componentInstance as MatMenuItem;
629+
630+
firstMenuItemInstance.focus('mouse');
631+
secondMenuItemInstance.focus();
632+
633+
expect(secondMenuItemDebugEl.nativeElement.classList).toContain('cdk-focused');
634+
expect(secondMenuItemDebugEl.nativeElement.classList).toContain('cdk-mouse-focused');
635+
});
636+
618637
it('should not throw an error on destroy', () => {
619638
const fixture = createComponent(SimpleMenu, [], [FakeIcon]);
620639
expect(fixture.destroy.bind(fixture)).not.toThrow();

0 commit comments

Comments
 (0)