Added admin page navigation

This commit is contained in:
2025-01-14 12:46:47 +01:00
parent f0bc9e23b8
commit 313f6e046a
12 changed files with 211 additions and 42 deletions

View File

@@ -0,0 +1,48 @@
@using HopFrame.Core.Config
@using HopFrame.Core.Services
@inherits LayoutComponentBase
<link rel="stylesheet" type='text/css' href="https://cdn.jsdelivr.net/gh/devicons/devicon@latest/devicon.min.css" />
<link rel="stylesheet" href="/_content/HopFrame.Web/hopframe.css"/>
<FluentDesignTheme Mode="DesignThemeModes.Dark" />
<FluentLayout Class="hopframe-outer">
<HopFrameNavigation />
<FluentStack Orientation="Orientation.Horizontal" Width="100%" Class="hopframe-main">
<HopFrameSideMenu />
<FluentBodyContent>
<div class="hopframe-content">
@Body
</div>
</FluentBodyContent>
</FluentStack>
<FluentFooter>
<a href="https://git.leon-hoppe.de/leon.hoppe/hopframe" target="_blank">Documentation and source code</a>
<FluentSpacer/>
<a href="https://git.leon-hoppe.de/leon.hoppe/" target="_blank" style="margin-right: 0.25rem; text-decoration: none">
<i class="devicon-gitlab-plain"></i>
</a>
<a href="https://github.com/leonhoppe" target="_blank" style="text-decoration: none">
<i class="devicon-github-original"></i>
</a>
</FluentFooter>
</FluentLayout>
@inject IServiceProvider Provider
@inject HopFrameConfig Config
@inject NavigationManager Navigator
@code {
protected override async Task OnInitializedAsync() {
if (!string.IsNullOrEmpty(Config.BasePolicy)) {
var handler = Provider.GetService(Config.AuthHandler!) as IHopFrameAuthHandler;
var authorized = await handler!.IsAuthenticatedAsync(Config.BasePolicy);
if (!authorized) {
Navigator.NavigateTo((Config.LoginPageRewrite ?? "/login") + "?redirect=" + Navigator.Uri);
}
}
}
}

View File

@@ -0,0 +1,46 @@
@using System.Text
@using HopFrame.Core.Config
@using HopFrame.Core.Services
<FluentHeader Class="hopframe-header">
<a href="/admin" style="text-decoration: none; color: @Color.Neutral.ToAttributeValue()">HopFrame</a>
<FluentSpacer/>
@if (Config.DisplayUserInfo) {
<FluentPersona Name="@_displayName" Initials="@_initials" ImageSize="32px" TextPosition="TextPosition.Start"/>
}
</FluentHeader>
@inject HopFrameConfig Config
@inject IServiceProvider Provider
@code {
private string? _displayName;
private string? _initials;
protected override async Task OnInitializedAsync() {
if (Config.DisplayUserInfo) {
var handler = Provider.GetService(Config.AuthHandler!) as IHopFrameAuthHandler;
_displayName = await handler!.GetCurrentUserDisplayNameAsync();
_initials = GetInitials(_displayName);
}
}
private static string GetInitials(string input) {
if (string.IsNullOrEmpty(input))
return string.Empty;
StringBuilder initials = new StringBuilder();
string[] words = input.Split([' ', '.', '_'], StringSplitOptions.RemoveEmptyEntries);
foreach (string word in words) {
if (!string.IsNullOrEmpty(word) && char.IsLetter(word[0]))
initials.Append(word[0]);
}
return initials.ToString().ToUpper();
}
}

View File

@@ -0,0 +1,22 @@
@using HopFrame.Core.Services
<FluentAppBar Orientation="Orientation.Vertical" Style="background-color: var(--neutral-layer-2); height: auto">
<FluentAppBarItem Href="/admin"
Match="NavLinkMatch.All"
IconActive="new Icons.Filled.Size24.Grid()"
IconRest="new Icons.Regular.Size24.Grid()"
Text="Dashboard"
Style="margin-top: 0.25rem"/>
<br>
@foreach (var table in Explorer.GetTableNames()) {
<FluentAppBarItem Href="@("/admin/" + table)"
Match="NavLinkMatch.All"
IconActive="new Icons.Filled.Size24.Database()"
IconRest="new Icons.Regular.Size24.Database()"
Text="@table"
Style="margin-top: 0.25rem"/>
}
</FluentAppBar>
@inject IContextExplorer Explorer

View File

@@ -0,0 +1,8 @@
@page "/admin"
@layout HopFrameLayout
<h3>HopFrameHome</h3>
@code {
}