From 426edeb678d1104c671aa89db7f2a2fb7800fdd1 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Mon, 20 Apr 2026 12:15:34 +0800 Subject: [PATCH 1/7] =?UTF-8?q?revert:=20=E6=92=A4=E9=94=80=20IAsyncDispos?= =?UTF-8?q?able=20=E6=8E=A5=E5=8F=A3=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Components/DockViewComponent.razor.cs | 16 ----------- .../Components/DockViewTitleBar.razor.cs | 27 +------------------ 2 files changed, 1 insertion(+), 42 deletions(-) diff --git a/src/components/BootstrapBlazor.DockView/Components/DockViewComponent.razor.cs b/src/components/BootstrapBlazor.DockView/Components/DockViewComponent.razor.cs index de5a128e..4f97aca0 100644 --- a/src/components/BootstrapBlazor.DockView/Components/DockViewComponent.razor.cs +++ b/src/components/BootstrapBlazor.DockView/Components/DockViewComponent.razor.cs @@ -191,20 +191,4 @@ private async Task OnClickBar() internal void SetVisible(bool visible) => Visible = visible; internal void SetLock(bool isLock) => IsLock = isLock; - - /// - /// - /// - /// - protected override void Dispose(bool disposing) - { - base.Dispose(disposing); - - if (OnClickTitleBarCallback != null) - { - OnClickTitleBarCallback = null; - } - - DockView.RemoveComponentState(Key); - } } diff --git a/src/components/BootstrapBlazor.DockView/Components/DockViewTitleBar.razor.cs b/src/components/BootstrapBlazor.DockView/Components/DockViewTitleBar.razor.cs index a774e7f8..a0f1c9a0 100644 --- a/src/components/BootstrapBlazor.DockView/Components/DockViewTitleBar.razor.cs +++ b/src/components/BootstrapBlazor.DockView/Components/DockViewTitleBar.razor.cs @@ -10,7 +10,7 @@ namespace BootstrapBlazor.Components; /// DockView 标题栏组件 /// DockView title bar component /// -public partial class DockViewTitleBar : IAsyncDisposable +public partial class DockViewTitleBar { /// /// 获得/设置 标题前置图标点击回调方法,默认为 null @@ -40,29 +40,4 @@ private async Task OnClickBar() await OnClickBarCallback(); } } - - /// - /// - /// - /// - /// - protected virtual ValueTask DisposeAsync(bool disposing) - { - if (disposing) - { - OnClickBarCallback = null; - } - - return ValueTask.CompletedTask; - } - - /// - /// - /// - /// - public async ValueTask DisposeAsync() - { - await DisposeAsync(true); - GC.SuppressFinalize(this); - } } From 060ffbb2796d0fc50b6e264569f38e789dec247c Mon Sep 17 00:00:00 2001 From: zhaijunlei <276318515@qq.com> Date: Mon, 20 Apr 2026 12:28:36 +0800 Subject: [PATCH 2/7] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=88=87=E6=8D=A2?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E6=B7=BB=E5=8A=A0=E7=9A=84panel=E7=9A=84?= =?UTF-8?q?=E6=A0=87=E9=A2=98=E4=B8=8D=E5=AF=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wwwroot/js/dockview-utils.js | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/components/BootstrapBlazor.DockView/wwwroot/js/dockview-utils.js b/src/components/BootstrapBlazor.DockView/wwwroot/js/dockview-utils.js index e3fa4216..12478eea 100644 --- a/src/components/BootstrapBlazor.DockView/wwwroot/js/dockview-utils.js +++ b/src/components/BootstrapBlazor.DockView/wwwroot/js/dockview-utils.js @@ -223,7 +223,9 @@ const setWidth = (target, dockview) => { group.panels[0] && group.panels[0].api.setActive() } } - +const cleanUndefined = (obj) => Object.fromEntries( + Object.entries(obj).filter(([, v]) => v != null) +); const toggleComponent = (dockview, options) => { const optionsPanels = getPanelsFromOptions(options); const panels = optionsPanels.filter(p => p.params.visible); @@ -231,8 +233,13 @@ const toggleComponent = (dockview, options) => { panels.forEach(p => { const pan = findContentFromPanels(localPanels, p); if (pan === void 0) { - const panel = findContentFromPanels(dockview.params.panels, p) || p; - panel.params = { ...panel.params, ...p.params }; + const existingPanel = findContentFromPanels(dockview.params.panels, p); + const panel = existingPanel ? + { + ...existingPanel, + ...cleanUndefined(p), + params: { ...existingPanel.params, ...cleanUndefined(p.params) } + } : p; const groupPanels = panels.filter(p1 => p1.params.parentId == p.params.parentId); let indexOfOptions = groupPanels.findIndex(p => p.params.key == panel?.params.key); indexOfOptions = indexOfOptions == -1 ? 0 : indexOfOptions; From 4f6cf76434927c42343a4ff308924b313d4efaaa Mon Sep 17 00:00:00 2001 From: zhaijunlei <276318515@qq.com> Date: Mon, 20 Apr 2026 12:32:15 +0800 Subject: [PATCH 3/7] =?UTF-8?q?refactor=EF=BC=9A=E4=BC=98=E5=8C=96onDidVis?= =?UTF-8?q?ibilityChange=E5=9B=9E=E8=B0=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wwwroot/js/dockview-panel.js | 31 +++++++++---------- .../wwwroot/js/dockview-utils.js | 12 ++++--- 2 files changed, 23 insertions(+), 20 deletions(-) diff --git a/src/components/BootstrapBlazor.DockView/wwwroot/js/dockview-panel.js b/src/components/BootstrapBlazor.DockView/wwwroot/js/dockview-panel.js index 59602cb3..4aaa9617 100644 --- a/src/components/BootstrapBlazor.DockView/wwwroot/js/dockview-panel.js +++ b/src/components/BootstrapBlazor.DockView/wwwroot/js/dockview-panel.js @@ -8,31 +8,30 @@ const onAddPanel = panel => { observePanelActiveChange(panel) } const observePanelActiveChange = panel => { - panel.api.onDidActiveChange(({ isActive }) => { - if (isActive && !panel.group.api.isMaximized()) { + panel.api.onDidVisibilityChange(({ isVisible }) => { + const dockview = panel.accessor; + if (dockview._isDisposed) return; + const renderer = dockview.params.options.renderer; + if (renderer === 'onlyWhenVisible' && dockview._inited && isVisible) { saveConfig(panel.accessor) - if (panel.group.panels.length >= 2){ - panel.group.panels.filter(p => p != panel.group.activePanel && p.renderer == 'onlyWhenVisible').forEach(p => { + if (!panel.group.api.isMaximized()) { + panel.group.panels.filter(p => p != panel.group.activePanel).forEach(p => { appendTemplatePanelEle(p) }) } + const visiblePanels = dockview.groups.map(g => g.panels.find(p => p.params.isActive) || g.panels.find(p => p.api.isVisible)) + dockview._loadTabs?.fire(visiblePanels.filter(p => Boolean(p)).map(p => p.params.key)); } - if (isActive && panel.group.getParams().floatType == 'drawer') { + + if (isVisible && panel.group.getParams().floatType == 'drawer') { setDrawerTitle(panel.group) } - setTimeout(function () { + const handler = setTimeout(function () { + clearTimeout(handler) + if (dockview._isDisposed) return; moveAlwaysRenderPanel(panel) }, 0) }) - panel.api.onDidVisibilityChange(({ isVisible }) => { - const dockview = panel.accessor; - if (dockview.params.options.renderer === 'onlyWhenVisible' && dockview._inited && isVisible) { - setTimeout(function() { - const visiblePanels = dockview.groups.map(g => g.panels.find(p => p.params.isActive) || g.panels.find(p => p.api.isVisible)) - dockview._loadTabs?.fire(visiblePanels.filter(p => Boolean(p)).map(p => p.params.key)); - }, 0) - } - }) } const moveAlwaysRenderPanel = panel => { @@ -176,7 +175,7 @@ const savePanel = (dockview, panel) => { const deletePanel = (dockview, panel) => { const { panels, options } = dockview.params; - let index = panels.indexOf(panel); + let index = panels.findIndex(p => p.params.key === panel.params.key); if (index > -1) { panels.splice(index, 1); } diff --git a/src/components/BootstrapBlazor.DockView/wwwroot/js/dockview-utils.js b/src/components/BootstrapBlazor.DockView/wwwroot/js/dockview-utils.js index 12478eea..b4e640d5 100644 --- a/src/components/BootstrapBlazor.DockView/wwwroot/js/dockview-utils.js +++ b/src/components/BootstrapBlazor.DockView/wwwroot/js/dockview-utils.js @@ -88,6 +88,10 @@ const initDockview = (dockview, options, template) => { }) const handler = setTimeout(() => { clearTimeout(handler); + if (dockview._isDisposed) { + dockview = null; + return; + } const panels = dockview.panels; const groups = dockview.groups; const delPanelsStr = localStorage.getItem(dockview.params.options.localStorageKey + '-panels'); @@ -133,17 +137,17 @@ const initDockview = (dockview, options, template) => { dockview.groups.forEach(group => { observeGroup(group) }) - dockview.element.querySelector('&>.dv-dockview>.dv-branch-node').addEventListener('click', function(e) { - this.parentElement.querySelectorAll('&>.dv-resize-container-drawer, &>.dv-render-overlay-float-drawer').forEach(item => { + dockview.element.querySelector('&>.dv-dockview>.dv-branch-node')?.addEventListener('click', function(e) { + this.parentElement.querySelectorAll('&>.dv-resize-container-drawer, &>.dv-render-overlay-float-drawer')?.forEach(item => { item.classList.remove('active') }) - this.closest('.bb-dockview').querySelectorAll('&>.bb-dockview-aside>.bb-dockview-aside-button').forEach(item => { + this.closest('.bb-dockview').querySelectorAll('&>.bb-dockview-aside>.bb-dockview-aside-button')?.forEach(item => { item.classList.remove('active') }) }) dockview._inited = true; dockview._initialized?.fire(); - }, 100); + }, 0); }) dockview.gridview.onDidChange(event => { From 0815046a1d357c19673ba4e7ad0e38377f7ee4fa Mon Sep 17 00:00:00 2001 From: zhaijunlei <276318515@qq.com> Date: Mon, 20 Apr 2026 12:33:08 +0800 Subject: [PATCH 4/7] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=88=87=E6=8D=A2?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E8=8A=82=E7=82=B9Template=E6=9C=89=E5=A4=9A?= =?UTF-8?q?=E4=BD=99=E7=9A=84DOM?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wwwroot/js/dockview-extensions.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/components/BootstrapBlazor.DockView/wwwroot/js/dockview-extensions.js b/src/components/BootstrapBlazor.DockView/wwwroot/js/dockview-extensions.js index 411141b0..4483e29f 100644 --- a/src/components/BootstrapBlazor.DockView/wwwroot/js/dockview-extensions.js +++ b/src/components/BootstrapBlazor.DockView/wwwroot/js/dockview-extensions.js @@ -30,7 +30,6 @@ DockviewGroupPanel.prototype.getParams = function() { } DockviewGroupPanel.prototype.setParams = function(data) { - console.log('setParameter', data); Object.keys(data).forEach(key => { this.panels.forEach(panel => panel.params[key] = data[key]) }) @@ -71,8 +70,8 @@ DockviewGroupPanelModel.prototype.closePanel = function(panel, triggerVisibleCha } } - if (moveToTemplate) { - if (panel.view.content.element) { + if (panel.view.content.element) { + if (moveToTemplate) { if (panel.titleMenuEle) { panel.view.content.element.append(panel.titleMenuEle) } @@ -80,6 +79,9 @@ DockviewGroupPanelModel.prototype.closePanel = function(panel, triggerVisibleCha this.accessor.params.template.append(panel.view.content.element) } } + else { + panel.view.content.element.remove() + } } } From 5c58226e31e550b445c850c8fa7ae555c11a5c4e Mon Sep 17 00:00:00 2001 From: zhaijunlei <276318515@qq.com> Date: Mon, 20 Apr 2026 12:39:49 +0800 Subject: [PATCH 5/7] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=88=87=E6=8D=A2?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E6=97=B6activePanel=E4=B8=8D=E5=AF=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BootstrapBlazor.DockView/wwwroot/js/dockview-group.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/components/BootstrapBlazor.DockView/wwwroot/js/dockview-group.js b/src/components/BootstrapBlazor.DockView/wwwroot/js/dockview-group.js index 2f9340e4..06538248 100644 --- a/src/components/BootstrapBlazor.DockView/wwwroot/js/dockview-group.js +++ b/src/components/BootstrapBlazor.DockView/wwwroot/js/dockview-group.js @@ -76,6 +76,7 @@ const addPanelWidthGroupId = (dockview, panel, index) => { dockview.addPanel({ id: panel.id, title: panel.title, + inactive: true, renderer: panel.renderer, component: panel.component, position: { referenceGroup: group, index: index || 0 }, @@ -112,6 +113,7 @@ const addPanelWidthCreatGroup = (dockview, panel, panels) => { let option = { id: panel.id, title: panel.title, + inactive: true, renderer: panel.renderer, component: panel.component, position: { referenceGroup: group }, From e16923cc5c51570de4c75120fb13f48ce5c1d7d7 Mon Sep 17 00:00:00 2001 From: zhaijunlei <276318515@qq.com> Date: Mon, 20 Apr 2026 13:16:58 +0800 Subject: [PATCH 6/7] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=88=87=E6=8D=A2?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E8=8A=82=E7=82=B9Template=E6=9C=89=E5=A4=9A?= =?UTF-8?q?=E4=BD=99=E7=9A=84DOM?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wwwroot/js/dockview-extensions.js | 15 +++++---------- .../wwwroot/js/dockview-panel.js | 16 ++++++++-------- 2 files changed, 13 insertions(+), 18 deletions(-) diff --git a/src/components/BootstrapBlazor.DockView/wwwroot/js/dockview-extensions.js b/src/components/BootstrapBlazor.DockView/wwwroot/js/dockview-extensions.js index 4483e29f..6364fc7a 100644 --- a/src/components/BootstrapBlazor.DockView/wwwroot/js/dockview-extensions.js +++ b/src/components/BootstrapBlazor.DockView/wwwroot/js/dockview-extensions.js @@ -70,17 +70,12 @@ DockviewGroupPanelModel.prototype.closePanel = function(panel, triggerVisibleCha } } - if (panel.view.content.element) { - if (moveToTemplate) { - if (panel.titleMenuEle) { - panel.view.content.element.append(panel.titleMenuEle) - } - if (this.accessor.params.template) { - this.accessor.params.template.append(panel.view.content.element) - } + if (panel.view.content.element && moveToTemplate) { + if (panel.titleMenuEle) { + panel.view.content.element.append(panel.titleMenuEle) } - else { - panel.view.content.element.remove() + if (this.accessor.params.template) { + this.accessor.params.template.append(panel.view.content.element) } } } diff --git a/src/components/BootstrapBlazor.DockView/wwwroot/js/dockview-panel.js b/src/components/BootstrapBlazor.DockView/wwwroot/js/dockview-panel.js index 4aaa9617..26929bf3 100644 --- a/src/components/BootstrapBlazor.DockView/wwwroot/js/dockview-panel.js +++ b/src/components/BootstrapBlazor.DockView/wwwroot/js/dockview-panel.js @@ -12,15 +12,15 @@ const observePanelActiveChange = panel => { const dockview = panel.accessor; if (dockview._isDisposed) return; const renderer = dockview.params.options.renderer; - if (renderer === 'onlyWhenVisible' && dockview._inited && isVisible) { - saveConfig(panel.accessor) - if (!panel.group.api.isMaximized()) { - panel.group.panels.filter(p => p != panel.group.activePanel).forEach(p => { - appendTemplatePanelEle(p) - }) + if (renderer === 'onlyWhenVisible' && dockview._inited) { + if (isVisible) { + saveConfig(panel.accessor) + const visiblePanels = dockview.groups.map(g => g.panels.find(p => p.params.isActive) || g.panels.find(p => p.api.isVisible)) + dockview._loadTabs?.fire(visiblePanels.filter(p => Boolean(p)).map(p => p.params.key)); + } + else { + appendTemplatePanelEle(panel) } - const visiblePanels = dockview.groups.map(g => g.panels.find(p => p.params.isActive) || g.panels.find(p => p.api.isVisible)) - dockview._loadTabs?.fire(visiblePanels.filter(p => Boolean(p)).map(p => p.params.key)); } if (isVisible && panel.group.getParams().floatType == 'drawer') { From c9ba4248d0d0db7a49e58f07e0ef1fe09b09db51 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Wed, 22 Apr 2026 21:17:48 +0800 Subject: [PATCH 7/7] chore: bump version 10.0.8 --- .../BootstrapBlazor.DockView/BootstrapBlazor.DockView.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/BootstrapBlazor.DockView/BootstrapBlazor.DockView.csproj b/src/components/BootstrapBlazor.DockView/BootstrapBlazor.DockView.csproj index 64ec313b..a1d49187 100644 --- a/src/components/BootstrapBlazor.DockView/BootstrapBlazor.DockView.csproj +++ b/src/components/BootstrapBlazor.DockView/BootstrapBlazor.DockView.csproj @@ -1,7 +1,7 @@  - 10.0.8-beta06 + 10.0.8