Skip to content

Commit

Permalink
fix(menu,select): enter clicks href items
Browse files Browse the repository at this point in the history
PiperOrigin-RevId: 571104363
  • Loading branch information
e111077 authored and Copybara-Service committed Oct 5, 2023
1 parent 43af3ba commit 8ae8c02
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 2 deletions.
19 changes: 19 additions & 0 deletions menu/internal/controllers/menuItemController.ts
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,13 @@ export interface MenuItemControllerConfig {
* A function that returns the headline element of the menu item.
*/
getHeadlineElements: () => HTMLElement[];

/**
* The HTML Element that accepts user interactions like click. Used for
* occasions like programmatically clicking anchor tags when `Enter` is
* pressed.
*/
getInteractiveElement: () => HTMLElement | null;
}

/**
Expand All @@ -77,6 +84,8 @@ export class MenuItemController implements ReactiveController {
private internalTypeaheadText: string|null = null;
private readonly getHeadlineElements:
MenuItemControllerConfig['getHeadlineElements'];
private readonly getInteractiveElement:
MenuItemControllerConfig['getInteractiveElement'];

/**
* @param host The MenuItem in which to attach this controller to.
Expand All @@ -87,8 +96,10 @@ export class MenuItemController implements ReactiveController {
config: MenuItemControllerConfig) {
const {
getHeadlineElements,
getInteractiveElement,
} = config;
this.getHeadlineElements = getHeadlineElements;
this.getInteractiveElement = getInteractiveElement;
this.host.addController(this);
}

Expand Down Expand Up @@ -164,6 +175,14 @@ export class MenuItemController implements ReactiveController {
* menu.
*/
onKeydown = (event: KeyboardEvent) => {
// Check if the interactive element is an anchor tag. If so, click it.
if (this.host.href && event.code === 'Enter') {
const interactiveElement = this.getInteractiveElement();
if (interactiveElement instanceof HTMLAnchorElement) {
interactiveElement.click();
}
}

if (this.host.keepOpen || event.defaultPrevented) return;
const keyCode = event.code;

Expand Down
3 changes: 2 additions & 1 deletion menu/internal/menuitem/menu-item.ts
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,8 @@ export class MenuItemEl extends LitElement implements MenuItem {
private readonly menuItemController = new MenuItemController(this, {
getHeadlineElements: () => {
return this.headlineElements;
}
},
getInteractiveElement: () => this.listItemRoot,
});

protected override render() {
Expand Down
3 changes: 2 additions & 1 deletion select/internal/selectoption/select-option.ts
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,8 @@ export class SelectOptionEl extends LitElement implements SelectOption {
private readonly selectOptionController = new SelectOptionController(this, {
getHeadlineElements: () => {
return this.headlineElements;
}
},
getInteractiveElement: () => this.listItemRoot,
});

protected override render() {
Expand Down

0 comments on commit 8ae8c02

Please sign in to comment.