Skip to content

Commit d8d4fdb

Browse files
authored
refactor(ui5-tabcontainer): provide tabIndex in tabSelect even
The tab index is provided as event details and don't have to be calculated by users, that otherwise have to consider the tab separators, which can be a little cumbersome. FIXES: #1196 BREAKING CHANGE: `itemSelect` is renamed to `tabSelect` and the `item` event param is renamed to `tab`.
1 parent 3a79c75 commit d8d4fdb

File tree

3 files changed

+22
-13
lines changed

3 files changed

+22
-13
lines changed

packages/main/src/TabContainer.js

+13-9
Original file line numberDiff line numberDiff line change
@@ -112,15 +112,18 @@ const metadata = {
112112

113113
},
114114
events: /** @lends sap.ui.webcomponents.main.TabContainer.prototype */ {
115+
115116
/**
116-
* Fired when an item is selected.
117+
* Fired when a tab is selected.
117118
*
118119
* @event
119-
* @param {HTMLElement} item The selected <code>item</code>.
120+
* @param {HTMLElement} tab The selected <code>tab</code>.
121+
* @param {Number} tabIndex The selected <code>tab</code> index.
120122
* @public
121123
*/
122-
itemSelect: {
123-
item: { type: HTMLElement },
124+
tabSelect: {
125+
tab: { type: HTMLElement },
126+
tabIndex: { type: Number },
124127
},
125128
},
126129
};
@@ -296,7 +299,7 @@ class TabContainer extends UI5Element {
296299
_onItemSelect(target) {
297300
const selectedIndex = findIndex(this.items, item => item._id === target.id);
298301
const selectedTabIndex = findIndex(this._getTabs(), item => item._id === target.id);
299-
const currentSelectedTab = this.items[selectedIndex];
302+
const selectedTab = this.items[selectedIndex];
300303

301304
// update selected items
302305
this.items.forEach((item, index) => {
@@ -312,17 +315,18 @@ class TabContainer extends UI5Element {
312315

313316
// update collapsed state
314317
if (!this.fixed) {
315-
if (currentSelectedTab === this._selectedTab) {
318+
if (selectedTab === this._selectedTab) {
316319
this.collapsed = !this.collapsed;
317320
} else {
318321
this.collapsed = false;
319322
}
320323
}
321324

322325
// select the tab
323-
this._selectedTab = currentSelectedTab;
324-
this.fireEvent("itemSelect", {
325-
item: currentSelectedTab,
326+
this._selectedTab = selectedTab;
327+
this.fireEvent("tabSelect", {
328+
tab: selectedTab,
329+
tabIndex: selectedTabIndex,
326330
});
327331
}
328332

packages/main/test/pages/TabContainer.html

+4-2
Original file line numberDiff line numberDiff line change
@@ -277,11 +277,13 @@ <h2>Tabs with input elements</h2>
277277
<section class="result">
278278
<h2>Result</h2>
279279
<span id="result"></span>
280+
<span id="resultIdx"></span>
280281
</section>
281282

282283
<script>
283-
document.getElementById("tabContainer1").addEventListener("ui5-itemSelect", function (event) {
284-
document.getElementById("result").innerHTML = event.detail.item.text;
284+
document.getElementById("tabContainer1").addEventListener("ui5-tabSelect", function (event) {
285+
result.innerHTML = event.detail.tab.text;
286+
resultIdx.innerHTML = event.detail.tabIndex;
285287
});
286288
</script>
287289
</body>

packages/main/test/specs/TabContainer.spec.js

+5-2
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,18 @@ describe("TabContainer general interaction", () => {
1313
assert.strictEqual(selectedFilter.id, selectedTab.id, "The IDs of the ui5-tab and the rendered tab filter matches.");
1414
});
1515

16-
it("tests itemSelect event", () => {
16+
it("tests tabSelect event", () => {
1717
const item = browser.$("#tabContainer1").shadow$(".ui5-tc__headerItem:nth-child(3)");
1818
const result = browser.$("#result");
19+
const resultIdx = browser.$("#resultIdx");
1920

2021
const SELECTED_TAB_TEXT = "Laptops";
22+
const SELECTED_TAB_INDEX = "1";
2123

2224
item.click();
2325

24-
assert.strictEqual(result.getText(), SELECTED_TAB_TEXT, "Item text is retrieved correctly.");
26+
assert.strictEqual(result.getText(), SELECTED_TAB_TEXT, "Tab text is retrieved correctly.");
27+
assert.strictEqual(resultIdx.getText(), SELECTED_TAB_INDEX, "Tab index is retrieved correctly.");
2528
});
2629

2730
it("scroll works on iconsOnly TabContainer", () => {

0 commit comments

Comments
 (0)