public void Check() { TModel entity = mapper.Map <TModel>(CurrentProperties.ToDictionary(p => p.Name, p => p.Value)); conditions.ForEach(condition => { DoCheck(CurrentPropertiesDictionary[condition.Field]); void DoCheck(IValidatable currentValidatable) { HashSet <IValidationRule> existingRules = currentValidatable.Validations.ToHashSet(); if (CanValidate(entity, condition.Evaluator)) { if (!existingRules.Contains(condition.Validator)) { currentValidatable.Validations.Add(condition.Validator); currentValidatable.Validate(); } } else { if (existingRules.Contains(condition.Validator)) { currentValidatable.Validations.Remove(condition.Validator); currentValidatable.Validate(); } } } }); }
public void Check(ReloadIf <TModel> condition) { DoCheck(CurrentPropertiesDictionary[condition.Field]); void DoCheck(IFormField currentField) { if (currentField is IHasItemsSource hasItemsSource) { TModel entity = mapper.Map <TModel>(CurrentProperties.ToDictionary(p => p.Name, p => p.Value)); if ( ShouldReload ( entity, condition.Evaluator ) ) { hasItemsSource.Reload(entity, typeof(TModel)); } } } bool ShouldReload(TModel entity, Expression <Func <TModel, bool> > evaluator) => new List <TModel> { entity } .AsQueryable().All(evaluator); }
public void Check(ClearIf <TModel> condition) { DoCheck(CurrentPropertiesDictionary[condition.Field]); void DoCheck(IFormField currentField) { if ( ShouldClear ( mapper.Map <TModel>(CurrentProperties.ToDictionary(p => p.Name, p => p.Value)), condition.Evaluator ) ) { currentField.Clear(); } } bool ShouldClear(TModel entity, Expression <Func <TModel, bool> > evaluator) => new List <TModel> { entity } .AsQueryable().All(evaluator); }
public void Check(ValidateIf <TModel> condition) { DoCheck(CurrentPropertiesDictionary[condition.Field]); void DoCheck(IValidatable currentValidatable) { HashSet <IValidationRule> existingRules = currentValidatable.Validations.ToHashSet(); TModel entity = mapper.Map <TModel>(CurrentProperties.ToDictionary(p => p.Name, p => p.Value)); if (CanValidate(entity, condition.Evaluator)) { if (!existingRules.Contains(condition.Validator)) { currentValidatable.Validations.Add(condition.Validator); currentValidatable.Validate(); } } else { if (existingRules.Contains(condition.Validator)) { currentValidatable.Validations.Remove(condition.Validator); currentValidatable.Validate(); } } } bool CanValidate(TModel entity, Expression <Func <TModel, bool> > evaluator) => new List <TModel> { entity } .AsQueryable().All(evaluator); }