/// <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()); }
/// <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); }
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)); }
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)); }
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); }
/// <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)); }
/// <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)); }
/// <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)); }
/// <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)); }
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))); }
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)); }