Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(ui5-side-navigation-item, ui5-side-navigation-sub-item): introduce click event #2298

Merged
merged 5 commits into from
Nov 24, 2020
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions packages/fiori/src/SideNavigation.js
Original file line number Diff line number Diff line change
Expand Up @@ -182,6 +182,12 @@ class SideNavigation extends UI5Element {
const treeItem = event.detail.item;
const item = treeItem.associatedItem;

if (!(item.getAttribute("whole-item-toggleable") === "true")) {
item.fireEvent("click");
ilhan007 marked this conversation as resolved.
Show resolved Hide resolved
} else {
item.expanded = !item.expanded;
}

if (item.selected && !this.collapsed) {
return;
}
Expand Down
26 changes: 26 additions & 0 deletions packages/fiori/src/SideNavigationItem.js
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,33 @@ const metadata = {
selected: {
type: Boolean,
},

/**
* Defines whether pressing the whole item or only pressing the icon will show/hide the items's sub items(if present).
* If set to true, pressing the whole item will toggle the sub items, and it won't fire the <code>click</code> event.
* By default, only pressing the arrow icon will toggle the sub items & the click event will be fired if the item is pressed outside of the icon.
*
* @public
* @type {boolean}
* @defaultvalue false
* @since 1.0.0-rc.9
*/
wholeItemToggleable: {
type: Boolean,
},
},

events: {
/**
* @public
* @event
* @since 1.0.0-rc.9
*/
click: {

},
},

slots: /** @lends sap.ui.webcomponents.fiori.SideNavigationItem.prototype */ {
/**
* If you wish to nest menus, you can pass inner menu items to the default slot.
Expand Down
11 changes: 11 additions & 0 deletions packages/fiori/src/SideNavigationSubItem.js
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,17 @@ const metadata = {
type: String,
},
},

events: {
/**
* @public
* @event
* @since 1.0.0-rc.9
*/
click: {

},
},
};

/**
Expand Down
23 changes: 20 additions & 3 deletions packages/fiori/test/pages/SideNavigation.html
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@

.content {
height: 100%;
display: flex;
}
</style>
</head>
Expand All @@ -54,7 +55,7 @@
<ui5-side-navigation-sub-item text="From Other Teams" icon="employee-rejections"></ui5-side-navigation-sub-item>
</ui5-side-navigation-item>
<ui5-side-navigation-item text="Locations" icon="locate-me" selected></ui5-side-navigation-item>
<ui5-side-navigation-item text="Events" icon="calendar">
<ui5-side-navigation-item text="Events" icon="calendar" whole-item-toggleable="true">
<ui5-side-navigation-sub-item text="Local"></ui5-side-navigation-sub-item>
<ui5-side-navigation-sub-item text="Others"></ui5-side-navigation-sub-item>
</ui5-side-navigation-item>
Expand All @@ -66,7 +67,15 @@
<ui5-side-navigation-item slot="fixedItems" text="History" icon="history"></ui5-side-navigation-item>
</ui5-side-navigation>

<ui5-input id="counter" value="0"></ui5-input>
<div>
<ui5-label>selection-change event</ui5-label>
<ui5-input id="counter" value="0"></ui5-input>
</div>

<div>
<ui5-label>click event</ui5-label>
<ui5-input id="click-counter" value="0"></ui5-input>
</div>
</div>


Expand All @@ -75,11 +84,19 @@
<script>
var sideNavigation = document.querySelector("ui5-side-navigation"),
input = document.querySelector("#counter"),
counter = 0;
clickInput = document.querySelector("#click-counter"),
counter = 0,
clickCounter = 0;
document.querySelector("#startButton").addEventListener("click", function(event) {
sideNavigation.collapsed = !sideNavigation.collapsed;
});

document.querySelectorAll("ui5-side-navigation-item").forEach(item => {
item.addEventListener("click", event => {
clickInput.value = ++clickCounter;
});
})

sideNavigation.addEventListener("ui5-selection-change", function() {
input.value = ++counter;
});
Expand Down
22 changes: 21 additions & 1 deletion packages/fiori/test/specs/SideNavigation.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,26 @@ describe("Component Behavior", () => {
items[1].click();

assert.strictEqual(input.getProperty("value"), "5", "Event is fired");
})
});

it("Tests click event & whole-item-toggleable property", () => {
const input = browser.$("#click-counter");
const sideNavigation = browser.$("ui5-side-navigation");
let items = sideNavigation.shadow$("ui5-tree").shadow$("ui5-list").$$("ui5-li-tree");

items[0].click();

assert.strictEqual(input.getProperty("value"), "6", "Event is fired");

items[3].click();

assert.strictEqual(input.getProperty("value"), "6", "Event is not fired");
assert.strictEqual(items[3].getAttribute("expanded"), "true", "Expanded is toggled");

items[3].click();

assert.strictEqual(input.getProperty("value"), "6", "Event is not fired");
assert.strictEqual(items[3].getAttribute("expanded"), "false", "Expanded is toggled");
});
});
});