@page "/my-decks" @using Microsoft.EntityFrameworkCore @rendermode InteractiveServer @inject AppDbContext Db @inject NavigationManager Nav My Decks - Chrono CCG

My Decks

@decks.Count deck@(decks.Count != 1 ? "s" : "") saved

New Deck
@if (loading) {
Loading decks...
} else if (decks.Count == 0) {

No decks yet. Create your first deck!

Build a Deck
} else {
@foreach (var deck in decks) { var cardCount = deck.Cards.Count; var uniqueCount = deck.Cards.Distinct().Count(); var isValid = cardCount == 40 && deck.Divers.Count == 2;
@(string.IsNullOrEmpty(deck.Name) ? "Untitled Deck" : deck.Name)
@(isValid ? "Valid" : $"{cardCount}/40")
@if (!string.IsNullOrEmpty(deck.Season)) {
@deck.Season
}
@cardCount cards @uniqueCount unique @deck.Divers.Count/2 divers
@if (deck.Divers.Count > 0) {
@foreach (var diver in deck.Divers) { @diver }
} @if (!string.IsNullOrEmpty(deck.Notes)) {
@deck.Notes
}
}
}
@if (deckToDelete != null) {
Delete Deck

Delete @(string.IsNullOrEmpty(deckToDelete.Name) ? "Untitled Deck" : deckToDelete.Name)? This cannot be undone.

} @code { private List decks = []; private bool loading = true; private UserDeck? deckToDelete; private bool deleting; protected override async Task OnInitializedAsync() { await LoadDecks(); } private async Task LoadDecks() { loading = true; try { decks = await Db.UserDecks.OrderByDescending(d => d.UpdatedAt).ToListAsync(); } catch (Exception ex) { Console.WriteLine($"[WARNING] Could not load decks: {ex.Message}"); decks = []; } finally { loading = false; } } private void EditDeck(Guid id) { Nav.NavigateTo($"/deck-builder/{id}"); } private void ConfirmDelete(UserDeck deck) { deckToDelete = deck; } private void CancelDelete() { deckToDelete = null; } private async Task DeleteDeck() { if (deckToDelete == null) return; deleting = true; try { var deck = await Db.UserDecks.FindAsync(deckToDelete.Id); if (deck != null) { Db.UserDecks.Remove(deck); await Db.SaveChangesAsync(); } } catch (Exception ex) { Console.WriteLine($"[WARNING] Could not delete deck: {ex.Message}"); } finally { deleting = false; deckToDelete = null; await LoadDecks(); } } }