using Elternbeirat.Contracts; using Elternbeirat.PocketBase; using Microsoft.AspNetCore.Components; namespace Elternbeirat.Web.Features.Home; public partial class Home { [LoggerMessage( Level = LogLevel.Warning, Message = "Could not load the home page from PocketBase; embeds are omitted.")] private static partial void LogSourceUnavailable( ILogger logger, Exception exception); [Inject] private PocketBaseClient PocketBase { get; set; } = null!; [Inject] private ILogger Logger { get; set; } = null!; [CascadingParameter] private HttpContext? HttpContext { get; set; } // Which dynamic blocks the home page shows is editorial: it comes from the // "home" page's embed field in PocketBase, not from hard-coded markup. private IReadOnlyList _embed = []; protected override async Task OnInitializedAsync() { try { var pages = await PocketBase.GetPagesAsync(HttpContext?.RequestAborted ?? default); var home = pages.FirstOrDefault(page => Page.IsHomeSlug(page.Slug)); _embed = home?.Embed ?? []; } catch (PocketBaseUnavailableException exception) { // Only the embeds fail: render the static intro without them instead of a // 500. The home page's own text is markup, so it stays intact. LogSourceUnavailable(Logger, exception); } } }