using Elternbeirat.Contracts; using Elternbeirat.PocketBase; using Microsoft.AspNetCore.Components; namespace Elternbeirat.Web.Features.Embeds; public partial class EventsEmbed { [LoggerMessage(Level = LogLevel.Warning, Message = "Could not load events for an embed 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 = []; protected override async Task OnInitializedAsync() { IReadOnlyList events; try { events = await PocketBase.GetEventsAsync(); } catch (HttpRequestException ex) { // Source unreachable -> show no teaser instead of a 500. LogLoadFailed(Logger, ex); return; } // Teaser: the three soonest upcoming events, earliest first. An event // earlier today still counts as upcoming. var today = DateOnly.FromDateTime(DateTime.Today); _upcoming = events .Where(e => DateOnly.FromDateTime(e.Start) >= today) .OrderBy(e => e.Start) .Take(3) .ToList(); } }