ConfirmationModal.cs

132 lines | 4.782 kB Blame History Raw Download
namespace Web.Controls.ConfirmationModal
{
    using DotVVM.Framework.Binding;
    using DotVVM.Framework.Binding.Expressions;
    using DotVVM.Framework.Controls;
    using System.Threading.Tasks;

    public class ConfirmationModal : DotvvmMarkupControl
    {
        public bool ButtonsOnly
        {
            get { return (bool)GetValue(ButtonsOnlyProperty); }
            set { SetValue(ButtonsOnlyProperty, value); }
        }
        public static readonly DotvvmProperty ButtonsOnlyProperty
            = DotvvmProperty.Register<bool, ConfirmationModal>(c => c.ButtonsOnly, true);

        public Command CancelButtonCommand
        {
            get { return (Command)GetValue(CancelButtonCommandProperty); }
            set
            {
                SetValue(CancelButtonCommandProperty, value);
            }
        }
        public static readonly DotvvmProperty CancelButtonCommandProperty
            = DotvvmProperty.Register<Command, ConfirmationModal>(c => c.CancelButtonCommand, null);

        public string CancelButtonText
        {
            get { return (string)GetValue(CancelButtonTextProperty); }
            set { SetValue(CancelButtonTextProperty, value); }
        }
        public static readonly DotvvmProperty CancelButtonTextProperty
            = DotvvmProperty.Register<string, ConfirmationModal>(c => c.CancelButtonText, "No");

        public string CancelButtonType
        {
            get { return (string)GetValue(CancelButtonTypeProperty); }
            set { SetValue(CancelButtonTypeProperty, value); }
        }
        public static readonly DotvvmProperty CancelButtonTypeProperty
            = DotvvmProperty.Register<string, ConfirmationModal>(c => c.CancelButtonType, "Link");



        public string CheckboxText
        {
            get { return (string)GetValue(CheckboxTextProperty); }
            set { SetValue(CheckboxTextProperty, value); }
        }
        public static readonly DotvvmProperty CheckboxTextProperty
            = DotvvmProperty.Register<string, ConfirmationModal>(c => c.CheckboxText, null);

        public bool CheckboxValue { get; set; }

        public string ModalHeader
        {
            get { return (string)GetValue(ModalHeaderProperty); }
            set { SetValue(ModalHeaderProperty, value); }
        }
        public static readonly DotvvmProperty ModalHeaderProperty
            = DotvvmProperty.Register<string, ConfirmationModal>(c => c.ModalHeader, "Ams Message");

        public string ModalText
        {
            get { return (string)GetValue(ModalTextProperty); }
            set { SetValue(ModalTextProperty, value); }
        }
        public static readonly DotvvmProperty ModalTextProperty
            = DotvvmProperty.Register<string, ConfirmationModal>(c => c.ModalText, null);

        public bool ModalVisible
        {
            get { return (bool)GetValue(ModalVisibleProperty); }
            set { SetValue(ModalVisibleProperty, value); }
        }
        public static readonly DotvvmProperty ModalVisibleProperty
            = DotvvmProperty.Register<bool, ConfirmationModal>(c => c.ModalVisible);

        public Command SubmitButtonCommand
        {
            get { return (Command)GetValue(SubmitButtonCommandProperty); }
            set
            {
                SetValue(SubmitButtonCommandProperty, value);
            }
        }
        public static readonly DotvvmProperty SubmitButtonCommandProperty
            = DotvvmProperty.Register<Command, ConfirmationModal>(c => c.SubmitButtonCommand, null);

        public string SubmitButtonText
        {
            get { return (string)GetValue(SubmitButtonTextProperty); }
            set { SetValue(SubmitButtonTextProperty, value); }
        }
        public static readonly DotvvmProperty SubmitButtonTextProperty
            = DotvvmProperty.Register<string, ConfirmationModal>(c => c.SubmitButtonText, "Yes");


        public string SubmitButtonType
        {
            get { return (string)GetValue(SubmitButtonTypeProperty); }
            set { SetValue(SubmitButtonTypeProperty, value); }
        }
        public static readonly DotvvmProperty SubmitButtonTypeProperty
            = DotvvmProperty.Register<string, ConfirmationModal>(c => c.SubmitButtonType, "Light");


        public async Task SubmitCommand()
        {
            var binding = GetCommandBinding(SubmitButtonCommandProperty);

            SetValueToSource(ModalVisibleProperty, false);
            if (binding == null)
                return;

            await SubmitButtonCommand.Invoke();
        }

        public async Task CancelCommand()
        {
            var binding = GetCommandBinding(CancelButtonCommandProperty);
            SetValueToSource(ModalVisibleProperty, false);
            if (binding == null)
                return;

            await CancelButtonCommand.Invoke();
        }
    }
}