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!; 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 Task SignalRClientOnMessageReceived(int messageTag, string? jsonMessage) { if (messageTag != SignalRTags.NotificationReceived || !LoggedInModel.IsLoggedIn) return Task.CompletedTask; var notificationMessage = jsonMessage?.JsonTo>(); if (notificationMessage == null) { _logger.Error($"notificationMessage == null"); return Task.CompletedTask; } var orderDto = notificationMessage.Content; if ((orderDto?.HasMeasuringAccess(LoggedInModel.CustomerDto!.Id, LoggedInModel.IsRevisor) ?? LoggedInModel.IsRevisor) || orderDto?.MeasurementOwnerId == 0) { var messageText = $"{notificationMessage.Message}"; if (orderDto != null) { messageText += $" Rendelés: #{orderDto.CustomOrderNumber}. Átvétel: {orderDto.DateOfReceipt}"; } _logger.Debug($"NotificationMessage received. {messageText}"); ToastService.ShowToast(new ToastOptions { ProviderName = "Positioning", Title = "Értesítő!", Text = messageText, }); return Task.CompletedTask; } return Task.CompletedTask; } private void OnLogoutClick() { LoggedInModel.LogOut(); RefreshMainLayout(); NavManager.NavigateTo("/Login"); } public void RefreshMainLayout() { _navMenu.RefreshNavMenu(); StateHasChanged(); } }