98 lines
4.6 KiB
Plaintext
98 lines
4.6 KiB
Plaintext
@using Butter.Types
|
|
|
|
@inherits LayoutComponentBase
|
|
@inject NavigationManager navigation
|
|
@inject LoginService loginService
|
|
|
|
<div class="navbar navbar-expand-sm bg-dark-subtle bg-gradient-surface sticky-top">
|
|
<div class="container-xl">
|
|
<a class="mx-2 navbar-brand" href="">
|
|
<img src="img/MilkyShotLogoWhite.svg" alt="Milky Shot Logo" class="logo mx-2" href=""/>
|
|
<span class="text m-1">Milky Shot</span>
|
|
</a>
|
|
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-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">
|
|
<ul class="navbar-nav me-auto">
|
|
<li class="nav-item">
|
|
<a class="nav-link" href="cosplayers">Cosplayers</a>
|
|
</li>
|
|
<li class="nav-item">
|
|
<a class="nav-link" href="albums">Albums</a>
|
|
</li>
|
|
<li class="nav-item">
|
|
<a class="nav-link" href="#">Photos</a>
|
|
</li>
|
|
</ul>
|
|
@if (!LoggedIn) {
|
|
<button class="btn btn-primary mx-1" @onclick="OnLoginClick">
|
|
Login
|
|
</button>
|
|
<button class="btn btn-primary mx-1" @onclick="OnRegisterClick">
|
|
Register
|
|
</button>
|
|
} else {
|
|
<div class="d-flex flex-column flex-sm-row align-items-sm-center gap-2 mt-2 mt-sm-0">
|
|
<SearchDropdown />
|
|
<div class="btn-group btn-group-sm">
|
|
<button class="btn btn-light d-flex align-items-center gap-1" type="button" @onclick="OnProfileClick">
|
|
<div class="nav-avatar">@(loginService.LoggedUser?.Username?.Length > 0 ? loginService.LoggedUser.Username[..1].ToUpper() : "?")</div>
|
|
<span class="small">@loginService.LoggedUser?.Username</span>
|
|
</button>
|
|
<button class="btn btn-light dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown"></button>
|
|
<ul class="dropdown-menu dropdown-menu-end">
|
|
<li><a class="dropdown-item" @onclick="OnProfileClick"><i class="bi bi-person-lines-fill"></i> Profile</a></li>
|
|
@if(AdminOrCurator) {
|
|
<li><a class="dropdown-item" @onclick="OnStatsClick"><i class="bi bi-bar-chart-fill"></i> Statistics</a></li>
|
|
}
|
|
@if(Admin) {
|
|
<li><a class="dropdown-item" @onclick="OnMaintenanceClick"><i class="bi bi-tools"></i> Maintenance</a></li>
|
|
<li><a class="dropdown-item" @onclick="OnUsersClick"><i class="bi bi-people-fill"></i> Users</a></li>
|
|
<li><a class="dropdown-item" @onclick="OnSettingsClick"><i class="bi bi-gear-wide-connected"></i> Settings</a></li>
|
|
<li><a class="dropdown-item" @onclick="OnJobsClick"><i class="bi bi-kanban-fill"></i> Jobs</a></li>
|
|
}
|
|
<li><a class="dropdown-item" @onclick="OnLogout"><i class="bi bi-door-closed"></i> Logout</a></li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
@code{
|
|
bool LoggedIn => loginService.IsLoggedIn;
|
|
bool Admin => loginService.IsAdmin;
|
|
bool AdminOrCurator => loginService.IsAdminOrCurator;
|
|
|
|
protected override void OnInitialized() {
|
|
loginService.LoggedUserChanged += (_, _) => StateHasChanged();
|
|
}
|
|
|
|
void OnLoginClick() {
|
|
if (loginService.LoggedUser != null) StateHasChanged();
|
|
else navigation.NavigateToLogin();
|
|
}
|
|
|
|
void OnRegisterClick() => navigation.NavigateTo("/register");
|
|
|
|
void OnSettingsClick() => navigation.NavigateTo("/settings");
|
|
|
|
void OnJobsClick() => navigation.NavigateTo("/jobs");
|
|
|
|
void OnMaintenanceClick() => navigation.NavigateTo("/maintenance");
|
|
void OnStatsClick() => navigation.NavigateTo("/stats");
|
|
|
|
void OnUsersClick() => navigation.NavigateTo("/users");
|
|
|
|
void OnProfileClick() => navigation.NavigateTo($"/User/{loginService.AuthInfo?.UserId}", true);
|
|
|
|
async Task OnLogout() {
|
|
await loginService.Logout();
|
|
navigation.NavigateTo("/", true);
|
|
}
|
|
|
|
}
|