@page "/admin/servers/stars" @using MoonCore.Blazor.FlyonUi.Alerts @using MoonCore.Blazor.FlyonUi.Common @using MoonCore.Blazor.FlyonUi.Helpers @using MoonCore.Blazor.FlyonUi.Toasts @using MoonCore.Helpers @using MoonlightServers.Shared.Http.Responses.Admin.Stars @using MoonCore.Exceptions @using MoonCore.Blazor.FlyonUi.Components @using MoonCore.Blazor.FlyonUi.Grid @using MoonCore.Blazor.FlyonUi.Grid.Columns @using MoonCore.Common @inject HttpApiClient ApiClient @inject DownloadService DownloadService @inject ToastService ToastService @inject AlertService AlertService @attribute [Authorize(Policy = "permissions:admin.servers.stars.get")]
@context.Name
@if (!string.IsNullOrEmpty(context.DonateUrl)) { Donate } @if (!string.IsNullOrEmpty(context.UpdateUrl)) { Update } Export
@code { private DataGrid Grid; private ItemSource ItemSource => ItemSourceFactory.From(LoadAsync); private async Task> LoadAsync(int startIndex, int count) { var query = $"?startIndex={startIndex}&count={count}"; return await ApiClient.GetJson>($"api/admin/servers/stars{query}"); } private async Task DeleteAsync(StarResponse response) { await AlertService.ConfirmDangerAsync( "Star deletion", $"Do you really want to delete the star '{response.Name}'", async () => { await ApiClient.Delete($"api/admin/servers/stars/{response.Id}"); await ToastService.SuccessAsync("Successfully deleted star"); await Grid.RefreshAsync(); } ); } private async Task ExportAsync(StarResponse star) { var json = await ApiClient.GetString($"api/admin/servers/stars/{star.Id}/export"); var formattedFileName = star.Name.Replace(" ", "_") + ".json"; await DownloadService.DownloadAsync(formattedFileName, json); await ToastService.SuccessAsync($"Successfully exported '{star.Name}'"); } private async Task OnImportFiles(InputFileChangeEventArgs eventArgs) { IBrowserFile[] files; if(eventArgs.FileCount == 0) return; if (eventArgs.FileCount > 1) files = eventArgs.GetMultipleFiles().ToArray(); else files = [eventArgs.File]; foreach (var file in files) { try { if (!file.Name.EndsWith(".json")) { await ToastService.ErrorAsync($"Failed to import '{file.Name}': Only json files are supported"); continue; } await using var stream = file.OpenReadStream(); var content = new MultipartFormDataContent(); content.Add(new StreamContent(stream), "file", file.Name); var star = await ApiClient.PostJson("api/admin/servers/stars/import", content); await ToastService.SuccessAsync($"Successfully imported '{star.Name}'"); } catch (HttpApiException e) { await ToastService.ErrorAsync($"Failed to import '{file.Name}': {e.Title}"); } } await Grid.RefreshAsync(); } }