Skip to content

Commit 4282204

Browse files
committed
fix: 修复renderer为always时floatGroup的tab下拉列表被挡住了
1 parent 552026c commit 4282204

2 files changed

Lines changed: 46 additions & 0 deletions

File tree

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,11 @@ DockviewComponent.prototype.on = function (eventType, callback) {
1010
const dispose = DockviewComponent.prototype.dispose;
1111
DockviewComponent.prototype.dispose = function () {
1212
this.params.observer?.disconnect();
13+
this.groups.forEach(group => {
14+
if (group.mutationObserver) {
15+
group.mutationObserver.disconnect();
16+
}
17+
})
1318
saveConfig(this);
1419
dispose.call(this);
1520
}

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

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,13 @@ const createGroupActions = (group, groupType) => {
167167
if (item.name !== 'bar') {
168168
const icon = getIcon(item.name);
169169
actionContainer.append(icon);
170+
if(icon.classList.contains('bb-dockview-control-icon-dropdown')){
171+
setTimeout(() => {
172+
if (group.model.location.type == 'floating' && group.panels.some(panel => panel.renderer == 'always')) {
173+
observeDisplayChange(icon, group)
174+
}
175+
}, 0)
176+
}
170177
}
171178
});
172179
setTimeout(() => {
@@ -178,13 +185,47 @@ const createGroupActions = (group, groupType) => {
178185
}, 0)
179186
addActionEvent(group, actionContainer);
180187
}
188+
const observeDisplayChange = (icon, group) => {
189+
const dockview = group.api.accessor
190+
const element = icon.querySelector('.dropdown-menu')
191+
const mutationObserver = new MutationObserver((mutations) => {
192+
mutations.forEach(mutation => {
193+
if (mutation.attributeName == 'class') {
194+
if(mutation.target.classList.contains('show')) {
195+
const currentPanelEle = group.activePanel.view.content.element.parentElement
196+
const childEle = currentPanelEle.children[0]
197+
group.element.querySelector('&>.dv-content-container').append(childEle)
198+
currentPanelEle.style.zIndex = -1
199+
childEle.wrapperEle = currentPanelEle
200+
}
201+
else {
202+
const panelEleList = [...group.element.querySelector('&>.dv-content-container').children].map(item => {
203+
const wrapperEle = item.wrapperEle
204+
delete item.wrapperEle
205+
wrapperEle.append(item)
206+
return wrapperEle
207+
})
208+
group.element.parentElement.parentElement.append(...panelEleList)
209+
}
210+
}
211+
})
212+
});
213+
group.mutationObserver = mutationObserver
214+
mutationObserver.observe(element, {
215+
attributes: true,
216+
attributeFilter: ["class"],
217+
});
218+
}
181219

182220
const disposeGroup = group => {
183221
const { observer } = group.api.accessor.params;
184222
if (observer) {
185223
observer.unobserve(group.header.element);
186224
observer.unobserve(group.header.tabs._tabsList);
187225
}
226+
if (group.mutationObserver) {
227+
group.mutationObserver.disconnect();
228+
}
188229
removeActionEvent(group);
189230
}
190231

0 commit comments

Comments
 (0)