TourIAm/TIAMSharedUI/Shared/Users/AdminNavMenu.razor

295 lines
12 KiB
Plaintext

@using AyCode.Services.Loggers
@using Microsoft.AspNetCore.Components.Authorization
@using Newtonsoft.Json
@using TIAM.Core.Loggers
@using TIAMWebApp.Shared.Application.Interfaces
@using AyCode.Interfaces.StorageHandlers;
@using TIAMWebApp.Shared.Application.Utility
@inject ISecureStorageHandler SecureStorageHandler
@inject ISessionService SessionService
@inject IUserDataService UserDataService
@inject AuthenticationStateProvider AuthStateProvider
@inject NavigationManager NavigationManager
@inject IEnumerable<IAcLogWriterClientBase> LogWriters
@inject IJSRuntime jsRuntime
@inject IComponentUpdateService componentUpdateService
<div class="w-100" style="height:40px; position:fixed; z-index: 10000;">
<DxMenu CssClass="my-menu" SizeMode="SizeMode.Medium" Title="Tour I Am" ItemsPosition="ItemPosition.End" CollapseItemsToHamburgerMenu="true"
Orientation="Orientation"
DisplayMode="DisplayMode"
HamburgerButtonPosition="MenuHamburgerButtonPosition.Right">
<TitleTemplate>
@{
if (_isMobile)
{
string url1 = $"user/sysadmin";
string url2 = $"driver/transfers/{driverPermissionId}";
string url3 = $"user/messages/{userId}";
<DxToolbar SizeMode="SizeMode.Medium">
<Items>
@if (IsSysAdmin)
{
<DxToolbarItem Name="Transfers"
BeginGroup="true"
IconCssClass="fa-solid fa-face-smile"
Tooltip="Transfers"
Alignment="ToolbarItemAlignment.Right"
Click="() => NavigationManager.NavigateTo(url1)" />
}
@if (IsDriver)
{
<DxToolbarItem Name="Transfers"
BeginGroup="true"
IconCssClass="fa-solid fa-taxi"
Tooltip="My tasks"
Alignment="ToolbarItemAlignment.Right"
Click="() => NavigationManager.NavigateTo(url2)" />
}
<DxToolbarItem Name="Messages"
BeginGroup="true"
IconCssClass="fa-solid fa-envelope"
Tooltip="Messages"
Alignment="ToolbarItemAlignment.Right"
Click="() => NavigationManager.NavigateTo(url3)" />
</Items>
</DxToolbar>
}
}
</TitleTemplate>
<Items>
<DxMenuItem NavigateUrl="/" Text="Home" IconCssClass="fa-solid fa-home" />
<DxMenuItem Visible="userHasCompany" NavigateUrl="user/properties" Text="My companies" IconCssClass="fa-solid fa-building" />
<DxMenuItem Visible="userHasHotels" NavigateUrl="user/createAndManageTransfer" IconCssClass="fa-solid fa-route" Text="Transfer" />
@* <DxMenuItem NavigateUrl="user/media" Text="Media" IconCssClass="menu-icon-home menu-icon" /> *@
<DxMenuItem Text="Driver" Visible="@IsDriver" IconCssClass="fa-solid fa-id-card">
<Items>
<DxMenuItem NavigateUrl="driver/dashboard" Text="Dashboard" />
@{
string url1 = $"driver/transfers/{driverPermissionId}";
string url2 = $"driver/cars/{driverPermissionId}";
<DxMenuItem NavigateUrl="@url1" Text="My transfers" />
<DxMenuItem NavigateUrl="@url2" Text="My cars" />
}
</Items>
</DxMenuItem>
<DxMenuItem Text="SysAdmin" Visible="@IsSysAdmin" IconCssClass="fa-solid fa-unlock-keyhole">
<Items>
<DxMenuItem NavigateUrl="user/sysadmin" Text="Dashboard" />
<DxMenuItem NavigateUrl="sysadmin/transfers" Text="Transfers" />
<DxMenuItem NavigateUrl="sysadmin/destinations" Text="Destinations" />
<DxMenuItem NavigateUrl="sysadmin/companies" Text="Companies" />
<DxMenuItem NavigateUrl="sysadmin/prices" Text="Partner prices" />
<DxMenuItem NavigateUrl="sysadmin/products" Text="Services" />
<DxMenuItem NavigateUrl="sysadmin/drivers" Text="Drivers" />
<DxMenuItem NavigateUrl="sysadmin/cars" Text="Cars" />
<DxMenuItem NavigateUrl="sysadmin/userproductmappings" Text="Permissions" />
<DxMenuItem NavigateUrl="sysadmin/users" Text="Users" />
</Items>
</DxMenuItem>
<DxMenuItem Text="DevAdmin" Visible="@IsDevAdmin" IconCssClass="fa-solid fa-shield-halved">
<Items>
<DxMenuItem NavigateUrl="sysadmin/logs" Text="Logs" />
</Items>
</DxMenuItem>
<!--DxMenuItem Text="HotelAdmin" IconCssClass="menu-icon-support menu-icon">
<Items>
<DxMenuItem NavigateUrl="user/hoteladmin/" Text="Dashboard" />
<DxMenuItem NavigateUrl="user/createAndManageTransfer" Text="Transfers" />
<DxMenuItem NavigateUrl="user/serviceprovider/5453-a87f77787d-khj899" Text="Manage hotel" />
</Items>
</DxMenuItem-->
@* <DxMenuItem NavigateUrl="user/messages" Text="Messages" IconCssClass="fa-solid fa-envelope" /> *@
@{
string url3 = $"user/messages/{userId}";
<DxMenuItem NavigateUrl="@url3" IconCssClass="fa-solid fa-envelope" />
}
<DxMenuItem CssClass="notoggle" Position="ItemPosition.End">
<TextTemplate>
<div class="fa-solid fa-user" />
</TextTemplate>
<SubMenuTemplate>
<div class="w-100 user-profile p-3">
<div class="flex-column align-items-center justify-content-center">
<div class="logo-container d-flex align-items-center justify-content-center">
<div class="menu-icon-large">
<i class="fa-solid fa-user"></i>
</div>
</div>
<div class="user-name-container bm-3 mb-2">
<div class="tm-8 text-center">@userEmail</div>
<div class="text-center">@userFullName</div>
</div>
<div class="d-flex justify-content-center log-off-btn">
<DxButton Text="Manage" RenderStyle="@ButtonRenderStyle.Secondary" Click="NavToAcc"></DxButton>
</div>
</div>
</div>
</SubMenuTemplate>
</DxMenuItem>
</Items>
</DxMenu>
</div>
@code {
private bool collapseNavMenu = true;
private bool expandSysAdminNav = false;
private bool expandHotelAdminNav = false;
private string? NavMenuCssClass => collapseNavMenu ? "collapse" : null;
private bool myUser = false;
private bool userHasCompany;
private bool userHasHotels;
private bool IsDriver;
private bool IsDevAdmin;
private bool IsSysAdmin;
private string? userEmail;
private string? userFullName;
private Guid? userId;
private Guid driverPermissionId;
private ILogger _logger;
private bool _isMobile;
MenuDisplayMode DisplayMode { get; set; } = MenuDisplayMode.Auto;
Orientation Orientation { get; set; } = Orientation.Horizontal;
private void NavToAcc()
{
var url = $"user/account/{SessionService.User.UserId}";
NavigationManager.NavigateTo(url);
}
protected override async Task OnInitializedAsync()
{
_isMobile = await jsRuntime.InvokeAsync<bool>("isDevice");
_logger = new LoggerClient<AdminNavMenu>(LogWriters.ToArray());
if (SessionService.User != null)
{
userId = SessionService.User.UserId;
driverPermissionId = SessionService.DriverPersmissionId;
userEmail = SessionService.User.Email;
if (SessionService.User.UserModelDto.ProfileDto.FullName != null)
{
userFullName = SessionService.User.UserModelDto.ProfileDto.FullName;
}
}
//_logger.Debug($"UserId: {SessionService.User.UserModelDto.Id}"); //errorokat dobott
userHasCompany = SessionService.HasCompany;
if (SessionService.GetHotels().Count() > 0)
{
userHasHotels = true;
}
IsDriver = SessionService.IsDriver;
//_logger.Debug($"UserId: {SessionService.IsDriver}");
IsDevAdmin = SessionService.IsDevAdmin;
//_logger.Debug($"UserId: {SessionService.IsDevAdmin}");
IsSysAdmin = SessionService.IsSysAdmin;
//_logger.Debug($"UserId: {SessionService.IsSysAdmin}");
await base.OnInitializedAsync();
}
private void ToggleNavMenu()
{
collapseNavMenu = !collapseNavMenu;
}
private void NavigateBack()
{
}
private async Task SignOut()
{
bool serverResult;
string userDetailsStr = await SecureStorageHandler.GetFromSecureStorageAsync(nameof(Setting.UserBasicDetails));
if (!string.IsNullOrEmpty(userDetailsStr))
{
var userBasicDetail = JsonConvert.DeserializeObject<UserBasicDetails>(userDetailsStr);
serverResult = await UserDataService.Logout(userBasicDetail?.RefreshToken);
}
await SecureStorageHandler.ClearAllSecureStorageAsync();
var result = await AuthStateProvider.GetAuthenticationStateAsync();
SessionService.ClearAll();
NavigationManager.NavigateTo("/");
}
protected override void OnAfterRender(bool firstRender)
{
base.OnAfterRender(firstRender);
if (firstRender)
componentUpdateService.GetOrAddComponent<AdminNavMenu>().RefreshRequested += RefreshMe;
}
private void RefreshMe()
{
_logger.Debug($"Navbar refresh called! {DateTime.Now} ");
//OnInitialized();
InitUser();
StateHasChanged();
}
private void InitUser()
{
if (SessionService.User != null)
{
myUser = true;
userId = SessionService.User.UserId;
userEmail = SessionService.User.Email;
if (SessionService.User.UserModelDto.ProfileDto.FullName != null)
{
userFullName = SessionService.User.UserModelDto.ProfileDto.FullName!;
}
}
else
{
_logger.Debug($"Navbar myUser false! {DateTime.Now} ");
myUser = false;
}
var properties = SessionService.User?.HasProperties;
if (properties == null) return;
userHasCompany = SessionService.HasCompany;
userHasHotels = properties.Count > 0;
IsSysAdmin = SessionService.IsSysAdmin;
IsDevAdmin = SessionService.IsDevAdmin;
IsDriver = SessionService.IsDriver;
driverPermissionId = SessionService.DriverPersmissionId;
foreach (var property in properties)
{
_logger.Detail($"First property: {property.Value} ");
}
}
}