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 } }