Files
gpw_next/GPW.CORE.Smart8.Client/Components/Layout/MainLayout.razor
T

91 lines
2.5 KiB
Plaintext

@inherits LayoutComponentBase
@inject GPW.CORE.Services.UserStateService UState
@inject ILogger<MainLayout> Log
<UserBootstrapClient />
<PageTitle>GPW.CORE.Smart (Client)</PageTitle>
<div class="page vh-100">
<main class="vw-100">
<CmpTop IpIsLocal="@isIpLocal" CurrUser="@currUser" EC_ReturnHome="@ReturnHome" EC_ForceReset="@ForceReset" />
<article class="content p-2">
@Body
</article>
@if (dataLoaded)
{
<NavBottom CurrConf="@currConfig" IdxDipendente="@idxDip" />
}
</main>
</div>
<div id="blazor-error-ui">
An unhandled error has occurred.
<a href="" class="reload">Reload</a>
<a class="dismiss">🗙</a>
</div>
@code {
private readonly Guid _instanceId = Guid.NewGuid();
private bool _subscribed;
private bool isIpLocal = false;
private bool dataLoaded = true;
private UserDTO? currUser;
private ConfigDTO? currConfig;
private int idxDip
{
get => (currUser != null && currUser?.IdxDip != null) ? (int)currUser?.IdxDip : 0;
}
protected override void OnInitialized()
{
Log.LogInformation("MainLayout OnInitialized client instance {Id}", _instanceId);
}
protected override async Task OnAfterRenderAsync(bool firstRender)
{
if (!firstRender) return;
Log.LogInformation("MainLayout OnAfterRenderAsync firstRender client instance {Id}, CurrentUser {User}",
_instanceId, UState.CurrentUser?.Utente ?? "<null>");
if (!_subscribed)
{
UState.OnChange += UState_OnChange;
_subscribed = true;
Log.LogInformation("MainLayout subscribed to UserState in client instance {Id}", _instanceId);
}
if (UState.CurrentUser != null)
{
currUser = UState.CurrentUser;
await InvokeAsync(StateHasChanged);
}
}
private void UState_OnChange()
{
_ = InvokeAsync(() =>
{
Log.LogInformation("MainLayout UState_OnChange client instance {Id} invoked", _instanceId);
currUser = UState.CurrentUser;
StateHasChanged();
});
}
public void Dispose()
{
if (_subscribed)
{
UState.OnChange -= UState_OnChange;
_subscribed = false;
Log.LogInformation("MainLayout unsubscribed in Dispose client instance {Id}", _instanceId);
}
}
private Task ReturnHome() => Task.CompletedTask;
private Task ForceReset() => Task.CompletedTask;
}