@inject GlobalNotificationService GlobalNotificationService @inject NavigationManager NavigationManager @implements IDisposable @if (Messages.Count == 0) { return; }
@foreach (var message in Messages) { if (message.Key == "success") { } } @foreach (var message in Messages) { if (message.Key == "error") { } }
@code { private List> Messages { get; set; } = new(); /// protected override async Task OnAfterRenderAsync(bool firstRender) { await base.OnAfterRenderAsync(firstRender); if (firstRender) { RefreshAddMessages(); GlobalNotificationService.OnChange += RefreshAddMessages; NavigationManager.LocationChanged += HandleLocationChanged; } } /// public void Dispose() { GlobalNotificationService.OnChange -= RefreshAddMessages; NavigationManager.LocationChanged -= HandleLocationChanged; } /// /// Refreshes the messages on navigation to another page. /// private void HandleLocationChanged(object? sender, LocationChangedEventArgs e) { RefreshAddMessages(); } /// /// Refreshes the messages by adding any new messages from the PortalMessageService. /// private void RefreshAddMessages() { // We retrieve any additional messages from the GlobalNotificationService that we do not yet have. var newMessages = GlobalNotificationService.GetMessagesForDisplay(); bool hasChanges = false; // Check for new messages foreach (var message in newMessages) { if (!Messages.Exists(m => m.Key == message.Key && m.Value == message.Value)) { Messages.Add(message); hasChanges = true; } } // Check for messages to remove var messagesToRemove = Messages.Where(m => !newMessages.Exists(nm => nm.Key == m.Key && nm.Value == m.Value)).ToList(); if (messagesToRemove.Any()) { foreach (var message in messagesToRemove) { Messages.Remove(message); } hasChanges = true; } // Only call StateHasChanged if there were actual changes if (hasChanges) { InvokeAsync(StateHasChanged); } } }