Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 4 additions & 6 deletions src/BootstrapBlazor/Components/ErrorLogger/ErrorLogger.cs
Original file line number Diff line number Diff line change
Expand Up @@ -69,10 +69,6 @@ public class ErrorLogger : ComponentBase, IErrorLogger
[NotNull]
private BootstrapBlazorErrorBoundary? _errorBoundary = default;

private bool _enableErrorLogger => EnableErrorLogger ?? Options.CurrentValue.EnableErrorLogger;

private bool _showToast => ShowToast ?? Options.CurrentValue.ShowErrorLoggerToast;

/// <summary>
/// <inheritdoc/>
/// </summary>
Expand All @@ -81,6 +77,8 @@ protected override void OnInitialized()
base.OnInitialized();

ToastTitle ??= Localizer[nameof(ToastTitle)];
EnableErrorLogger ??= Options.CurrentValue.EnableErrorLogger;
ShowToast ??= Options.CurrentValue.ShowErrorLoggerToast;
}

/// <summary>
Expand Down Expand Up @@ -110,13 +108,13 @@ protected override void BuildRenderTree(RenderTreeBuilder builder)
builder.CloseComponent();
}

private RenderFragment? RenderContent => _enableErrorLogger ? RenderError : ChildContent;
private RenderFragment? RenderContent => (EnableErrorLogger ?? false) ? RenderError : ChildContent;

private RenderFragment RenderError => builder =>
{
builder.OpenComponent<BootstrapBlazorErrorBoundary>(0);
builder.AddAttribute(1, nameof(BootstrapBlazorErrorBoundary.OnErrorHandleAsync), OnErrorHandleAsync);
builder.AddAttribute(2, nameof(BootstrapBlazorErrorBoundary.ShowToast), _showToast);
builder.AddAttribute(2, nameof(BootstrapBlazorErrorBoundary.ShowToast), ShowToast);
builder.AddAttribute(3, nameof(BootstrapBlazorErrorBoundary.ToastTitle), ToastTitle);
builder.AddAttribute(4, nameof(BootstrapBlazorErrorBoundary.ErrorContent), ErrorContent);
builder.AddAttribute(5, nameof(BootstrapBlazorErrorBoundary.ChildContent), ChildContent);
Expand Down
6 changes: 3 additions & 3 deletions src/BootstrapBlazor/Components/Tab/Tab.razor
Original file line number Diff line number Diff line change
Expand Up @@ -149,15 +149,15 @@ else
@ContextMenuTemplate(this)
}
</ContextMenu>;

RenderFragment<TabItem> RenderTabItem => item =>
@<CascadingValue Value="item" IsFixed="true">
@RenderTabItemContent(item)
</CascadingValue>;

RenderFragment RenderDisabledHeaderItem(TabItem item) =>
RenderFragment RenderDisabledHeaderItem(TabItem item) =>
@<div @key="@item" class="@GetItemWrapClassString(item)">
<div role="tab" class="@GetClassString(item)"
<div role="tab" class="@GetClassString(item)"
@oncontextmenu="e => OnContextMenu(e, item)" @oncontextmenu:preventDefault="IsPreventDefault">
@RenderHeaderItemContent(item)
</div>
Expand Down
23 changes: 1 addition & 22 deletions src/BootstrapBlazor/Components/Tab/Tab.razor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ namespace BootstrapBlazor.Components;
/// <summary>
/// Tab component
/// </summary>
public partial class Tab : IHandlerException
public partial class Tab
{
private bool FirstRender { get; set; } = true;

Expand Down Expand Up @@ -454,9 +454,6 @@ public partial class Tab : IHandlerException
[NotNull]
private IIconTheme? IconTheme { get; set; }

[Inject, NotNull]
private DialogService? DialogService { get; set; }

[Inject]
[NotNull]
private FullScreenService? FullScreenService { get; set; }
Expand All @@ -477,16 +474,6 @@ public partial class Tab : IHandlerException

private bool IsPreventDefault => _contextMenuZone != null;

/// <summary>
/// <inheritdoc/>
/// </summary>
protected override void OnInitialized()
{
base.OnInitialized();

ErrorLogger?.Register(this);
}

/// <summary>
/// <inheritdoc/>
/// </summary>
Expand Down Expand Up @@ -1014,13 +1001,6 @@ private RenderFragment RenderTabItemContent(TabItem item) => builder =>
}
};

/// <summary>
/// HandlerException 错误处理方法
/// </summary>
/// <param name="ex"></param>
/// <param name="errorContent"></param>
public Task HandlerException(Exception ex, RenderFragment<Exception> errorContent) => DialogService.ShowErrorHandlerDialog(errorContent(ex));

private IEnumerable<MenuItem>? _menuItems;
private MenuItem? GetMenuItem(string url)
{
Expand Down Expand Up @@ -1228,7 +1208,6 @@ protected override async ValueTask DisposeAsync(bool disposing)
if (disposing)
{
RemoveLocationChanged();
ErrorLogger?.UnRegister(this);
}
}
}
17 changes: 16 additions & 1 deletion src/BootstrapBlazor/Components/Tab/TabItemContent.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,9 @@ internal class TabItemContent : IComponent
[Parameter, NotNull]
public TabItem? Item { get; set; }

[CascadingParameter]
private Layout? Layout { get; set; }

private RenderHandle _renderHandle;

void IComponent.Attach(RenderHandle renderHandle)
Expand Down Expand Up @@ -43,10 +46,22 @@ private void BuildRenderTree(RenderTreeBuilder builder)
builder.SetKey(_key);
builder.AddAttribute(5, "class", ClassString);
builder.AddAttribute(6, "id", Item.Id);
builder.AddContent(10, Item.ChildContent);
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();
Expand Down
19 changes: 19 additions & 0 deletions src/BootstrapBlazor/Extensions/DialogServiceExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -263,4 +263,23 @@ public static async Task ShowErrorHandlerDialog(this DialogService service, Rend
};
await service.Show(option, dialog);
}

/// <summary>
/// 显示异常信息对话框扩展方法
/// </summary>
/// <param name="service"></param>
/// <param name="exception"></param>
/// <param name="dialog"></param>
/// <returns></returns>
public static async Task ShowExceptionDialog(this DialogService service, Exception exception, Dialog? dialog = null)
{
RenderFragment fragment = builder =>
{
builder.OpenElement(0, "div");
builder.AddAttribute(10, "class", "error-stack");
builder.AddContent(20, new MarkupString(exception.Message));
builder.CloseElement();
};
await ShowErrorHandlerDialog(service, fragment, dialog);
}
}
5 changes: 5 additions & 0 deletions test/UnitTest/Components/DialogTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -578,6 +578,11 @@ await cut.InvokeAsync(() => dialog.ShowCloseDialog<MockValidateFormDialog>("Clos
await cut.InvokeAsync(() => dialog.Show<MockValidateFormDialog>("Test Title"));
await cut.InvokeAsync(() => modal.Instance.CloseCallback());
#endregion

#region ShowExceptionDialog Method
await cut.InvokeAsync(() => dialog.ShowExceptionDialog(new Exception("Test")));
await cut.InvokeAsync(() => modal.Instance.CloseCallback());
#endregion
}

private class MockValidateFormDialog : ComponentBase
Expand Down
4 changes: 3 additions & 1 deletion test/UnitTest/Components/ErrorLoggerTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,9 @@ public void OnErrorHandleAsync_Tab()
cut.Contains("errorLogger-click");
var button = cut.Find("button");
button.TriggerEvent("onclick", EventArgs.Empty);
cut.Contains("<div class=\"modal-body\"><div class=\"error-stack\">TimeStamp:");

// TabItem 内显示异常信息
cut.Contains("error-stack");
}

[Fact]
Expand Down
1 change: 0 additions & 1 deletion test/UnitTest/Components/LayoutTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -535,7 +535,6 @@ public void IHandlerException_Ok()
pb.Add(a => a.EnableErrorLogger, true);
pb.AddChildContent<Layout>(pb =>
{
pb.Add(a => a.EnableErrorLogger, true);
// 按钮触发异常
pb.Add(a => a.Main, new RenderFragment(builder =>
{
Expand Down