@page "/admin/servers/all"
@using MoonCore.Blazor.Tailwind.MinimalCrud
@using MoonCore.Blazor.Tailwind.DataTable
@using MoonCore.Helpers
@using MoonCore.Models
@using MoonlightServers.Shared.Http.Responses.Admin.Nodes
@using MoonlightServers.Shared.Http.Responses.Admin.Servers
@using MoonlightServers.Shared.Http.Responses.Admin.Stars
@using MoonCore.Blazor.Tailwind.Components
@inject HttpApiClient ApiClient
@{
var node = Nodes.FirstOrDefault(x => x.Id == context.NodeId);
}
@if (node != null)
{
@node.Name
}
else
{
N/A
}
@{
var star = Stars.FirstOrDefault(x => x.Id == context.StarId);
}
@if (star != null)
{
@star.Name
}
else
{
N/A
}
@code
{
private List Stars = new();
private List Nodes = new();
private void OnConfigure(MinimalCrudOptions options)
{
options.Title = "Servers";
options.ItemLoader = LoadItems;
options.CreateUrl = ComponentHelper.GetRouteOfComponent();
options.UpdateUrl = item => ComponentHelper.GetRouteOfComponent(item.Id)!;
options.DeleteFunction = async item => await ApiClient.Delete($"api/admin/servers/{item.Id}");
}
private async Task> LoadItems(int page, int pageSize)
{
// Clear potential previous data
var data = await ApiClient.GetJson>($"api/admin/servers?page={page}&pageSize={pageSize}");
foreach (var item in data.Items)
{
if (Nodes.All(x => x.Id != item.NodeId))
{
var node = await ApiClient.GetJson($"api/admin/servers/nodes/{item.NodeId}");
Nodes.Add(node);
}
if (Stars.All(x => x.Id != item.StarId))
{
var star = await ApiClient.GetJson($"api/admin/servers/stars/{item.StarId}");
Stars.Add(star);
}
}
return data;
}
}