@page "/admin/servers/all" @using MoonCore.Blazor.FlyonUi.Alerts @using MoonCore.Blazor.FlyonUi.Common @using MoonCore.Blazor.FlyonUi.Toasts @using MoonCore.Helpers @using MoonlightServers.Shared.Http.Responses.Admin.Nodes @using MoonlightServers.Shared.Http.Responses.Admin.Servers @using MoonlightServers.Shared.Http.Responses.Admin.Stars @using MoonCore.Blazor.FlyonUi.Components @using MoonCore.Blazor.FlyonUi.Grid @using MoonCore.Blazor.FlyonUi.Grid.Columns @using MoonCore.Common @using Moonlight.Shared.Http.Responses.Admin.Users @inject HttpApiClient ApiClient @inject AlertService AlertService @inject ToastService ToastService @attribute [Authorize(Policy = "permissions:admin.servers.get")]
Create
@context.Name @{ var owner = Users.GetValueOrDefault(context.OwnerId); } @(owner?.Username ?? "N/A") @{ var node = Nodes.GetValueOrDefault(context.NodeId); } @(node?.Name ?? "N/A") @{ var star = Stars.GetValueOrDefault(context.StarId); } @(star?.Name ?? "N/A") @code { private DataGrid Grid; private Dictionary Stars = new(); private Dictionary Nodes = new(); private Dictionary Users = new(); private ItemSource ItemSource => ItemSourceFactory.From(LoadAsync); private async Task> LoadAsync(int startIndex, int count) { var query = $"?startIndex={startIndex}&count={count}"; var countedData = await ApiClient.GetJson>($"api/admin/servers{query}"); // Fetch relations var nodesToFetch = countedData.Items .Where(x => !Nodes.ContainsKey(x.Id)) .Select(x => x.Id) .Distinct(); foreach (var id in nodesToFetch) { var node = await ApiClient.GetJson($"api/admin/servers/nodes/{id}"); Nodes[node.Id] = node; } var starsToFetch = countedData.Items .Where(x => !Stars.ContainsKey(x.Id)) .Select(x => x.Id) .Distinct(); foreach (var id in starsToFetch) { var star = await ApiClient.GetJson($"api/admin/servers/stars/{id}"); Stars[star.Id] = star; } var usersToFetch = countedData.Items .Where(x => !Users.ContainsKey(x.Id)) .Select(x => x.Id) .Distinct(); foreach (var id in usersToFetch) { var user = await ApiClient.GetJson($"api/admin/users/{id}"); Users[user.Id] = user; } return countedData; } private async Task DeleteAsync(ServerResponse response) { await AlertService.ConfirmDangerAsync( "Server deletion", $"Do you really want to delete the server '{response.Name}'", async () => { await ApiClient.Delete($"api/admin/servers/{response.Id}"); await ToastService.SuccessAsync("Successfully deleted server"); await Grid.RefreshAsync(); } ); } }