diff --git a/MVMCoreUI/FormUIHelpers/FormValidator.swift b/MVMCoreUI/FormUIHelpers/FormValidator.swift index 29690ae5..744304ba 100644 --- a/MVMCoreUI/FormUIHelpers/FormValidator.swift +++ b/MVMCoreUI/FormUIHelpers/FormValidator.swift @@ -89,7 +89,7 @@ import MVMCore // Validate each rule. var valid = true for rule in group.rules { - valid = valid && validateRule(rule) + valid = valid && rule.validate(fields) } // Notify the group watchers of validity. @@ -98,19 +98,6 @@ import MVMCore watcher.setValidity(valid, group: group) } } - - return valid - } - - /// Validates a given rule. Returns if valid. - public func validateRule(_ rule: RulesProtocol) -> Bool { - var valid = true - for formKey in rule.fields { - guard let formField = fields[formKey] else { continue } - let fieldValidity = rule.isValid(formField) - (formField as? FormRuleWatcherFieldProtocol)?.setValidity(fieldValidity, rule: rule) - valid = valid && fieldValidity - } return valid } } diff --git a/MVMCoreUI/FormUIHelpers/Rules/Rules/RuleAnyRequiredModel.swift b/MVMCoreUI/FormUIHelpers/Rules/Rules/RuleAnyRequiredModel.swift index d41c0b0c..6ca905bf 100644 --- a/MVMCoreUI/FormUIHelpers/Rules/Rules/RuleAnyRequiredModel.swift +++ b/MVMCoreUI/FormUIHelpers/Rules/Rules/RuleAnyRequiredModel.swift @@ -35,7 +35,7 @@ public class RuleAnyRequiredModel: RulesProtocol { return false } - public func isValid(_ fieldMolecules: [String: FormFieldProtocol]) -> Bool { + public func validate(_ fieldMolecules: [String: FormFieldProtocol]) -> Bool { for formKey in fields { guard let formField = fieldMolecules[formKey] else { continue } diff --git a/MVMCoreUI/FormUIHelpers/Rules/Rules/RuleAnyValueChangedModel.swift b/MVMCoreUI/FormUIHelpers/Rules/Rules/RuleAnyValueChangedModel.swift index 7cf24cd5..450fdb2a 100644 --- a/MVMCoreUI/FormUIHelpers/Rules/Rules/RuleAnyValueChangedModel.swift +++ b/MVMCoreUI/FormUIHelpers/Rules/Rules/RuleAnyValueChangedModel.swift @@ -26,16 +26,13 @@ public class RuleAnyValueChangedModel: RulesProtocol { return formField.baseValue != formField.formFieldValue() } - public func isValid(_ fieldMolecules: [String: FormFieldProtocol]) -> Bool { - + public func validate(_ fieldMolecules: [String: FormFieldProtocol]) -> Bool { for formKey in fields { guard let formField = fieldMolecules[formKey] else { continue } - if isValid(formField) { return true } - } - + } return false } } diff --git a/MVMCoreUI/FormUIHelpers/Rules/Rules/RuleEqualsModel.swift b/MVMCoreUI/FormUIHelpers/Rules/Rules/RuleEqualsModel.swift index 05e7ad32..fb7585f2 100644 --- a/MVMCoreUI/FormUIHelpers/Rules/Rules/RuleEqualsModel.swift +++ b/MVMCoreUI/FormUIHelpers/Rules/Rules/RuleEqualsModel.swift @@ -26,8 +26,7 @@ public class RuleEqualsModel: RulesProtocol { return false } - public func isValid(_ fieldMolecules: [String: FormFieldProtocol]) -> Bool { - + public func validate(_ fieldMolecules: [String: FormFieldProtocol]) -> Bool { var valid = true var compareValue: AnyHashable? diff --git a/MVMCoreUI/FormUIHelpers/Rules/Rules/RulesProtocol.swift b/MVMCoreUI/FormUIHelpers/Rules/Rules/RulesProtocol.swift index 6afe5b17..305b4c35 100644 --- a/MVMCoreUI/FormUIHelpers/Rules/Rules/RulesProtocol.swift +++ b/MVMCoreUI/FormUIHelpers/Rules/Rules/RulesProtocol.swift @@ -22,6 +22,9 @@ public protocol RulesProtocol: ModelProtocol { // Returns if a given field is valid according to the rule func isValid(_ formField: FormFieldProtocol) -> Bool + + // Validates the rule and returns the result. + func validate(_ fieldMolecules: [String: FormFieldProtocol]) -> Bool } public extension RulesProtocol { @@ -37,4 +40,16 @@ public extension RulesProtocol { static var categoryName: String { return "\(RulesProtocol.self)" } + + // Individual rule can override the function to validate based on the rule type. + func validate(_ fieldMolecules: [String: FormFieldProtocol]) -> Bool { + var valid = true + for formKey in fields { + guard let formField = fieldMolecules[formKey] else { continue } + let fieldValidity = isValid(formField) + (formField as? FormRuleWatcherFieldProtocol)?.setValidity(fieldValidity, rule: self) + valid = valid && fieldValidity + } + return valid + } }