From 136620f1e642a011cf90a717328604e1b7ba30d1 Mon Sep 17 00:00:00 2001 From: ChiaraBm Date: Thu, 29 Jan 2026 08:58:12 +0100 Subject: [PATCH] Updated all forms to use the EnhancedEditForm and blazors native validation. Fixed smaller issues after upgrading to ShadcnBlazor 1.0.11 --- Moonlight.Frontend/Moonlight.Frontend.csproj | 4 +- .../UI/Admin/Modals/CreateApiKeyDialog.razor | 74 ++++----- .../UI/Admin/Modals/CreateRoleDialog.razor | 78 +++++----- .../UI/Admin/Modals/CreateUserDialog.razor | 59 ++++---- .../Modals/ManageRoleMembersDialog.razor | 8 +- .../UI/Admin/Modals/UpdateApiKeyDialog.razor | 65 ++++---- .../UI/Admin/Modals/UpdateRoleDialog.razor | 79 +++++----- .../UI/Admin/Modals/UpdateUserDialog.razor | 62 ++++---- .../UI/Admin/Views/Sys/Diagnose.razor | 4 +- .../UI/Admin/Views/Sys/Index.razor | 8 - .../UI/Admin/Views/Sys/Instance.razor | 24 ++- .../UI/Admin/Views/Sys/Themes/Create.razor | 140 ++++++++--------- .../UI/Admin/Views/Sys/Themes/Update.razor | 143 +++++++++--------- .../Http/Requests/ApiKeys/CreateApiKeyDto.cs | 5 +- .../Http/Requests/ApiKeys/UpdateApiKeyDto.cs | 4 +- 15 files changed, 362 insertions(+), 395 deletions(-) diff --git a/Moonlight.Frontend/Moonlight.Frontend.csproj b/Moonlight.Frontend/Moonlight.Frontend.csproj index 404f41d0..2cfb72cf 100644 --- a/Moonlight.Frontend/Moonlight.Frontend.csproj +++ b/Moonlight.Frontend/Moonlight.Frontend.csproj @@ -24,8 +24,8 @@ - - + + diff --git a/Moonlight.Frontend/UI/Admin/Modals/CreateApiKeyDialog.razor b/Moonlight.Frontend/UI/Admin/Modals/CreateApiKeyDialog.razor index 0969beb7..5fe70954 100644 --- a/Moonlight.Frontend/UI/Admin/Modals/CreateApiKeyDialog.razor +++ b/Moonlight.Frontend/UI/Admin/Modals/CreateApiKeyDialog.razor @@ -1,10 +1,9 @@ @using Moonlight.Frontend.UI.Admin.Components @using Moonlight.Shared.Http.Requests.ApiKeys @using ShadcnBlazor.Dialogs -@using ShadcnBlazor.Extras.Common -@using ShadcnBlazor.Extras.FormHandlers +@using ShadcnBlazor.Extras.Forms +@using ShadcnBlazor.Fields @using ShadcnBlazor.Inputs -@using ShadcnBlazor.Labels @inherits ShadcnBlazor.Extras.Dialogs.DialogBase @@ -15,56 +14,57 @@ - -
- + -
- - -
- -
- - -
- -
- - -
-
-
- - - Save changes - + + + + +
+ + Name + + + + Description + + + + Permissions + + + + +
+ + Save changes + +
+ @code { [Parameter] public Func OnSubmit { get; set; } private CreateApiKeyDto Request; - private FormHandler FormHandler; - private List Permissions = new(); + private List Permissions = new(); protected override void OnInitialized() { - Request = new(); + Request = new() + { + Permissions = [] + }; } - private async Task SubmitAsync() + private async Task OnSubmitAsync(EditContext editContext, ValidationMessageStore validationMessageStore) { Request.Permissions = Permissions.ToArray(); + await OnSubmit.Invoke(Request); + await CloseAsync(); + return true; } } \ No newline at end of file diff --git a/Moonlight.Frontend/UI/Admin/Modals/CreateRoleDialog.razor b/Moonlight.Frontend/UI/Admin/Modals/CreateRoleDialog.razor index 2070f74b..ce98ea80 100644 --- a/Moonlight.Frontend/UI/Admin/Modals/CreateRoleDialog.razor +++ b/Moonlight.Frontend/UI/Admin/Modals/CreateRoleDialog.razor @@ -1,11 +1,9 @@ @using Moonlight.Frontend.UI.Admin.Components @using Moonlight.Shared.Http.Requests.Roles -@using ShadcnBlazor.Buttons @using ShadcnBlazor.Dialogs -@using ShadcnBlazor.Extras.Common -@using ShadcnBlazor.Extras.FormHandlers +@using ShadcnBlazor.Extras.Forms +@using ShadcnBlazor.Fields @using ShadcnBlazor.Inputs -@using ShadcnBlazor.Labels @inherits ShadcnBlazor.Extras.Dialogs.DialogBase @@ -18,41 +16,36 @@ - -
- + + + -
- - -
- -
- - -
- -
- - -
-
-
- - - Save changes - +
+ + Name + + + + Description + + + + Permissions + + + + +
+ + Save changes + + + @code { @@ -60,7 +53,6 @@ private CreateRoleDto Request; private List Permissions; - private FormHandler FormHandler; protected override void OnInitialized() { @@ -68,19 +60,17 @@ { Permissions = [] }; - + Permissions = new(); } - private async Task SubmitAsync() + private async Task OnSubmitAsync(EditContext editContext, ValidationMessageStore validationMessageStore) { Request.Permissions = Permissions.ToArray(); - await FormHandler.SubmitAsync(); - } - private async Task OnSubmitAsync() - { await OnSubmit.Invoke(Request); await CloseAsync(); + + return true; } } diff --git a/Moonlight.Frontend/UI/Admin/Modals/CreateUserDialog.razor b/Moonlight.Frontend/UI/Admin/Modals/CreateUserDialog.razor index 523713a3..ebf8e442 100644 --- a/Moonlight.Frontend/UI/Admin/Modals/CreateUserDialog.razor +++ b/Moonlight.Frontend/UI/Admin/Modals/CreateUserDialog.razor @@ -1,9 +1,8 @@ @using Moonlight.Shared.Http.Requests.Users @using ShadcnBlazor.Dialogs -@using ShadcnBlazor.Extras.Common -@using ShadcnBlazor.Extras.FormHandlers +@using ShadcnBlazor.Extras.Forms +@using ShadcnBlazor.Fields @using ShadcnBlazor.Inputs -@using ShadcnBlazor.Labels @inherits ShadcnBlazor.Extras.Dialogs.DialogBase @@ -16,50 +15,50 @@ - -
+ + + -
- - -
- -
- - -
-
-
- - - Save changes - +
+ + Username + + + + Email Address + + +
+ + Save changes + + + @code { [Parameter] public Func OnSubmit { get; set; } private CreateUserDto Request; - private FormHandler FormHandler; protected override void OnInitialized() { Request = new(); } - private async Task SubmitAsync() + private async Task OnSubmitAsync(EditContext editContext, ValidationMessageStore validationMessageStore) { await OnSubmit.Invoke(Request); - await CloseAsync(); + + return true; } } diff --git a/Moonlight.Frontend/UI/Admin/Modals/ManageRoleMembersDialog.razor b/Moonlight.Frontend/UI/Admin/Modals/ManageRoleMembersDialog.razor index 6abb099a..4dc004fa 100644 --- a/Moonlight.Frontend/UI/Admin/Modals/ManageRoleMembersDialog.razor +++ b/Moonlight.Frontend/UI/Admin/Modals/ManageRoleMembersDialog.razor @@ -32,9 +32,9 @@ SearchPlaceholder="Search user" ValueSelector="dto => dto.Username" Source="LoadUsersAsync"/> - + - +
@@ -50,9 +50,9 @@
- + - +
diff --git a/Moonlight.Frontend/UI/Admin/Modals/UpdateApiKeyDialog.razor b/Moonlight.Frontend/UI/Admin/Modals/UpdateApiKeyDialog.razor index 6f0db39f..3f2f62e9 100644 --- a/Moonlight.Frontend/UI/Admin/Modals/UpdateApiKeyDialog.razor +++ b/Moonlight.Frontend/UI/Admin/Modals/UpdateApiKeyDialog.razor @@ -3,10 +3,9 @@ @using Moonlight.Shared.Http.Requests.ApiKeys @using Moonlight.Shared.Http.Responses.ApiKeys @using ShadcnBlazor.Dialogs -@using ShadcnBlazor.Extras.Common -@using ShadcnBlazor.Extras.FormHandlers +@using ShadcnBlazor.Extras.Forms +@using ShadcnBlazor.Fields @using ShadcnBlazor.Inputs -@using ShadcnBlazor.Labels @inherits ShadcnBlazor.Extras.Dialogs.DialogBase @@ -17,37 +16,32 @@ - -
- + + + + -
- - -
- -
- - -
- -
- - -
-
-
- - - Save changes - +
+ + Name + + + + Description + + + + Permissions + + + + +
+ + Save changes + + + @code { @@ -55,7 +49,6 @@ [Parameter] public ApiKeyDto Key { get; set; } private UpdateApiKeyDto Request; - private FormHandler FormHandler; private List Permissions = new(); protected override void OnInitialized() @@ -64,10 +57,12 @@ Permissions = Key.Permissions.ToList(); } - private async Task SubmitAsync() + private async Task OnSubmitAsync(EditContext editContext, ValidationMessageStore validationMessageStore) { Request.Permissions = Permissions.ToArray(); await OnSubmit.Invoke(Request); await CloseAsync(); + + return true; } } \ No newline at end of file diff --git a/Moonlight.Frontend/UI/Admin/Modals/UpdateRoleDialog.razor b/Moonlight.Frontend/UI/Admin/Modals/UpdateRoleDialog.razor index f70fa989..1c5870cb 100644 --- a/Moonlight.Frontend/UI/Admin/Modals/UpdateRoleDialog.razor +++ b/Moonlight.Frontend/UI/Admin/Modals/UpdateRoleDialog.razor @@ -2,12 +2,10 @@ @using Moonlight.Frontend.UI.Admin.Components @using Moonlight.Shared.Http.Requests.Roles @using Moonlight.Shared.Http.Responses.Admin -@using ShadcnBlazor.Buttons @using ShadcnBlazor.Dialogs -@using ShadcnBlazor.Extras.Common -@using ShadcnBlazor.Extras.FormHandlers +@using ShadcnBlazor.Extras.Forms +@using ShadcnBlazor.Fields @using ShadcnBlazor.Inputs -@using ShadcnBlazor.Labels @inherits ShadcnBlazor.Extras.Dialogs.DialogBase @@ -20,50 +18,44 @@ - -
- + + + -
- - -
- -
- - -
- -
- - -
-
-
- - - Save changes - +
+ + Name + + + + Description + + + + Permissions + + + + +
+ + Save changes + + + @code { [Parameter] public Func OnSubmit { get; set; } [Parameter] public RoleDto Role { get; set; } - + private UpdateRoleDto Request; private List Permissions; - private FormHandler FormHandler; protected override void OnInitialized() { @@ -71,15 +63,12 @@ Permissions = Role.Permissions.ToList(); } - private async Task SubmitAsync() + private async Task OnSubmitAsync(EditContext editContext, ValidationMessageStore validationMessageStore) { Request.Permissions = Permissions.ToArray(); - await FormHandler.SubmitAsync(); - } - - private async Task OnSubmitAsync() - { await OnSubmit.Invoke(Request); await CloseAsync(); + + return true; } } diff --git a/Moonlight.Frontend/UI/Admin/Modals/UpdateUserDialog.razor b/Moonlight.Frontend/UI/Admin/Modals/UpdateUserDialog.razor index 0418d1ea..d564202a 100644 --- a/Moonlight.Frontend/UI/Admin/Modals/UpdateUserDialog.razor +++ b/Moonlight.Frontend/UI/Admin/Modals/UpdateUserDialog.razor @@ -2,10 +2,9 @@ @using Moonlight.Shared.Http.Requests.Users @using Moonlight.Shared.Http.Responses.Users @using ShadcnBlazor.Dialogs -@using ShadcnBlazor.Extras.Common -@using ShadcnBlazor.Extras.FormHandlers +@using ShadcnBlazor.Extras.Forms +@using ShadcnBlazor.Fields @using ShadcnBlazor.Inputs -@using ShadcnBlazor.Labels @inherits ShadcnBlazor.Extras.Dialogs.DialogBase @@ -18,51 +17,50 @@ - -
- + + + -
- - -
- -
- - -
-
-
- - - Save changes - +
+ + Username + + + + Email Address + + +
+ + Save changes + + + @code { [Parameter] public Func OnSubmit { get; set; } [Parameter] public UserDto User { get; set; } - + private UpdateUserDto Request; - private FormHandler FormHandler; protected override void OnInitialized() { Request = UserMapper.ToUpdate(User); } - private async Task SubmitAsync() + private async Task OnSubmitAsync(EditContext editContext, ValidationMessageStore validationMessageStore) { await OnSubmit.Invoke(Request); - await CloseAsync(); + + return true; } } diff --git a/Moonlight.Frontend/UI/Admin/Views/Sys/Diagnose.razor b/Moonlight.Frontend/UI/Admin/Views/Sys/Diagnose.razor index 0cac7f81..f6433df8 100644 --- a/Moonlight.Frontend/UI/Admin/Views/Sys/Diagnose.razor +++ b/Moonlight.Frontend/UI/Admin/Views/Sys/Diagnose.razor @@ -44,10 +44,10 @@ - + Start diagnostics - +
diff --git a/Moonlight.Frontend/UI/Admin/Views/Sys/Index.razor b/Moonlight.Frontend/UI/Admin/Views/Sys/Index.razor index 3675d5cc..7d764378 100644 --- a/Moonlight.Frontend/UI/Admin/Views/Sys/Index.razor +++ b/Moonlight.Frontend/UI/Admin/Views/Sys/Index.razor @@ -38,14 +38,6 @@ - -
-
- - -
-
-
+ + + Continue + -
- - -
- -
- - - -
- - - -
-
- +
+ + + + + + +
+ + Name -
+ -
- + + Version -
- -
- + + + + Author -
- -
- - -
-
- - - -
- - -
-
- - - -
+ + + + Is Enabled + + + + + + + + + CSS Content + + + + + +
+
+
+ @code { @@ -109,17 +112,12 @@ CssContent = "/* Define your css here */" }; - private FormHandler Form; private Editor Editor; - private async Task SubmitAsync() + private async Task OnSubmitAsync(EditContext editContext, ValidationMessageStore validationMessageStore) { Request.CssContent = await Editor.GetValueAsync(); - await Form.SubmitAsync(); - } - private async Task OnSubmitAsync() - { await HttpClient.PostAsJsonAsync( "/api/admin/themes", Request, @@ -134,5 +132,7 @@ await FrontendService.ReloadAsync(); Navigation.NavigateTo("/admin/system?tab=themes"); + + return true; } } \ No newline at end of file diff --git a/Moonlight.Frontend/UI/Admin/Views/Sys/Themes/Update.razor b/Moonlight.Frontend/UI/Admin/Views/Sys/Themes/Update.razor index 800ee14c..eed40f9e 100644 --- a/Moonlight.Frontend/UI/Admin/Views/Sys/Themes/Update.razor +++ b/Moonlight.Frontend/UI/Admin/Views/Sys/Themes/Update.razor @@ -8,12 +8,12 @@ @using Moonlight.Shared.Http.Requests.Themes @using Moonlight.Shared.Http.Responses.Themes @using ShadcnBlazor.Buttons -@using ShadcnBlazor.Labels @using ShadcnBlazor.Cards @using ShadcnBlazor.Extras.Common @using ShadcnBlazor.Extras.Editors -@using ShadcnBlazor.Extras.FormHandlers +@using ShadcnBlazor.Extras.Forms @using ShadcnBlazor.Extras.Toasts +@using ShadcnBlazor.Fields @using ShadcnBlazor.Inputs @using ShadcnBlazor.Switches @@ -24,99 +24,102 @@ @inject ToastService ToastService @inject FrontendService FrontendService -
-
-

Update theme

-
- Update the theme + + +
+
+

Update theme

+
+ Update the theme +
+
+
+ + + + Continue + +
-
-
- - -
-
- -
- - - - -
+
+ + + + -
-
- +
+ + Name -
+ -
- + + Version -
+ -
- + + Author -
+ -
- - -
-
+ + Is Enabled + + + + + + + - - -
- - -
-
- - - - -
+ CSS Content + + + + + +
+
+
+ + @code { [Parameter] public int Id { get; set; } - + private UpdateThemeDto Request; private ThemeDto Theme; - - private FormHandler Form; + private Editor Editor; - + private async Task LoadAsync(LazyLoader _) { var theme = await HttpClient.GetFromJsonAsync($"api/admin/themes/{Id}"); @@ -125,14 +128,10 @@ Request = ThemeMapper.ToUpdate(Theme); } - private async Task SubmitAsync() + private async Task OnSubmitAsync(EditContext editContext, ValidationMessageStore validationMessageStore) { Request.CssContent = await Editor.GetValueAsync(); - await Form.SubmitAsync(); - } - private async Task OnSubmitAsync() - { await HttpClient.PatchAsJsonAsync( $"/api/admin/themes/{Theme.Id}", Request, @@ -147,5 +146,7 @@ await FrontendService.ReloadAsync(); Navigation.NavigateTo("/admin/system?tab=themes"); + + return true; } } \ No newline at end of file diff --git a/Moonlight.Shared/Http/Requests/ApiKeys/CreateApiKeyDto.cs b/Moonlight.Shared/Http/Requests/ApiKeys/CreateApiKeyDto.cs index 12b28620..0f5e2e65 100644 --- a/Moonlight.Shared/Http/Requests/ApiKeys/CreateApiKeyDto.cs +++ b/Moonlight.Shared/Http/Requests/ApiKeys/CreateApiKeyDto.cs @@ -4,10 +4,13 @@ namespace Moonlight.Shared.Http.Requests.ApiKeys; public class CreateApiKeyDto { + [Required] [MaxLength(30)] public string Name { get; set; } - + [MaxLength(300)] public string Description { get; set; } = ""; + + [Required] public string[] Permissions { get; set; } } \ No newline at end of file diff --git a/Moonlight.Shared/Http/Requests/ApiKeys/UpdateApiKeyDto.cs b/Moonlight.Shared/Http/Requests/ApiKeys/UpdateApiKeyDto.cs index 20f64b56..d9fcbfc2 100644 --- a/Moonlight.Shared/Http/Requests/ApiKeys/UpdateApiKeyDto.cs +++ b/Moonlight.Shared/Http/Requests/ApiKeys/UpdateApiKeyDto.cs @@ -4,10 +4,12 @@ namespace Moonlight.Shared.Http.Requests.ApiKeys; public class UpdateApiKeyDto { + [Required] [MaxLength(30)] public string Name { get; set; } - + [MaxLength(300)] public string Description { get; set; } = ""; + [Required] public string[] Permissions { get; set; } } \ No newline at end of file