using Elternbeirat.Contracts; using Elternbeirat.PocketBase; using Microsoft.AspNetCore.Components; namespace Elternbeirat.Web.Features.Events; public partial class EventList { [LoggerMessage(Level = LogLevel.Warning, Message = "Could not load events from PocketBase.")] private static partial void LogLoadFailed(ILogger logger, Exception exception); [Inject] private PocketBaseClient PocketBase { get; set; } = default!; [Inject] private ILogger Logger { get; set; } = default!; private IReadOnlyList _upcoming = []; private IReadOnlyList _past = []; protected override async Task OnInitializedAsync() { IReadOnlyList events; try { events = await PocketBase.GetEventsAsync(); } catch (HttpRequestException ex) { // Source unreachable -> show empty sections instead of a 500. The page // stays up; the "keine Termine" note is rendered. LogLoadFailed(Logger, ex); return; } // Split into upcoming and past by date, so an event earlier today still // counts as upcoming. Upcoming earliest first, past most recent first. var today = DateOnly.FromDateTime(DateTime.Today); _upcoming = events .Where(e => DateOnly.FromDateTime(e.Start) >= today) .OrderBy(e => e.Start) .ToList(); _past = events .Where(e => DateOnly.FromDateTime(e.Start) < today) .OrderByDescending(e => e.Start) .ToList(); } }