Skip to content

Commit d61a9b2

Browse files
authoredJun 1, 2021
fix(ui5-tabcontainer): tabs are scrolled into view on key navigation (#3354)
1 parent 2f88da0 commit d61a9b2

File tree

4 files changed

+29
-1
lines changed

4 files changed

+29
-1
lines changed
 

‎packages/base/src/delegate/ScrollEnablement.js

+7-1
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,13 @@ class ScrollEnablement extends EventProvider {
7070
this._container.scrollTop = top;
7171
}
7272

73-
move(dx, dy) {
73+
move(dx, dy, disableAnimation) {
74+
if (disableAnimation) {
75+
this._container.scrollLeft += dx;
76+
this._container.scrollTop += dy;
77+
return;
78+
}
79+
7480
return scroll({
7581
element: this._container,
7682
dx,

‎packages/main/src/TabContainer.hbs

+1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
<div class="{{classes.headerScrollContainer}}" id="{{_id}}-headerScrollContainer">
2020
<ul
2121
role="tablist"
22+
@focusin={{_onTablistFocusin}}
2223
class="{{classes.headerList}}"
2324
@click="{{_onHeaderClick}}"
2425
@keydown="{{_onHeaderKeyDown}}"

‎packages/main/src/TabContainer.js

+20
Original file line numberDiff line numberDiff line change
@@ -340,6 +340,26 @@ class TabContainer extends UI5Element {
340340
ResizeHandler.deregister(this._getHeader(), this._handleResize);
341341
}
342342

343+
_onTablistFocusin(event) {
344+
const target = event.target;
345+
346+
if (!this._scrollable || !target.classList.contains("ui5-tab-strip-item")) {
347+
return;
348+
}
349+
350+
const headerScrollContainer = this._getHeaderScrollContainer();
351+
const leftArrowWidth = this.shadowRoot.querySelector(".ui5-tc__headerArrowLeft").offsetWidth;
352+
const rightArrowWidth = this.shadowRoot.querySelector(".ui5-tc__headerArrowRight").offsetWidth;
353+
354+
if (this._scrollableBack && (target.offsetLeft - leftArrowWidth < headerScrollContainer.scrollLeft)) {
355+
this._scrollEnablement.move(target.offsetLeft - leftArrowWidth - headerScrollContainer.scrollLeft, 0, true);
356+
this._updateScrolling();
357+
} else if (this._scrollableForward && (target.offsetLeft + target.offsetWidth > headerScrollContainer.scrollLeft + headerScrollContainer.offsetWidth - rightArrowWidth)) {
358+
this._scrollEnablement.move(target.offsetLeft + target.offsetWidth - headerScrollContainer.scrollLeft - headerScrollContainer.offsetWidth + rightArrowWidth, 0, true);
359+
this._updateScrolling();
360+
}
361+
}
362+
343363
_onHeaderClick(event) {
344364
const tab = getTab(event.target);
345365
if (!tab) {

‎packages/main/src/themes/TabContainer.css

+1
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@
4747
}
4848

4949
.ui5-tc__headerList {
50+
position: relative;
5051
display: flex;
5152
margin: 0;
5253
padding: 0;

0 commit comments

Comments
 (0)
Please sign in to comment.