62 lines
1.7 KiB
Text
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}");
|
|
});
|
|
}
|
|
}
|
|
}
|