Skip to content

Commit e22202c

Browse files
chore(ui5-user-menu-item): improve hook handling
1 parent 35f6b35 commit e22202c

5 files changed

Lines changed: 16 additions & 44 deletions

File tree

packages/fiori/src/NavigationMenuItemTemplate.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
import type NavigationMenuItem from "./NavigationMenuItem.js";
22
import MenuItemTemplate from "@ui5/webcomponents/dist/MenuItemTemplate.js";
3+
import type { MenuItemHooks } from "@ui5/webcomponents/dist/MenuItemTemplate.js";
34
import Icon from "@ui5/webcomponents/dist/Icon.js";
45
import slimArrowRightIcon from "@ui5/webcomponents-icons/dist/slim-arrow-right.js";
56
import arrowRightIcon from "@ui5/webcomponents-icons/dist/arrow-right.js";
6-
import type { ListItemHooks } from "@ui5/webcomponents/dist/ListItemTemplate.js";
77

8-
const predefinedHooks: Partial<ListItemHooks> = {
8+
const predefinedHooks: Partial<MenuItemHooks> = {
99
listItemContent,
1010
iconBegin,
1111
iconEnd,
1212
};
1313

14-
export default function NavigationMenuItemTemplate(this: NavigationMenuItem, hooks?: Partial<ListItemHooks>) {
14+
export default function NavigationMenuItemTemplate(this: NavigationMenuItem, hooks?: Partial<MenuItemHooks>) {
1515
const currentHooks = { ...predefinedHooks, ...hooks, };
1616

1717
return <>

packages/fiori/src/UserMenuItem.ts

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -45,20 +45,6 @@ class UserMenuItem extends MenuItem {
4545
@slot({ "default": true, type: HTMLElement, invalidateOnChildChange: true })
4646
declare items: DefaultSlot<UserMenuItem>;
4747

48-
get _accessibleNameRef(): string {
49-
return `${this._id}-menu-item-text`;
50-
}
51-
52-
get _accInfo() {
53-
const result = { ...super._accInfo };
54-
55-
if (this.hasSubmenu) {
56-
result.ariaOwns = `${this._id}-menu-list`;
57-
}
58-
59-
return result;
60-
}
61-
6248
/**
6349
* When set, a second line appears below the menu item text
6450
* showing the text of the currently selected (checked) sub-item.
@@ -67,7 +53,7 @@ class UserMenuItem extends MenuItem {
6753
* @public
6854
*/
6955
@property({ type: Boolean })
70-
showSelectionText = false;
56+
showSelection = false;
7157

7258
get _menuItems() {
7359
return this.items.filter(isInstanceOfMenuItem);
@@ -78,7 +64,7 @@ class UserMenuItem extends MenuItem {
7864
* Only returns text for single-select groups.
7965
*/
8066
get _selectedSubItemText(): string {
81-
if (!this.showSelectionText) {
67+
if (!this.showSelection) {
8268
return "";
8369
}
8470

packages/fiori/src/UserMenuItemTemplate.tsx

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,18 @@ import MenuItemTemplate from "@ui5/webcomponents/dist/MenuItemTemplate.js";
33
import type { MenuItemHooks } from "@ui5/webcomponents/dist/MenuItemTemplate.js";
44

55
export default function UserMenuItemTemplate(this: UserMenuItem) {
6-
const menuItemHooks: Partial<MenuItemHooks> = {};
6+
const hooks: Partial<MenuItemHooks> = {};
77

8-
if (this.showSelectionText) {
9-
menuItemHooks.menuItemTextContent = userMenuItemTextContent;
8+
if (this.showSelection) {
9+
hooks.menuItemTextContent = userMenuItemTextContent;
1010
}
1111

12-
return [MenuItemTemplate.call(this, undefined, menuItemHooks)];
12+
return [MenuItemTemplate.call(this, hooks)];
1313
}
1414

1515
function userMenuItemTextContent(this: UserMenuItem) {
1616
return (
17-
<div id={`${this._id}-menu-item-text`} class="ui5-user-menu-item-text-wrapper">
17+
<div class="ui5-user-menu-item-text-wrapper">
1818
{this.text && <div class="ui5-menu-item-text">{this.text}</div>}
1919
{this._selectedSubItemText &&
2020
<div class="ui5-user-menu-item-selection-text">{this._selectedSubItemText}</div>

packages/fiori/test/pages/UserMenu.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@
6565
<ui5-user-menu-item icon="accelerated" text="Item 2" data-id="multi-select-item2"></ui5-user-menu-item>
6666
</ui5-user-menu-item-group>
6767
</ui5-user-menu-item>
68-
<ui5-user-menu-item text="Single Select" data-id="single-select" show-selection-text>
68+
<ui5-user-menu-item text="Single Select" data-id="single-select" show-selection>
6969
<ui5-user-menu-item-group check-mode="Single">
7070
<ui5-user-menu-item icon="private" text="Item 1" data-id="single-select" checked></ui5-user-menu-item>
7171
<ui5-user-menu-item icon="accelerated" text="Item 2" data-id="single-select-item2"></ui5-user-menu-item>

packages/main/src/MenuItemTemplate.tsx

Lines changed: 5 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -11,27 +11,22 @@ import Icon from "./Icon.js";
1111
import ListItemTemplate from "./ListItemTemplate.js";
1212
import type { ListItemHooks } from "./ListItemTemplate.js";
1313

14-
export type MenuItemHooks = {
14+
export type MenuItemHooks = ListItemHooks & {
1515
menuItemTextContent: (this: any) => JSX.Element;
1616
}
1717

18-
const predefinedMenuItemHooks: MenuItemHooks = {
19-
menuItemTextContent,
20-
};
21-
22-
const predefinedHooks: Partial<ListItemHooks> = {
23-
listItemContent,
18+
const predefinedHooks: Partial<MenuItemHooks> = {
2419
iconBegin,
20+
menuItemTextContent,
2521
};
2622

27-
export default function MenuItemTemplate(this: MenuItem, hooks?: Partial<ListItemHooks>, menuItemHooks?: Partial<MenuItemHooks>) {
23+
export default function MenuItemTemplate(this: MenuItem, hooks?: Partial<MenuItemHooks>) {
2824
const currentHooks = { ...predefinedHooks, ...hooks };
29-
const currentMenuItemHooks = { ...predefinedMenuItemHooks, ...menuItemHooks };
3025

3126
if (!hooks?.listItemContent) {
3227
currentHooks.listItemContent = function(this: MenuItem) {
3328
return (<>
34-
{currentMenuItemHooks.menuItemTextContent.call(this)}
29+
{currentHooks.menuItemTextContent!.call(this)}
3530

3631
{rightContent.call(this)}
3732
{checkmarkContent.call(this)}
@@ -46,15 +41,6 @@ export default function MenuItemTemplate(this: MenuItem, hooks?: Partial<ListIte
4641
</>;
4742
}
4843

49-
function listItemContent(this: MenuItem) {
50-
return (<>
51-
{menuItemTextContent.call(this)}
52-
53-
{rightContent.call(this)}
54-
{checkmarkContent.call(this)}
55-
</>);
56-
}
57-
5844
function menuItemTextContent(this: MenuItem) {
5945
return <>{this.text && <div class="ui5-menu-item-text">{this.text}</div>}</>;
6046
}

0 commit comments

Comments
 (0)