using Elternbeirat.PocketBase; using Elternbeirat.Web.Features.Layout; using Microsoft.AspNetCore.Components; namespace Elternbeirat.Web.Components.Layout; public partial class MainLayout { [LoggerMessage(Level = LogLevel.Warning, Message = "Could not load navigation pages 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 _header = []; private IReadOnlyList _footer = []; protected override async Task OnInitializedAsync() { try { var pages = await PocketBase.GetPagesAsync(); _header = NavBuilder.Header(pages); _footer = NavBuilder.Footer(pages); } catch (HttpRequestException ex) { // Source unreachable -> render the chrome with an empty menu instead of // a 500. The brand link still leads home. LogLoadFailed(Logger, ex); } } }