示例#1
0
 /// <summary>   Set the field validation. </summary>
 /// <param name="validate"> The validator. </param>
 /// <returns>   A <see cref="Field{T}"/>. </returns>
 public Field <T> SetValidate(ValidateAsyncDelegate <T> validate)
 {
     if (validate != null)
     {
         _validate = validate;
     }
     return(this);
 }
        public static IForm <CardToCardTransfer> MakeForm()
        {
            FormBuilder <CardToCardTransfer> _order = new FormBuilder <CardToCardTransfer>();

            ValidateAsyncDelegate <CardToCardTransfer> validateCard =
                async(state, value) =>
            {
                var    cardNumber = value as string;
                string errorMessage;

                ValidateResult result = new ValidateResult();
                result.IsValid  = CardValidator.IsCardValid(cardNumber, out errorMessage);
                result.Feedback = errorMessage;

                return(result);
            };

            return(_order
                   .Message("Добро пожаловать в сервис перевода денег с карты на карту!")
                   .Field(nameof(CardToCardTransfer.SourceCardNumber), null, validateCard)
                   .Field(nameof(CardToCardTransfer.Fee), state => false)
                   .Field(nameof(CardToCardTransfer.ValidThruMonth))
                   .Field(nameof(CardToCardTransfer.ValidThruYear))
                   .Field(nameof(CardToCardTransfer.DestinationCardNumber), null, validateCard)
                   .Field(nameof(CardToCardTransfer.CVV))
                   .Field(nameof(CardToCardTransfer.Amount), null,
                          async(state, value) =>
            {
                int amount = int.Parse(value.ToString());

                var alfabankService = new AlfabankService();
                string auth = await alfabankService.AuthorizePartner();
                state.Fee = (double)await alfabankService.GetCommission(auth, state.SourceCardNumber, state.DestinationCardNumber, amount);

                ValidateResult result = new ValidateResult();
                result.IsValid = true;
                return result;
            })
                   .Confirm("Вы хотите перевести {Amount} рублей с карты {SourceCardNumber} на карту {DestinationCardNumber}? Комиссия составит {Fee} рублей. (y/n)")
                   .OnCompletionAsync(async(context, cardTocardTransfer) =>
            {
                Debug.WriteLine("{0}", cardTocardTransfer);
            })
                   .Build());
        }
        public IForm <TimeRegistrationModel> BuildForm()
        {
            ExactOnlineConnector connector = ExactOnlineHelper.GetConnector();

            var byDate       = new ActiveDelegate <TimeRegistrationModel>((state) => { return(state.ThisWeek == false); });
            var askPerDay    = new ActiveDelegate <TimeRegistrationModel>((state) => { return(state.ThisWeek == true); });
            var verifyPerDay = new ValidateAsyncDelegate <TimeRegistrationModel>(ValidateHoursPerDay);

            return(new FormBuilder <TimeRegistrationModel>()
                   .Field(nameof(TimeRegistrationModel.ThisWeek))
                   .Field(BuildCustomerField(connector))
                   .Field(BuildProjectField(connector))
                   .Field(BuildHourTypeField(connector))
                   .Field(nameof(TimeRegistrationModel.Date), byDate)
                   .Field(nameof(TimeRegistrationModel.Amount), byDate)
                   .Field(nameof(TimeRegistrationModel.AmountPerDay), askPerDay, ValidateHoursPerDay)
                   .OnCompletion(TimeRegistrationCompleted)
                   .Build());
        }
示例#4
0
 /// <summary>   Set the field validation. </summary>
 /// <param name="validate"> The validator. </param>
 /// <returns>   A <see cref="Field{T}"/>. </returns>
 public Field <T> SetValidate(ValidateAsyncDelegate <T> validate)
 {
     _validate = validate;
     return(this);
 }
示例#5
0
        public override IFormBuilder <T> Field(string name, PromptAttribute prompt, ActiveDelegate <T> active = null, ValidateAsyncDelegate <T> validate = null)
        {
            var field = new FieldReflector <T>(name, _ignoreAnnotations);

            field.SetActive(active);
            field.SetValidate(validate);
            field.SetPrompt(prompt);
            return(Field(field));
        }
示例#6
0
 public override IFormBuilder <T> Field(string name, string prompt, ActiveDelegate <T> active = null, ValidateAsyncDelegate <T> validate = null)
 {
     return(Field(name, new PromptAttribute(prompt), active, validate));
 }
示例#7
0
 public abstract IFormBuilder <T> Field(string name, PromptAttribute prompt, ActiveDelegate <T> active = null, ValidateAsyncDelegate <T> validate = null);
        public override IFormBuilder <JObject> Field(string name, PromptAttribute prompt, ActiveDelegate <JObject> active = null, ValidateAsyncDelegate <JObject> validate = null)
        {
            var field = new FieldJson(this, name);

            field.SetPrompt(prompt);
            if (active != null)
            {
                field.SetActive(active);
            }
            if (validate != null)
            {
                field.SetValidate(validate);
            }
            return(Field(field));
        }
        public override IFormBuilder <JObject> Field(string name, ActiveDelegate <JObject> active = null, ValidateAsyncDelegate <JObject> validate = null)
        {
            var field = new FieldJson(this, name);

            field.SetActive(active);
            field.SetValidate(validate);
            AddSteps(field.Before);
            Field(field);
            AddSteps(field.After);
            return(this);
        }
示例#10
0
        /// <summary>
        /// Define a step for filling in a particular value in a JObject as defined by a JSON Schema.
        /// </summary>
        /// <param name="builder">Form builder.</param>
        /// <param name="schema">JSON schema defining JObject.</param>
        /// <param name="name">Path in the form state to the value being filled in.</param>
        /// <param name="prompt">Prompt pattern with more formatting control to describe prompt for field.</param>
        /// <param name="active">Delegate to test form state to see if step is active.n</param>
        /// <param name="validate">Delegate to validate the field value.</param>
        /// <returns>This form.</returns>
        /// <remarks>
        /// See <see cref="FieldJson"/> for a description of JSON Schema extensions
        /// for defining your fields.
        /// </remarks>
        public static IFormBuilder <JObject> Field(this IFormBuilder <JObject> builder, JObject schema, string name, PromptAttribute prompt, ActiveDelegate <JObject> active = null, ValidateAsyncDelegate <JObject> validate = null)
        {
            var field = new FieldJson(schema, name);

            field.SetPrompt(prompt);
            if (active != null)
            {
                field.SetActive(active);
            }
            if (validate != null)
            {
                field.SetValidate(validate);
            }
            return(builder.Field(field));
        }
示例#11
0
 /// <summary>
 /// Define a step for filling in a particular value in a JObject as defined by a JSON Schema.
 /// </summary>
 /// <param name="builder">Form builder.</param>
 /// <param name="schema">JSON schema defining JObject.</param>
 /// <param name="name">Path in the form state to the value being filled in.</param>
 /// <param name="prompt">Simple \ref patterns to describe prompt for field.</param>
 /// <param name="active">Delegate to test form state to see if step is active.n</param>
 /// <param name="validate">Delegate to validate the field value.</param>
 /// <returns>This form.</returns>
 /// <remarks>
 /// See <see cref="FieldJson"/> for a description of JSON Schema extensions
 /// for defining your fields.
 /// </remarks>
 public static IFormBuilder <JObject> Field(this IFormBuilder <JObject> builder, JObject schema, string name, string prompt, ActiveDelegate <JObject> active = null, ValidateAsyncDelegate <JObject> validate = null)
 {
     return(builder.Field(schema, name, new PromptAttribute(prompt), active, validate));
 }
示例#12
0
        /// <summary>
        /// Define a step for filling in a particular value in the form state.
        /// </summary>
        /// <param name="builder">Form builder.</param>
        /// <param name="name">Path in the form state to the value being filled in.</param>
        /// <param name="prompt">Prompt pattern with more formatting control to describe prompt for field.</param>
        /// <param name="active">Delegate to test form state to see if step is active.n</param>
        /// <param name="validate">Delegate to validate the field value.</param>
        /// <returns>This form.</returns>
        /// <remarks>
        /// This step will use reflection to construct everything needed for a dialog from a combination
        /// of the <see cref="DescribeAttribute"/>, <see cref="TermsAttribute"/>, <see cref="PromptAttribute"/>, <see cref="OptionalAttribute"/>
        /// <see cref="NumericAttribute"/> and <see cref="TemplateAttribute"/> annotations that are supplied by default or you
        /// override.
        /// </remarks>
        public static IFormBuilder <T> Field <T>(this IFormBuilder <T> builder, string name, PromptAttribute prompt, ActiveDelegate <T> active = null, ValidateAsyncDelegate <T> validate = null)
            where T : class
        {
            var field = (active == null ? new FieldReflector <T>(name) : new Conditional <T>(name, active));

            if (validate != null)
            {
                field.SetValidate(validate);
            }
            field.SetPrompt(prompt);
            return(builder.Field(field));
        }
示例#13
0
 /// <summary>
 /// Define a step for filling in a particular value in the form state.
 /// </summary>
 /// <param name="builder">Form builder.</param>
 /// <param name="name">Path in the form state to the value being filled in.</param>
 /// <param name="prompt">Simple \ref patterns to describe prompt for field.</param>
 /// <param name="active">Delegate to test form state to see if step is active.n</param>
 /// <param name="validate">Delegate to validate the field value.</param>
 /// <returns>This form.</returns>
 /// <remarks>
 /// This step will use reflection to construct everything needed for a dialog from a combination
 /// of the <see cref="DescribeAttribute"/>, <see cref="TermsAttribute"/>, <see cref="PromptAttribute"/>, <see cref="OptionalAttribute"/>
 /// <see cref="NumericAttribute"/> and <see cref="TemplateAttribute"/> annotations that are supplied by default or you
 /// override.
 /// </remarks>
 public static IFormBuilder <T> Field <T>(this IFormBuilder <T> builder, string name, string prompt, ActiveDelegate <T> active = null, ValidateAsyncDelegate <T> validate = null)
     where T : class
 {
     return(builder.Field(name, new PromptAttribute(prompt), active, validate));
 }
示例#14
0
        public IFormBuilder <T> Field(string name, PromptAttribute prompt, ActiveDelegate <T> condition = null, ValidateAsyncDelegate <T> validate = null)
        {
            var field = (condition == null ? new FieldReflector <T>(name) : new Conditional <T>(name, condition));

            if (validate != null)
            {
                field.SetValidate(validate);
            }
            field.SetPrompt(prompt);
            return(AddField(field));
        }
        public static IFormBuilder <T> DateTimeRangeField <T>(this IFormBuilder <T> formBuilder, string name, ActiveDelegate <T> active = null, ValidateAsyncDelegate <T> validate = null)
            where T : class
        {
            var prompt = typeof(T).GetProperty(name).GetCustomAttributes(typeof(PromptAttribute), false).Cast <PromptAttribute>().First();

            return(formBuilder.Field(new FieldReflector <T>(name)
                                     .SetType(typeof(string))
                                     .SetPrompt(prompt)
                                     .SetFieldDescription(name)
                                     .SetActive(active)
                                     .SetValidate(validate)));
        }
示例#16
0
        public static async Task <IFormBuilder <T> > Field <T>(this Task <IFormBuilder <T> > builder, string name, Func <Task <string> > prompt, ActiveDelegate <T> active = null, ValidateAsyncDelegate <T> validate = null)
            where T : class
        {
            string prmpt = await prompt();

            var b = await builder;

            return(b.Field(name, prmpt, active, validate));
        }