Skip to content

Commit 6c852a3

Browse files
committed
fix: 修改切换数据dockview更新不对
1 parent 46482e2 commit 6c852a3

4 files changed

Lines changed: 52 additions & 30 deletions

File tree

src/components/BootstrapBlazor.DockView/wwwroot/css/dockview-bb.css

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -300,6 +300,6 @@
300300
z-index: -1 !important;
301301
}
302302

303-
.bb-dockview .dv-view-container > .dv-view:first-child:not(.visible) + .dv-view.visible::before {
303+
/* .bb-dockview .dv-view-container > .dv-view:first-child:not(.visible) + .dv-view.visible::before {
304304
height: 0;
305-
}
305+
} */

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

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,10 +75,20 @@ DockviewComponent.prototype.removePanel = function (...args) {
7575
const panel = args[0], noFiring = args[1]
7676
if (!panel.group.locked) {
7777
removePanel.apply(this, args)
78-
if (!this.isClearing && noFiring!== true) {
78+
if (!this.isClearing) {
7979
this._panelVisibleChanged?.fire({ key: panel.params.key, status: false });
8080
}
8181
}
82+
if (noFiring !== true) {
83+
if (panel.view.content.element) {
84+
if (panel.titleMenuEle) {
85+
panel.view.content.element.append(panel.titleMenuEle)
86+
}
87+
if (this.params.template) {
88+
this.params.template.append(panel.view.content.element)
89+
}
90+
}
91+
}
8292
}
8393

8494
const setVisible = DockviewComponent.prototype.setVisible

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

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,11 @@ const observePanelActiveChange = panel => {
1111
panel.api.onDidActiveChange(({ isActive }) => {
1212
if (isActive && !panel.group.api.isMaximized()) {
1313
saveConfig(panel.accessor)
14-
if (panel.group.panels.length < 2) return
15-
panel.group.panels.filter(p => p != panel.group.activePanel && p.renderer == 'onlyWhenVisible').forEach(p => {
16-
appendTemplatePanelEle(p)
17-
})
14+
if (panel.group.panels.length >= 2){
15+
panel.group.panels.filter(p => p != panel.group.activePanel && p.renderer == 'onlyWhenVisible').forEach(p => {
16+
appendTemplatePanelEle(p)
17+
})
18+
}
1819
}
1920
if (isActive && panel.group.getParams().floatType == 'drawer') {
2021
setDrawerTitle(panel.group)
@@ -79,14 +80,14 @@ const onRemovePanel = event => {
7980
})
8081
}
8182

82-
if (event.view.content.element) {
83-
if (event.titleMenuEle) {
84-
event.view.content.element.append(event.titleMenuEle)
85-
}
86-
if (dockview.params.template) {
87-
dockview.params.template.append(event.view.content.element)
88-
}
89-
}
83+
// if (event.view.content.element) {
84+
// if (event.titleMenuEle) {
85+
// event.view.content.element.append(event.titleMenuEle)
86+
// }
87+
// if (dockview.params.template) {
88+
// dockview.params.template.append(event.view.content.element)
89+
// }
90+
// }
9091
}
9192

9293
const appendTemplatePanelEle = (panel) => {

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

Lines changed: 26 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,9 @@ const initDockview = (dockview, options, template) => {
109109
const visiblePanels = groups.filter(g => g.isVisible).map(g => g.panels.find(p => p.params.isActive) || g.panels.find(p => p.api.isVisible))
110110
dockview._loadTabs?.fire(visiblePanels.filter(p => Boolean(p)).map(p => p.params.key));
111111
}
112+
if (options.renderer === 'always') {
113+
dockview._loadTabs?.fire(dockview.panels.map(p => p.params.key));
114+
}
112115
const { floatingGroups } = dockview.params
113116
dockview.floatingGroups.forEach(fg => {
114117
const { top, right, bottom, left } = floatingGroups.find(g => g.data.id == fg.group.id).position
@@ -228,29 +231,37 @@ const setWidth = (target, dockview) => {
228231
}
229232

230233
const toggleComponent = (dockview, options) => {
231-
const panels = getPanelsFromOptions(options).filter(p => p.params.visible)
232-
const localPanels = dockview.panels
234+
const optionsPanels = getPanelsFromOptions(options);
235+
const panels = optionsPanels.filter(p => p.params.visible);
236+
const localPanels = dockview.panels;
233237
panels.forEach(p => {
234238
const pan = findContentFromPanels(localPanels, p);
235239
if (pan === void 0) {
236-
const panel = findContentFromPanels(dockview.params.panels, p);
237-
const groupPanels = panels.filter(p1 => p1.params.parentId == p.params.parentId)
238-
let indexOfOptions = groupPanels.findIndex(p => p.params.key == panel?.params.key)
239-
indexOfOptions = indexOfOptions == -1 ? 0 : indexOfOptions
240-
const index = panel && panel.params.index
241-
addGroupWithPanel(dockview, panel || p, panels, index ?? indexOfOptions);
240+
const panel = findContentFromPanels(dockview.params.panels, p) || p;
241+
panel.params = { ...panel.params, ...p.params };
242+
const groupPanels = panels.filter(p1 => p1.params.parentId == p.params.parentId);
243+
let indexOfOptions = groupPanels.findIndex(p => p.params.key == panel?.params.key);
244+
indexOfOptions = indexOfOptions == -1 ? 0 : indexOfOptions;
245+
// const index = panel && panel.params.index
246+
addGroupWithPanel(dockview, panel, panels, indexOfOptions);
247+
}
248+
else {
249+
if ( pan.title !== p.title ) {
250+
pan.setTitle(p.title)
251+
}
252+
pan._params = {
253+
...pan.params,
254+
...p.params
255+
}
242256
}
243257
})
244258
localPanels.forEach(item => {
245-
const title = panels.find(p => p.params.key == item.params.key)?.title;
246-
if ( title && item.title !== title ) {
247-
item.setTitle(title)
248-
}
249259
let pan = findContentFromPanels(panels, item);
250260
if (pan === void 0) {
251-
item.group.delPanelIndex = item.group.panels.findIndex(p => p.params.key == item.params.key)
252-
const group = item.group
253-
dockview.removePanel(item, true)
261+
item.group.delPanelIndex = item.group.panels.findIndex(p => p.params.key == item.params.key);
262+
const group = item.group;
263+
const noFiring = !optionsPanels.some(p => p.params.key == item.params.key || p.id == item.id || p.title == item.title);
264+
dockview.removePanel(item, noFiring)
254265
if (group.panels.length === 0) {
255266
dockview.setVisible(group, false)
256267
}

0 commit comments

Comments
 (0)