reverse order of method to do FormFieldEffects first, then validation. This is so the validation only runs 1 time instead of 2 times which could cause UI issues.
Signed-off-by: Matt Bruce <matt.bruce@verizon.com>
This commit is contained in:
parent
a871f09b43
commit
69799be944
@ -111,22 +111,6 @@ import MVMCore
|
||||
/// - counter: keeps track of how many times causes another group validation
|
||||
/// - Returns: validity for the FormGroupRule.rules
|
||||
public func validateGroup(_ group: FormGroupRule, counter: Int = 0) throws -> Bool {
|
||||
let tuple = group.validate(fields)
|
||||
|
||||
group.rules.forEach { rule in
|
||||
for formKey in rule.fields {
|
||||
guard let formField = fields[formKey] as? FormRuleWatcherFieldProtocol,
|
||||
let fieldValidity = tuple.fieldValidity[formKey] else { continue }
|
||||
formField.setValidity(fieldValidity, rule: rule)
|
||||
}
|
||||
}
|
||||
|
||||
// Notify the group watchers of validity.
|
||||
for watcher in groupWatchers.filter({$0.groupName == group.groupName}) {
|
||||
watcher.setValidity(tuple.valid)
|
||||
}
|
||||
|
||||
var ruleChange = false
|
||||
|
||||
//loop the effects
|
||||
group.effects?.forEach({ effect in
|
||||
@ -140,24 +124,30 @@ import MVMCore
|
||||
|
||||
//update the group form rules
|
||||
if let ruleIds = effect.activatedRuleIds {
|
||||
let didChange = self.updateRules(for: group, with: effectTuple.valid, for: effect.fieldKey, and: ruleIds)
|
||||
if(didChange) {
|
||||
ruleChange = didChange
|
||||
}
|
||||
self.updateRules(for: group, with: effectTuple.valid, for: effect.fieldKey, and: ruleIds)
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
if ruleChange {
|
||||
if counter > 3 {
|
||||
throw ValidationError.other(error: "Effect caused validation loop error")
|
||||
} else {
|
||||
return try self.validateGroup(group, counter: counter + 1)
|
||||
//validate the form
|
||||
let tuple = group.validate(fields)
|
||||
|
||||
//set the validity for the fields
|
||||
group.rules.forEach { rule in
|
||||
for formKey in rule.fields {
|
||||
guard let formField = fields[formKey] as? FormRuleWatcherFieldProtocol,
|
||||
let fieldValidity = tuple.fieldValidity[formKey] else { continue }
|
||||
formField.setValidity(fieldValidity, rule: rule)
|
||||
}
|
||||
} else {
|
||||
return tuple.valid
|
||||
}
|
||||
|
||||
// Notify the group watchers of validity.
|
||||
for watcher in groupWatchers.filter({$0.groupName == group.groupName}) {
|
||||
watcher.setValidity(tuple.valid)
|
||||
}
|
||||
|
||||
return tuple.valid
|
||||
|
||||
}
|
||||
|
||||
/// Updates the Fields in which a specific rule within a FormGroupRule validates against.
|
||||
@ -166,6 +156,7 @@ import MVMCore
|
||||
/// - validity: If you the fieldKey should be added or removed from a rule
|
||||
/// - fieldKey: FieldKey that will be added or removed from a rule
|
||||
/// - ruleIds: Array of ruleIds to add or remove the fieldKey into the rule.fields property
|
||||
@discardableResult
|
||||
public func updateRules(for group: FormGroupRule, with validity: Bool, for fieldKey: String, and ruleIds: [String]) -> Bool{
|
||||
//update the group rules based on the validation of this rule to show/hide
|
||||
var ruleChange = false
|
||||
|
||||
Loading…
Reference in New Issue
Block a user