Skip to content

Commit bf1ed6f

Browse files
committed
feat: 完善异步加载
1 parent 1508c5f commit bf1ed6f

4 files changed

Lines changed: 23 additions & 11 deletions

File tree

src/components/BootstrapBlazor.DockView/Components/DockViewV2.razor.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -304,7 +304,7 @@ public Task LoadActiveTabs(List<string> tabs)
304304
/// </summary>
305305
/// <param name="tabs"></param>
306306
[JSInvokable]
307-
private Task LoadInactiveTabs(List<string> tabs)
307+
public Task LoadInactiveTabs(List<string> tabs)
308308
{
309309
// 客户端请求渲染当前未激活的标签
310310
_inactiveTabs.Clear();

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -278,7 +278,7 @@ const getGroupNode = (contentItem, size, boxSize, parent, panels, getGroupId, op
278278
title: item.title,
279279
tabComponent: item.componentName,
280280
contentComponent: item.componentName,
281-
renderer: item.renderer || options.renderer,
281+
// renderer: item.renderer || options.renderer,
282282
params: { ...item, parentId: parent.id }
283283
}
284284
return item.id
@@ -303,7 +303,7 @@ const getLeafNode = (contentItem, size, boxSize, parent, panels, getGroupId, opt
303303
panels[contentItem.id] = {
304304
id: contentItem.id,
305305
title: contentItem.title,
306-
renderer: contentItem.renderer || options.renderer,
306+
// renderer: contentItem.renderer || options.renderer,
307307
tabComponent: contentItem.componentName,
308308
contentComponent: contentItem.componentName,
309309
params: { ...contentItem, parentId: parent.id }

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,9 @@ const observePanelActiveChange = panel => {
2525
})
2626
panel.api.onDidVisibilityChange(({ isVisible }) => {
2727
const dockview = panel.accessor;
28-
if (dockview._inited && isVisible) {
29-
console.log(isVisible, 'isVisible');
30-
dockview._loadActiveTabs?.fire([panel.params.key]);
28+
if (dockview.params.options.renderer === 'onlyWhenVisible' && dockview._inited && isVisible) {
29+
const visiblePanels = dockview.groups.map(g => g.panels.find(p => p.params.isActive) || g.panels.find(p => p.api.isVisible))
30+
dockview._loadActiveTabs?.fire(visiblePanels.filter(p => Boolean(p)).map(p => p.params.key));
3131
}
3232
})
3333
}
@@ -143,7 +143,7 @@ const getPanels = (contentItem, options, parent = {}, panels = []) => {
143143
id: contentItem.id,
144144
groupId: contentItem.groupId,
145145
title: contentItem.title,
146-
renderer: contentItem.renderer || options.renderer,
146+
// renderer: contentItem.renderer || options.renderer,
147147
tabComponent: contentItem.componentName,
148148
contentComponent: contentItem.componentName,
149149
params: { ...contentItem, parentType: parent.type, parentId: parent.id }

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

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import './dockview-extensions.js'
88
const cerateDockview = (el, options) => {
99
const theme = options.theme || "dockview-theme-light";
1010
const template = el.querySelector('template');
11+
options.renderer ??= 'partial'; // onlyWhenVisible | partial | always
1112
const dockview = new DockviewComponent(el, {
1213
parentElement: el,
1314
theme: {
@@ -95,10 +96,21 @@ const initDockview = (dockview, options, template) => {
9596
clearTimeout(handler);
9697
const panels = dockview.panels;
9798
const groups = dockview.groups;
98-
const delPanelsStr = localStorage.getItem(dockview.params.options.localStorageKey + '-panels')
99-
const delPanels = delPanelsStr && JSON.parse(delPanelsStr) || []
100-
const visiblePanels = groups.map(g => g.panels.find(p => p.params.isActive) || g.panels.find(p => p.api.isVisible))
101-
dockview._loadActiveTabs?.fire(visiblePanels.filter(p => Boolean(p)).map(p => p.params.key));
99+
const delPanelsStr = localStorage.getItem(dockview.params.options.localStorageKey + '-panels');
100+
const delPanels = delPanelsStr && JSON.parse(delPanelsStr) || [];
101+
if (options.renderer === 'always') {
102+
dockview._loadActiveTabs?.fire(panels.map(p => p.params.key));
103+
}
104+
else if (options.renderer === 'partial' || options.renderer === 'onlyWhenVisible') {
105+
const visiblePanels = groups.filter(g => g.isVisible).map(g => g.panels.find(p => p.params.isActive) || g.panels.find(p => p.api.isVisible))
106+
dockview._loadActiveTabs?.fire(visiblePanels.filter(p => Boolean(p)).map(p => p.params.key));
107+
}
108+
if (options.renderer === 'partial') {
109+
const inVisiblePanels = groups.flatMap(g => g.panels.filter(p => !p.api.isVisible));
110+
if (inVisiblePanels.length > 0) {
111+
dockview._loadInactiveTabs?.fire(inVisiblePanels.map(p => p.params.key));
112+
}
113+
}
102114
panels.forEach(panel => {
103115
const visible = panel.params.visible
104116
if (!visible) {

0 commit comments

Comments
 (0)