SeemGen/Components/Partials/NavMenu.razor

121 lines
4.2 KiB
Plaintext

@using BLAIzor.Models
@using BLAIzor.Services
@inject ScopedContentService _scopedContentService;
@inject NavigationManager _navigationManager;
@inject ContentEditorService _contentEditorService
@inject IHttpContextAccessor HttpContextAccessor
@inject IJSRuntime JS
@* <nav class="navbar navbar-expand-lg bg-body-tertiary" style="z-index: 5"> *@
<nav class="navbar fixed-top" style="z-index: 5">
@* <div class="container-fluid"> *@
<div style="--bs-gutter-x: 1.5rem; --bs-gutter-y: 0; width: 100%; padding-right: calc(var(--bs-gutter-x) * .5); padding-left: calc(var(--bs-gutter-x) * .5); margin-right: auto; margin-left: auto;">
@{
var brandFileName = _scopedContentService.SelectedDocument;
var brandName = _scopedContentService.SelectedBrandName;
}
<NavLink class="navbar-brand" @onclick="HomeClick">@brandName</NavLink>
<button class="navbar-toggler float-end" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
<i class="fa-solid fa-bars"></i>
</button>
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
@{
if (MenuList != null)
{
foreach (var menu in MenuList)
{
<li class="nav-item">
<a class="nav-link active" aria-current="page" @onclick="()=>MenuClickedAsync(menu)">@menu</a>
</li>
}
}
}
</ul>
@* <form class="d-flex" role="search">
<input class="form-control me-2" type="search" placeholder="Search" aria-label="Search">
<button class="btn btn-outline-success" type="submit">Search</button>
</form> *@
<select @onchange="OnLanguageSelected" class="form-select" style="width:100px">
<option value="">Lang</option>
@foreach (var Language in Languages)
{
<option value="@Language">@Language</option>
}
</select>
</div>
</div>
</nav>
@code {
public int SiteId;
[Parameter]
public string? MenuString { get; set; }
public string[] MenuList;
public string videoUrl = "";
public string SelectedLanguage;
private int RenderCounter = 0;
//public static event Action<string>? OnMenuClicked;
[Parameter] public Action<string>? OnMenuClicked { get; set; }
public List<string> Languages = new List<string>
{
"Hungarian", "English", "German"
};
public async Task MenuClickedAsync(string menuName)
{
OnMenuClicked?.Invoke(menuName);
await JS.InvokeVoidAsync("collapseNavbar");
}
public void HomeClick()
{
_navigationManager.Refresh(true);
}
protected override async Task OnInitializedAsync()
{
var lang = await JS.InvokeAsync<string>("getUserLanguage");
// Normalize and match to one of your supported languages
if (lang.StartsWith("hu", StringComparison.OrdinalIgnoreCase))
SelectedLanguage = "Hungarian";
else if (lang.StartsWith("de", StringComparison.OrdinalIgnoreCase))
SelectedLanguage = "German";
else
SelectedLanguage = "English";
_scopedContentService.SelectedLanguage = SelectedLanguage;
}
protected override async Task OnParametersSetAsync()
{
if (!string.IsNullOrEmpty(MenuString))
{
MenuList = MenuString.Split(",");
}
await base.OnParametersSetAsync();
}
public void OnLanguageSelected(ChangeEventArgs e)
{
SelectedLanguage = e.Value?.ToString();
if (!string.IsNullOrEmpty(SelectedLanguage))
{
Console.WriteLine($"Language selected: {SelectedLanguage}");
_scopedContentService.SelectedLanguage = SelectedLanguage;
}
}
}