Skip to content

Commit 0b48201

Browse files
committed
refactor: 增加 Layout 参数用于接管 RenderTabHeader 方法
1 parent 10a44cb commit 0b48201

File tree

6 files changed

+38
-12
lines changed

6 files changed

+38
-12
lines changed

src/BootstrapBlazor/Components/Layout/Layout.razor

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@
143143
ShowRefreshToolbarButton="ShowRefreshToolbarButton" ShowFullscreenToolbarButton="ShowFullscreenToolbarButton"
144144
RefreshToolbarButtonIcon="@RefreshToolbarButtonIcon" FullscreenToolbarButtonIcon="@FullscreenToolbarButtonIcon"
145145
RefreshToolbarTooltipText="@RefreshToolbarTooltipText" FullscreenToolbarTooltipText="@FullscreenToolbarTooltipText"
146-
OnToolbarRefreshCallback="OnToolbarRefreshCallback"
146+
OnToolbarRefreshCallback="OnToolbarRefreshCallback" Layout="this"
147147
Body="@Main" NotAuthorized="NotAuthorized!" NotFound="NotFound!" NotFoundTabText="@NotFoundTabText">
148148
</Tab>;
149149

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -458,7 +458,7 @@ public partial class Layout : IHandlerException
458458

459459
private bool _init;
460460
private Tab? _tab = null;
461-
private LayoutTabHeader? _tabHeader = null;
461+
private ITabHeader? _tabHeader = null;
462462

463463
/// <summary>
464464
/// <inheritdoc/>
@@ -636,14 +636,14 @@ public virtual Task HandlerException(Exception ex, RenderFragment<Exception> err
636636

637637
private RenderFragment RenderTabHeader() => builder =>
638638
{
639-
builder.OpenComponent<LayoutTabHeader>(0);
640-
builder.AddComponentReferenceCapture(1, instance => _tabHeader = (LayoutTabHeader)instance);
639+
builder.OpenComponent<LayoutHeader>(0);
640+
builder.AddComponentReferenceCapture(1, instance => _tabHeader = (ITabHeader)instance);
641641
builder.CloseComponent();
642642
};
643643

644644
internal void RegisterTab(Tab tab)
645645
{
646-
tab.layoutTabHeader = _tabHeader;
646+
tab.TabHeader = _tabHeader;
647647
}
648648

649649
/// <summary>

src/BootstrapBlazor/Components/Layout/LayoutTabHeader.cs renamed to src/BootstrapBlazor/Components/Layout/LayoutHeader.cs

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

66
namespace BootstrapBlazor.Components;
77

8-
internal class LayoutTabHeader : IComponent
8+
internal class LayoutHeader : IComponent, ITabHeader
99
{
1010
private RenderHandle _renderHandle;
1111

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
// Licensed to the .NET Foundation under one or more agreements.
2+
// The .NET Foundation licenses this file to you under the Apache 2.0 License
3+
// See the LICENSE file in the project root for more information.
4+
// Maintainer: Argo Zhang([email protected]) Website: https://www.blazor.zone
5+
6+
namespace BootstrapBlazor.Components;
7+
8+
/// <summary>
9+
/// ITabHeader interface
10+
/// </summary>
11+
public interface ITabHeader
12+
{
13+
/// <summary>
14+
/// Render method
15+
/// </summary>
16+
/// <param name="renderFragment"></param>
17+
void Render(RenderFragment renderFragment);
18+
}

src/BootstrapBlazor/Components/Tab/Tab.razor

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,9 @@ else
4040
@code {
4141
RenderFragment RenderTab =>
4242
@<div @attributes="@AdditionalAttributes" id="@Id" class="@ClassString" style="@StyleString">
43-
@if (layoutTabHeader != null)
43+
@if (TabHeader != null)
4444
{
45-
layoutTabHeader.Render(RenderTabHeader);
45+
TabHeader.Render(RenderTabHeader);
4646
}
4747
else
4848
{

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

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -419,8 +419,14 @@ public partial class Tab : IHandlerException
419419
[Parameter]
420420
public Func<TabItem, Task<bool>>? OnBeforeShowContextMenu { get; set; }
421421

422+
/// <summary>
423+
/// Gets or sets the <see cref="ITabHeader"/> instance. Default is null.
424+
/// </summary>
425+
[Parameter]
426+
public Layout? Layout { get; set; }
427+
422428
[CascadingParameter]
423-
private Layout? Layout { get; set; }
429+
private Layout? CascadeLayout { get; set; }
424430

425431
[Inject]
426432
[NotNull]
@@ -465,7 +471,7 @@ public partial class Tab : IHandlerException
465471

466472
private bool IsPreventDefault => _contextMenuZone != null;
467473

468-
internal LayoutTabHeader? layoutTabHeader = null;
474+
internal ITabHeader? TabHeader { get; set; }
469475

470476
/// <summary>
471477
/// <inheritdoc/>
@@ -786,6 +792,8 @@ public void AddTab(string url, string text, string? icon = null, bool active = t
786792
StateHasChanged();
787793
}
788794

795+
private Layout? LayoutInstance => Layout ?? CascadeLayout;
796+
789797
private void AddTabItem(string url)
790798
{
791799
var parameters = new Dictionary<string, object?>
@@ -823,7 +831,7 @@ private void AddTabItem(string url)
823831
builder.AddAttribute(1, nameof(BootstrapBlazorAuthorizeView.Type), context.Handler);
824832
builder.AddAttribute(2, nameof(BootstrapBlazorAuthorizeView.Parameters), context.Parameters);
825833
builder.AddAttribute(3, nameof(BootstrapBlazorAuthorizeView.NotAuthorized), NotAuthorized);
826-
builder.AddAttribute(4, nameof(BootstrapBlazorAuthorizeView.Resource), Layout?.Resource);
834+
builder.AddAttribute(4, nameof(BootstrapBlazorAuthorizeView.Resource), LayoutInstance?.Resource);
827835
builder.CloseComponent();
828836
}));
829837
}
@@ -1005,7 +1013,7 @@ private RenderFragment RenderTabItemContent(TabItem item) => builder =>
10051013
private IEnumerable<MenuItem>? _menuItems;
10061014
private MenuItem? GetMenuItem(string url)
10071015
{
1008-
_menuItems ??= (Menus ?? Layout?.Menus).GetAllItems();
1016+
_menuItems ??= (Menus ?? LayoutInstance?.Menus).GetAllItems();
10091017
return _menuItems?.FirstOrDefault(i => !string.IsNullOrEmpty(i.Url) && (i.Url.TrimStart('/').Equals(url.TrimStart('/'), StringComparison.OrdinalIgnoreCase)));
10101018
}
10111019

0 commit comments

Comments
 (0)