-
-
Notifications
You must be signed in to change notification settings - Fork 385
Expand file tree
/
Copy pathTabItemContent.cs
More file actions
77 lines (62 loc) · 2.23 KB
/
TabItemContent.cs
File metadata and controls
77 lines (62 loc) · 2.23 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the Apache 2.0 License
// See the LICENSE file in the project root for more information.
// Maintainer: Argo Zhang(argo@live.ca) Website: https://www.blazor.zone
using Microsoft.AspNetCore.Components.Rendering;
namespace BootstrapBlazor.Components;
internal class TabItemContent : IComponent
{
/// <summary>
/// Gets or sets the component content. Default is null
/// </summary>
[Parameter, NotNull]
public TabItem? Item { get; set; }
[CascadingParameter]
private Layout? Layout { get; set; }
private RenderHandle _renderHandle;
void IComponent.Attach(RenderHandle renderHandle)
{
_renderHandle = renderHandle;
}
Task IComponent.SetParametersAsync(ParameterView parameters)
{
parameters.SetParameterProperties(this);
RenderContent();
return Task.CompletedTask;
}
private void RenderContent()
{
_renderHandle.Render(BuildRenderTree);
}
private object _key = new();
private void BuildRenderTree(RenderTreeBuilder builder)
{
builder.OpenElement(0, "div");
builder.SetKey(_key);
builder.AddAttribute(5, "class", ClassString);
builder.AddAttribute(6, "id", Item.Id);
builder.AddContent(10, RenderItemContent(Item.ChildContent));
builder.CloseElement();
}
private RenderFragment RenderItemContent(RenderFragment? content) => builder =>
{
builder.OpenComponent<ErrorLogger>(0);
builder.AddAttribute(1, nameof(ErrorLogger.ChildContent), content);
var enableErrorLogger = Layout?.EnableErrorLogger;
var showToast = Layout?.ShowErrorLoggerToast;
builder.AddAttribute(2, nameof(ErrorLogger.EnableErrorLogger), enableErrorLogger);
builder.AddAttribute(3, nameof(ErrorLogger.ShowToast), showToast);
builder.CloseComponent();
};
private string? ClassString => CssBuilder.Default("tabs-body-content")
.AddClass("d-none", !Item.IsActive)
.Build();
/// <summary>
/// Render method
/// </summary>
public void Render()
{
_key = new object();
RenderContent();
}
}