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 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 LoggerClient _logger = null!; // Toast fields private DxToast orderNotificationToast; private string toastTitle = "Értesítő!"; private string toastMessage = ""; private string? toastOrderNumber; private DateTime? toastDateOfReceipt; protected override void OnInitialized() { _logger = new LoggerClient(LogWriters.ToArray()); _logger.Info("OnInitializedAsync"); var loginUri = NavManager.ToAbsoluteUri("/Login").ToString(); FruitBankSignalRClient.OnMessageReceived += SignalRClientOnMessageReceived; if (!LoggedInModel.IsLoggedIn && NavManager.Uri != loginUri) { NavManager.NavigateTo("/Login"); } } private async Task SignalRClientOnMessageReceived(int messageTag, string? jsonMessage) { if (messageTag != SignalRTags.NotificationReceived || !LoggedInModel.IsLoggedIn) return; var notificationMessage = jsonMessage?.JsonTo>(); if (notificationMessage == null) { _logger.Error($"notificationMessage == null"); return; } var orderDto = notificationMessage.Content; if ((orderDto?.HasMeasuringAccess(LoggedInModel.CustomerDto!.Id, LoggedInModel.IsRevisor) ?? LoggedInModel.IsRevisor) || orderDto?.MeasurementOwnerId == 0) { toastMessage = notificationMessage.Message; toastOrderNumber = orderDto?.CustomOrderNumber; toastDateOfReceipt = orderDto?.DateOfReceipt; _logger.Debug($"NotificationMessage received. {toastMessage}"); await InvokeAsync(() => { orderNotificationToast?.Show(); StateHasChanged(); }); } } private void OnLogoutClick() { LoggedInModel.LogOut(); RefreshMainLayout(); NavManager.NavigateTo("/Login"); } public void RefreshMainLayout() { _navMenu.RefreshNavMenu(); StateHasChanged(); } }