@using LucideBlazor @using Microsoft.AspNetCore.Authorization @using Microsoft.AspNetCore.Components.Authorization @using Moonlight.Shared @using Moonlight.Shared.Http.Requests @using Moonlight.Shared.Http.Responses @using Moonlight.Shared.Http.Responses.Admin.Themes @using ShadcnBlazor.DataGrids @using ShadcnBlazor.Dropdowns @using ShadcnBlazor.Extras.AlertDialogs @using ShadcnBlazor.Tabels @using ShadcnBlazor.Buttons @using ShadcnBlazor.Extras.Toasts @inject ToastService ToastService @inject NavigationManager Navigation @inject AlertDialogService AlertDialogService @inject IAuthorizationService AuthorizationService @inject HttpClient HttpClient

Themes

Manage themes for your instance
@context.Name @if (context.IsEnabled) { }
Edit Delete
@code { [CascadingParameter] public Task AuthState { get; set; } private DataGrid Grid; private AuthorizationResult EditAccess; private AuthorizationResult DeleteAccess; private AuthorizationResult CreateAccess; protected override async Task OnInitializedAsync() { var authState = await AuthState; EditAccess = await AuthorizationService.AuthorizeAsync(authState.User, Permissions.Themes.Edit); DeleteAccess = await AuthorizationService.AuthorizeAsync(authState.User, Permissions.Themes.Delete); CreateAccess = await AuthorizationService.AuthorizeAsync(authState.User, Permissions.Themes.Create); } 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/themes{query}&filterOptions={filterOptions}", Constants.SerializerOptions ); return new DataGridResponse(response!.Data, response.TotalLength); } private void CreateAsync() => Navigation.NavigateTo("/admin/system/themes/create"); private void EditAsync(ThemeDto theme) => Navigation.NavigateTo($"/admin/system/themes/{theme.Id}"); private async Task DeleteAsync(ThemeDto theme) { await AlertDialogService.ConfirmDangerAsync( $"Deletion of theme {theme.Name}", "Do you really want to delete this theme? This action cannot be undone", async () => { var response = await HttpClient.DeleteAsync($"api/admin/themes/{theme.Id}"); response.EnsureSuccessStatusCode(); await ToastService.SuccessAsync("Theme deletion", $"Successfully deleted theme {theme.Name}"); await Grid.RefreshAsync(); } ); } }