60 lines
1.4 KiB
C#
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();
|
|
}
|