Files

60 lines
1.4 KiB
C#

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<ToastMessage> Toasts { get; }
void ShowToast(string message, ToastLevel level = ToastLevel.Info);
void RemoveToast(Guid id);
}
public class ToastService : IToastService
{
public event Action? OnChange;
public List<ToastMessage> 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();
}