Files
ChronoCCG/Chrono/Shared/Pages/Decks.razor
T
2026-06-25 13:46:14 -04:00

99 lines
3.3 KiB
Plaintext

@namespace Shared.Pages
@page "/decks"
<PageTitle>Chrono CCG - Decks</PageTitle>
<HeadContent>
<meta name="description" content="Explore community and official Chrono CCG decks. Find the best strategies and card combinations." />
</HeadContent>
<div class="decks-page">
<div class="decks-header">
<h1>Decks</h1>
<div class="decks-header-row">
<p class="text-secondary">@decks.Count deck@(decks.Count != 1 ? "s" : "")</p>
<div class="form-check form-switch">
<input class="form-check-input" type="checkbox" id="showPrecons" @bind="showPrecons" @bind:after="RefreshDecks">
<label class="form-check-label" for="showPrecons">Show Precons</label>
</div>
</div>
</div>
<div class="deck-list">
@foreach (var deck in decks)
{
<a class="deck-card" href="/decks/@Uri.EscapeDataString(deck.Name)">
<div class="deck-card-body">
<h2 class="deck-card-title">@deck.Name</h2>
@if (deck.Factions.Count > 0)
{
<div class="deck-card-factions">
@foreach (var f in deck.Factions)
{
<span class="faction-badge">@f</span>
}
</div>
}
<div class="deck-card-factions">
<span class="faction-badge">@deck.DeckType</span>
</div>
<div class="deck-card-meta">
<span>@deck.Cards.Distinct().Count() unique, @deck.Cards.Count total</span>
@if (deck.Keycards.Count > 0)
{
<span>@deck.Keycards.Count keycard@(deck.Keycards.Count != 1 ? "s" : "")</span>
}
@if (deck.Divers.Count > 0)
{
<span>@deck.Divers.Count diver@(deck.Divers.Count != 1 ? "s" : "")</span>
}
</div>
</div>
@if (deck.Description != null)
{
<div class="deck-card-excerpt">@Truncate(deck.Description, 120)</div>
}
</a>
}
</div>
@if (decks.Count == 0)
{
<div class="empty-state">
<i class="bi bi-journal-text"></i>
<p>No decks available yet.</p>
</div>
}
</div>
@code {
private List<DeckData> decks = [];
private bool showPrecons = false;
protected override void OnInitialized()
{
RefreshDecks();
}
private void RefreshDecks()
{
decks = DeckDatabase.Decks
.Where(d => d.IsVisible)
.Where(d =>
showPrecons
? d.DeckType is "precon" or "store" :
d.DeckType is "custom")
.ToList();
}
private static string Truncate(string text, int maxLength)
{
if (text.Length <= maxLength) return text;
var lastSpace = text.LastIndexOf(' ', maxLength);
return text[..(lastSpace > 0 ? lastSpace : maxLength)] + "...";
}
}