SeemGen/Components/Partials/NewNavMenu.razor

168 lines
6.6 KiB
Plaintext

@using BLAIzor.Models
@using BLAIzor.Services
@inject ScopedContentService _scopedContentService;
@inject NavigationManager _navigationManager;
@inject ContentEditorService _contentEditorService
@inject IHttpContextAccessor HttpContextAccessor
@inject IJSRuntime JS
@inject ISimpleLogger _logger
<nav class="navbar fixed-top navbar-expand-lg" style="z-index: 10005">
<div class="container-fluid">
<NavLink class="navbar-brand" @onclick="HomeClick">@BrandName</NavLink>
<button class="navbar-toggler" 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 (Menu != null)
{
// foreach (var menuItem in Menu)
// {
// <li class="nav-item">
// <a class="nav-link" aria-current="page" @onclick="()=>MenuClickedAsync(menuItem.Name)">@menuItem.Name</a>
// </li>
// }
foreach (var menuItem in Menu.Where(m => m.ParentId == null).OrderBy(m => m.SortOrder))
{
if (menuItem.Children != null && menuItem.Children.Any())
{
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" role="button"
data-bs-toggle="dropdown" aria-expanded="false">
@menuItem.Name
</a>
<ul class="dropdown-menu">
@foreach (var child in menuItem.Children.OrderBy(c => c.SortOrder))
{
<li>
<a class="dropdown-item" @onclick="() => MenuClickedAsync(child.Name)">
@child.Name
</a>
</li>
}
</ul>
</li>
}
else
{
<li class="nav-item">
<a class="nav-link" @onclick="() => MenuClickedAsync(menuItem.Name)">
@menuItem.Name
</a>
</li>
}
}
}
}
@* <li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false">
Dropdown
</a>
<ul class="dropdown-menu" aria-labelledby="navbarDropdown">
<li><a class="dropdown-item" href="#">Action</a></li>
<li><a class="dropdown-item" href="#">Another action</a></li>
<li><hr class="dropdown-divider"></li>
<li><a class="dropdown-item" href="#">Something else here</a></li>
</ul>
</li> *@
</ul>
<select @onchange="OnLanguageSelected" class="form-select" style="width:100px">
<option value="@SelectedLanguage">@SelectedLanguage</option>
@foreach (var Language in Languages)
{
<option value="@Language">@Language</option>
}
</select>
</div>
</div>
</nav>
@code {
[Parameter]
public int SiteId { get; set; }
[Parameter]
public List<MenuItem> Menu { get; set; }
[Parameter] public string? BrandName { get; set; } = "BLAIzor";
//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()
{
}
protected override async Task OnParametersSetAsync()
{
if (Menu != null)
{
//
}
var lang = await JS.InvokeAsync<string>("getUserLanguage");
SiteInfo site = await _contentEditorService.GetSiteInfoByIdAsync(SiteId);
if (site.DefaultLanguage != null)
{
await _logger.InfoAsync($"NavMenu component: Setting default language to {site.DefaultLanguage} for site {site.Id}");
_scopedContentService.WebsiteDefaultLanguage = site.DefaultLanguage;
_scopedContentService.SelectedLanguage = site.DefaultLanguage;
SelectedLanguage = site.DefaultLanguage;
}
else
{
// 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";
await _logger.InfoAsync($"Setting default language to {SelectedLanguage} based on user language {lang}");
_scopedContentService.SelectedLanguage = SelectedLanguage;
}
await base.OnParametersSetAsync();
}
public void OnLanguageSelected(ChangeEventArgs e)
{
SelectedLanguage = e.Value?.ToString();
if (!string.IsNullOrEmpty(SelectedLanguage))
{
Console.WriteLine($"Language selected: {SelectedLanguage}");
_scopedContentService.SelectedLanguage = SelectedLanguage;
}
}
}