Files
ZeroSpace/ZeroSpace/ZeroSpace.Web/Pages/StarSystemDetail.razor
T
2026-09-28 15:50:03 -04:00

140 lines
4.0 KiB
Plaintext

@page "/StarSystem/{Id}"
<PageTitle>@(system?.Name ?? "Star System")</PageTitle>
@if (system is null)
{
<div class="alert alert-warning" role="alert">
Unknown star system. <a href="/StarSystem">Back to all star systems</a>.
</div>
}
else
{
<div class="section-header d-flex align-items-center mb-4">
<h1 class="mb-0">@system.Name</h1>
<span class="badge @CategoryBadgeClass(system.SystemCategory) ms-3">@system.SystemCategory.ToDisplayName()</span>
<span class="badge @OwnerBadgeClass(system.Owner) ms-2">@system.Owner</span>
<div class="ms-3 flex-grow-1 border-bottom opacity-25"></div>
<a href="/galaxy" class="btn btn-sm btn-scifi-outline ms-2 d-none d-md-inline-flex">
<span>View on Map</span>
</a>
</div>
<dl class="row">
<dt class="col-sm-3">Owner</dt>
<dd class="col-sm-9">
<span class="badge @OwnerBadgeClass(system.Owner)">@system.Owner</span>
</dd>
<dt class="col-sm-3">Category</dt>
<dd class="col-sm-9">@system.SystemCategory.ToDisplayName()</dd>
<dt class="col-sm-3">Occupation buff</dt>
<dd class="col-sm-9">@(system.OccupationBuff ?? "—")</dd>
<dt class="col-sm-3">System mastery</dt>
<dd class="col-sm-9">
@if (system.SystemMastery is null)
{
@:—
}
else
{
var masteryUrl = ZeroSpaceLinks.UrlFor(system.SystemMastery);
if (masteryUrl is null)
{
@system.SystemMastery
}
else
{
<a href="@masteryUrl">@system.SystemMastery</a>
}
}
</dd>
<dt class="col-sm-3">Yields</dt>
<dd class="col-sm-9">@YieldText(system)</dd>
<dt class="col-sm-3">Connected systems</dt>
<dd class="col-sm-9">
@for (var i = 0; i < system.ConnectedSystems.Count; i++)
{
var name = system.ConnectedSystems[i];
var url = ZeroSpaceLinks.UrlFor(name);
if (url is null)
{
<span>@name</span>
}
else
{
<a href="@url">@name</a>
}
@if (i < system.ConnectedSystems.Count - 1)
{
@:,&nbsp;
}
}
</dd>
</dl>
@if (!string.IsNullOrWhiteSpace(system.Body))
{
<h2>Notes</h2>
<MarkdownView Markdown="@system.Body" />
}
}
@code {
[Parameter]
public string Id { get; set; } = string.Empty;
private StarSystemData? system;
protected override void OnParametersSet()
{
system = StarSystems.All.FirstOrDefault(s => s.Id.Equals(Id, StringComparison.OrdinalIgnoreCase));
}
private static string CategoryBadgeClass(StarSystemCategory category) => category switch
{
StarSystemCategory.HomeworldSystem => "badge-homeworld",
StarSystemCategory.CoreSystem => "badge-core",
StarSystemCategory.SideSystem => "badge-side",
_ => "badge-side"
};
private static string OwnerBadgeClass(string owner) => owner switch
{
StarSystemOwners.EdenAccord => "badge-eden",
StarSystemOwners.KeeperCouncil => "badge-keeper",
StarSystemOwners.ObsidianOrder => "badge-obsidian",
_ => "badge-side"
};
private static string YieldText(StarSystemData s)
{
var yields = new List<string>();
if (s.HigherInfluenceYield)
{
yields.Add("Influence");
}
if (s.HigherCreditYield)
{
yields.Add("Credits");
}
if (s.HigherEnergyYield)
{
yields.Add("Energy");
}
if (s.HigherChanceForItems)
{
yields.Add("Items");
}
return yields.Count == 0 ? "Standard" : "Higher " + string.Join(", ", yields);
}
}