Initial commit - Common.RCL
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
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();
|
||||
}
|
||||
Reference in New Issue
Block a user