Generate navigation and render page embeds from PocketBase
This commit is contained in:
1 parent
6b5d9dda55
commit
3fd3796d73
26 files changed
+544
-114
No files matched your search
@@ -5,14 +5,10 @@
|
||||
<div class="header-inner">
|
||||
<a class="brand" href="/">Elternbeirat IGMH</a>
|
||||
<nav class="main-nav">
|
||||
<NavLink href="/" Match="NavLinkMatch.All">Start</NavLink>
|
||||
<NavLink href="/board">Vorstandsteam</NavLink>
|
||||
<NavLink href="/patrons">Förderverein</NavLink>
|
||||
<NavLink href="/posts">Beiträge</NavLink>
|
||||
<NavLink href="/events">Termine</NavLink>
|
||||
<NavLink href="/faqs">FAQ</NavLink>
|
||||
<NavLink href="/downloads">Downloads</NavLink>
|
||||
<NavLink href="/contact">Kontakt</NavLink>
|
||||
@foreach (var link in _header)
|
||||
{
|
||||
<NavLink href="@link.Href" Match="@(link.Href == "/" ? NavLinkMatch.All : NavLinkMatch.Prefix)">@link.Title</NavLink>
|
||||
}
|
||||
</nav>
|
||||
</div>
|
||||
</header>
|
||||
@@ -25,9 +21,10 @@
|
||||
<div class="footer-inner">
|
||||
<span>Elternbeirat der IGMH</span>
|
||||
<nav class="footer-nav">
|
||||
<a href="/contact">Kontakt</a>
|
||||
<a href="/imprint">Impressum</a>
|
||||
<a href="/privacy">Datenschutz</a>
|
||||
@foreach (var link in _footer)
|
||||
{
|
||||
<a href="@link.Href">@link.Title</a>
|
||||
}
|
||||
</nav>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
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<MainLayout> Logger { get; set; } = default!;
|
||||
|
||||
private IReadOnlyList<NavLinkItem> _header = [];
|
||||
private IReadOnlyList<NavLinkItem> _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);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user