Skip to content

Commit 788723b

Browse files
authored
doc(DockView): add auto switch theme sample (#5713)
* refactor: 主题切换改为 JS 框架完成 * refactor: 重构代码 * refactor: 增加主题同步代码逻辑 * refactor: 异步支持 * refactor: 精简代码提高可读性 * refactor: 重构代码降低版本要求 * refactor: 增加 TriggerThemeChanged 事件响应 * revert: 撤销 ThemeMode 代码更改 * style: 更新 Dropdown 暗黑主题背景色 * revert: 撤销 Theme 设置 * chore: 更新依赖 * refactor: 重构代码
1 parent e1107ed commit 788723b

17 files changed

+42
-84
lines changed

src/BootstrapBlazor.Server/BootstrapBlazor.Server.csproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
<PackageReference Include="BootstrapBlazor.Chart" Version="9.0.0" />
3232
<PackageReference Include="BootstrapBlazor.CherryMarkdown" Version="9.0.0" />
3333
<PackageReference Include="BootstrapBlazor.Dock" Version="9.0.0" />
34-
<PackageReference Include="BootstrapBlazor.DockView" Version="9.1.7" />
34+
<PackageReference Include="BootstrapBlazor.DockView" Version="9.1.8" />
3535
<PackageReference Include="BootstrapBlazor.DriverJs" Version="9.0.3" />
3636
<PackageReference Include="BootstrapBlazor.ElementIcon" Version="9.0.3" />
3737
<PackageReference Include="BootstrapBlazor.FileViewer" Version="9.0.0" />
@@ -48,7 +48,7 @@
4848
<PackageReference Include="BootstrapBlazor.Markdown" Version="9.0.1" />
4949
<PackageReference Include="BootstrapBlazor.MaterialDesign" Version="9.0.1" />
5050
<PackageReference Include="BootstrapBlazor.MeiliSearch" Version="9.1.9" />
51-
<PackageReference Include="BootstrapBlazor.Mermaid" Version="9.0.3" />
51+
<PackageReference Include="BootstrapBlazor.Mermaid" Version="9.0.4" />
5252
<PackageReference Include="BootstrapBlazor.MindMap" Version="9.1.6" />
5353
<PackageReference Include="BootstrapBlazor.MouseFollower" Version="9.0.1" />
5454
<PackageReference Include="BootstrapBlazor.OctIcon" Version="9.0.4" />

src/BootstrapBlazor.Server/Components/Components/ThemeMode.razor

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
@inherits WebSiteModuleComponentBase
2-
@attribute [JSModuleAutoLoader("Components/ThemeMode.razor.js", JSObjectReference = true)]
2+
@attribute [JSModuleAutoLoader("Components/ThemeMode.razor.js")]
33

44
<div id="@Id" class="btn btn-circle btn-fade btn-theme-mode icon-theme d-flex" @onclick:stopPropagation>
55
<i class="@GetLightIconClassString"></i>

src/BootstrapBlazor.Server/Components/Components/ThemeMode.razor.cs

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@
33
// See the LICENSE file in the project root for more information.
44
// Maintainer: Argo Zhang([email protected]) Website: https://www.blazor.zone
55

6-
using Microsoft.JSInterop;
7-
86
namespace BootstrapBlazor.Server.Components.Components;
97

108
/// <summary>
@@ -15,10 +13,6 @@ public partial class ThemeMode
1513
[Inject, NotNull]
1614
private IIconTheme? IconTheme { get; set; }
1715

18-
[Inject]
19-
[NotNull]
20-
private IThemeProvider? ThemeProvider { get; set; }
21-
2216
private string? GetLightIconClassString => CssBuilder.Default("icon-light")
2317
.AddClass(_lightModeIcon)
2418
.Build();
@@ -41,17 +35,4 @@ protected override void OnInitialized()
4135
_darkModeIcon ??= IconTheme.GetIconByKey(ComponentIcons.ThemeProviderDarkModeIcon);
4236
_lightModeIcon ??= IconTheme.GetIconByKey(ComponentIcons.ThemeProviderLightModeIcon);
4337
}
44-
45-
/// <summary>
46-
/// <inheritdoc/>
47-
/// </summary>
48-
protected override Task InvokeInitAsync() => InvokeVoidAsync("init", Id, Interop, nameof(OnThemeChanged));
49-
50-
/// <summary>
51-
/// The callback when theme changed
52-
/// </summary>
53-
/// <param name="themeName"></param>
54-
/// <returns></returns>
55-
[JSInvokable]
56-
public ValueTask OnThemeChanged(string themeName) => ThemeProvider.SetThemeAsync(themeName);
5738
}

src/BootstrapBlazor.Server/Components/Components/ThemeMode.razor.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { getTheme, switchTheme, calcCenterPosition } from "../../_content/BootstrapBlazor/modules/utility.js"
22
import EventHandler from "../../_content/BootstrapBlazor/modules/event-handler.js"
33

4-
export function init(id, invoke, method) {
4+
export function init(id) {
55
const el = document.getElementById(id);
66
if (el) {
77
EventHandler.on(el, 'click', e => {
@@ -15,7 +15,6 @@ export function init(id, invoke, method) {
1515

1616
const rect = calcCenterPosition(el);
1717
switchTheme(theme, rect.x, rect.y);
18-
invoke.invokeMethodAsync(method, theme);
1918
});
2019
}
2120
}

src/BootstrapBlazor.Server/Components/Samples/DockViews2/BaseDockView.cs

Lines changed: 17 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,6 @@ public abstract class BaseDockView : ComponentBase
2222
[NotNull]
2323
private MockDataTableDynamicService? DataTableDynamicService { get; set; }
2424

25-
[Inject]
26-
[NotNull]
27-
private IThemeProvider? ThemeProviderService { get; set; }
28-
2925
/// <summary>
3026
/// 获得/设置 数据集合
3127
/// </summary>
@@ -43,11 +39,6 @@ public abstract class BaseDockView : ComponentBase
4339
/// </summary>
4440
protected DataTableDynamicContext? DataTableDynamicContext { get; set; }
4541

46-
/// <summary>
47-
/// Gets or sets the theme
48-
/// </summary>
49-
protected DockViewTheme Theme { get; set; } = DockViewTheme.Light;
50-
5142
/// <summary>
5243
/// 获得 <see cref="DynamicObjectContext"/> 实例方法
5344
/// </summary>
@@ -74,22 +65,6 @@ protected override void OnInitialized()
7465
TreeItems.AddRange(TreeFoo.GenerateFoos(LocalizerFoo, 3, 101, 1010));
7566

7667
DataTableDynamicContext = DataTableDynamicService.CreateContext();
77-
78-
ThemeProviderService.ThemeChangedAsync += OnThemeChanged;
79-
}
80-
81-
private Task OnThemeChanged(string themeName)
82-
{
83-
if (themeName == "dark")
84-
{
85-
Theme = DockViewTheme.Dark;
86-
}
87-
else
88-
{
89-
Theme = DockViewTheme.Light;
90-
}
91-
StateHasChanged();
92-
return Task.CompletedTask;
9368
}
9469

9570
/// <summary>
@@ -116,23 +91,23 @@ private int GenerateId()
11691
protected static Task<IEnumerable<TableTreeNode<TreeFoo>>> TreeNodeConverter(IEnumerable<TreeFoo> items)
11792
{
11893
// 构造树状数据结构
119-
var ret = BuildTreeNodes(items, 0);
120-
return Task.FromResult(ret);
94+
var ret = BuildTreeNodes(items.ToList(), 0);
95+
return Task.FromResult(ret.AsEnumerable());
96+
}
12197

122-
IEnumerable<TableTreeNode<TreeFoo>> BuildTreeNodes(IEnumerable<TreeFoo> items, int parentId)
98+
private static List<TableTreeNode<TreeFoo>> BuildTreeNodes(List<TreeFoo> items, int parentId)
99+
{
100+
var ret = new List<TableTreeNode<TreeFoo>>();
101+
ret.AddRange(items.Where(i => i.ParentId == parentId).Select((foo, index) => new TableTreeNode<TreeFoo>(foo)
123102
{
124-
var ret = new List<TableTreeNode<TreeFoo>>();
125-
ret.AddRange(items.Where(i => i.ParentId == parentId).Select((foo, index) => new TableTreeNode<TreeFoo>(foo)
126-
{
127-
// 此处为示例,假设偶行数据都有子数据
128-
HasChildren = index % 2 == 0,
129-
// 如果子项集合有值 则默认展开此节点
130-
IsExpand = items.Any(i => i.ParentId == foo.Id),
131-
// 获得子项集合
132-
Items = BuildTreeNodes(items.Where(i => i.ParentId == foo.Id), foo.Id)
133-
}));
134-
return ret;
135-
}
103+
// 此处为示例,假设偶行数据都有子数据
104+
HasChildren = index % 2 == 0,
105+
// 如果子项集合有值 则默认展开此节点
106+
IsExpand = items.Any(i => i.ParentId == foo.Id),
107+
// 获得子项集合
108+
Items = BuildTreeNodes(items.Where(i => i.ParentId == foo.Id).ToList(), foo.Id)
109+
}));
110+
return ret;
136111
}
137112

138113
/// <summary>
@@ -162,7 +137,7 @@ public class TreeFoo : Foo
162137
/// GenerateFoos
163138
/// </summary>
164139
/// <returns></returns>
165-
public static List<TreeFoo> GenerateFoos(IStringLocalizer<Foo> localizer, int count = 80, int parentId = 0, int id = 0) => Enumerable.Range(1, count).Select(i => new TreeFoo()
140+
public static List<TreeFoo> GenerateFoos(IStringLocalizer<Foo> localizer, int count = 80, int parentId = 0, int id = 0) => [.. Enumerable.Range(1, count).Select(i => new TreeFoo()
166141
{
167142
Id = id + i,
168143
ParentId = parentId,
@@ -172,6 +147,6 @@ public class TreeFoo : Foo
172147
Count = Random.Shared.Next(1, 100),
173148
Complete = Random.Shared.Next(1, 100) > 50,
174149
Education = Random.Shared.Next(1, 100) > 50 ? EnumEducation.Primary : EnumEducation.Middle
175-
}).ToList();
150+
})];
176151
}
177152
}

src/BootstrapBlazor.Server/Components/Samples/DockViews2/DockViewCol.razor

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
<h4>@((MarkupString)Localizer["DockViewColIntro"].Value)</h4>
77

8-
<DockViewV2 Name="DockViewV2LayoutColumn" Theme="@Theme" class="dockview-demo">
8+
<DockViewV2 Name="DockViewV2LayoutColumn" class="dockview-demo">
99
<DockViewContent Type="DockViewContentType.Column">
1010
<DockViewComponent Key="tab1" Title="标签一" Height="33">
1111
<Table TItem="DynamicObject" DynamicContext="DataTableDynamicContext"

src/BootstrapBlazor.Server/Components/Samples/DockViews2/DockViewComplex.razor

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
<h4>@((MarkupString)Localizer["DockViewComplexIntro"].Value)</h4>
77

8-
<DockViewV2 Name="DockViewV2LayoutComplex" Theme="@Theme" class="dockview-demo">
8+
<DockViewV2 Name="DockViewV2LayoutComplex" class="dockview-demo">
99
<DockViewContent Type="DockViewContentType.Row">
1010
<DockViewContent Type="DockViewContentType.Column">
1111
<DockViewComponent Key="tab1" Title="标签一">

src/BootstrapBlazor.Server/Components/Samples/DockViews2/DockViewGroup.razor

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
<h4>@((MarkupString)Localizer["DockViewGroupIntro"].Value)</h4>
77

8-
<DockViewV2 Name="DockViewV2LayoutGroup" Theme="@Theme" class="dockview-demo">
8+
<DockViewV2 Name="DockViewV2LayoutGroup" class="dockview-demo">
99
<DockViewContent Type="DockViewContentType.Row">
1010
<DockViewContent Type="DockViewContentType.Group">
1111
<DockViewComponent Key="tab1" Title="标签一">

src/BootstrapBlazor.Server/Components/Samples/DockViews2/DockViewLayout.razor

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
<Button OnClickWithoutRender="Reset" Text="复位"></Button>
1313
</GroupBox>
1414

15-
<DockViewV2 @ref="DockView" Name="DockViewLayout" Theme="@Theme" LayoutConfig="@LayoutConfig" class="dock-layout-demo">
15+
<DockViewV2 @ref="@_dockView" Name="DockViewLayout" LayoutConfig="@_layoutConfig" class="dock-layout-demo">
1616
<DockViewContent Type="DockViewContentType.Column">
1717
<DockViewComponent Key="tab1" Title="标签一">
1818
<Table TItem="DynamicObject" DynamicContext="DataTableDynamicContext"

src/BootstrapBlazor.Server/Components/Samples/DockViews2/DockViewLayout.razor.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,26 +15,26 @@ public partial class DockViewLayout
1515
private IStringLocalizer<DockViewLayout>? Localizer { get; set; }
1616

1717
[NotNull]
18-
private DockViewV2? DockView { get; set; }
18+
private DockViewV2? _dockView = null;
1919

20-
private Task Reset() => DockView.Reset(LayoutConfig);
20+
private Task Reset() => _dockView.Reset(_layoutConfig);
2121

2222
private void OnToggleLayout1()
2323
{
24-
LayoutConfig = LayoutConfig1;
24+
_layoutConfig = LayoutConfig1;
2525
}
2626

2727
private void OnToggleLayout2()
2828
{
29-
LayoutConfig = LayoutConfig2;
29+
_layoutConfig = LayoutConfig2;
3030
}
3131

3232
private void OnToggleLayout3()
3333
{
34-
LayoutConfig = LayoutConfig3;
34+
_layoutConfig = LayoutConfig3;
3535
}
3636

37-
private string LayoutConfig = LayoutConfig1;
37+
private string _layoutConfig = LayoutConfig1;
3838

3939
const string LayoutConfig1 = """{"grid":{"root":{"type":"branch","data":[{"type":"branch","data":[{"type":"leaf","data":{"views":["bb_5893789"],"activeView":"bb_5893789","id":"0"},"size":364},{"type":"leaf","data":{"views":["bb_11251481"],"activeView":"bb_11251481","id":"1"},"size":364},{"type":"leaf","data":{"views":["bb_39754773"],"activeView":"bb_39754773","id":"2"},"size":364}],"size":601}],"size":1092},"width":1092,"height":601,"orientation":"VERTICAL"},"panels":{"bb_5893789":{"id":"bb_5893789","contentComponent":"component","tabComponent":"component","params":{"componentName":"component","title":"标签一","titleWidth":null,"titleClass":null,"class":null,"visible":true,"showClose":true,"width":null,"height":null,"key":null,"isLock":false,"type":"component","id":"bb_5893789","additionalAttributes":null},"title":"标签一"},"bb_11251481":{"id":"bb_11251481","contentComponent":"component","tabComponent":"component","params":{"componentName":"component","title":"标签二","titleWidth":null,"titleClass":null,"class":null,"visible":true,"showClose":true,"width":null,"height":null,"key":null,"isLock":false,"type":"component","id":"bb_11251481","additionalAttributes":null},"title":"标签二"},"bb_39754773":{"id":"bb_39754773","contentComponent":"component","tabComponent":"component","params":{"componentName":"component","title":"标签三","titleWidth":null,"titleClass":null,"class":null,"visible":true,"showClose":true,"width":null,"height":null,"key":null,"isLock":false,"type":"component","id":"bb_39754773","additionalAttributes":null},"title":"标签三"}},"activeGroup":"1"}""";
4040

0 commit comments

Comments
 (0)