refactored out setting form field validity within validation

refactored validate method to return tuple and again not mess with setting formfield validity

Signed-off-by: Matt Bruce <matt.bruce@verizon.com>
This commit is contained in:
Matt Bruce 2022-01-12 15:54:36 -06:00
parent df2b6b4db2
commit 7c05d9fcc7

View File

@ -53,7 +53,6 @@ public extension RulesProtocol {
if let validity = previousFieldValidity[formKey], !validity, fieldValidity {
fieldValidity = false
}
(formField as? FormRuleWatcherFieldProtocol)?.setValidity(fieldValidity, rule: self)
valid = valid && fieldValidity
previousValidity[formKey] = fieldValidity
}
@ -66,19 +65,28 @@ public protocol RulesContainerProtocol{
}
public extension RulesContainerProtocol {
func validate(_ fields: [String: FormFieldProtocol]) -> Bool {
/// This validation for Rules for the Validation or for Effects.
/// - Parameters:
/// - fields: Fields for the group
/// - setValidity: Since this function is for validation, this bool determines if you should set the FormFields.setValidity for a rule.
/// this method can be called for Form Validation and Effect Validation (this doesn't affect the submital of the form)
/// - Returns: Tuple(valid, fieldValidity)
/// - valid: bool for all rules
/// - fieldValidity: accumulation of all fieldKey: valid
func validate(_ fields: [String: FormFieldProtocol]) -> (valid: Bool, fieldValidity: [String:Bool] ) {
// Validate each rule.
var valid = true
var previousValidity: [String: Bool] = [:]
for rule in self.rules {
//validate the rule against the fields
let tuple = rule.validate(fields, previousValidity)
if let ruleId = rule.ruleId {
print("validation ruleId: \(ruleId) value: \(tuple) \nfields: \(rule.fields)" )
}
//merge the fieldValidity
previousValidity = previousValidity.merging(tuple.fieldValidity) { (_, new) in new }
valid = valid && tuple.valid
}
return valid
return (valid: valid, fieldValidity: previousValidity)
}
}