FruitBankHybridApp/FruitBankHybrid.Shared/Layout/MainLayout.razor.cs

90 lines
3.1 KiB
C#

using AyCode.Core.Consts;
using AyCode.Core.Extensions;
using AyCode.Core.Loggers;
using AyCode.Services.SignalRs;
using DevExpress.Blazor;
using FruitBank.Common.Dtos;
using FruitBank.Common.Models;
using FruitBank.Common.Models.SignalRs;
using FruitBank.Common.SignalRs;
using FruitBankHybrid.Shared.Pages;
using FruitBankHybrid.Shared.Services.Loggers;
using FruitBankHybrid.Shared.Services.SignalRs;
using Mango.Nop.Core.Loggers;
using MessagePack.Resolvers;
using Microsoft.AspNetCore.Components;
namespace FruitBankHybrid.Shared.Layout;
public partial class MainLayout : LayoutComponentBase
{
[Inject] public required IEnumerable<IAcLogWriterClientBase> LogWriters { get; set; }
[Inject] public required NavigationManager NavManager{ get; set; }
[Inject] public required LoggedInModel LoggedInModel { get; set; }
[Inject] IToastNotificationService ToastService { get; set; }
[Inject] public required FruitBankSignalRClient FruitBankSignalRClient { get; set; }
private EventCallback RefreshMainLayoutEventCallback => EventCallback.Factory.Create(this, RefreshMainLayout);
private NavMenu _navMenu = null!;
private ILogger _logger = null!;
protected override void OnInitialized()
{
_logger = new LoggerClient<MainLayout>(LogWriters.ToArray());
_logger.Info("OnInitializedAsync");
var loginUri = NavManager.ToAbsoluteUri("/Login").ToString();
FruitBankSignalRClient.OnMessageReceived += SignalRClientOnMessageReceived;
if (!LoggedInModel.IsLoggedIn && NavManager.Uri != loginUri)
{
NavManager.NavigateTo("/Login");
}
}
private Task SignalRClientOnMessageReceived(int messageTag, string? jsonMessage)
{
if (messageTag != SignalRTags.NotificationReceived || !LoggedInModel.IsLoggedIn) return Task.CompletedTask;
var notificationMessage = jsonMessage?.JsonTo<SignalRMessageToClientWithText<OrderDto>>();
if (notificationMessage == null)
{
_logger.Error($"notificationMessage == null");
return Task.CompletedTask;
}
if (!(notificationMessage.Content?.HasMeasuringAccess(LoggedInModel.CustomerDto!.Id, LoggedInModel.IsRevisor) ?? LoggedInModel.IsRevisor)) return Task.CompletedTask;
var messageText = $"{notificationMessage.Message}";
if (notificationMessage.Content != null)
{
messageText += $" Rendelés: #{notificationMessage.Content.CustomOrderNumber}. Átvétel: {notificationMessage.Content.DateOfReceipt}";
}
_logger.Info($"NotificationMessage received. {messageText}");
ToastService.ShowToast(new ToastOptions
{
ProviderName = "Positioning",
Title = "Király vagyok!",
Text = messageText,
});
return Task.CompletedTask;
}
private void OnLogoutClick()
{
LoggedInModel.LogOut();
RefreshMainLayout();
NavManager.NavigateTo("/Login");
}
public void RefreshMainLayout()
{
_navMenu.RefreshNavMenu();
StateHasChanged();
}
}