@using LucideBlazor @using Moonlight.Frontend.UI.Admin.Modals @using Moonlight.Shared.Http.Requests @using Moonlight.Shared.Http.Requests.Roles @using Moonlight.Shared.Http.Responses @using Moonlight.Shared.Http.Responses.Admin @using ShadcnBlazor.DataGrids @using ShadcnBlazor.Buttons @using ShadcnBlazor.Dropdowns @using ShadcnBlazor.Extras.AlertDialogs @using ShadcnBlazor.Extras.Dialogs @using ShadcnBlazor.Extras.Toasts @using ShadcnBlazor.Tabels @inject HttpClient HttpClient @inject DialogService DialogService @inject ToastService ToastService @inject AlertDialogService AlertDialogService
Edit Delete
@code { private DataGrid Grid; private async Task> LoadAsync(DataGridRequest request) { var query = $"?startIndex={request.StartIndex}&length={request.Length}"; var filterOptions = request.Filters.Count > 0 ? new FilterOptions(request.Filters) : null; var response = await HttpClient.GetFromJsonAsync>( $"api/admin/roles{query}&filterOptions={filterOptions}", Constants.SerializerOptions ); return new DataGridResponse(response!.Data, response.TotalLength); } private async Task CreateAsync() { await DialogService.LaunchAsync(parameters => { parameters[nameof(CreateRoleDialog.OnSubmit)] = async Task (CreateRoleDto request) => { await HttpClient.PostAsJsonAsync( "api/admin/roles", request, Constants.SerializerOptions ); await ToastService.SuccessAsync("Role creation", $"Role {request.Name} has been successfully created"); await Grid.RefreshAsync(); }; }); } private async Task EditAsync(RoleDto role) { await DialogService.LaunchAsync(parameters => { parameters[nameof(UpdateRoleDialog.Role)] = role; parameters[nameof(UpdateRoleDialog.OnSubmit)] = async Task (UpdateRoleDto request) => { await HttpClient.PatchAsJsonAsync( $"api/admin/roles/{role.Id}", request, Constants.SerializerOptions ); await ToastService.SuccessAsync("Role update", $"Role {request.Name} has been successfully updated"); await Grid.RefreshAsync(); }; }); } private async Task DeleteAsync(RoleDto role) { await AlertDialogService.ConfirmDangerAsync( $"Deletion of role {role.Name}", $"Do you really want to delete the role {role.Name} with {role.MemberCount} members? This action cannot be undone", async () => { await HttpClient.DeleteAsync($"api/admin/roles/{role.Id}"); await ToastService.SuccessAsync("User deletion", $"Successfully deleted role {role.Name}"); await Grid.RefreshAsync(); } ); } }