@@ -984,10 +984,29 @@ class TabContainer extends UI5Element {
984
984
985
985
const itemsDomRefs = this . items . map ( item => item . getDomRefInStrip ( ) ) as Array < TabInStrip | TabSeparatorInStrip > ;
986
986
987
+ let allVisibleItemsWidth = 0 ;
988
+
989
+ const selectedTab = this . _getRootTab ( this . _selectedTab ) ;
990
+ const containerWidth = this . _getTabStrip ( ) . offsetWidth ;
991
+ const selectedTabDomRef = selectedTab ?. getDomRefInStrip ( ) as TabInStrip | undefined ;
992
+ const visibleItemsDomRefs = itemsDomRefs . filter ( item => ! item . hidden ) ;
993
+
994
+ visibleItemsDomRefs . forEach ( item => {
995
+ allVisibleItemsWidth += this . _getItemWidth ( item ) ;
996
+ } ) ;
997
+
998
+ const changeTabPosition = visibleItemsDomRefs . length !== itemsDomRefs . length && this . isModeStartAndEnd && selectedTabDomRef && visibleItemsDomRefs . indexOf ( selectedTabDomRef ) !== - 1 && allVisibleItemsWidth < containerWidth && this . _getItemWidth ( selectedTabDomRef ) < containerWidth ;
999
+
987
1000
// make sure the overflows are hidden
988
1001
this . _getStartOverflow ( ) . setAttribute ( "hidden" , "" ) ;
989
1002
this . _getEndOverflow ( ) . setAttribute ( "hidden" , "" ) ;
990
1003
1004
+ let firstVisibleIndex ;
1005
+
1006
+ if ( changeTabPosition ) {
1007
+ firstVisibleIndex = itemsDomRefs . indexOf ( visibleItemsDomRefs [ 0 ] ) ;
1008
+ }
1009
+
991
1010
// show all tabs
992
1011
for ( let i = 0 ; i < itemsDomRefs . length ; i ++ ) {
993
1012
itemsDomRefs [ i ] . removeAttribute ( "hidden" ) ;
@@ -1005,7 +1024,7 @@ class TabContainer extends UI5Element {
1005
1024
}
1006
1025
1007
1026
if ( this . isModeStartAndEnd ) {
1008
- this . _updateStartAndEndOverflow ( itemsDomRefs ) ;
1027
+ this . _updateStartAndEndOverflow ( itemsDomRefs , firstVisibleIndex ) ;
1009
1028
this . _updateOverflowCounters ( ) ;
1010
1029
} else {
1011
1030
this . _updateEndOverflow ( itemsDomRefs ) ;
@@ -1042,14 +1061,13 @@ class TabContainer extends UI5Element {
1042
1061
this . _endOverflowText = this . overflowButtonText ;
1043
1062
}
1044
1063
1045
- _updateStartAndEndOverflow ( itemsDomRefs : Array < TabInStrip | TabSeparatorInStrip > ) {
1064
+ _updateStartAndEndOverflow ( itemsDomRefs : Array < TabInStrip | TabSeparatorInStrip > , firstVisibleIndex ?: number ) {
1046
1065
let containerWidth = this . _getTabStrip ( ) . offsetWidth ;
1047
1066
const selectedTab = this . _getRootTab ( this . _selectedTab ) ;
1048
1067
const selectedTabDomRef = selectedTab ?. getDomRefInStrip ( ) as TabInStrip | undefined ;
1049
1068
const selectedItemIndexAndWidth = this . _getSelectedItemIndexAndWidth ( itemsDomRefs , selectedTabDomRef ) ;
1050
1069
const hasStartOverflow = this . _hasStartOverflow ( containerWidth , itemsDomRefs , selectedItemIndexAndWidth ) ;
1051
1070
const hasEndOverflow = this . _hasEndOverflow ( containerWidth , itemsDomRefs , selectedItemIndexAndWidth ) ;
1052
- let firstVisible ;
1053
1071
let lastVisible ;
1054
1072
1055
1073
// has "end", but no "start" overflow
@@ -1076,9 +1094,11 @@ class TabContainer extends UI5Element {
1076
1094
// width is changed
1077
1095
containerWidth = this . _getTabStrip ( ) . offsetWidth ;
1078
1096
1079
- firstVisible = this . _findFirstVisibleItem ( itemsDomRefs , containerWidth , selectedItemIndexAndWidth . width ) ;
1097
+ if ( ! firstVisibleIndex ) {
1098
+ firstVisibleIndex = this . _findFirstVisibleItem ( itemsDomRefs , containerWidth , selectedItemIndexAndWidth . width ) ;
1099
+ }
1080
1100
1081
- for ( let i = firstVisible - 1 ; i >= 0 ; i -- ) {
1101
+ for ( let i = firstVisibleIndex - 1 ; i >= 0 ; i -- ) {
1082
1102
itemsDomRefs [ i ] . setAttribute ( "hidden" , "" ) ;
1083
1103
itemsDomRefs [ i ] . setAttribute ( "start-overflow" , "" ) ;
1084
1104
}
@@ -1093,10 +1113,12 @@ class TabContainer extends UI5Element {
1093
1113
// width is changed
1094
1114
containerWidth = this . _getTabStrip ( ) . offsetWidth ;
1095
1115
1096
- firstVisible = this . _findFirstVisibleItem ( itemsDomRefs , containerWidth , selectedItemIndexAndWidth . width , selectedItemIndexAndWidth . index - 1 ) ;
1097
- lastVisible = this . _findLastVisibleItem ( itemsDomRefs , containerWidth , selectedItemIndexAndWidth . width , firstVisible ) ;
1116
+ if ( ! firstVisibleIndex ) {
1117
+ firstVisibleIndex = this . _findFirstVisibleItem ( itemsDomRefs , containerWidth , selectedItemIndexAndWidth . width , selectedItemIndexAndWidth . index - 1 ) ;
1118
+ }
1119
+ lastVisible = this . _findLastVisibleItem ( itemsDomRefs , containerWidth , selectedItemIndexAndWidth . width , firstVisibleIndex ) ;
1098
1120
1099
- for ( let i = firstVisible - 1 ; i >= 0 ; i -- ) {
1121
+ for ( let i = firstVisibleIndex - 1 ; i >= 0 ; i -- ) {
1100
1122
itemsDomRefs [ i ] . setAttribute ( "hidden" , "" ) ;
1101
1123
itemsDomRefs [ i ] . setAttribute ( "start-overflow" , "" ) ;
1102
1124
}
@@ -1108,6 +1130,10 @@ class TabContainer extends UI5Element {
1108
1130
}
1109
1131
1110
1132
_hasStartOverflow ( containerWidth : number , itemsDomRefs : Array < TabInStrip | TabSeparatorInStrip > , selectedItemIndexAndWidth : { width : number ; index : number } ) {
1133
+ if ( this . _getStartOverflow ( ) . textContent !== "+0" ) {
1134
+ return true ;
1135
+ }
1136
+
1111
1137
if ( selectedItemIndexAndWidth . index === 0 ) {
1112
1138
return false ;
1113
1139
}
0 commit comments