Skip to content

Commit

Permalink
feat(ui5-tree): introduce item-mouseover/item-mouseout events (#3990)
Browse files Browse the repository at this point in the history
  • Loading branch information
nnaydenow authored Oct 14, 2021
1 parent 81d7815 commit e8b6145
Show file tree
Hide file tree
Showing 4 changed files with 69 additions and 0 deletions.
2 changes: 2 additions & 0 deletions packages/main/src/Tree.hbs
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@
@ui5-toggle="{{../_onListItemToggle}}"
@ui5-step-in="{{../_onListItemStepIn}}"
@ui5-step-out="{{../_onListItemStepOut}}"
@mouseover="{{../_onListItemMouseOver}}"
@mouseout="{{../_onListItemMouseOut}}"
>
{{> treeListItemContent}}
</ui5-li-tree>
Expand Down
38 changes: 38 additions & 0 deletions packages/main/src/Tree.js
Original file line number Diff line number Diff line change
Expand Up @@ -158,6 +158,32 @@ const metadata = {
},
},

/**
* Fired when the mouse cursor enters the tree item borders.
* @event sap.ui.webcomponents.main.Tree#item-mouseover
* @param {HTMLElement} item the hovered item.
* @since 1.0.0-rc.16
* @public
*/
"item-mouseover": {
detail: {
item: { type: HTMLElement },
},
},

/**
* Fired when the mouse cursor leaves the tree item borders.
* @event sap.ui.webcomponents.main.Tree#item-mouseout
* @param {HTMLElement} item the hovered item.
* @since 1.0.0-rc.16
* @public
*/
"item-mouseout": {
detail: {
item: { type: HTMLElement },
},
},

/**
* Fired when a tree item is activated.
*
Expand Down Expand Up @@ -337,6 +363,18 @@ class Tree extends UI5Element {
this.fireEvent("item-delete", { item: treeItem });
}

_onListItemMouseOver(event) {
const treeItem = event.target.treeItem;

this.fireEvent("item-mouseover", { item: treeItem });
}

_onListItemMouseOut(event) {
const treeItem = event.target.treeItem;

this.fireEvent("item-mouseout", { item: treeItem });
}

_onListSelectionChange(event) {
const previouslySelectedItems = event.detail.previouslySelectedItems.map(item => item.treeItem);
const selectedItems = event.detail.selectedItems.map(item => item.treeItem);
Expand Down
15 changes: 15 additions & 0 deletions packages/main/test/pages/Tree.html
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,10 @@
</ui5-tree-item>

</ui5-tree>
Mouseover counter
<ui5-input id="mouseover-counter" value="0"></ui5-input>
Mouseout counter
<ui5-input id="mouseout-counter" value="0"></ui5-input>

<br><br>

Expand All @@ -119,6 +123,8 @@
</ui5-busy-indicator>

<script>
const mouseOverInput = document.getElementById("mouseover-counter");
const mouseOutInput = document.getElementById("mouseout-counter");

document.getElementById("density").addEventListener("selectionChange", function(event) {
var selectedButton = event.detail.selectedButton;
Expand All @@ -129,6 +135,15 @@
}
});

document.getElementById("tree").addEventListener("ui5-itemMouseover", function(event) {
console.log("Item mouseover: ", event.detail.item);
mouseOverInput.value++;
});
document.getElementById("tree").addEventListener("ui5-itemMouseout", function(event) {
console.log("Item mouseout: ", event.detail.item);
mouseOutInput.value++;
});

document.getElementById("tree").addEventListener("itemClick", function(event) {
console.log("Item clicked: ", event.detail.item);
});
Expand Down
14 changes: 14 additions & 0 deletions packages/main/test/specs/Tree.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,20 @@ describe("Tree proxies properties to list", () => {
assert.strictEqual(await list.getAttribute("no-data-text"), "no data text", "no data text applied");
})

it("Mouseover/mouseout events", async () => {
const tree = await browser.$("#tree");
const treeItems = await tree.shadow$$("ui5-li-tree");
const inputMouseover = await browser.$("#mouseover-counter");
const inputMouseout = await browser.$("#mouseout-counter");

await treeItems[0].moveTo();

assert.strictEqual(await inputMouseover.getAttribute("value"), "1", "Mouseover event is fired when item is accessed");

await treeItems[1].moveTo();
assert.strictEqual(await inputMouseover.getAttribute("value"), "2", "Mouseover event is fired when other item is accessed result");
assert.strictEqual(await inputMouseout.getAttribute("value"), "1", "Mouseout event is fired when the first item is not hovered");
})
});

describe("Tree has screen reader support", () => {
Expand Down

0 comments on commit e8b6145

Please sign in to comment.