Skip to content

Commit 9dbf41b

Browse files
authored
Add MenuItem 'check' public event and remove MenuItemGroup 'check-change' event (#11793)
There were 2 events introduced in PR #10028 - private `item-check` event fired by `MenuItem` when its `checked` property changes, and public `check-change` event fired by `MenuItemGroup` when any of its `MenuItem` components changes it's `checked` property. This PR removes these two events in favor of single public `check` event, fired by the `MenuItem` when its `checked` property changes. The new situation will be more suitable for handling `MenuItem` `checked` states and updating models in applications that use Menu Item Groups.
1 parent b4749c3 commit 9dbf41b

File tree

5 files changed

+38
-26
lines changed

5 files changed

+38
-26
lines changed

packages/main/cypress/specs/Menu.cy.tsx

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -371,6 +371,36 @@ describe("Menu interaction", () => {
371371
.should("have.been.calledOnce");
372372
});
373373

374+
it("Event firing - 'ui5-check' after 'click' on menu item", () => {
375+
cy.mount(
376+
<>
377+
<Button id="btnOpen">Open Menu</Button>
378+
<Menu opener="btnOpen">
379+
<MenuItemGroup checkMode="Single">
380+
<MenuItem text="Item 1"></MenuItem>
381+
</MenuItemGroup>
382+
</Menu>
383+
</>
384+
);
385+
386+
cy.get("[ui5-menu]")
387+
.ui5MenuOpen();
388+
389+
cy.get("[ui5-menu]")
390+
.then($item => {
391+
$item.get(0).addEventListener("ui5-check", cy.stub().as("checked"));
392+
});
393+
394+
cy.get("[ui5-menu]")
395+
.ui5MenuOpened();
396+
397+
cy.get("[ui5-menu-item]")
398+
.ui5MenuItemClick();
399+
400+
cy.get("@checked")
401+
.should("have.been.calledOnce");
402+
});
403+
374404
it("Prevent menu closing on item press", () => {
375405
cy.mount(
376406
<>

packages/main/src/MenuItem.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -131,10 +131,10 @@ type MenuItemAccessibilityAttributes = Pick<AccessibilityAttributes, "ariaKeySho
131131

132132
/**
133133
* Fired when an item is checked or unchecked.
134-
* @private
134+
* @public
135135
* @since 2.12.0
136136
*/
137-
@event("item-check", {
137+
@event("check", {
138138
bubbles: true,
139139
})
140140
class MenuItem extends ListItem implements IMenuItem {
@@ -144,7 +144,7 @@ class MenuItem extends ListItem implements IMenuItem {
144144
"before-close": MenuBeforeCloseEventDetail
145145
"close": void
146146
"close-menu": void
147-
"item-check": void
147+
"check": void
148148
"exit-end-content": MenuNavigateOutOfEndContentEventDetail
149149
}
150150

@@ -635,7 +635,7 @@ class MenuItem extends ListItem implements IMenuItem {
635635
const newState = !this.checked;
636636

637637
this.checked = newState;
638-
this.fireDecoratorEvent("item-check");
638+
this.fireDecoratorEvent("check");
639639
}
640640
}
641641

packages/main/src/MenuItemGroup.ts

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,13 @@ import UI5Element from "@ui5/webcomponents-base/dist/UI5Element.js";
22
import customElement from "@ui5/webcomponents-base/dist/decorators/customElement.js";
33
import property from "@ui5/webcomponents-base/dist/decorators/property.js";
44
import slot from "@ui5/webcomponents-base/dist/decorators/slot.js";
5-
import event from "@ui5/webcomponents-base/dist/decorators/event-strict.js";
65
import jsxRenderer from "@ui5/webcomponents-base/dist/renderer/JsxRenderer.js";
76
import type MenuItem from "./MenuItem.js";
87
import { isInstanceOfMenuItem } from "./MenuItem.js";
98
import MenuItemGroupTemplate from "./MenuItemGroupTemplate.js";
109
import MenuItemGroupCheckMode from "./types/MenuItemGroupCheckMode.js";
1110
import type { IMenuItem } from "./Menu.js";
1211

13-
type MenuItemGroupCheckChangeEventDetail = { checkedItems: Array<MenuItem>; }
14-
1512
/**
1613
* @class
1714
*
@@ -48,19 +45,7 @@ type MenuItemGroupCheckChangeEventDetail = { checkedItems: Array<MenuItem>; }
4845
template: MenuItemGroupTemplate,
4946
})
5047

51-
/**
52-
* Fired when an item in the group is checked or unchecked.
53-
* @public
54-
* @since 2.12.0
55-
*/
56-
@event("check-change", {
57-
bubbles: true,
58-
})
5948
class MenuItemGroup extends UI5Element implements IMenuItem {
60-
eventDetails!: UI5Element["eventDetails"] & {
61-
"check-change": MenuItemGroupCheckChangeEventDetail
62-
}
63-
6449
/**
6550
* Defines the component's check mode.
6651
* @default "None"
@@ -137,10 +122,6 @@ class MenuItemGroup extends UI5Element implements IMenuItem {
137122
this._clearCheckedItems();
138123
clickedItem.checked = isChecked;
139124
}
140-
141-
this.fireDecoratorEvent("check-change", {
142-
checkedItems: this._menuItems.filter((item: MenuItem) => item.checked),
143-
});
144125
}
145126
}
146127

packages/main/src/MenuItemGroupTemplate.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ export default function MenuItemGroupTemplate(this: MenuItemGroup) {
44
return (
55
<div
66
role="group"
7-
onui5-item-check={this._handleItemCheck}
7+
onui5-check={this._handleItemCheck}
88
>
99
<slot></slot>
1010
</div>

packages/main/test/pages/Menu.html

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -356,9 +356,10 @@
356356

357357
});
358358

359-
menuGroups.addEventListener("ui5-check-change", function(event) {
359+
menuGroups.addEventListener("ui5-check", function(event) {
360+
console.warn("Check event fired for item: " + event.target.text);
361+
console.warn("Checked state: " + event.target.checked);
360362
console.warn(event.target);
361-
console.warn("Checked items: " + event.detail.checkedItems.map(item => item.text).join(", "));
362363
});
363364

364365
</script>

0 commit comments

Comments
 (0)