Skip to content

Commit 5eaa835

Browse files
fix(ui5-tabcontainer): fix tab selection (#8547)
* fix(ui5-tabcontainer): fix tab selection * refactor: separate realTabReference from selectedTabReference --------- Co-authored-by: Petar Dimov <[email protected]>
1 parent f781150 commit 5eaa835

File tree

4 files changed

+22
-6
lines changed

4 files changed

+22
-6
lines changed

packages/main/src/Tab.ts

+5-2
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,9 @@ class Tab extends UI5Element implements ITab, ITabbable {
149149
@property({ type: Boolean })
150150
isTopLevelTab!: boolean;
151151

152+
@property({ type: Object, defaultValue: null })
153+
_selectedTabReference!: Tab;
154+
152155
/**
153156
* Holds the content associated with this tab.
154157
* @public
@@ -233,15 +236,15 @@ class Tab extends UI5Element implements ITab, ITabbable {
233236
}
234237

235238
get isOnSelectedTabPath(): boolean {
236-
return this.selected || this.tabs.some(subTab => subTab.isOnSelectedTabPath);
239+
return this._selectedTabReference === this || this.tabs.some(subTab => subTab.isOnSelectedTabPath);
237240
}
238241

239242
get _effectiveSlotName() {
240243
return this.isOnSelectedTabPath ? this._individualSlot : `disabled-${this._individualSlot}`;
241244
}
242245

243246
get _defaultSlotName() {
244-
return this.selected ? "" : "disabled-slot";
247+
return this._selectedTabReference === this ? "" : "disabled-slot";
245248
}
246249

247250
get hasOwnContent() {

packages/main/src/TabContainer.ts

+6
Original file line numberDiff line numberDiff line change
@@ -479,6 +479,12 @@ class TabContainer extends UI5Element {
479479
tab.isTopLevelTab = items.some(i => i === tab);
480480
});
481481

482+
walk(items, item => {
483+
if (!item.isSeparator) {
484+
(item as Tab)._selectedTabReference = this._selectedTab;
485+
}
486+
});
487+
482488
this._setIndentLevels(items);
483489
}
484490

packages/main/test/pages/TabContainer.html

+1-1
Original file line numberDiff line numberDiff line change
@@ -261,7 +261,7 @@ <h2>Tab Container Start And End Overflow</h2>
261261
<section>
262262
<h2>Icon only</h2>
263263
<ui5-tabcontainer id="tabContainerIconOnly">
264-
<ui5-tab icon="sap-icon://card" selected>
264+
<ui5-tab icon="sap-icon://card">
265265
<ui5-button>Button 11</ui5-button>
266266
<ui5-button>Button 12</ui5-button>
267267
</ui5-tab>

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

+10-3
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,13 @@ describe("TabContainer general interaction", () => {
1717
assert.strictEqual(selectedFilter.id, selectedTab.id, "The IDs of the ui5-tab and the rendered tab matches.");
1818
});
1919

20+
it("tests initially no explicitly selected tab", async () => {
21+
const tabContainer = await browser.$("#tabContainerIconOnly");
22+
const selectedSlot = await tabContainer.shadow$('slot[name="default-1"]');
23+
24+
assert.ok(await selectedSlot.isExisting(), "selected slot is correct");
25+
});
26+
2027
it("tests empty tab container", async () => {
2128
assert.ok(await browser.$("#tabContainerEmpty").isDisplayed(), "Empty tab container is rendered.");
2229
});
@@ -519,7 +526,7 @@ describe("TabContainer drag and drop tests", () => {
519526
let expectedOrder = moveElementById(currentOrder, await tabContainer.getRealTabId(draggedStripItem), await tabContainer.getRealTabId(dropTargetStripItem));
520527
currentOrder = await tabContainer.getItemsIds("tabContainerDnd");
521528
assert.deepEqual(currentOrder, expectedOrder, "Items order has changed");
522-
529+
523530
displayedStripItems = await tabContainer.getDisplayedTabStripItems("tabContainerDnd");
524531
draggedStripItem = displayedStripItems[1];
525532
dropTargetStripItem = displayedStripItems[displayedStripItems.length - 1];
@@ -534,7 +541,7 @@ describe("TabContainer drag and drop tests", () => {
534541
let draggedStripItem = displayedStripItems[displayedStripItems.length - 1];
535542
let dropTargetStripItem = displayedStripItems[displayedStripItems.length - 2];
536543
let currentOrder = await tabContainer.getItemsIds("tabContainerDnd");
537-
544+
538545
await dragAndDropInStrip(draggedStripItem, dropTargetStripItem, "Before");
539546
let expectedOrder = moveElementById(currentOrder, await tabContainer.getRealTabId(draggedStripItem), await tabContainer.getRealTabId(dropTargetStripItem));
540547
currentOrder = await tabContainer.getItemsIds("tabContainerDnd");
@@ -574,7 +581,7 @@ describe("TabContainer drag and drop tests", () => {
574581
let draggedPopoverItem = displayedPopoverItems[0];
575582
let dropTargetPopoverItem = displayedPopoverItems[2];
576583
let currentOrder = await tabContainer.getItemsIds("tabContainerDnd");
577-
584+
578585
await dragAndDropInPopover(draggedPopoverItem, dropTargetPopoverItem, "After");
579586
let expectedOrder = moveElementById(currentOrder, await tabContainer.getRealTabId(draggedPopoverItem), await tabContainer.getRealTabId(dropTargetPopoverItem));
580587
currentOrder = await tabContainer.getItemsIds("tabContainerDnd");

0 commit comments

Comments
 (0)