Skip to content

Commit 1ce1af8

Browse files
committed
refactor: 禁用dockview的tabs溢出选择下拉框并处理冲突
1 parent 75784c4 commit 1ce1af8

3 files changed

Lines changed: 31 additions & 33 deletions

File tree

src/components/BootstrapBlazor.DockView/wwwroot/js/dockview-core.esm.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10815,4 +10815,3 @@ function createPaneview(element, options) {
1081510815
}
1081610816

1081710817
export { BaseGrid, ContentContainer, DefaultDockviewDeserialzier, DefaultTab, DockviewApi, DockviewComponent, CompositeDisposable as DockviewCompositeDisposable, DockviewDidDropEvent, Disposable as DockviewDisposable, Emitter as DockviewEmitter, Event as DockviewEvent, DockviewGroupPanel, DockviewGroupPanelModel, MutableDisposable as DockviewMutableDisposable, DockviewPanel, DockviewUnhandledDragOverEvent, DockviewWillDropEvent, DraggablePaneviewPanel, Gridview, GridviewApi, GridviewComponent, GridviewPanel, LayoutPriority, Orientation, PROPERTY_KEYS_DOCKVIEW, PROPERTY_KEYS_GRIDVIEW, PROPERTY_KEYS_PANEVIEW, PROPERTY_KEYS_SPLITVIEW, PaneFramework, PaneTransfer, PanelTransfer, Paneview, PaneviewApi, PaneviewComponent, PaneviewPanel, PaneviewUnhandledDragOverEvent, SashState, Sizing, Splitview, SplitviewApi, SplitviewComponent, SplitviewPanel, Tab, WillShowOverlayLocationEvent, createDockview, createGridview, createPaneview, createSplitview, directionToPosition, getDirectionOrientation, getGridLocation, getLocationOrientation, getPaneData, getPanelData, getRelativeLocation, indexInParent, isGridBranchNode, isGroupOptionsWithGroup, isGroupOptionsWithPanel, isPanelOptionsWithGroup, isPanelOptionsWithPanel, orthogonal, positionToDirection, themeAbyss, themeAbyssSpaced, themeDark, themeDracula, themeLight, themeLightSpaced, themeReplit, themeVisualStudio, toTarget };
10818-
//# sourceMappingURL=dockview-core.esm.js.map

src/components/BootstrapBlazor.DockView/wwwroot/js/dockview-group.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ const onAddGroup = group => {
2323
saveConfig(dockview)
2424
})
2525
createGroupActions(group);
26-
// dockview._inited && observeGroup(group)
26+
dockview._inited && observeGroup(group)
2727
}
2828

2929
const addGroupWithPanel = (dockview, panel, panels, index) => {
@@ -180,7 +180,7 @@ const disposeGroup = group => {
180180
const { observer } = group.api.accessor.params;
181181
if (observer) {
182182
observer.unobserve(group.header.element);
183-
observer.unobserve(group.header.tabContainer);
183+
observer.unobserve(group.header.tabs._tabsList);
184184
}
185185
removeActionEvent(group);
186186
}
@@ -497,7 +497,7 @@ const createFloatingGroup = (group, rect, groupType) => {
497497
activePanel.api.setActive()
498498
const overlay = dockview.floatingGroups.find(fg => fg.group.id == floatingGroup.id).overlay
499499
observeOverlayChange(overlay, floatingGroup)
500-
// observeGroup(floatingGroup)
500+
observeGroup(floatingGroup)
501501
createGroupActions(floatingGroup, groupType)
502502
return floatingGroup
503503
}

src/components/BootstrapBlazor.DockView/wwwroot/js/dockview-utils.js

Lines changed: 28 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import { getConfig, reloadFromConfig, loadPanelsFromLocalstorage, saveConfig } f
66
import './dockview-extensions.js'
77

88
const cerateDockview = (el, options) => {
9-
console.log(options, 'options');
109
// options.renderer = 'always'
1110
// options.renderer = 'onlyWhenVisible'
1211
const template = el.querySelector('template');
@@ -15,12 +14,11 @@ const cerateDockview = (el, options) => {
1514
theme: options.theme || {
1615
name: "light",
1716
className: "dockview-theme-light",
18-
// gap: 3, //group间距
19-
// dndOverlayMounting: 'absolute' | 'relative', //拖拽时遮罩层挂载到root还是当前group, 'absolute'有完整过渡动画效果, 'relative'只在当前group显示过渡动画效果
20-
// dndPanelOverlay: 'content' | 'group', // 拖拽时遮罩层只覆盖content还是覆盖整个group
21-
dndOverlayMounting: 'absolute',
22-
dndPanelOverlay: 'group',
17+
// gap: 3,
18+
dndOverlayMounting: 'absolute', // 'absolute' | 'relative'
19+
dndPanelOverlay: 'group', // 'content' | 'group'
2320
},
21+
disableTabsOverflowList: true,
2422
createComponent: option => new DockviewPanelContent(option)
2523
});
2624
initDockview(dockview, options, template);
@@ -36,7 +34,6 @@ const initDockview = (dockview, options, template) => {
3634
dockview.init = () => {
3735
const config = getConfig(options);
3836
dockview.params.floatingGroups = config.floatingGroups || []
39-
console.log(config, 'config');
4037
dockview.fromJSON(config);
4138
window.dockview = dockview;
4239
}
@@ -114,10 +111,10 @@ const initDockview = (dockview, options, template) => {
114111
})
115112

116113
dockview._inited = true;
117-
dockview._initialized?.fire()
118-
// dockview.groups.forEach(group => {
119-
// observeGroup(group)
120-
// })
114+
dockview._initialized?.fire();
115+
dockview.groups.forEach(group => {
116+
observeGroup(group)
117+
})
121118
}, 100);
122119
})
123120

@@ -138,7 +135,7 @@ export const observeGroup = (group) => {
138135
dockview.params.observer = new ResizeObserver(observerList => requestAnimationFrame(() => resizeObserverHandle(observerList, dockview)));
139136
}
140137
dockview.params.observer.observe(group.header.element)
141-
dockview.params.observer.observe(group.header.tabContainer)
138+
dockview.params.observer.observe(group.header.tabs._tabsList)
142139
for (let panel of group.panels) {
143140
if (panel.params.isActive) {
144141
panel.api.setActive()
@@ -155,7 +152,7 @@ const resizeObserverHandle = (observerList, dockview) => {
155152
const setWidth = (target, dockview) => {
156153
let header, tabsContainer
157154
if (target.classList.contains('dv-tabs-container')) {
158-
header = target.parentElement
155+
header = target.parentElement.parentElement
159156
tabsContainer = target
160157
}
161158
else {
@@ -170,31 +167,33 @@ const setWidth = (target, dockview) => {
170167
if (voidWidth === 0) {
171168
if (tabsContainer.children.length <= 1) return
172169
const inactiveTabs = header.querySelectorAll('.dv-tabs-container>.dv-tab')
173-
const lastTab = inactiveTabs[inactiveTabs.length - 1]
174-
const aEle = document.createElement('a')
175-
const liEle = document.createElement('li')
176-
aEle.className = 'dropdown-item'
177-
liEle.tabWidth = lastTab.offsetWidth;
178-
aEle.append(lastTab)
179-
liEle.append(aEle)
180-
dropMenu.insertAdjacentElement("afterbegin", liEle)
170+
for (let i = inactiveTabs.length - 1; i >= 0; i--) {
171+
const lastTab = inactiveTabs[i]
172+
if (lastTab.offsetLeft + lastTab.offsetWidth > lastTab.offsetParent.offsetWidth) {
173+
const aEle = document.createElement('a')
174+
const liEle = document.createElement('li')
175+
aEle.className = 'dropdown-item'
176+
liEle.tabWidth = lastTab.offsetWidth;
177+
aEle.append(lastTab)
178+
liEle.append(aEle)
179+
dropMenu.insertAdjacentElement("afterbegin", liEle)
180+
}
181+
}
181182
}
182183
else {
183-
let firstLi = dropMenu.querySelector('li:has(.dv-active-tab)') || dropMenu.children[0]
184+
const firstLi = dropMenu.children[0]
184185
if (firstLi) {
185-
let firstTab = firstLi.querySelector('.dv-tab')
186+
const firstTab = firstLi.querySelector('.dv-tab')
186187
if (voidWidth > firstLi.tabWidth || tabsContainer.children.length == 0) {
187188
firstTab && tabsContainer.append(firstTab)
188189
firstLi.remove()
189190
}
190191
}
191192
}
192-
setTimeout(() => {
193-
if ([...tabsContainer.children].every(tab => !tab.classList.contains('dv-active-tab'))) {
194-
const group = dockview.groups.find(g => g.element === header.parentElement)
195-
group.panels[0].api.setActive()
196-
}
197-
}, 100);
193+
if ([...tabsContainer.children].every(tab => tab.classList.contains('dv-inactive-tab'))) {
194+
const group = dockview.groups.find(g => g.element === header.parentElement)
195+
group.panels[0].api.setActive()
196+
}
198197
}
199198

200199
const toggleComponent = (dockview, options) => {

0 commit comments

Comments
 (0)