45 lines
1.4 KiB
C#
45 lines
1.4 KiB
C#
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<Home> 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<string> _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);
|
|
}
|
|
}
|
|
}
|