101 lines
3.9 KiB
Plaintext
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;
|
|
}
|
|
}
|
|
}
|