@page "/admin/servers/stars" @using MoonCore.Blazor.Tailwind.MinimalCrud @using MoonCore.Helpers @using MoonCore.Models @using MoonCore.Blazor.Tailwind.DataTable @using MoonlightServers.Shared.Http.Responses.Admin.Stars @using MoonCore.Blazor.Tailwind.Components @using MoonCore.Blazor.Tailwind.Toasts @using MoonCore.Exceptions @using Moonlight.Client.Services @inject HttpApiClient ApiClient @inject DownloadService DownloadService @inject ToastService ToastService
@if (!string.IsNullOrEmpty(context.DonateUrl)) { Donate } @if (!string.IsNullOrEmpty(context.UpdateUrl)) { Update } Export @code { private MinimalCrud Crud; private void OnConfigure(MinimalCrudOptions options) { options.Title = "Stars"; options.ItemLoader = async (page, pageSize) => await ApiClient.GetJson>($"api/admin/servers/stars?page={page}&pageSize={pageSize}"); options.CreateUrl = ComponentHelper.GetRouteOfComponent(); options.UpdateUrl = item => ComponentHelper.GetRouteOfComponent(item.Id)!; options.DeleteFunction = async item => await ApiClient.Delete($"api/admin/servers/stars/{item.Id}"); } 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 Crud.Refresh(isSilent: false, bypassCache: true); } }