-
+
@foreach (var toast in ToastList.OrderBy(x => x.TimeStamp))
{
diff --git a/src/TailBlazor.Toast/TailBlazorToasts.razor.cs b/src/TailBlazor.Toast/TailBlazorToasts.razor.cs
index a714303..3ce0169 100644
--- a/src/TailBlazor.Toast/TailBlazorToasts.razor.cs
+++ b/src/TailBlazor.Toast/TailBlazorToasts.razor.cs
@@ -1,17 +1,17 @@
-using Microsoft.AspNetCore.Components;
-using Microsoft.AspNetCore.Components.Routing;
using System;
using System.Collections.Generic;
using System.Linq;
+using Microsoft.AspNetCore.Components;
+using Microsoft.AspNetCore.Components.Routing;
using TailBlazor.Toast.Configuration;
using TailBlazor.Toast.Services;
namespace TailBlazor.Toast
{
- public partial class TailBlazorToasts
+ public partial class TailBlazorToasts : IDisposable
{
- [Inject] private IToastService ToastService { get; set; }
- [Inject] private NavigationManager NavigationManager { get; set; }
+ [Inject] private IToastService ToastService { get; set; } = default!;
+ [Inject] private NavigationManager NavigationManager { get; set; } = default!;
[Parameter] public HeroIcons.IconStyle IconStyle { get; set; } = HeroIcons.IconStyle.Outline;
[Parameter] public string InfoClass { get; set; } = "text-blue-500 w-7 h-7";
@@ -28,12 +28,16 @@ public partial class TailBlazorToasts
[Parameter] public bool RemoveToastsOnNavigation { get; set; }
protected string PositionClass { get; set; } = "items-start justify-end";
- internal List ToastList { get; set; } = new List();
- ToastOptions Options { get; set; }
+ internal List ToastList { get; } = new();
+ private ToastOptions Options { get; set; } = new();
+ private bool _disposed;
+
protected override void OnInitialized()
{
+ base.OnInitialized();
+
ToastService.OnShow += ShowToast;
- Options = ToastService._options;
+ Options = ToastService.Options;
if (RemoveToastsOnNavigation)
{
NavigationManager.LocationChanged += ClearToasts;
@@ -67,12 +71,17 @@ public void RemoveToast(Guid toastId)
InvokeAsync(() =>
{
var toastInstance = ToastList.SingleOrDefault(x => x.Id == toastId);
+ if (toastInstance is null)
+ {
+ return;
+ }
+
ToastList.Remove(toastInstance);
StateHasChanged();
});
}
- private void ClearToasts(object sender, LocationChangedEventArgs args)
+ private void ClearToasts(object? sender, LocationChangedEventArgs args)
{
InvokeAsync(() =>
{
@@ -89,7 +98,7 @@ private ToastSettings BuildToastSettings(ToastLevel level, RenderFragment messag
return new ToastSettings(message, level, Options.IncludeIcons);
case ToastLevel.Error:
return new ToastSettings(string.IsNullOrWhiteSpace(heading) ? "Error" : heading, message,
- IconStyle, ErrorClass, ErrorIcon, ShowProgressBar, onclick, level,Options.IncludeIcons);
+ IconStyle, ErrorClass, ErrorIcon, ShowProgressBar, onclick, level, Options.IncludeIcons);
case ToastLevel.Info:
return new ToastSettings(string.IsNullOrWhiteSpace(heading) ? "Info" : heading, message,
@@ -125,5 +134,22 @@ private void ShowToast(ToastLevel level, RenderFragment toastFragment, string he
});
}
+
+ public void Dispose()
+ {
+ if (_disposed)
+ {
+ return;
+ }
+
+ _disposed = true;
+
+ ToastService.OnShow -= ShowToast;
+
+ if (RemoveToastsOnNavigation)
+ {
+ NavigationManager.LocationChanged -= ClearToasts;
+ }
+ }
}
}