2026-04-20 14:11:18 +02:00
|
|
|
@using Microsoft.Extensions.Options
|
|
|
|
|
@using WorkTracker.Configuration
|
|
|
|
|
@inject IOptions<AppAuthOptions> AppAuthOptions
|
|
|
|
|
|
2026-04-20 17:23:54 +02:00
|
|
|
@code {
|
|
|
|
|
[Parameter] public bool IsCollapsed { get; set; }
|
2026-04-20 22:58:25 +02:00
|
|
|
[Parameter] public EventCallback OnToggleSidebar { get; set; }
|
|
|
|
|
|
|
|
|
|
private Task ToggleSidebarAsync()
|
|
|
|
|
{
|
|
|
|
|
return OnToggleSidebar.InvokeAsync();
|
|
|
|
|
}
|
2026-04-20 17:23:54 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
<div class="nav-menu-shell @(IsCollapsed ? "nav-menu-shell-collapsed" : string.Empty)" data-testid="sidebar-shell" data-collapsed="@(IsCollapsed ? "true" : "false")">
|
2026-04-20 22:58:25 +02:00
|
|
|
<div class="top-row ps-3 pe-3 navbar navbar-dark">
|
|
|
|
|
<div class="container-fluid nav-menu-header">
|
|
|
|
|
<button
|
|
|
|
|
type="button"
|
|
|
|
|
class="sidebar-toggle"
|
|
|
|
|
@onclick="ToggleSidebarAsync"
|
|
|
|
|
aria-label="Toggle sidebar"
|
|
|
|
|
aria-controls="sidebar-navigation"
|
|
|
|
|
aria-expanded="@(IsCollapsed ? "false" : "true")"
|
|
|
|
|
title="Toggle sidebar">
|
|
|
|
|
<span class="sidebar-toggle-bar"></span>
|
|
|
|
|
<span class="sidebar-toggle-bar"></span>
|
|
|
|
|
<span class="sidebar-toggle-bar"></span>
|
|
|
|
|
</button>
|
2026-02-18 17:11:13 +01:00
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
|
2026-04-20 17:23:54 +02:00
|
|
|
<div class="nav-scrollable">
|
|
|
|
|
<nav id="sidebar-navigation" class="nav flex-column" aria-label="Sidebar navigation">
|
2026-02-18 17:11:13 +01:00
|
|
|
<div class="nav-item px-3">
|
2026-04-20 17:23:54 +02:00
|
|
|
<NavLink class="nav-link" href="" Match="NavLinkMatch.All" aria-label="Dashboard" title="Dashboard">
|
|
|
|
|
<span class="bi bi-house-door-fill-nav-menu" aria-hidden="true"></span>
|
|
|
|
|
<span class="nav-label">Dashboard</span>
|
2026-02-18 17:11:13 +01:00
|
|
|
</NavLink>
|
|
|
|
|
</div>
|
|
|
|
|
|
2026-03-17 22:10:19 +01:00
|
|
|
<div class="nav-item px-3">
|
2026-04-20 17:23:54 +02:00
|
|
|
<NavLink class="nav-link" href="grid" aria-label="Grid View" title="Grid View">
|
|
|
|
|
<span class="bi bi-list-nested-nav-menu" aria-hidden="true"></span>
|
|
|
|
|
<span class="nav-label">Grid View</span>
|
2026-03-17 22:10:19 +01:00
|
|
|
</NavLink>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<div class="nav-item px-3">
|
2026-04-20 17:23:54 +02:00
|
|
|
<NavLink class="nav-link" href="calendar" aria-label="Calendar" title="Calendar">
|
|
|
|
|
<span class="bi bi-calendar3-nav-menu" aria-hidden="true"></span>
|
|
|
|
|
<span class="nav-label">Calendar</span>
|
2026-03-17 22:10:19 +01:00
|
|
|
</NavLink>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<div class="nav-item px-3">
|
2026-04-20 17:23:54 +02:00
|
|
|
<NavLink class="nav-link" href="summary" aria-label="Summary" title="Summary">
|
|
|
|
|
<span class="bi bi-bar-chart-fill-nav-menu" aria-hidden="true"></span>
|
|
|
|
|
<span class="nav-label">Summary</span>
|
2026-03-17 22:10:19 +01:00
|
|
|
</NavLink>
|
|
|
|
|
</div>
|
|
|
|
|
|
2026-04-20 23:56:23 +02:00
|
|
|
<div class="nav-item px-3">
|
|
|
|
|
<NavLink class="nav-link" href="yearly-summary" aria-label="Yearly Summary" title="Yearly Summary">
|
|
|
|
|
<span class="bi bi-table-nav-menu" aria-hidden="true"></span>
|
|
|
|
|
<span class="nav-label">Yearly Summary</span>
|
|
|
|
|
</NavLink>
|
|
|
|
|
</div>
|
|
|
|
|
|
2026-02-18 17:11:13 +01:00
|
|
|
<div class="nav-item px-3">
|
2026-04-20 17:23:54 +02:00
|
|
|
<NavLink class="nav-link" href="settings" aria-label="Settings" title="Settings">
|
|
|
|
|
<span class="bi bi-gear-fill-nav-menu" aria-hidden="true"></span>
|
|
|
|
|
<span class="nav-label">Settings</span>
|
2026-02-18 17:11:13 +01:00
|
|
|
</NavLink>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<AuthorizeView>
|
|
|
|
|
<Authorized>
|
|
|
|
|
<div class="nav-item px-3">
|
2026-04-20 17:23:54 +02:00
|
|
|
<NavLink class="nav-link" href="auth" aria-label="@context.User.Identity?.Name" title="@context.User.Identity?.Name">
|
|
|
|
|
<span class="bi bi-person-fill-nav-menu" aria-hidden="true"></span>
|
|
|
|
|
<span class="nav-label">@context.User.Identity?.Name</span>
|
2026-02-18 17:11:13 +01:00
|
|
|
</NavLink>
|
|
|
|
|
</div>
|
2026-04-20 14:11:18 +02:00
|
|
|
@if (AppAuthOptions.Value.Enabled)
|
|
|
|
|
{
|
|
|
|
|
<div class="nav-item px-3">
|
|
|
|
|
<form action="/api/logout" method="post">
|
2026-04-20 17:23:54 +02:00
|
|
|
<button type="submit" class="nav-link" aria-label="Logout" title="Logout">
|
|
|
|
|
<span class="bi bi-arrow-bar-left-nav-menu" aria-hidden="true"></span>
|
|
|
|
|
<span class="nav-label">Logout</span>
|
2026-04-20 14:11:18 +02:00
|
|
|
</button>
|
|
|
|
|
</form>
|
|
|
|
|
</div>
|
|
|
|
|
}
|
2026-02-18 17:11:13 +01:00
|
|
|
</Authorized>
|
|
|
|
|
<NotAuthorized>
|
|
|
|
|
<div class="nav-item px-3">
|
2026-04-20 17:23:54 +02:00
|
|
|
<NavLink class="nav-link" href="login" aria-label="Login" title="Login">
|
|
|
|
|
<span class="bi bi-person-badge-nav-menu" aria-hidden="true"></span>
|
|
|
|
|
<span class="nav-label">Login</span>
|
2026-02-18 17:11:13 +01:00
|
|
|
</NavLink>
|
|
|
|
|
</div>
|
|
|
|
|
</NotAuthorized>
|
|
|
|
|
</AuthorizeView>
|
|
|
|
|
</nav>
|
|
|
|
|
</div>
|
2026-04-20 17:23:54 +02:00
|
|
|
</div>
|
2026-02-18 17:11:13 +01:00
|
|
|
|
|
|
|
|
|