using System;
using Avalonia.Controls.Notifications;
namespace SukiUI.Toasts
{
public static class FluentSukiToastBuilder
{
#region Content
///
/// Creates a instance that can be used to construct a
///
public static SukiToastBuilder CreateToast(this ISukiToastManager manager) => new(manager);
///
/// Creates a simple informational toast that can be dismissed by clicking and is otherwise dismissed after 3 seconds.
/// This doesn't set the title/content and you should use and
///
public static SukiToastBuilder CreateSimpleInfoToast(this ISukiToastManager manager)
{
return new SukiToastBuilder(manager)
.OfType(NotificationType.Information)
.Dismiss().After(TimeSpan.FromSeconds(3))
.Dismiss().ByClicking();
}
///
/// Gives the toast a title.
///
public static SukiToastBuilder WithTitle(this SukiToastBuilder builder, string title)
{
builder.SetTitle(title);
return builder;
}
///
/// Show a loading Toast.
///
public static SukiToastBuilder WithLoadingState(this SukiToastBuilder builder, bool state)
{
builder.SetLoadingState(state);
return builder;
}
///
/// Gives the toast some content. This can be a ViewModel if desired - View will be located via the default location strategy.
///
public static SukiToastBuilder WithContent(this SukiToastBuilder builder, object? content)
{
builder.SetContent(content);
return builder;
}
///
/// Sets the notification type - By default it is
///
public static SukiToastBuilder OfType(this SukiToastBuilder builder, NotificationType type)
{
builder.SetType(type);
return builder;
}
#endregion
#region Dismissing
///
/// Begins a dismiss statement for the toast - Follow this with something like .
///
public static SukiToastBuilder.DismissToast Dismiss(this SukiToastBuilder builder) => new(builder);
///
/// Automatically dismisses the toast after the given amount of time.
///
public static SukiToastBuilder After(this SukiToastBuilder.DismissToast dismiss, TimeSpan after)
{
dismiss.Builder.Delay(after, toast => dismiss.Builder.Manager.Dismiss(toast));
return dismiss.Builder;
}
///
/// Allows the toast to be dismissed by clicking anywhere on the toast.
///
public static SukiToastBuilder ByClicking(this SukiToastBuilder.DismissToast dismiss)
{
dismiss.Builder.SetCanDismissByClicking(true);
return dismiss.Builder;
}
#endregion
#region Actions
///
/// The action provided will be called if the body of the toast is clicked.
///
public static SukiToastBuilder OnClicked(this SukiToastBuilder builder, Action action)
{
builder.SetOnClicked(action);
return builder;
}
///
/// The action provided will be called when the toast is dismissed for any reason, including clicking.
///
public static SukiToastBuilder OnDismissed(this SukiToastBuilder builder, Action onDismissAction)
{
builder.SetOnDismiss(onDismissAction);
return builder;
}
///
/// Adds an action button to the toast which will call the provided callback on click. Any number of buttons can be added to a toast.
///
public static SukiToastBuilder WithActionButton(this SukiToastBuilder builder, object buttonContent, Action onClicked, bool dismissOnClick = false)
{
builder.AddActionButton(buttonContent, onClicked, dismissOnClick);
return builder;
}
public static SukiToastBuilder WithActionButtonNormal(this SukiToastBuilder builder, object buttonContent, Action onClicked, bool dismissOnClick = false)
{
builder.AddActionButton(buttonContent, onClicked, dismissOnClick, false);
return builder;
}
#endregion
}
}