using System; using System.Collections.Generic; using System.Globalization; using System.Text; using System.Threading.Tasks; using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.Components.Web; using OneOf; namespace AntDesign { /// /// Confirm dialog options /// public class ConfirmOptions : DialogOptionsBase { public ConfirmOptions() { Width = 416; Mask = true; MaskClosable = false; Locale = LocaleProvider.CurrentLocale.Confirm; } #region const /// /// OK /// internal string DefaultBtn1Text { get; } = "OK"; /// /// Cancel /// internal string DefaultBtn2Text { get; } = "Cancel"; /// /// Ignore /// internal string DefaultBtn3Text { get; } = "Ignore"; #endregion /// /// Confirm Locale /// public ConfirmLocale Locale { get; set; } = LocaleProvider.CurrentLocale.Confirm; /// /// the class name of the element of ".ant-modal" /// public string ClassName { get; set; } /// /// /// public bool Visible { get; set; } /// /// ChildContent /// public OneOf Content { get; set; } /// /// Confirm left top icon /// public RenderFragment? Icon { get; set; } = null; /// /// .ant-modal element's style /// public string Style { get; set; } /// /// /// public ConfirmAutoFocusButton AutoFocusButton { get; set; } /// /// set OK button type for the leftmost button: OK or Yes button /// public new string OkType { get { Button1Props ??= new ButtonProps(); return Button1Props.Type; } set { Button1Props ??= new ButtonProps(); Button1Props.Type = value; } } #region button text /// /// set OK button content for the leftmost button: OK or Yes button, it will override the ConfirmLocale /// public new OneOf? OkText { get => Button1Text; set => Button1Text = value; } /// /// set Cancel button content for the second on the left button: Cancel or NO button, it will override the ConfirmLocale /// public new OneOf? CancelText { get => Button2Text; set => Button2Text = value; } /// /// the leftmost button in LTR layout, it will override the ConfirmLocale /// internal OneOf? Button1Text { get => Button1Props.ChildContent; set => Button1Props.ChildContent = value; } /// /// The second button on the left is in the LTR layout, it will override the ConfirmLocale /// internal OneOf? Button2Text { get => Button2Props.ChildContent; set => Button2Props.ChildContent = value; } /// /// the rightmost button in LTR layout, it will override the ConfirmLocale /// internal OneOf? Button3Text { get => Button3Props.ChildContent; set => Button3Props.ChildContent = value; } #endregion #region button OnClick callback /// /// for OK-Cancel Confirm dialog, cancel button clicked callback. /// It's only trigger in Confirm created by ModalService mode /// public Func OnCancel { get; set; } /// /// for OK-Cancel Confirm dialog, OK button clicked callback. /// It's only trigger in Confirm created by ModalService mode /// public Func OnOk { get; set; } #endregion #region button props /// /// OK-Cancel Confirm dialog's OK button props. It is equivalent to Button1Props. /// public new ButtonProps OkButtonProps { get => Button1Props; set => Button1Props = value; } /// /// OK-Cancel Confirm dialog's cancel button props. It is equivalent to Button2Props. /// public new ButtonProps CancelButtonProps { get => Button2Props; set => Button2Props = value; } /// /// the leftmost button in LTR layout /// public ButtonProps Button1Props { get => _button1Props; set => _button1Props = SetButtonProps(value, _button1Props); } /// /// The second button on the left is in the LTR layout /// public ButtonProps Button2Props { get => _button2Props; set => _button2Props = SetButtonProps(value, _button2Props); } /// /// the rightmost button in LTR layout /// public ButtonProps Button3Props { get => _button3Props; set => _button3Props = SetButtonProps(value, _button3Props); } private ButtonProps _button1Props = new ButtonProps() { Type = ButtonType.Primary }; private ButtonProps _button2Props = new ButtonProps(); private ButtonProps _button3Props = new ButtonProps(); #endregion #region Confirm buttons config /// /// show Cancel button for OK-Cancel Confirm dialog /// public bool OkCancel { get => ConfirmButtons != ConfirmButtons.OK; set { ConfirmButtons = !value ? ConfirmButtons.OK : ConfirmButtons.OKCancel; } } internal ConfirmButtons ConfirmButtons { get; set; } = ConfirmButtons.OKCancel; #endregion #region config confirm icon style internal string ConfirmType { get; set; } = "confirm"; private ConfirmIcon _confirmIcon; internal ConfirmIcon ConfirmIcon { get => _confirmIcon; set { _confirmIcon = value; Icon = ConfirmIconRenderFragments.GetByConfirmIcon(value); if (value == ConfirmIcon.None) { ConfirmType = "confirm"; } else { ConfirmType = value.ToString().ToLower(CultureInfo.CurrentUICulture); } } } #endregion private static ButtonProps SetButtonProps(ButtonProps newProps, ButtonProps oldProps) { if (newProps == null || newProps.ChildContent.HasValue) { return newProps; } if (oldProps != null) { newProps.ChildContent = oldProps.ChildContent; } return newProps; } /// /// set default options for buttons /// internal void BuildButtonsDefaultOptions() { // config default button text switch (ConfirmButtons) { case ConfirmButtons.OK: { this.Button1Text ??= Locale.OkText; break; } case ConfirmButtons.OKCancel: { this.Button1Text ??= Locale.OkText; this.Button2Text ??= Locale.CancelText; break; } case ConfirmButtons.YesNo: case ConfirmButtons.YesNoCancel: { this.Button1Text ??= Locale.YesText; this.Button2Text ??= Locale.NoText; if (ConfirmButtons == ConfirmButtons.YesNoCancel) { this.Button3Text ??= Locale.CancelText; // config button2 default type this.Button2Props.Danger ??= true; } break; } case ConfirmButtons.RetryCancel: { this.Button1Text ??= Locale.RetryText; this.Button2Text ??= Locale.CancelText; break; } case ConfirmButtons.AbortRetryIgnore: { this.Button1Text ??= Locale.AbortText; this.Button2Text ??= Locale.RetryText; this.Button3Text ??= Locale.IgnoreText; // config button2 default type this.Button2Props.Danger ??= true; break; } default: break; } } } }