@page "/admin/servers/stars" @using MoonCore.Blazor.Tailwind.Alerts @using MoonCore.Helpers @using MoonCore.Models @using MoonlightServers.Shared.Http.Responses.Admin.Stars @using MoonCore.Blazor.Tailwind.Components @using MoonCore.Blazor.Tailwind.Dt @using MoonCore.Blazor.Tailwind.Services @using MoonCore.Blazor.Tailwind.Toasts @using MoonCore.Exceptions @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 DataTable Table; private async Task> LoadData(PaginationOptions options) => await ApiClient.GetJson>($"api/admin/servers/stars?page={options.Page}&pageSize={options.PerPage}"); private async Task Delete(StarDetailResponse detailResponse) { await AlertService.ConfirmDanger( "Star deletion", $"Do you really want to delete the star '{detailResponse.Name}'", async () => { await ApiClient.Delete($"api/admin/servers/stars/{detailResponse.Id}"); await ToastService.Success("Successfully deleted star"); await Table.Refresh(); } ); } private async Task Export(StarDetailResponse star) { var json = await ApiClient.GetString($"api/admin/servers/stars/{star.Id}/export"); var formattedFileName = star.Name.Replace(" ", "_") + ".json"; await DownloadService.DownloadString(formattedFileName, json); await ToastService.Success($"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.Danger($"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.Success($"Successfully imported '{star.Name}'"); } catch (HttpApiException e) { await ToastService.Danger($"Failed to import '{file.Name}': {e.Title}"); } } await Table.Refresh(); } }