using System;
using Avalonia.Controls.Notifications;
namespace SukiUI.Dialogs
{
public static class FluentSukiDialogBuilder
{
#region Content
///
/// Creates a instance that can be used to construct a
///
public static SukiDialogBuilder CreateDialog(this ISukiDialogManager mgr) => new(mgr);
///
/// Gives the dialog a "type" which will display an icon representing it.
/// This can be used for MessageBox style dialogs.
///
public static SukiDialogBuilder OfType(this SukiDialogBuilder builder, NotificationType type)
{
builder.SetType(type);
return builder;
}
///
/// Gives the dialog a title.
///
public static SukiDialogBuilder WithTitle(this SukiDialogBuilder builder, string title)
{
builder.SetTitle(title);
return builder;
}
///
/// Gives the dialog content. This content can be a ViewModel if desired.
///
public static SukiDialogBuilder WithContent(this SukiDialogBuilder builder, object content)
{
builder.SetContent(content);
return builder;
}
///
/// Hide Card background.
///
public static SukiDialogBuilder ShowCardBackground(this SukiDialogBuilder builder, bool show)
{
builder.SetShowCardBackground(show);
return builder;
}
///
/// Gives the dialog a ViewModel. If this is used, Title/Content are ignored and only the ViewModel is rendered - the View being located by the usual strategy.
/// This is useful for custom dialogs.
///
public static SukiDialogBuilder WithViewModel(this SukiDialogBuilder builder, Func viewModel)
{
builder.SetViewModel(viewModel);
return builder;
}
#endregion
#region Dismissing
///
/// Begins a dismiss chain.
///
public static SukiDialogBuilder.DismissDialog Dismiss(this SukiDialogBuilder builder) => new(builder);
///
/// Allows the dialog to be dismissed simply by clicking the background
///
public static SukiDialogBuilder ByClickingBackground(this SukiDialogBuilder.DismissDialog dismissBuilder)
{
dismissBuilder.Builder.SetCanDismissWithBackgroundClick(true);
return dismissBuilder.Builder;
}
#endregion
#region Actions
///
/// Adds a button to the bottom of the dialog which will call the supplied callback when clicked.
/// Any number of buttons can be added to the dialog.
///
public static SukiDialogBuilder WithActionButton(this SukiDialogBuilder builder, object? content, Action onClicked,
bool dismissOnClick = false, params string[] classes)
{
builder.AddActionButton(content, onClicked, dismissOnClick, classes);
return builder;
}
///
/// Provides a callback that will be called when this dialog is dismissed for any reason.
///
public static SukiDialogBuilder OnDismissed(this SukiDialogBuilder builder, Action onDismissed)
{
builder.SetOnDismissed(onDismissed);
return builder;
}
#endregion
}
}