namespace Common.Services; public enum ToastLevel { Info, Success, Warning, Error } public class ToastMessage { public Guid Id { get; } = Guid.NewGuid(); public string Message { get; set; } = string.Empty; public ToastLevel Level { get; set; } = ToastLevel.Info; public DateTime Created { get; } = DateTime.Now; } public interface IToastService { event Action OnChange; List Toasts { get; } void ShowToast(string message, ToastLevel level = ToastLevel.Info); void RemoveToast(Guid id); } public class ToastService : IToastService { public event Action? OnChange; public List Toasts { get; } = new(); public void ShowToast(string message, ToastLevel level = ToastLevel.Info) { var toast = new ToastMessage { Message = message, Level = level }; Toasts.Add(toast); NotifyStateChanged(); // Auto remove after 5 seconds _ = RemoveAfterDelay(toast.Id); } public void RemoveToast(Guid id) { var toast = Toasts.FirstOrDefault(t => t.Id == id); if (toast != null) { Toasts.Remove(toast); NotifyStateChanged(); } } private async Task RemoveAfterDelay(Guid id) { await Task.Delay(5000); RemoveToast(id); } private void NotifyStateChanged() => OnChange?.Invoke(); }