@bydata/react-supertabs 1.2.0 → 1.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +17 -12
- package/dist/SuperTabs.js +40 -16
- package/dist/SuperTabs.scss +21 -21
- package/dist/TabContext.js +26 -8
- package/dist/TabList.js +2 -2
- package/dist/TabList.scss +4 -4
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -9,7 +9,14 @@
|
|
|
9
9
|
- **Smooth Transitions**: Enjoy a polished user experience with fluid tab-switching animations.
|
|
10
10
|
- **Keep-Alive (Experimental)**: Maintain the state of components across tab switches for seamless interaction (experimental feature).
|
|
11
11
|
|
|
12
|
-
### Installation
|
|
12
|
+
### Installation
|
|
13
|
+
------
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
npm install @bydata/react-supertabs
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
### Usage
|
|
13
20
|
------
|
|
14
21
|
|
|
15
22
|
#### Basic
|
|
@@ -77,7 +84,7 @@ const SITE_PAGES = [{
|
|
|
77
84
|
// containsSubTabs - can be added if the tab includes sub tabs.
|
|
78
85
|
// customAddButtons - These buttons will be added in the sub tab list. Clicking on the button will trigger the binded callback with object as param.
|
|
79
86
|
|
|
80
|
-
import { TabProvider } from '
|
|
87
|
+
import { TabProvider } from '@bydata/react-supertabs';
|
|
81
88
|
<TabProvider
|
|
82
89
|
SITE_PREFIX={SITE_PREFIX}
|
|
83
90
|
SITE_PAGES={SITE_PAGES}
|
|
@@ -94,7 +101,7 @@ import { TabProvider } from 'components/SuperTabs/TabContext';
|
|
|
94
101
|
|
|
95
102
|
>**Render the component within the App's header**
|
|
96
103
|
```
|
|
97
|
-
import { useTabContext } from
|
|
104
|
+
import { SuperTabs, useTabContext } from '@bydata/react-supertabs';
|
|
98
105
|
|
|
99
106
|
<header>
|
|
100
107
|
<SuperTabs />
|
|
@@ -139,7 +146,7 @@ For Avatar:
|
|
|
139
146
|
}
|
|
140
147
|
```
|
|
141
148
|
```
|
|
142
|
-
import SuperLink from
|
|
149
|
+
import { SuperLink } from '@bydata/react-supertabs';
|
|
143
150
|
<SuperLink tab={page} isSubTab={false}>
|
|
144
151
|
{page.title}
|
|
145
152
|
</SuperLink>
|
|
@@ -148,7 +155,7 @@ import SuperLink from "components/SuperTabs/SuperLink";
|
|
|
148
155
|
OR
|
|
149
156
|
|
|
150
157
|
```
|
|
151
|
-
import { useTabContext } from
|
|
158
|
+
import { useTabContext } from '@bydata/react-supertabs';
|
|
152
159
|
const { openSuperTabOnRowClick } = useTabContext();
|
|
153
160
|
|
|
154
161
|
function handleRowClick(e) {
|
|
@@ -162,8 +169,7 @@ function handleRowClick(e) {
|
|
|
162
169
|
|
|
163
170
|
If a module requires a plus button for adding a new tab, you can include the following:
|
|
164
171
|
```
|
|
165
|
-
import { emitter } from
|
|
166
|
-
import { useTabContext } from "components/SuperTabs/TabContext";
|
|
172
|
+
import { emitter, useTabContext } from '@bydata/react-supertabs';
|
|
167
173
|
|
|
168
174
|
const { openSuperTabOnRowClick } = useTabContext();
|
|
169
175
|
|
|
@@ -198,7 +204,7 @@ useEffect(() => {
|
|
|
198
204
|
When a tab is closed, it may be necessary to clean up some data. The `superTabClose` event can be utilized for this purpose.
|
|
199
205
|
|
|
200
206
|
```
|
|
201
|
-
import { emitter } from
|
|
207
|
+
import { emitter } from '@bydata/react-supertabs';
|
|
202
208
|
|
|
203
209
|
useEffect(() => {
|
|
204
210
|
const unsub = emitter.subscribe('superTabClose', ({ appId, isSubTab, tab }) => {
|
|
@@ -215,7 +221,7 @@ useEffect(() => {
|
|
|
215
221
|
- If a profile is deleted, the tab will remain open. To address this, we can display a "Page Not Available" message.
|
|
216
222
|
|
|
217
223
|
```
|
|
218
|
-
import
|
|
224
|
+
import { NotAvailable } from '@bydata/react-supertabs';
|
|
219
225
|
|
|
220
226
|
<NotAvailable subTabName='Profile' />
|
|
221
227
|
```
|
|
@@ -223,7 +229,7 @@ import NotAvailable from 'components/SuperTabs/NotAvailable';
|
|
|
223
229
|
>**Keep Alive (Experimental)**
|
|
224
230
|
|
|
225
231
|
```
|
|
226
|
-
import { withKeepAlive } from
|
|
232
|
+
import { withKeepAlive } from '@bydata/react-supertabs';
|
|
227
233
|
|
|
228
234
|
// Same id provided for this module in navigation.js
|
|
229
235
|
export default withKeepAlive(Component, Unique ID);
|
|
@@ -239,8 +245,7 @@ Keep Alive Cleanup
|
|
|
239
245
|
```
|
|
240
246
|
// This can be incorporated into a component that is always rendered, such as the header.
|
|
241
247
|
|
|
242
|
-
import { useAliveScope } from
|
|
243
|
-
import { emitter } from "components/SuperTabs/SuperTabs";
|
|
248
|
+
import { useAliveScope, emitter } from '@bydata/react-supertabs';
|
|
244
249
|
|
|
245
250
|
const { drop } = useAliveScope();
|
|
246
251
|
|
package/dist/SuperTabs.js
CHANGED
|
@@ -72,10 +72,11 @@ var filterSubTabs = function filterSubTabs(subTabs) {
|
|
|
72
72
|
// return { subTabsInList, subTabsInNavbar };
|
|
73
73
|
};
|
|
74
74
|
var getActiveParentTabName = function getActiveParentTabName(url, homeUrl) {
|
|
75
|
-
|
|
75
|
+
var homeSegments = homeUrl.split('/').filter(Boolean);
|
|
76
|
+
if (homeSegments.length === 1) {
|
|
76
77
|
return url.split('/')[1]; // ex. /organization/1 => organization, /recruiter/home => recruiter
|
|
77
78
|
}
|
|
78
|
-
return url.split('/')[2]; //
|
|
79
|
+
return url.split('/')[2]; // e.g. /app/organization/1 => organization (has app prefix)
|
|
79
80
|
};
|
|
80
81
|
|
|
81
82
|
// function calculateTransitionDuration(totalWidth, avgWidth = maxTabWidth) {
|
|
@@ -91,6 +92,7 @@ var SuperTabs = function SuperTabs(_ref) {
|
|
|
91
92
|
var addButtonCallBackRefs = (0, _react.useRef)({});
|
|
92
93
|
var transitionTimeOutRef = (0, _react.useRef)(null);
|
|
93
94
|
var expandingTabIdRef = (0, _react.useRef)(null);
|
|
95
|
+
var homeTabRef = (0, _react.useRef)(null);
|
|
94
96
|
var _useTabContext = (0, _TabContext.useTabContext)(),
|
|
95
97
|
lastOpenedUrl = _useTabContext.lastOpenedUrl,
|
|
96
98
|
SITE_PAGES = _useTabContext.SITE_PAGES,
|
|
@@ -169,6 +171,10 @@ var SuperTabs = function SuperTabs(_ref) {
|
|
|
169
171
|
_useState8 = _slicedToArray(_useState7, 2),
|
|
170
172
|
isHoveringBrand = _useState8[0],
|
|
171
173
|
setIsHoveringBrand = _useState8[1];
|
|
174
|
+
var _useState9 = (0, _react.useState)(5),
|
|
175
|
+
_useState0 = _slicedToArray(_useState9, 2),
|
|
176
|
+
appPagesLeft = _useState0[0],
|
|
177
|
+
setAppPagesLeft = _useState0[1];
|
|
172
178
|
|
|
173
179
|
// Refs for hover timeout management
|
|
174
180
|
var hoverTimeoutRef = (0, _react.useRef)(null);
|
|
@@ -326,6 +332,15 @@ var SuperTabs = function SuperTabs(_ref) {
|
|
|
326
332
|
clearTimeout(hoverOffTimeoutRef.current);
|
|
327
333
|
};
|
|
328
334
|
}, []);
|
|
335
|
+
var updateAppPagesPosition = (0, _react.useCallback)(function () {
|
|
336
|
+
var _homeTabRef$current;
|
|
337
|
+
var homeTabRect = (_homeTabRef$current = homeTabRef.current) === null || _homeTabRef$current === void 0 ? void 0 : _homeTabRef$current.getBoundingClientRect();
|
|
338
|
+
if (!homeTabRect) return;
|
|
339
|
+
setAppPagesLeft(Math.max(0, homeTabRect.x));
|
|
340
|
+
}, []);
|
|
341
|
+
(0, _react.useLayoutEffect)(function () {
|
|
342
|
+
updateAppPagesPosition();
|
|
343
|
+
}, [updateAppPagesPosition, showMainMenu]);
|
|
329
344
|
|
|
330
345
|
// Hover handlers for brand wrapper
|
|
331
346
|
var handleBrandHoverEnter = function handleBrandHoverEnter() {
|
|
@@ -495,8 +510,8 @@ var SuperTabs = function SuperTabs(_ref) {
|
|
|
495
510
|
setIsSubTabCollapsing(false);
|
|
496
511
|
}, 1000);
|
|
497
512
|
setTimeout(function () {
|
|
498
|
-
|
|
499
|
-
},
|
|
513
|
+
updateMaxWidth();
|
|
514
|
+
}, 210);
|
|
500
515
|
} else {
|
|
501
516
|
if (superTabsWrapperElemRef.current) superTabsWrapperElemRef.current.style.setProperty('--transition-duration-extended', "".concat(_Constants.transitionDurationExtended, "ms"));
|
|
502
517
|
// expandedTabIDRef.current = id;
|
|
@@ -692,7 +707,8 @@ var SuperTabs = function SuperTabs(_ref) {
|
|
|
692
707
|
ref: superTabsWrapperElemRef
|
|
693
708
|
}, /*#__PURE__*/_react["default"].createElement(_reactRouterDom.NavLink, {
|
|
694
709
|
to: homeUrl,
|
|
695
|
-
className: "home-tab"
|
|
710
|
+
className: "home-tab",
|
|
711
|
+
ref: homeTabRef
|
|
696
712
|
// activeClassName="active"
|
|
697
713
|
// title="Home"
|
|
698
714
|
,
|
|
@@ -716,6 +732,7 @@ var SuperTabs = function SuperTabs(_ref) {
|
|
|
716
732
|
tab: (0, _Utils.getHomeTab)(homeUrl),
|
|
717
733
|
isHomeTab: true
|
|
718
734
|
});
|
|
735
|
+
resetMaxWidth();
|
|
719
736
|
},
|
|
720
737
|
exact: true
|
|
721
738
|
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
@@ -731,6 +748,9 @@ var SuperTabs = function SuperTabs(_ref) {
|
|
|
731
748
|
}
|
|
732
749
|
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
733
750
|
className: "app-pages-wrapper",
|
|
751
|
+
style: {
|
|
752
|
+
left: "".concat(appPagesLeft, "px")
|
|
753
|
+
},
|
|
734
754
|
onMouseEnter: handleMenuHoverEnter,
|
|
735
755
|
onMouseLeave: handleMenuHoverLeave
|
|
736
756
|
}, SITE_PAGES.map(function (page, index) {
|
|
@@ -763,7 +783,7 @@ var SuperTabs = function SuperTabs(_ref) {
|
|
|
763
783
|
}), tabs.map(function (tab, index) {
|
|
764
784
|
var _tab$subTabs, _tab$subTabs2, _tab$subTabs3, _tab$subTabs4;
|
|
765
785
|
var url = tab.url;
|
|
766
|
-
var pathname =
|
|
786
|
+
var pathname = location.pathname;
|
|
767
787
|
var formattedPathname = getActiveParentTabName(pathname, homeUrl);
|
|
768
788
|
var tabUrl = getActiveParentTabName(tab.url, homeUrl);
|
|
769
789
|
if (tabUrl === formattedPathname) {
|
|
@@ -817,7 +837,7 @@ var SuperTabs = function SuperTabs(_ref) {
|
|
|
817
837
|
}, 0) : subTabWithOpenOrderOneWidth || 0;
|
|
818
838
|
var getItemStyle = function getItemStyle(draggableStyle) {
|
|
819
839
|
return _objectSpread({
|
|
820
|
-
maxWidth:
|
|
840
|
+
maxWidth: maxWidth ? "".concat(maxWidth, "px") : "".concat(width, "px")
|
|
821
841
|
}, draggableStyle);
|
|
822
842
|
};
|
|
823
843
|
var _filterSubTabs = filterSubTabs(tab.subTabs),
|
|
@@ -873,9 +893,10 @@ var SuperTabs = function SuperTabs(_ref) {
|
|
|
873
893
|
to: tab.url,
|
|
874
894
|
className: "tab" + " tab-" + tab.id + ((expandedTabID ? tab.width : maxWidth) && (0, _Utils.compareDecimals)(expandedTabID ? tab.width || width : maxWidth, width) === -1 ? ' fade-at-end' : '') + (!hasAccessToTab ? ' disabled-tab' : '') + (containsSubTabs ? ' has-child' : '') + (shrinkedTab ? ' shrinked-tab' : '')
|
|
875
895
|
// (showSubTabs ? ' expanded' : '')
|
|
896
|
+
// style={{ maxWidth: expandedTabID ? `${(tab.width + additionalWidth || width) - 10}px` : `${width}px` }}
|
|
876
897
|
,
|
|
877
898
|
style: {
|
|
878
|
-
maxWidth:
|
|
899
|
+
maxWidth: maxWidth ? "".concat(maxWidth, "px") : "".concat(width, "px")
|
|
879
900
|
}
|
|
880
901
|
// title={tab.title}
|
|
881
902
|
,
|
|
@@ -1052,7 +1073,7 @@ var TabContentWrapper = function TabContentWrapper(_ref9) {
|
|
|
1052
1073
|
}, /*#__PURE__*/_react["default"].createElement("div", null, title))), isActive && /*#__PURE__*/_react["default"].createElement("div", {
|
|
1053
1074
|
className: "tab-close-btn-wrapper"
|
|
1054
1075
|
}, /*#__PURE__*/_react["default"].createElement("button", {
|
|
1055
|
-
className: "tab-close-btn",
|
|
1076
|
+
className: "super-tab-close-btn",
|
|
1056
1077
|
title: "Close tab",
|
|
1057
1078
|
onClick: function onClick(e) {
|
|
1058
1079
|
e.preventDefault();
|
|
@@ -1082,7 +1103,7 @@ var TabContentWrapper = function TabContentWrapper(_ref9) {
|
|
|
1082
1103
|
})))), Suffix && isActive && window.innerWidth < 640 && /*#__PURE__*/_react["default"].createElement(Suffix, null), !isActive && /*#__PURE__*/_react["default"].createElement("div", {
|
|
1083
1104
|
className: "tab-close-btn-wrapper"
|
|
1084
1105
|
}, /*#__PURE__*/_react["default"].createElement("button", {
|
|
1085
|
-
className: "tab-close-btn",
|
|
1106
|
+
className: "super-tab-close-btn",
|
|
1086
1107
|
title: "Close tab",
|
|
1087
1108
|
onClick: function onClick(e) {
|
|
1088
1109
|
e.preventDefault();
|
|
@@ -1113,16 +1134,17 @@ var SubTab = exports.SubTab = function SubTab(_ref0) {
|
|
|
1113
1134
|
index = _ref0.index,
|
|
1114
1135
|
hasSingleSubTab = _ref0.hasSingleSubTab;
|
|
1115
1136
|
// const { closingUnexpandedSubTab, openingUnexpandedSubTab, subTabChange } = useTabContext();
|
|
1116
|
-
var
|
|
1117
|
-
|
|
1118
|
-
showTooltip =
|
|
1119
|
-
setShowTooltip =
|
|
1137
|
+
var _useState1 = (0, _react.useState)(true),
|
|
1138
|
+
_useState10 = _slicedToArray(_useState1, 2),
|
|
1139
|
+
showTooltip = _useState10[0],
|
|
1140
|
+
setShowTooltip = _useState10[1];
|
|
1120
1141
|
var _useTabContext3 = (0, _TabContext.useTabContext)(),
|
|
1121
1142
|
hiddenExternalToolbars = _useTabContext3.hiddenExternalToolbars,
|
|
1122
1143
|
tabModePreference = _useTabContext3.tabModePreference;
|
|
1144
|
+
var location = (0, _reactRouterDom.useLocation)();
|
|
1123
1145
|
var subTabUrl = (_subTab$url = subTab.url) !== null && _subTab$url !== void 0 ? _subTab$url : "/".concat(tabUrl, "/f-").concat(subTab.id);
|
|
1124
1146
|
var subTabUrlWithoutSearchParam = subTabUrl.split('?')[0];
|
|
1125
|
-
var pathname =
|
|
1147
|
+
var pathname = location.pathname;
|
|
1126
1148
|
var isSubTabActive = subTabUrlWithoutSearchParam === pathname;
|
|
1127
1149
|
var title = (0, _Utils.getTitle)(subTab);
|
|
1128
1150
|
var hasToolbarButton = isSubTabActive && hiddenExternalToolbars[subTab.id];
|
|
@@ -1151,8 +1173,9 @@ var SubTab = exports.SubTab = function SubTab(_ref0) {
|
|
|
1151
1173
|
return _objectSpread({
|
|
1152
1174
|
// calculateWidth({ text: title, hasAvatar: subTab.showAvatar, });
|
|
1153
1175
|
marginLeft: isVisible ? "".concat(_Constants.MarginLeft, "px") : '0px',
|
|
1154
|
-
// maxWidth: maxWidth ? `${maxWidth}px` : `${width}px`,
|
|
1176
|
+
// maxWidth: maxWidth && !isSubTabActive ? `${maxWidth}px` : `${width}px`,
|
|
1155
1177
|
width: isVisible ? "".concat(expandedTabID === tab.id || closingTabID === tab.id ? subTab.width + additionalWidth || width : width, "px") : '0px',
|
|
1178
|
+
// width: isVisible ? `${!isSubTabActive && (expandedTabID === tab.id || closingTabID === tab.id) ? subTab.width + additionalWidth || width : width}px` : '0px',
|
|
1156
1179
|
opacity: isVisible ? 1 : 0
|
|
1157
1180
|
}, draggableStyle);
|
|
1158
1181
|
};
|
|
@@ -1176,6 +1199,7 @@ var SubTab = exports.SubTab = function SubTab(_ref0) {
|
|
|
1176
1199
|
className: "tab sub-tab" + (show ? ' show' : '') + (
|
|
1177
1200
|
// (isTabClosing ? ' slide-out' : '') +
|
|
1178
1201
|
// (isTabOpening ? ' fade-in' : '') +
|
|
1202
|
+
// (expandedTabID && subTab.width && !isSubTabActive && compareDecimals(subTab.width, width) === -1 ? ' fade-at-end' : '') +
|
|
1179
1203
|
expandedTabID && subTab.width && (0, _Utils.compareDecimals)(subTab.width, width) === -1 ? ' fade-at-end' : '') + (
|
|
1180
1204
|
// (closingUnexpandedSubTab || openingUnexpandedSubTab ? ' no-transition' : '') +
|
|
1181
1205
|
snapshot.isDragging ? ' dragging' : '') + (subTab.isFixed ? ' fixed' : ''),
|
package/dist/SuperTabs.scss
CHANGED
|
@@ -72,7 +72,7 @@ body[data-theme="light"] {
|
|
|
72
72
|
.app-pages-wrapper {
|
|
73
73
|
// Adjust positioning for mobile if needed
|
|
74
74
|
top: calc(100% + 10px);
|
|
75
|
-
left: 0;
|
|
75
|
+
// left: 0;
|
|
76
76
|
width: calc(100vw - 20px);
|
|
77
77
|
max-width: 280px;
|
|
78
78
|
}
|
|
@@ -169,25 +169,6 @@ body[data-theme="light"] {
|
|
|
169
169
|
}
|
|
170
170
|
}
|
|
171
171
|
|
|
172
|
-
.tab-close-btn {
|
|
173
|
-
height: 16px;
|
|
174
|
-
width: 16px;
|
|
175
|
-
padding: 0;
|
|
176
|
-
position: relative;
|
|
177
|
-
top: 0;
|
|
178
|
-
|
|
179
|
-
cursor: pointer;
|
|
180
|
-
border: none;
|
|
181
|
-
background-color: var(--tab-text-active);
|
|
182
|
-
mask: url(./images/icon-close-lite.svg) no-repeat center center;
|
|
183
|
-
mask-size: 8px;
|
|
184
|
-
transition: background-color ease-out (--transition-duration);
|
|
185
|
-
|
|
186
|
-
&:hover {
|
|
187
|
-
background-color: var(--tab-text-active);
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
|
|
191
172
|
.tab {
|
|
192
173
|
position: relative;
|
|
193
174
|
color: var(--tab-text-active);
|
|
@@ -398,7 +379,7 @@ body[data-theme="light"] {
|
|
|
398
379
|
animation-timing-function: cubic-bezier(0.07, -0.24, 0.6, 0.34);
|
|
399
380
|
animation-duration: var(--transition-duration);
|
|
400
381
|
|
|
401
|
-
.tab-close-btn {
|
|
382
|
+
.super-tab-close-btn {
|
|
402
383
|
background-color: var(--tab-color-white);
|
|
403
384
|
}
|
|
404
385
|
}
|
|
@@ -891,4 +872,23 @@ body[data-theme="light"] {
|
|
|
891
872
|
transform: translateY(0) scale(1);
|
|
892
873
|
}
|
|
893
874
|
}
|
|
875
|
+
}
|
|
876
|
+
|
|
877
|
+
.super-tab-close-btn {
|
|
878
|
+
height: 16px;
|
|
879
|
+
width: 16px;
|
|
880
|
+
padding: 0;
|
|
881
|
+
position: relative;
|
|
882
|
+
top: 0;
|
|
883
|
+
|
|
884
|
+
cursor: pointer;
|
|
885
|
+
border: none;
|
|
886
|
+
background-color: var(--tab-text-active);
|
|
887
|
+
mask: url(./images/icon-close-lite.svg) no-repeat center center;
|
|
888
|
+
mask-size: 8px;
|
|
889
|
+
transition: background-color ease-out var(--transition-duration);
|
|
890
|
+
|
|
891
|
+
&:hover {
|
|
892
|
+
background-color: var(--tab-text-active);
|
|
893
|
+
}
|
|
894
894
|
}
|
package/dist/TabContext.js
CHANGED
|
@@ -390,16 +390,29 @@ function TabProvider(_ref9) {
|
|
|
390
390
|
var openedSubTabsLength = subTabs.filter(function (t) {
|
|
391
391
|
return t.order !== 0;
|
|
392
392
|
}).length;
|
|
393
|
-
var
|
|
394
|
-
var
|
|
395
|
-
var
|
|
393
|
+
var totalVisibleTabs = openParentTabsLength + (expandedTabIDRef.current ? openedSubTabsLength : subTabWithOpenOrderOne ? 1 : 0);
|
|
394
|
+
var visibleSubTabsForMargin = expandedTabIDRef.current ? openedSubTabsLength : 0;
|
|
395
|
+
var containerWidth = ((_superTabsWrapperElem = superTabsWrapperElemRef.current) === null || _superTabsWrapperElem === void 0 ? void 0 : _superTabsWrapperElem.offsetWidth) - (_Constants.HomeTabWidth + _Constants.MainTabGap * openParentTabsLength + visibleSubTabsForMargin * _Constants.MarginLeft + _Constants.StackButtonWidth + _Constants.SubTabWrapperPadding);
|
|
396
|
+
// console.log('offsetWidth', superTabsWrapperElemRef.current?.offsetWidth, 'HomeTabWidth', HomeTabWidth, 'MainTabGap', MainTabGap, 'openedSubTabsLength', openedSubTabsLength, 'MarginLeft', MarginLeft, 'StackButtonWidth', StackButtonWidth, 'SubTabWrapperPadding', SubTabWrapperPadding);
|
|
397
|
+
// console.log('offsetWidth', superTabsWrapperElemRef.current?.offsetWidth, 'HomeTabWidth', HomeTabWidth, 'MainTabGap', MainTabGap * openParentTabsLength, 'openedSubTabsLength', visibleSubTabsForMargin * MarginLeft, 'StackButtonWidth', StackButtonWidth, 'SubTabWrapperPadding', SubTabWrapperPadding);
|
|
398
|
+
var maxWidth = Math.ceil(containerWidth / totalVisibleTabs * 100) / 100;
|
|
396
399
|
var totalMinWidth = 0;
|
|
397
400
|
var numElementsNeedingSpace = 0;
|
|
398
401
|
|
|
399
402
|
// Calculate the total width and minimum width of all elements
|
|
400
403
|
var activeTabWidth = activeTabRef.current ? (0, _Utils.getTextWidth)((0, _Utils.getTitle)(activeTabRef.current), _Constants.fontStyle) + 42 : 0;
|
|
401
|
-
var tabLengthWithoutActiveTab =
|
|
402
|
-
|
|
404
|
+
var tabLengthWithoutActiveTab = totalVisibleTabs - 1;
|
|
405
|
+
var subTabWithOpenOrderOneWidth = subTabWithOpenOrderOne ? Math.ceil((0, _Utils.calculateWidth)({
|
|
406
|
+
text: (0, _Utils.getTitle)(subTabWithOpenOrderOne),
|
|
407
|
+
hasAvatar: subTabWithOpenOrderOne.showAvatar,
|
|
408
|
+
addMargin: false
|
|
409
|
+
}) * 100) / 100 : 0;
|
|
410
|
+
var shouldReserveOpenSubTabWidth = !expandedTabIDRef.current ? !!subTabWithOpenOrderOne : !!openedSubTabsLength;
|
|
411
|
+
var tabLengthWithoutReservedTabs = tabLengthWithoutActiveTab - (shouldReserveOpenSubTabWidth ? 1 : 0);
|
|
412
|
+
var widthToRedistribute = activeTabWidth - maxWidth + (shouldReserveOpenSubTabWidth ? subTabWithOpenOrderOneWidth - maxWidth : 0);
|
|
413
|
+
if (tabLengthWithoutReservedTabs > 0) {
|
|
414
|
+
maxWidth = maxWidth - widthToRedistribute / tabLengthWithoutReservedTabs;
|
|
415
|
+
}
|
|
403
416
|
setMaxWidth(maxWidth);
|
|
404
417
|
var newData = data.map(function (tab) {
|
|
405
418
|
var _activeTabRef$current2;
|
|
@@ -701,7 +714,7 @@ function TabProvider(_ref9) {
|
|
|
701
714
|
subTabs: _subTabs.sort(_Utils.sortByOrder)
|
|
702
715
|
}) : t;
|
|
703
716
|
});
|
|
704
|
-
var pathName =
|
|
717
|
+
var pathName = history.location.pathname;
|
|
705
718
|
var isSubTabActive = _subTabs.find(function (t) {
|
|
706
719
|
return t.url === pathName;
|
|
707
720
|
});
|
|
@@ -1064,13 +1077,18 @@ function TabProvider(_ref9) {
|
|
|
1064
1077
|
}
|
|
1065
1078
|
return tabsCopy;
|
|
1066
1079
|
});
|
|
1080
|
+
var oldTitle = (0, _Utils.getTitle)(oldTab);
|
|
1081
|
+
var newTitle = (0, _Utils.getTitle)(newTab);
|
|
1082
|
+
if (oldTitle !== newTitle) {
|
|
1083
|
+
updateMaxWidth();
|
|
1084
|
+
}
|
|
1067
1085
|
// openTab({ tab, isSubTab });
|
|
1068
1086
|
updateCurrentTab({
|
|
1069
1087
|
tab: tab,
|
|
1070
1088
|
isSubTab: isSubTab,
|
|
1071
1089
|
parentId: activeTabRef.current.id
|
|
1072
1090
|
});
|
|
1073
|
-
}, [updateCurrentTab, updateActiveSubTab, updateActiveTab,
|
|
1091
|
+
}, [updateTabs, updateCurrentTab, currentEntityId, updateActiveSubTab, updateActiveTab, updateMaxWidth]);
|
|
1074
1092
|
var closeTab = (0, _react.useCallback)(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee8() {
|
|
1075
1093
|
var _ref25,
|
|
1076
1094
|
tab,
|
|
@@ -1495,7 +1513,7 @@ function TabProvider(_ref9) {
|
|
|
1495
1513
|
_context10.n = 13;
|
|
1496
1514
|
break;
|
|
1497
1515
|
}
|
|
1498
|
-
pathName =
|
|
1516
|
+
pathName = history.location.pathname;
|
|
1499
1517
|
isHomeTab = pathName === homeUrl || pathName === '/';
|
|
1500
1518
|
_context10.n = 3;
|
|
1501
1519
|
return findDuplicateEntriesAndCloseTab(response.tabs);
|
package/dist/TabList.js
CHANGED
|
@@ -178,7 +178,7 @@ var TabList = function TabList(_ref) {
|
|
|
178
178
|
value: tabListSearch,
|
|
179
179
|
onChange: handleSearch
|
|
180
180
|
}), tabListSearch.trim() && /*#__PURE__*/_react["default"].createElement("button", {
|
|
181
|
-
className: "tab-list-close tab-close-btn",
|
|
181
|
+
className: "tab-list-close super-tab-close-btn",
|
|
182
182
|
onClick: function onClick() {
|
|
183
183
|
return setTabListSearch('');
|
|
184
184
|
}
|
|
@@ -220,7 +220,7 @@ var TabList = function TabList(_ref) {
|
|
|
220
220
|
}), /*#__PURE__*/_react["default"].createElement("div", {
|
|
221
221
|
className: "title-wrapper"
|
|
222
222
|
}, title, !tab.isFixed && /*#__PURE__*/_react["default"].createElement("span", {
|
|
223
|
-
className: "tab-list-close-btn tab-close-btn",
|
|
223
|
+
className: "tab-list-close-btn super-tab-close-btn",
|
|
224
224
|
onClick: function onClick(e) {
|
|
225
225
|
e.preventDefault();
|
|
226
226
|
e.stopPropagation();
|
package/dist/TabList.scss
CHANGED
|
@@ -115,7 +115,7 @@
|
|
|
115
115
|
width: 100%;
|
|
116
116
|
}
|
|
117
117
|
|
|
118
|
-
.tab-close-btn {
|
|
118
|
+
.super-tab-close-btn {
|
|
119
119
|
opacity: 0;
|
|
120
120
|
visibility: hidden;
|
|
121
121
|
transition: all 0.3s;
|
|
@@ -125,7 +125,7 @@
|
|
|
125
125
|
&:hover {
|
|
126
126
|
background-color: var(--tab-background-button-secondary);
|
|
127
127
|
|
|
128
|
-
.tab-close-btn {
|
|
128
|
+
.super-tab-close-btn {
|
|
129
129
|
opacity: 1;
|
|
130
130
|
visibility: visible;
|
|
131
131
|
}
|
|
@@ -225,7 +225,7 @@
|
|
|
225
225
|
transition: all 0.3s;
|
|
226
226
|
}
|
|
227
227
|
|
|
228
|
-
.tab-close-btn {
|
|
228
|
+
.super-tab-close-btn {
|
|
229
229
|
opacity: 1;
|
|
230
230
|
visibility: visible;
|
|
231
231
|
}
|
|
@@ -259,7 +259,7 @@
|
|
|
259
259
|
background-color: var(--tab-background-button-secondary);
|
|
260
260
|
}
|
|
261
261
|
|
|
262
|
-
.tab-close-btn {
|
|
262
|
+
.super-tab-close-btn {
|
|
263
263
|
opacity: 0;
|
|
264
264
|
visibility: hidden;
|
|
265
265
|
transition: background-color 0.3s;
|