Skip to content

Commit ee30e0f

Browse files
feat(DockView): bump version 10.0.8 (#981)
* revert: 撤销 IAsyncDisposable 接口实现 * fix: 修复切换数据添加的panel的标题不对 * refactor:优化onDidVisibilityChange回调 * fix: 修复切换数据节点Template有多余的DOM * fix: 修复切换数据时activePanel不对 * fix: 修复切换数据节点Template有多余的DOM * chore: bump version 10.0.8 --------- Co-authored-by: zhaijunlei <276318515@qq.com>
1 parent 252e0f4 commit ee30e0f

5 files changed

Lines changed: 45 additions & 36 deletions

File tree

src/components/BootstrapBlazor.DockView/BootstrapBlazor.DockView.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project Sdk="Microsoft.NET.Sdk.Razor">
22

33
<PropertyGroup>
4-
<Version>10.0.8-beta06</Version>
4+
<Version>10.0.8</Version>
55
</PropertyGroup>
66

77
<PropertyGroup>

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

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ DockviewGroupPanel.prototype.getParams = function() {
3030
}
3131

3232
DockviewGroupPanel.prototype.setParams = function(data) {
33-
console.log('setParameter', data);
3433
Object.keys(data).forEach(key => {
3534
this.panels.forEach(panel => panel.params[key] = data[key])
3635
})
@@ -71,14 +70,12 @@ DockviewGroupPanelModel.prototype.closePanel = function(panel, triggerVisibleCha
7170
}
7271
}
7372

74-
if (moveToTemplate) {
75-
if (panel.view.content.element) {
76-
if (panel.titleMenuEle) {
77-
panel.view.content.element.append(panel.titleMenuEle)
78-
}
79-
if (this.accessor.params.template) {
80-
this.accessor.params.template.append(panel.view.content.element)
81-
}
73+
if (panel.view.content.element && moveToTemplate) {
74+
if (panel.titleMenuEle) {
75+
panel.view.content.element.append(panel.titleMenuEle)
76+
}
77+
if (this.accessor.params.template) {
78+
this.accessor.params.template.append(panel.view.content.element)
8279
}
8380
}
8481
}

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ const addPanelWidthGroupId = (dockview, panel, index) => {
7676
dockview.addPanel({
7777
id: panel.id,
7878
title: panel.title,
79+
inactive: true,
7980
renderer: panel.renderer,
8081
component: panel.component,
8182
position: { referenceGroup: group, index: index || 0 },
@@ -112,6 +113,7 @@ const addPanelWidthCreatGroup = (dockview, panel, panels) => {
112113
let option = {
113114
id: panel.id,
114115
title: panel.title,
116+
inactive: true,
115117
renderer: panel.renderer,
116118
component: panel.component,
117119
position: { referenceGroup: group },

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

Lines changed: 18 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -8,31 +8,30 @@ const onAddPanel = panel => {
88
observePanelActiveChange(panel)
99
}
1010
const observePanelActiveChange = panel => {
11-
panel.api.onDidActiveChange(({ isActive }) => {
12-
if (isActive && !panel.group.api.isMaximized()) {
13-
saveConfig(panel.accessor)
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-
})
11+
panel.api.onDidVisibilityChange(({ isVisible }) => {
12+
const dockview = panel.accessor;
13+
if (dockview._isDisposed) return;
14+
const renderer = dockview.params.options.renderer;
15+
if (renderer === 'onlyWhenVisible' && dockview._inited) {
16+
if (isVisible) {
17+
saveConfig(panel.accessor)
18+
const visiblePanels = dockview.groups.map(g => g.panels.find(p => p.params.isActive) || g.panels.find(p => p.api.isVisible))
19+
dockview._loadTabs?.fire(visiblePanels.filter(p => Boolean(p)).map(p => p.params.key));
20+
}
21+
else {
22+
appendTemplatePanelEle(panel)
1823
}
1924
}
20-
if (isActive && panel.group.getParams().floatType == 'drawer') {
25+
26+
if (isVisible && panel.group.getParams().floatType == 'drawer') {
2127
setDrawerTitle(panel.group)
2228
}
23-
setTimeout(function () {
29+
const handler = setTimeout(function () {
30+
clearTimeout(handler)
31+
if (dockview._isDisposed) return;
2432
moveAlwaysRenderPanel(panel)
2533
}, 0)
2634
})
27-
panel.api.onDidVisibilityChange(({ isVisible }) => {
28-
const dockview = panel.accessor;
29-
if (dockview.params.options.renderer === 'onlyWhenVisible' && dockview._inited && isVisible) {
30-
setTimeout(function() {
31-
const visiblePanels = dockview.groups.map(g => g.panels.find(p => p.params.isActive) || g.panels.find(p => p.api.isVisible))
32-
dockview._loadTabs?.fire(visiblePanels.filter(p => Boolean(p)).map(p => p.params.key));
33-
}, 0)
34-
}
35-
})
3635
}
3736

3837
const moveAlwaysRenderPanel = panel => {
@@ -176,7 +175,7 @@ const savePanel = (dockview, panel) => {
176175

177176
const deletePanel = (dockview, panel) => {
178177
const { panels, options } = dockview.params;
179-
let index = panels.indexOf(panel);
178+
let index = panels.findIndex(p => p.params.key === panel.params.key);
180179
if (index > -1) {
181180
panels.splice(index, 1);
182181
}

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

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,10 @@ const initDockview = (dockview, options, template) => {
8888
})
8989
const handler = setTimeout(() => {
9090
clearTimeout(handler);
91+
if (dockview._isDisposed) {
92+
dockview = null;
93+
return;
94+
}
9195
const panels = dockview.panels;
9296
const groups = dockview.groups;
9397
const delPanelsStr = localStorage.getItem(dockview.params.options.localStorageKey + '-panels');
@@ -133,17 +137,17 @@ const initDockview = (dockview, options, template) => {
133137
dockview.groups.forEach(group => {
134138
observeGroup(group)
135139
})
136-
dockview.element.querySelector('&>.dv-dockview>.dv-branch-node').addEventListener('click', function(e) {
137-
this.parentElement.querySelectorAll('&>.dv-resize-container-drawer, &>.dv-render-overlay-float-drawer').forEach(item => {
140+
dockview.element.querySelector('&>.dv-dockview>.dv-branch-node')?.addEventListener('click', function(e) {
141+
this.parentElement.querySelectorAll('&>.dv-resize-container-drawer, &>.dv-render-overlay-float-drawer')?.forEach(item => {
138142
item.classList.remove('active')
139143
})
140-
this.closest('.bb-dockview').querySelectorAll('&>.bb-dockview-aside>.bb-dockview-aside-button').forEach(item => {
144+
this.closest('.bb-dockview').querySelectorAll('&>.bb-dockview-aside>.bb-dockview-aside-button')?.forEach(item => {
141145
item.classList.remove('active')
142146
})
143147
})
144148
dockview._inited = true;
145149
dockview._initialized?.fire();
146-
}, 100);
150+
}, 0);
147151
})
148152

149153
dockview.gridview.onDidChange(event => {
@@ -223,16 +227,23 @@ const setWidth = (target, dockview) => {
223227
group.panels[0] && group.panels[0].api.setActive()
224228
}
225229
}
226-
230+
const cleanUndefined = (obj) => Object.fromEntries(
231+
Object.entries(obj).filter(([, v]) => v != null)
232+
);
227233
const toggleComponent = (dockview, options) => {
228234
const optionsPanels = getPanelsFromOptions(options);
229235
const panels = optionsPanels.filter(p => p.params.visible);
230236
const localPanels = dockview.panels;
231237
panels.forEach(p => {
232238
const pan = findContentFromPanels(localPanels, p);
233239
if (pan === void 0) {
234-
const panel = findContentFromPanels(dockview.params.panels, p) || p;
235-
panel.params = { ...panel.params, ...p.params };
240+
const existingPanel = findContentFromPanels(dockview.params.panels, p);
241+
const panel = existingPanel ?
242+
{
243+
...existingPanel,
244+
...cleanUndefined(p),
245+
params: { ...existingPanel.params, ...cleanUndefined(p.params) }
246+
} : p;
236247
const groupPanels = panels.filter(p1 => p1.params.parentId == p.params.parentId);
237248
let indexOfOptions = groupPanels.findIndex(p => p.params.key == panel?.params.key);
238249
indexOfOptions = indexOfOptions == -1 ? 0 : indexOfOptions;

0 commit comments

Comments
 (0)