Files
ZeroSpace/ZeroSpace/ZeroSpace.Web_Backup_2026.09.28_11.24.30/Pages/Units.razor
T

101 lines
3.9 KiB
Plaintext

@page "/units"
@using ZeroSpace.Model
@using ZeroSpace.Web.Services
@using Telerik.Blazor
@using Telerik.Blazor.Components
@inject IUnitsApiClient UnitsApiClient
<PageTitle>Units</PageTitle>
<div class="section-header d-flex align-items-center mb-4">
<h1 class="mb-0">Units</h1>
<div class="ms-3 flex-grow-1 border-bottom opacity-25"></div>
</div>
@if (isLoading)
{
<div class="d-flex justify-content-center py-5">
<div class="spinner-border text-success" role="status">
<span class="visually-hidden">Loading units...</span>
</div>
</div>
}
else if (errorMessage != null)
{
<div class="alert alert-danger d-flex align-items-center justify-content-between" role="alert">
<div>
<strong>Error:</strong> @errorMessage
</div>
<button class="btn btn-outline-danger btn-sm" @onclick="LoadUnitsAsync">Retry</button>
</div>
}
else if (gearNotes == null || gearNotes.Count == 0)
{
<div class="alert alert-warning" role="alert">
No units found.
</div>
}
else
{
<div class="grid-container">
<TelerikGrid Data="@gearNotes" Pageable="true" PageSize="50" Sortable="true" FilterMode="@GridFilterMode.FilterRow"
Height="calc(100vh - 250px)">
<GridColumns>
<GridColumn Field="@(nameof(UnitData.Name))" Title="Name" Width="200px"/>
<GridColumn Field="@(nameof(UnitData.Hexite))" Title="Hexite" Width="90px" />
<GridColumn Field="@(nameof(UnitData.Flux))" Title="Flux" Width="90px" />
<GridColumn Field="@(nameof(UnitData.DpsPerTotalCost))" Title="DpsPerTotalCost" Width="90px" />
<GridColumn Field="@(nameof(UnitData.HealthPerTotalCost))" Title="HealthPerTotalCost" Width="90px" />
<GridColumn Field="@(nameof(UnitData.Supply))" Title="Supply" Width="90px" />
<GridColumn Field="@(nameof(UnitData.ProductionTime))" Title="Production Time" Width="90px" />
<GridColumn Field="@(nameof(UnitData.Health))" Title="Health" Width="90px" />
<GridColumn Field="@(nameof(UnitData.Shields))" Title="Shields" Width="90px" />
<GridColumn Field="@(nameof(UnitData.ArmorRating))" Title="Armor Rating" Width="90px" />
<GridColumn Field="@(nameof(UnitData.MovementSpeed))" Title="Movement Speed" Width="90px" />
<GridColumn Field="@(nameof(UnitData.DamagePerSecond))" Title="Damage Per Second" Width="90px" />
<GridColumn Field="@(nameof(UnitData.AttackRange))" Title="Attack Range" Width="90px" />
<GridColumn Field="@(nameof(UnitData.Attributes))" Title="Attributes" Width="90px" />
<GridColumn Field="@(nameof(UnitData.Tier))" Title="Tier" Width="90px" />
<GridColumn Field="@(nameof(UnitData.Faction))" Title="Faction" Width="90px" />
<GridColumn Field="@(nameof(UnitData.Hotkey))" Title="Hotkey" Width="90px" />
<GridColumn Field="@(nameof(UnitData.BuildAtSameTime))" Title="Build At Same Time" Width="90px" />
<GridColumn Field="@(nameof(UnitData.Limit))" Title="Limit" Width="90px" />
</GridColumns>
</TelerikGrid>
</div>
}
@code {
private List<UnitData>? gearNotes;
private bool isLoading = true;
private string? errorMessage;
protected override async Task OnInitializedAsync()
{
await LoadUnitsAsync();
}
private async Task LoadUnitsAsync()
{
isLoading = true;
errorMessage = null;
try
{
var units = await UnitsApiClient.GetUnitsAsync();
gearNotes = units.ToList();
}
catch (Exception ex)
{
errorMessage = $"Failed to load units: {ex.Message}";
}
finally
{
isLoading = false;
}
}
}