44// Maintainer: Argo Zhang(argo@live.ca) Website: https://www.blazor.zone
55
66using Microsoft . AspNetCore . Components . Rendering ;
7+ using Microsoft . Extensions . Configuration ;
78
89namespace BootstrapBlazor . Components ;
910
@@ -15,19 +16,24 @@ class TabItemContent : IComponent, IHandlerException, IDisposable
1516 [ Parameter , NotNull ]
1617 public TabItem ? Item { get ; set ; }
1718
18- [ CascadingParameter ]
19- private Layout ? Layout { get ; set ; }
20-
2119 [ CascadingParameter , NotNull ]
2220 private Tab ? TabSet { get ; set ; }
2321
2422 [ Inject , NotNull ]
2523 private DialogService ? DialogService { get ; set ; }
2624
25+ [ Inject ]
26+ [ NotNull ]
27+ private ToastService ? ToastService { get ; set ; }
28+
2729 [ Inject ]
2830 [ NotNull ]
2931 private IOptionsMonitor < BootstrapBlazorOptions > ? Options { get ; set ; }
3032
33+ [ Inject ]
34+ [ NotNull ]
35+ private IConfiguration ? Configuration { get ; set ; }
36+
3137 private IErrorLogger ? _logger ;
3238
3339 private RenderHandle _renderHandle ;
@@ -52,25 +58,27 @@ private void RenderContent()
5258
5359 private Guid _key = Guid . NewGuid ( ) ;
5460
61+ private bool EnableErrorLogger => TabSet . EnableErrorLogger ?? Options . CurrentValue . EnableErrorLogger ;
62+ private bool EnableErrorLoggerILogger => TabSet . EnableErrorLoggerILogger ?? Options . CurrentValue . EnableErrorLoggerILogger ;
63+ private bool ShowErrorLoggerToast => TabSet . ShowErrorLoggerToast ?? Options . CurrentValue . ShowErrorLoggerToast ;
64+ private string ToastTitle => TabSet . ErrorLoggerToastTitle ?? "Error" ;
65+
5566 private void BuildRenderTree ( RenderTreeBuilder builder )
5667 {
5768 builder . OpenComponent < ErrorLogger > ( 0 ) ;
5869 builder . SetKey ( _key ) ;
5970 builder . AddAttribute ( 1 , nameof ( ErrorLogger . ChildContent ) , Item . ChildContent ) ;
60-
61- var enableErrorLogger = TabSet . EnableErrorLogger ?? Options . CurrentValue . EnableErrorLogger ;
62- builder . AddAttribute ( 2 , nameof ( ErrorLogger . EnableErrorLogger ) , enableErrorLogger ) ;
63-
64- // TabItem 不需要 Toast 提示错误信息
65- builder . AddAttribute ( 3 , nameof ( ErrorLogger . ShowToast ) , false ) ;
66- builder . AddAttribute ( 4 , nameof ( ErrorLogger . ToastTitle ) , TabSet . ErrorLoggerToastTitle ) ;
67- builder . AddAttribute ( 5 , nameof ( ErrorLogger . OnInitializedCallback ) , new Func < IErrorLogger , Task > ( logger =>
71+ builder . AddAttribute ( 2 , nameof ( ErrorLogger . EnableErrorLogger ) , EnableErrorLogger ) ;
72+ builder . AddAttribute ( 3 , nameof ( ErrorLogger . EnableILogger ) , EnableErrorLoggerILogger ) ;
73+ builder . AddAttribute ( 4 , nameof ( ErrorLogger . ShowToast ) , ShowErrorLoggerToast ) ;
74+ builder . AddAttribute ( 5 , nameof ( ErrorLogger . ToastTitle ) , ToastTitle ) ;
75+ builder . AddAttribute ( 6 , nameof ( ErrorLogger . OnInitializedCallback ) , new Func < IErrorLogger , Task > ( logger =>
6876 {
6977 _logger = logger ;
7078 _logger . Register ( this ) ;
7179 return Task . CompletedTask ;
7280 } ) ) ;
73- builder . AddAttribute ( 6 , nameof ( ErrorLogger . OnErrorHandleAsync ) , Layout ? . OnErrorHandleAsync ) ;
81+ builder . AddAttribute ( 7 , nameof ( ErrorLogger . OnErrorHandleAsync ) , TabSet . OnErrorHandleAsync ) ;
7482 builder . CloseComponent ( ) ;
7583 }
7684
@@ -83,12 +91,31 @@ public void Render()
8391 RenderContent ( ) ;
8492 }
8593
94+ private bool _detailedErrorsLoaded ;
95+ private bool _showDetailedErrors ;
8696 /// <summary>
8797 /// <inheritdoc/>
8898 /// </summary>
8999 /// <param name="ex"></param>
90100 /// <param name="errorContent"></param>
91- public Task HandlerExceptionAsync ( Exception ex , RenderFragment < Exception > errorContent ) => DialogService . ShowErrorHandlerDialog ( errorContent ( ex ) ) ;
101+ public async Task HandlerExceptionAsync ( Exception ex , RenderFragment < Exception > errorContent )
102+ {
103+ if ( ! _detailedErrorsLoaded )
104+ {
105+ _showDetailedErrors = Configuration . GetValue ( "DetailedErrors" , false ) ;
106+ _detailedErrorsLoaded = true ;
107+ }
108+
109+ var useDialog = _showDetailedErrors || ! ShowErrorLoggerToast ;
110+ if ( useDialog )
111+ {
112+ await DialogService . ShowErrorHandlerDialog ( errorContent ( ex ) ) ;
113+ }
114+ else
115+ {
116+ await ToastService . Error ( ToastTitle , ex . Message ) ;
117+ }
118+ }
92119
93120 /// <summary>
94121 /// IDispose 方法用于释放资源
0 commit comments