LANCommander/LANCommander.Server/UI/Pages/Pages/Render.razor

62 lines
1.7 KiB
Text

@page "/Pages/{*route}"
@using LANCommander.SDK.Extensions
@using LANCommander.Server.UI.Pages.Pages.Components
@using Markdig
@using ZiggyCreatures.Caching.Fusion
@inject PageService PageService
@inject IFusionCache Cache
@inject NavigationManager NavigationManager
@if (Page != null)
{
<Layout Class="panel-layout">
<Content>
<SplitPane Style="flex-grow: 1">
<Pane Size="25%">
<PageMenu />
</Pane>
<Pane Size="75%">
<PageHeader Title="@Page.Title" />
<div style="padding: 0 24px;">
@((MarkupString)Markdown.ToHtml(Page.Contents))
</div>
</Pane>
</SplitPane>
</Content>
</Layout>
}
<link rel="stylesheet" href="~/css/pages.css" />
@code {
[Parameter] public string Route { get; set; }
Page Page;
protected override async Task OnParametersSetAsync()
{
if (Route == null)
{
var firstParent = await PageService.Query(q =>
{
return q.OrderBy(p => p.SortOrder);
}).FirstOrDefaultAsync(p => p.Parent == null);
if (firstParent == null)
NavigationManager.NavigateTo("/");
else
NavigationManager.NavigateTo($"/{firstParent.Route}");
}
else
{
var route = Route.TrimEnd('/').ToLower();
Page = await Cache.GetOrSetAsync<Page>($"Page|{route}", async _ =>
{
return await PageService.FirstOrDefaultAsync(p => p.Route == $"Pages/{route}");
});
}
}
}