Files
DiunaBI/DiunaBI.UI.Shared/Components/Layout/MainLayout.razor

117 lines
3.9 KiB
Plaintext
Raw Normal View History

2025-11-06 10:20:00 +01:00
@using MudBlazor
2025-11-28 11:44:19 +01:00
@using DiunaBI.UI.Shared.Services
@inject AppConfig AppConfig
2025-12-04 22:20:00 +01:00
@inject EntityChangeHubService HubService
2025-12-06 00:36:22 +01:00
@inject AuthService AuthService
2025-11-06 10:20:00 +01:00
@inherits LayoutComponentBase
2025-12-06 00:36:22 +01:00
@implements IDisposable
2025-11-06 10:20:00 +01:00
<AuthGuard>
2025-12-10 12:28:36 +01:00
<MudThemeProvider Theme="_theme" />
<MudPopoverProvider />
<MudDialogProvider />
<MudSnackbarProvider />
2025-11-06 10:20:00 +01:00
<MudLayout>
<MudBreakpointProvider OnBreakpointChanged="OnBreakpointChanged"></MudBreakpointProvider>
<MudAppBar Elevation="0">
2025-12-10 12:28:36 +01:00
<MudIconButton Icon="@Icons.Material.Filled.Menu" Color="Color.Inherit" Edge="Edge.Start"
OnClick="ToggleDrawer" Class="mud-hidden-md-up" />
<MudSpacer />
2025-11-28 11:44:19 +01:00
<MudText Typo="Typo.h6">@AppConfig.AppName</MudText>
2025-11-06 10:20:00 +01:00
</MudAppBar>
2025-12-10 12:28:36 +01:00
<MudDrawer @bind-Open="_drawerOpen" Anchor="Anchor.Start" Variant="@_drawerVariant" Elevation="1"
ClipMode="DrawerClipMode.Always" Class="mud-width-250">
2025-11-28 12:13:19 +01:00
<div class="nav-logo" style="text-align: center; padding: 20px;">
<a href="https://www.diunabi.com" target="_blank">
2025-12-10 12:28:36 +01:00
<img src="_content/DiunaBI.UI.Shared/images/logo.png" alt="DiunaBI"
style="max-width: 180px; height: auto;" />
2025-11-28 12:13:19 +01:00
</a>
</div>
2025-11-06 10:20:00 +01:00
<MudNavMenu>
<MudNavLink Href="/dashboard" Icon="@Icons.Material.Filled.Dashboard">Dashboard</MudNavLink>
2025-11-19 18:51:09 +01:00
<MudNavLink Href="/layers" Icon="@Icons.Material.Filled.Inventory">Layers</MudNavLink>
2025-12-01 12:55:47 +01:00
<MudNavLink Href="/datainbox" Icon="@Icons.Material.Filled.Inbox">Data Inbox</MudNavLink>
2025-12-03 13:33:38 +01:00
<MudNavLink Href="/jobs" Icon="@Icons.Material.Filled.WorkHistory">Jobs</MudNavLink>
2025-11-06 10:20:00 +01:00
</MudNavMenu>
2025-12-10 12:28:36 +01:00
<div class="nav-logo" style="text-align: center; padding: 20px;">
<img src="_content/DiunaBI.UI.Shared/images/clients/@AppConfig.ClientLogo" alt="DiunaBI"
style="max-width: 180px; height: auto;" />
</div>
2025-11-06 10:20:00 +01:00
</MudDrawer>
<MudMainContent>
<MudContainer MaxWidth="MaxWidth.ExtraExtraLarge" Class="my-4">
@Body
</MudContainer>
</MudMainContent>
</MudLayout>
</AuthGuard>
@code {
private bool _drawerOpen = true;
private DrawerVariant _drawerVariant = DrawerVariant.Persistent;
2025-12-06 00:36:22 +01:00
protected override void OnInitialized()
2025-12-04 22:20:00 +01:00
{
2025-12-06 00:36:22 +01:00
// Subscribe to authentication state changes
AuthService.AuthenticationStateChanged += OnAuthenticationStateChanged;
// If already authenticated (e.g., from restored session), initialize SignalR
if (AuthService.IsAuthenticated)
{
_ = HubService.InitializeAsync();
}
}
private async void OnAuthenticationStateChanged(bool isAuthenticated)
{
if (isAuthenticated)
{
Console.WriteLine("🔐 MainLayout: User authenticated, initializing SignalR...");
await HubService.InitializeAsync();
}
}
public void Dispose()
{
AuthService.AuthenticationStateChanged -= OnAuthenticationStateChanged;
2025-12-04 22:20:00 +01:00
}
2025-11-20 21:03:19 +01:00
private MudTheme _theme = new MudTheme()
{
PaletteLight = new PaletteLight()
{
Primary = "#e7163d",
PrimaryDarken = "#c01234",
PrimaryLighten = "#f04366",
Secondary = "#424242",
AppbarBackground = "#e7163d",
}
};
2025-11-06 10:20:00 +01:00
void ToggleDrawer()
{
Console.WriteLine($"ToogleDrawer clickkk {DateTime.Now}");
_drawerOpen = !_drawerOpen;
}
private void OnBreakpointChanged(Breakpoint breakpoint)
{
if (breakpoint < Breakpoint.Md)
{
_drawerVariant = DrawerVariant.Temporary;
_drawerOpen = false;
}
else
{
_drawerVariant = DrawerVariant.Persistent;
_drawerOpen = true;
}
StateHasChanged();
}
}