Skip to content

Commit 06730a9

Browse files
delete elementManagement and use
tabs-more-button package
1 parent 0d68cd6 commit 06730a9

File tree

12 files changed

+25
-637
lines changed

12 files changed

+25
-637
lines changed

src/plugins/moreButtonPlugin/elementManagement/distanceFrom.js

Lines changed: 0 additions & 40 deletions
This file was deleted.

src/plugins/moreButtonPlugin/elementManagement/distanceFromFactory.js

Lines changed: 0 additions & 10 deletions
This file was deleted.

src/plugins/moreButtonPlugin/elementManagement/el.js

Lines changed: 0 additions & 39 deletions
This file was deleted.

src/plugins/moreButtonPlugin/elementManagement/els-factory.js

Lines changed: 0 additions & 5 deletions
This file was deleted.

src/plugins/moreButtonPlugin/elementManagement/els.js

Lines changed: 0 additions & 24 deletions
This file was deleted.

src/plugins/moreButtonPlugin/elementManagement/index.js

Lines changed: 0 additions & 2 deletions
This file was deleted.
Lines changed: 16 additions & 128 deletions
Original file line numberDiff line numberDiff line change
@@ -1,163 +1,51 @@
1-
const Api = function ({getElManagementIns, btnRef, ctx, setHiddenTabIDs}) {
1+
const Api = function ({getResizerIns, btnRef, ctx, setHiddenTabIDs}) {
22
this.api = ctx;
33
this.tablistEl = null;
4-
this.getElManagementIns = getElManagementIns;
4+
this.getResizerIns = getResizerIns;
55
this.tablistContainerEl = null;
66
this.tabs = null;
77
this.tabsCount = null;
88
this.btnRef = btnRef;
99
this._setHiddenTabIDs = setHiddenTabIDs;
1010
};
1111
Object.assign(Api.prototype, {
12-
setEls: function () {
12+
setResizer: function () {
1313
this.tablistEl = this.btnRef.current.previousSibling;
1414
this.tablistContainerEl = this.tablistEl.parentElement.parentElement;
1515
this.tablistViewEl = this.tablistContainerEl.parentElement;
16-
this.tablistEl.style.overflow = 'visible';
17-
this.tablistContainerEl.style.overflow = 'hidden';
16+
debugger;
17+
this._resizer = this.getResizerIns({
18+
containerElement: this.tablistContainerEl,
19+
buttonElement: this.btnRef.current,
20+
});
1821
},
1922
installResizer: function (resizeDetectorIns) {
2023
resizeDetectorIns.debncListenTo(this.tablistViewEl, () => this.resize());
2124
},
2225
uninstallResizer: function (resizeDetectorIns) {
2326
if (this.tablistViewEl && resizeDetectorIns) resizeDetectorIns.uninstall(this.tablistViewEl);
2427
},
25-
showBtn: function () {
26-
this.btnRef.current.style.opacity = 1;
27-
this.btnRef.current.style.position = 'relative';
28-
this.btnRef.current.style.pointerEvents = 'all';
29-
},
30-
hideBtn: function () {
31-
this.btnRef.current.style.opacity = 0;
32-
this.btnRef.current.style.position = 'absolute';
33-
this.btnRef.current.style.pointerEvents = 'none';
34-
},
35-
checkOverflow: function (lastTab) {
36-
return this.els.getDistance(lastTab).value < 0;
37-
},
38-
showAll: function () {
39-
this.tablistContainerEl.style.display = 'none';
40-
for (let i = 0, tabs = this.tablistEl.children, tabsCount = tabs.length; i < tabsCount; i++) {
41-
tabs[i].style.display = 'flex';
42-
}
43-
this.hideBtn();
44-
this.tablistContainerEl.style.display = 'flex';
45-
},
46-
hideTabs: function (firstHiddenTabIndex, selectedTabInfo, includeSelectedTab) {
47-
const {openTabIDs} = this.api.getData();
48-
const hiddenTabIDs = [];
49-
this.tablistContainerEl.style.display = 'none';
50-
const {index: selectedTabIndex} = selectedTabInfo;
51-
for (let i = firstHiddenTabIndex, tabsCount = this.tabsCount; i < tabsCount; i++) {
52-
if (includeSelectedTab || i !== selectedTabIndex) {
53-
this.tabs[i].style.display = 'none';
54-
hiddenTabIDs.push(openTabIDs[i]);
55-
}
56-
}
57-
this.showBtn();
58-
this.tablistContainerEl.style.display = 'flex';
59-
this._setHiddenTabIDs(hiddenTabIDs.toString());
60-
},
61-
getSelectedTabInfo: function (tabs, data) {
62-
const {openTabIDs, selectedTabID} = data;
63-
const index = openTabIDs.indexOf(selectedTabID);
64-
const el = index >= 0 ? tabs[index] : null;
65-
const overflow = el
66-
? this.els.getDistance(el).sub(this.els.getEl(this.btnRef.current).getFullSize()).value <= 0
67-
: false;
68-
const overflowFullSize = overflow ? this.els.getEl(el).getFullSize() : 0;
69-
return {index, overflowFullSize};
70-
},
71-
validateTabsCount: function (data) {
72-
const openTabsCount = data.openTabIDs.length;
73-
if (!openTabsCount) {
74-
return false;
75-
}
28+
_validateTabsCount: function (data) {
7629
this.tabs = this.tablistEl.children;
7730
this.tabsCount = this.tabs.length;
78-
if (openTabsCount !== this.tabsCount) {
31+
if (data.openTabIDs.length !== this.tabsCount) {
7932
throw new Error("tablist children's length is not equal to openTabIDs length");
8033
}
8134
return true;
8235
},
8336
resize: function () {
8437
const ins = this.api;
8538
const data = ins.getData();
86-
if (this.validateTabsCount(data) === false) {
39+
if (this._validateTabsCount(data) === false) {
8740
return this._setHiddenTabIDs('');
8841
}
89-
this.showAll(); //showAll should be called regardless of overflow
90-
this.els = this.getElManagementIns({
91-
baseEl: this.tablistContainerEl,
92-
isVertical: ins.getOption('isVertical'),
93-
dir: ins.getOption('direction'),
94-
});
95-
const _lastTab = this.tabs[this.tabsCount - 1];
96-
if (this.checkOverflow(_lastTab) === false) {
42+
const {openTabIDs, selectedTabID} = data;
43+
const selectedTabIndex = openTabIDs.indexOf(selectedTabID);
44+
const hiddenTabs = this._resizer.resize(selectedTabIndex, ins.getOption('direction'), ins.getOption('isVertical'));
45+
if (!hiddenTabs.length) {
9746
return this._setHiddenTabIDs('');
9847
}
99-
const selectedTabInfo = this.getSelectedTabInfo(this.tabs, data);
100-
this.validateSliderMinSize(selectedTabInfo)
101-
? this.hideTabs(
102-
this.findFirstHiddenTabIndexFactory(
103-
selectedTabInfo,
104-
this.getSearchBoundries(selectedTabInfo),
105-
this.getOrder(_lastTab),
106-
),
107-
selectedTabInfo,
108-
)
109-
: this.hideTabs(0, selectedTabInfo, true);
110-
},
111-
validateSliderMinSize: function (selectedTabInfo) {
112-
//the slider's size should greater than size of selected tab + more button
113-
return selectedTabInfo.overflowFullSize + this.els.getEl(this.btnRef.current).getFullSize() >=
114-
this.els.getEl(this.tablistContainerEl).getSize()
115-
? false
116-
: true;
117-
},
118-
getOrder: function (lastTab) {
119-
return Math.abs(this.els.getDistance(lastTab).value) > this.els.getEl(this.tablistContainerEl).getSize()
120-
? 'asc'
121-
: 'desc';
122-
},
123-
getSearchBoundries: function (selectedTabInfo) {
124-
const {overflowFullSize, index: pivotIndex} = selectedTabInfo;
125-
//if selected tab is not existed
126-
if (pivotIndex < 0) {
127-
return [0, this.tabsCount - 2];
128-
}
129-
const isSelectedTabOverflow = overflowFullSize > 0;
130-
return isSelectedTabOverflow ? [0, pivotIndex - 1] : [pivotIndex + 1, this.tabsCount - 2];
131-
},
132-
getTabDis: function (selectedTabInfo, el) {
133-
return this.els
134-
.getDistance(el)
135-
.sub(selectedTabInfo.overflowFullSize)
136-
.sub(this.els.getEl(this.btnRef.current).getFullSize());
137-
},
138-
findFirstHiddenTabIndexDSCE: function (selectedTabInfo, start, stop) {
139-
let value = this.tabsCount - 1;
140-
for (let i = stop; i >= start; i--) {
141-
if (this.getTabDis(selectedTabInfo, this.tabs[i]).value <= 0) {
142-
value = i;
143-
} else {
144-
break;
145-
}
146-
}
147-
return value;
148-
},
149-
findFirstHiddenTabIndexASC: function (selectedTabInfo, start, stop) {
150-
for (let i = start; i <= stop; i++) {
151-
if (this.getTabDis(selectedTabInfo, this.tabs[i]).value <= 0) {
152-
return i;
153-
}
154-
}
155-
return this.tabsCount - 1;
156-
},
157-
findFirstHiddenTabIndexFactory: function (selectedTabInfo, [start, stop], order) {
158-
return order === 'asc'
159-
? this.findFirstHiddenTabIndexASC(selectedTabInfo, start, stop)
160-
: this.findFirstHiddenTabIndexDSCE(selectedTabInfo, start, stop);
48+
this._setHiddenTabIDs(hiddenTabs.map(({index}) => openTabIDs[index]).toString());
16149
},
16250
});
16351
export default Api;

0 commit comments

Comments
 (0)