Browse Source

Merge pull request #56 from Moonlight-Panel/NewSoftErrorBoundaryCrashHandler

Implemented new soft error boundary crash handler
Marcel Baumgartner 2 năm trước cách đây
mục cha
commit
fdacc60ad4

+ 26 - 3
Moonlight/Shared/Components/ErrorBoundaries/SoftErrorBoundary.razor

@@ -7,13 +7,35 @@
 @inject AlertService AlertService
 @inject SmartTranslateService SmartTranslateService
 
-@ChildContent
+@if (Crashed)
+{
+    <div class="card card-flush h-md-100">
+        <div class="card-body d-flex flex-column justify-content-between mt-9 bgi-no-repeat bgi-size-cover bgi-position-x-center pb-0">
+            <div class="mb-10">
+                <div class="fs-2hx fw-bold text-gray-800 text-center mb-13">
+                    <span class="me-2">
+                        <TL>Ooops. This page is crashed</TL>
+                    </span>
+                </div>
+                <div class="text-center">
+                    <TL>This page is crashed. The error has been reported to the moonlight team. Meanwhile you can try reloading the page</TL>
+                </div>
+            </div>
+        </div>
+    </div>
+}
+else
+{
+    @ChildContent
+}
 
 @code
 {
+    private bool Crashed = false;
+    
     protected override async Task OnErrorAsync(Exception exception)
     {
-        Logger.Debug(exception);
+        Logger.Warn(exception);
         
         if (exception is DisplayException displayException)
         {
@@ -49,7 +71,8 @@
         }
         else
         {
-            throw exception;
+            Crashed = true;
+            await InvokeAsync(StateHasChanged);
         }
     }
 }

+ 39 - 41
Moonlight/Shared/Layouts/MainLayout.razor

@@ -59,57 +59,55 @@
                             <div id="kt_app_content" class="app-content flex-column-fluid">
                                 <div id="kt_app_content_container" class="app-container container-fluid">
                                     <div class="mt-10">
-                                        <PageErrorBoundary>
-                                            <SoftErrorBoundary>
-                                                @if (uri.LocalPath != "/login" &&
-                                                     uri.LocalPath != "/passwordreset" &&
-                                                     uri.LocalPath != "/register")
+                                        <SoftErrorBoundary>
+                                            @if (uri.LocalPath != "/login" &&
+                                                 uri.LocalPath != "/passwordreset" &&
+                                                 uri.LocalPath != "/register")
+                                            {
+                                                if (User == null)
                                                 {
-                                                    if (User == null)
+                                                    <Login></Login>
+                                                }
+                                                else
+                                                {
+                                                    if (User.Status == UserStatus.Banned)
                                                     {
-                                                        <Login></Login>
+                                                        <BannedAlert></BannedAlert>
                                                     }
-                                                    else
+                                                    else if (User.Status == UserStatus.Disabled)
                                                     {
-                                                        if (User.Status == UserStatus.Banned)
-                                                        {
-                                                            <BannedAlert></BannedAlert>
-                                                        }
-                                                        else if (User.Status == UserStatus.Disabled)
-                                                        {
-                                                            <DisabledAlert></DisabledAlert>
-                                                        }
-                                                        else if (User.Status == UserStatus.PasswordPending)
-                                                        {
-                                                            <PasswordChangeView></PasswordChangeView>
-                                                        }
-                                                        else if (User.Status == UserStatus.DataPending)
-                                                        {
-                                                            <UserDataSetView></UserDataSetView>
-                                                        }
-                                                        else
-                                                        {
-                                                            @Body
-                                                        }
+                                                        <DisabledAlert></DisabledAlert>
                                                     }
-                                                }
-                                                else
-                                                {
-                                                    if (uri.LocalPath == "/login")
+                                                    else if (User.Status == UserStatus.PasswordPending)
                                                     {
-                                                        <Login></Login>
+                                                        <PasswordChangeView></PasswordChangeView>
                                                     }
-                                                    else if (uri.LocalPath == "/register")
+                                                    else if (User.Status == UserStatus.DataPending)
                                                     {
-                                                        <Register></Register>
+                                                        <UserDataSetView></UserDataSetView>
                                                     }
-                                                    else if (uri.LocalPath == "/passwordreset")
+                                                    else
                                                     {
-                                                        <PasswordReset></PasswordReset>
+                                                        @Body
                                                     }
                                                 }
-                                            </SoftErrorBoundary>
-                                        </PageErrorBoundary>
+                                            }
+                                            else
+                                            {
+                                                if (uri.LocalPath == "/login")
+                                                {
+                                                    <Login></Login>
+                                                }
+                                                else if (uri.LocalPath == "/register")
+                                                {
+                                                    <Register></Register>
+                                                }
+                                                else if (uri.LocalPath == "/passwordreset")
+                                                {
+                                                    <PasswordReset></PasswordReset>
+                                                }
+                                            }
+                                        </SoftErrorBoundary>
                                     </div>
                                 </div>
                             </div>
@@ -161,8 +159,8 @@
                 await JsRuntime.InvokeVoidAsync("document.body.removeAttribute", "data-kt-app-page-loading");
                 await JsRuntime.InvokeVoidAsync("KTMenu.createInstances");
                 await JsRuntime.InvokeVoidAsync("KTDrawer.createInstances");
-                
-                //await JsRuntime.InvokeVoidAsync("createSnow");
+
+    //await JsRuntime.InvokeVoidAsync("createSnow");
 
                 await SessionService.Register();
 

+ 1 - 28
Moonlight/Shared/Views/Test.razor

@@ -1,39 +1,12 @@
 @page "/test"
-@using Moonlight.App.Repositories
-@using Moonlight.App.Database.Entities
-@using Moonlight.App.Models.Forms
-
-@inject UserRepository UserRepository
 
 <LazyLoader Load="Load">
-    <SmartForm Model="Model" OnValidSubmit="OnValidSubmit">
-        <div class="mb-3">
-            <SmartDropdown 
-                Items="Users" 
-                @bind-Value="Model.User" 
-                DisplayFunc="@(x => x.Email)" 
-                SearchProp="@(x => x.Email)" />
-        </div>
-        <div>
-            <button class="btn btn-primary" type="submit">Submit</button>
-        </div>
-    </SmartForm>
 </LazyLoader>
 
 @code
 {
-    private User[] Users;
-    private TestDataModel Model = new();
-
     private Task Load(LazyLoader arg)
     {
-        Users = UserRepository.Get().ToArray();
-        
-        return Task.CompletedTask;
-    }
-
-    private Task OnValidSubmit()
-    {
-        return Task.CompletedTask;
+        throw new Exception("Nein");
     }
 }