182 lines
9.5 KiB
Plaintext
182 lines
9.5 KiB
Plaintext
@implements IDisposable
|
|
|
|
@inject IJSRuntime JsRuntime
|
|
@inject IUserSession Session
|
|
@inject IMenuService MenuService
|
|
|
|
@*
|
|
* dbMango
|
|
*
|
|
* Copyright 2025 Deutsche Bank AG
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*@
|
|
|
|
<nav class="navbar navbar-expand-sm navbar-dark bg-brand sticky-top">
|
|
<a class="navbar-brand" href="#">
|
|
<img src="@FavIcon" width="24" height="24" class="d-inline-block align-middle" alt="">
|
|
<span class="d-inline-block align-middle border-right pr-2">@Header</span>
|
|
<span class="d-inline-block align-middle ml-1">@AppName</span>
|
|
</a>
|
|
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
|
|
<span class="navbar-toggler-icon"></span>
|
|
</button>
|
|
<div class="collapse navbar-collapse" id="navbarSupportedContent">
|
|
<AuthorizeView>
|
|
<Authorized>
|
|
<ul class="nav nav-tabs flex-1">
|
|
<li class="nav-item dropdown">
|
|
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdown1" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
|
Admin
|
|
</a>
|
|
<div class="dropdown-menu" aria-labelledby="navbarDropdown1">
|
|
<NavLink class="dropdown-item" href="#">Change database</NavLink>
|
|
<NavLink class="dropdown-item" href="admin/shell">Shell</NavLink>
|
|
<NavLink class="dropdown-item" href="admin/list-commands">List commands</NavLink>
|
|
<NavLink class="dropdown-item" href="admin/commands">Commands</NavLink>
|
|
<NavLink class="dropdown-item" href="admin/sync-structure">Sync structure</NavLink>
|
|
<NavLink class="dropdown-item" href="admin/migrate">Migrate data</NavLink>
|
|
<NavLink class="dropdown-item" href="admin/download">Download</NavLink>
|
|
<NavLink class="dropdown-item" href="admin/upload">Upload</NavLink>
|
|
<NavLink class="dropdown-item" href="admin/db-stats">Storage size</NavLink>
|
|
<NavLink class="dropdown-item" href="admin/roles">Roles management</NavLink>
|
|
<NavLink class="dropdown-item" href="admin/users">Users management</NavLink>
|
|
<NavLink class="dropdown-item" href="admin/config">Configuration overrides</NavLink>
|
|
<NavLink class="dropdown-item" href="admin/onboarding">Onboarding</NavLink>
|
|
@foreach( var item in MenuService.Get("Admin"))
|
|
{
|
|
<NavLink class="dropdown-item" href="@item.Url">@item.Title</NavLink>
|
|
}
|
|
</div>
|
|
</li>
|
|
<li class="nav-item dropdown">
|
|
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdown2" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
|
User
|
|
</a>
|
|
<div class="dropdown-menu" aria-labelledby="navbarDropdown2">
|
|
<NavLink class="dropdown-item" href="#">Change database</NavLink>
|
|
<NavLink class="dropdown-item" href="admin/commands">Commands</NavLink>
|
|
<NavLink class="dropdown-item" href="user/browse">Browse</NavLink>
|
|
<NavLink class="dropdown-item" href="user/find">Find</NavLink>
|
|
<NavLink class="dropdown-item" href="user/aggregate">Aggregate</NavLink>
|
|
<NavLink class="dropdown-item" href="user/afh">Aggregation for Humans</NavLink>
|
|
<NavLink class="dropdown-item" href="user/pivot">Pivot</NavLink>
|
|
<NavLink class="dropdown-item" href="user/insert">Insert</NavLink>
|
|
<NavLink class="dropdown-item" href="user/update">Update</NavLink>
|
|
<NavLink class="dropdown-item" href="user/delete">Delete</NavLink>
|
|
<NavLink class="dropdown-item" href="user/logs">Logs</NavLink>
|
|
<NavLink class="dropdown-item" href="user/connected-users">Connected users</NavLink>
|
|
<NavLink class="dropdown-item" href="user/audit">Audit</NavLink>
|
|
@foreach (var item in MenuService.Get("User"))
|
|
{
|
|
<NavLink class="dropdown-item" href="@item.Url">@item.Title</NavLink>
|
|
}
|
|
</div>
|
|
</li>
|
|
|
|
@foreach (var menuName in MenuService.GetMenus().Where(x => !new [] { "User", "Admin", "Help" }.Contains(x)))
|
|
{
|
|
<li class="nav-item dropdown">
|
|
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdown3" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
|
@menuName
|
|
</a>
|
|
<div class="dropdown-menu" aria-labelledby="navbarDropdown3">
|
|
@foreach (var item in MenuService.Get(menuName))
|
|
{
|
|
<NavLink class="dropdown-item" href="@item.Url">@item.Title</NavLink>
|
|
}
|
|
</div>
|
|
</li>
|
|
}
|
|
|
|
<li class="nav-item dropdown">
|
|
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdown3" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
|
Help
|
|
</a>
|
|
<div class="dropdown-menu" aria-labelledby="navbarDropdown3">
|
|
<NavLink class="dropdown-item" href="doc" target="_blank">Documentation</NavLink>
|
|
<NavLink class="dropdown-item" href="doc/editor" target="_blank">Text editor keys</NavLink>
|
|
<NavLink class="dropdown-item" href="doc/afh" target="_blank">AFH Documentation</NavLink>
|
|
<NavLink class="dropdown-item" href="doc/all-icons" target="_blank">Icons (techy!)</NavLink>
|
|
<NavLink class="dropdown-item" href="swagger/index.html" target="_blank">API (Swagger)</NavLink>
|
|
@foreach (var item in MenuService.Get("Help"))
|
|
{
|
|
<NavLink class="dropdown-item" href="@item.Url">@item.Title</NavLink>
|
|
}
|
|
</div>
|
|
</li>
|
|
</ul>
|
|
</Authorized>
|
|
<NotAuthorized>
|
|
<ul class="nav nav-tabs flex-1">
|
|
</ul>
|
|
</NotAuthorized>
|
|
</AuthorizeView>
|
|
|
|
<div class="d-inline-flex">
|
|
<LoginControl/>
|
|
</div>
|
|
</div>
|
|
</nav>
|
|
|
|
@code {
|
|
|
|
protected override async Task OnAfterRenderAsync(bool firstRender)
|
|
{
|
|
if (!firstRender) return;
|
|
|
|
//this is the first opportunity i have to set the title as JS has been initialised
|
|
await JsRuntime.InvokeVoidAsync("DashboardUtils.SetDocumentTitle", Header + " " + AppName);
|
|
await JsRuntime.InvokeVoidAsync("DashboardUtils.SetFavicon", FavIcon);
|
|
}
|
|
|
|
private static string Env => Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? Environments.Development;
|
|
private static string FavIcon => GetFavIcon();
|
|
|
|
public static string GetFavIcon() => (Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? Environments.Development) switch
|
|
{
|
|
"Development" => @"images\favicon-dev.svg",
|
|
"UAT" => @"images\favicon.svg",
|
|
"PROD" => @"images\favicon-prod.svg",
|
|
_ => @"images\favicon.svg"
|
|
};
|
|
|
|
public static string GetMango() => (Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? Environments.Development) switch
|
|
{
|
|
"Development" => @"images\mango-dev.svg",
|
|
"UAT" => @"images\mango.svg",
|
|
"PROD" => @"images\mango-prod.svg",
|
|
_ => @"images\mango.svg"
|
|
};
|
|
|
|
|
|
private string Header => string.IsNullOrWhiteSpace(Session?.Database) ? Env : Session.Database;
|
|
private string AppName => "dbMango";
|
|
|
|
protected override void OnInitialized()
|
|
{
|
|
Session.DatabaseChanged += OnDatabaseChangeHandler;
|
|
}
|
|
|
|
public void Dispose()
|
|
{
|
|
Session.DatabaseChanged -= OnDatabaseChangeHandler;
|
|
}
|
|
|
|
private void OnDatabaseChangeHandler()
|
|
{
|
|
_ = InvokeAsync(StateHasChanged);
|
|
}
|
|
}
|