@page "/prematch" @using Marathon.UI.Pages.Shared @inject IStringLocalizer L @inject IEventBrowsingService Browsing @inject EventBrowsingState BrowsingState @inject NavigationManager Nav @L["App.Title"] · @L["Nav.PreMatch"] @code { private IReadOnlyList _availableSports = Array.Empty(); private IReadOnlyList _availableCountries = Array.Empty(); private bool _stale; protected override async Task OnInitializedAsync() { try { _availableSports = await Browsing.ListKnownSportCodesAsync(CancellationToken.None); _availableCountries = await Browsing.ListKnownCountryCodesAsync(CancellationToken.None); } catch { // Source not yet seeded — leave defaults; the list page renders empty state. _stale = true; } } private Task> LoadAsync(EventFilter filter, CancellationToken ct) => Browsing.ListUpcomingAsync(filter, ct); private void HandleFilterChanged(EventBrowsingState.PageFilter next) => BrowsingState.UpdatePreMatch(next); private void HandleRowClicked(EventListItem row) => Nav.NavigateTo($"/events/{Uri.EscapeDataString(row.Id.Value)}"); }