Skip to content

Commit 7d4606e

Browse files
authored
feat(Layout): support TabStyle/ShowToolbar parameter (#5703)
* refactor: Layout 集成 Tab 新属性 * refactor: 微调 z-index 值 * test: 更新单元测试 * chore: bump version 9.5.0-beta15
1 parent ab86380 commit 7d4606e

File tree

6 files changed

+107
-6
lines changed

6 files changed

+107
-6
lines changed

src/BootstrapBlazor/BootstrapBlazor.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>9.5.0-beta13</Version>
4+
<Version>9.5.0-beta15</Version>
55
</PropertyGroup>
66

77
<ItemGroup>

src/BootstrapBlazor/Components/Layout/Layout.razor

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,11 @@
119119
<Tab ClickTabToNavigation="ClickTabToNavigation" AdditionalAssemblies="@AdditionalAssemblies"
120120
ShowExtendButtons="ShowTabExtendButtons" ShowClose="ShowTabItemClose" AllowDrag="AllowDragTab"
121121
DefaultUrl="@TabDefaultUrl" ExcludeUrls="@ExcludeUrls" IsOnlyRenderActiveTab="IsOnlyRenderActiveTab"
122+
TabStyle="TabStyle" ShowToolbar="@ShowToolbar" ToolbarTemplate="@ToolbarTemplate"
123+
ShowRefreshToolbarButton="ShowRefreshToolbarButton" ShowFullscreenToolbarButton="ShowFullscreenToolbarButton"
124+
RefreshToolbarButtonIcon="@RefreshToolbarButtonIcon" FullscreenToolbarButtonIcon="@FullscreenToolbarButtonIcon"
125+
RefreshToolbarTooltipText="@RefreshToolbarTooltipText" FullscreenToolbarTooltipText="@FullscreenToolbarTooltipText"
126+
OnToolbarRefreshCallback="OnToolbarRefreshCallback"
122127
Body="@Main" NotAuthorized="NotAuthorized!" NotFound="NotFound!" NotFoundTabText="@NotFoundTabText">
123128
</Tab>
124129
}

src/BootstrapBlazor/Components/Layout/Layout.razor.cs

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,66 @@ public partial class Layout : IHandlerException
1717
{
1818
private bool IsSmallScreen { get; set; }
1919

20+
/// <summary>
21+
/// Gets or sets the tab style. Default is <see cref="TabStyle.Default"/>.
22+
/// </summary>
23+
[Parameter]
24+
public TabStyle TabStyle { get; set; }
25+
26+
/// <summary>
27+
/// Gets or sets whether show the toolbar. Default is false.
28+
/// </summary>
29+
[Parameter]
30+
public bool ShowToolbar { get; set; }
31+
32+
/// <summary>
33+
/// Gets or sets the template of the toolbar button. Default is null.
34+
/// </summary>
35+
[Parameter]
36+
public RenderFragment? ToolbarTemplate { get; set; }
37+
38+
/// <summary>
39+
/// Gets or sets whether show the full screen button. Default is true.
40+
/// </summary>
41+
[Parameter]
42+
public bool ShowFullscreenToolbarButton { get; set; } = true;
43+
44+
/// <summary>
45+
/// Gets or sets the full screen toolbar button icon string. Default is null.
46+
/// </summary>
47+
[Parameter]
48+
public string? FullscreenToolbarButtonIcon { get; set; }
49+
50+
/// <summary>
51+
/// Gets or sets the full screen toolbar button tooltip string. Default is null.
52+
/// </summary>
53+
[Parameter]
54+
public string? FullscreenToolbarTooltipText { get; set; }
55+
56+
/// <summary>
57+
/// Gets or sets whether show the full screen button. Default is true.
58+
/// </summary>
59+
[Parameter]
60+
public bool ShowRefreshToolbarButton { get; set; } = true;
61+
62+
/// <summary>
63+
/// Gets or sets the refresh toolbar button icon string. Default is null.
64+
/// </summary>
65+
[Parameter]
66+
public string? RefreshToolbarButtonIcon { get; set; }
67+
68+
/// <summary>
69+
/// Gets or sets the refresh toolbar button tooltip string. Default is null.
70+
/// </summary>
71+
[Parameter]
72+
public string? RefreshToolbarTooltipText { get; set; }
73+
74+
/// <summary>
75+
/// Gets or sets the refresh toolbar button click event callback. Default is null.
76+
/// </summary>
77+
[Parameter]
78+
public Func<Task>? OnToolbarRefreshCallback { get; set; }
79+
2080
/// <summary>
2181
/// 获得/设置 侧边栏状态
2282
/// </summary>

src/BootstrapBlazor/Components/Tab/Tab.razor.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -695,7 +695,10 @@ public void AddTab(string url, string text, string? icon = null, bool active = t
695695

696696
private void AddTabItem(string url)
697697
{
698-
var parameters = new Dictionary<string, object?>();
698+
var parameters = new Dictionary<string, object?>
699+
{
700+
{ nameof(TabItem.Url), url }
701+
};
699702
var context = RouteTableFactory.Create(AdditionalAssemblies, url);
700703
if (context.Handler != null)
701704
{
@@ -720,7 +723,6 @@ private void AddTabItem(string url)
720723
var menu = GetMenuItem(url) ?? new MenuItem() { Text = url.Split("/").FirstOrDefault() };
721724
SetTabItemParameters(menu.Text, menu.Icon, true, true);
722725
}
723-
parameters.Add(nameof(TabItem.Url), url);
724726

725727
parameters.Add(nameof(TabItem.ChildContent), new RenderFragment(builder =>
726728
{

src/BootstrapBlazor/Components/Tab/Tab.razor.scss

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,6 @@
136136
left: 0;
137137
height: 2px;
138138
background-color: var(--bb-tabs-bar-bg);
139-
z-index: 1;
140139
transition: transform .3s cubic-bezier(.645,.045,.355,1);
141140
list-style: none;
142141
}
@@ -559,10 +558,9 @@
559558
align-items: flex-end;
560559
flex-shrink: 0;
561560
padding: 0 1rem;
562-
z-index: 1;
563561

564562
&.active {
565-
z-index: 5;
563+
z-index: 1;
566564

567565
.tab-corner {
568566
background-color: var(--bs-body-bg);

test/UnitTest/Components/LayoutTest.cs

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,42 @@ namespace UnitTest.Components;
1313

1414
public class LayoutTest : BootstrapBlazorTestBase
1515
{
16+
[Fact]
17+
public void TabStyle_Ok()
18+
{
19+
var cut = Context.RenderComponent<Layout>(pb =>
20+
{
21+
pb.Add(a => a.UseTabSet, true);
22+
pb.Add(a => a.TabStyle, TabStyle.Default);
23+
pb.Add(a => a.RefreshToolbarButtonIcon, "test-refresh-icon");
24+
pb.Add(a => a.FullscreenToolbarButtonIcon, "test-fullscreen-icon");
25+
pb.Add(a => a.OnToolbarRefreshCallback, () => Task.CompletedTask);
26+
pb.Add(a => a.RefreshToolbarTooltipText, "test-refresh-tooltip");
27+
pb.Add(a => a.FullscreenToolbarTooltipText, "test-fullscreen-tooltip");
28+
});
29+
Assert.DoesNotContain("tabs-chrome", cut.Markup);
30+
Assert.DoesNotContain("tabs-capsule", cut.Markup);
31+
32+
cut.SetParametersAndRender(pb => pb.Add(a => a.TabStyle, TabStyle.Capsule));
33+
Assert.Contains("tabs-capsule", cut.Markup);
34+
35+
cut.SetParametersAndRender(pb => pb.Add(a => a.TabStyle, TabStyle.Chrome));
36+
Assert.Contains("tabs-chrome", cut.Markup);
37+
38+
cut.SetParametersAndRender(pb => pb.Add(a => a.ShowToolbar, true));
39+
Assert.Contains("tabs-nav-toolbar-refresh", cut.Markup);
40+
Assert.Contains("tabs-nav-toolbar-fs", cut.Markup);
41+
42+
cut.SetParametersAndRender(pb => pb.Add(a => a.ShowRefreshToolbarButton, false));
43+
Assert.DoesNotContain("tabs-nav-toolbar-refresh", cut.Markup);
44+
45+
cut.SetParametersAndRender(pb => pb.Add(a => a.ShowFullscreenToolbarButton, false));
46+
Assert.DoesNotContain("tabs-nav-toolbar-fs", cut.Markup);
47+
48+
cut.SetParametersAndRender(pb => pb.Add(a => a.ToolbarTemplate, builder => builder.AddContent(0, "test-toolbar-template")));
49+
Assert.Contains("test-toolbar-template", cut.Markup);
50+
}
51+
1652
[Fact]
1753
public void ShowFooter_OK()
1854
{

0 commit comments

Comments
 (0)