improvements
This commit is contained in:
parent
eac6bf3aa3
commit
daed451c7a
@ -303,7 +303,7 @@
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
self.formText = [map string:KeyLabel];;
|
self.formText = [map string:KeyLabel];
|
||||||
self.groupName = [map string:@"groupName"];
|
self.groupName = [map string:@"groupName"];
|
||||||
self.errMessage = [map string:KeyErrorMessage];
|
self.errMessage = [map string:KeyErrorMessage];
|
||||||
self.fieldKey = [map string:KeyFieldKey];
|
self.fieldKey = [map string:KeyFieldKey];
|
||||||
|
|||||||
@ -10,26 +10,27 @@ import Foundation
|
|||||||
|
|
||||||
@objc public protocol FormValidationProtocol: NSObjectProtocol {
|
@objc public protocol FormValidationProtocol: NSObjectProtocol {
|
||||||
|
|
||||||
// Getter method to get the FormValidator form the delegate (Mostly from the parent View Controller)
|
// Getter method to get the FormValidator from the delegate (Mostly from the parent View Controller)
|
||||||
@objc optional func formValidatorModel() -> FormValidator?
|
@objc optional func formValidatorModel() -> FormValidator?
|
||||||
}
|
}
|
||||||
|
|
||||||
@objc public protocol FormValidationFormFieldProtocol: FormValidationProtocol {
|
@objc public protocol FormValidationFormFieldProtocol: FormValidationProtocol {
|
||||||
// Used to check the validity of the field, to enable/disable the primary button.
|
// Used to check the validity of the field. For example, to enable/disable the primary button.
|
||||||
@objc func isValidField() -> Bool
|
@objc func isValidField() -> Bool
|
||||||
|
|
||||||
// The Field name key value pair for sending to server
|
// The Field name key value pair for sending to server
|
||||||
@objc func formFieldName() -> String?
|
@objc func formFieldName() -> String?
|
||||||
|
|
||||||
// Returns the group name for validation
|
// Returns the group name for validation. The class should always return a value.
|
||||||
@objc func formFieldGroupName() -> String?
|
@objc func formFieldGroupName() -> String?
|
||||||
|
|
||||||
// The Field value key value pair for sending to server
|
// The Field value key value pair for sending to server
|
||||||
@objc func formFieldValue() -> Any?
|
@objc func formFieldValue() -> Any?
|
||||||
}
|
}
|
||||||
|
|
||||||
@objc public protocol FormValidationEnableDisableProtocol: FormValidationProtocol {
|
@objc public protocol FormValidationEnableDisableProtocol: FormValidationProtocol {
|
||||||
|
|
||||||
|
// Returns true if the button needs to be enabled/disabled based on the validation
|
||||||
@objc func isValidationRequired() -> Bool
|
@objc func isValidationRequired() -> Bool
|
||||||
|
|
||||||
// Based on the isValidField(), the fields which needs to be enabled can call this method
|
// Based on the isValidField(), the fields which needs to be enabled can call this method
|
||||||
|
|||||||
@ -12,8 +12,9 @@ import MVMCore
|
|||||||
|
|
||||||
@objcMembers public class FormValidator: NSObject {
|
@objcMembers public class FormValidator: NSObject {
|
||||||
|
|
||||||
var delegate: FormValidationProtocol?
|
|
||||||
var extraValidationBlock: (() -> Bool)?
|
var extraValidationBlock: (() -> Bool)?
|
||||||
|
var dummyGroupName = "dummyGroupName"
|
||||||
|
weak var delegate: FormValidationProtocol?
|
||||||
var fieldMolecules: [FormValidationFormFieldProtocol] = []
|
var fieldMolecules: [FormValidationFormFieldProtocol] = []
|
||||||
var enableDisableMolecules: [FormValidationEnableDisableProtocol] = []
|
var enableDisableMolecules: [FormValidationEnableDisableProtocol] = []
|
||||||
var radioButtonsModelByGroup: [String: RadioButtonModel] = [:]
|
var radioButtonsModelByGroup: [String: RadioButtonModel] = [:]
|
||||||
@ -47,44 +48,37 @@ import MVMCore
|
|||||||
}
|
}
|
||||||
|
|
||||||
public func enableByValidation() {
|
public func enableByValidation() {
|
||||||
if enableDisableMolecules.count > 1 {
|
for molecule in enableDisableMolecules {
|
||||||
enableByGroup()
|
if let requiredFeilds = molecule.requiredFields?(), requiredFeilds.count > 0 {
|
||||||
} else {
|
enableWithGroupName(requiredFeilds, molecule)
|
||||||
enableByFieldValidation()
|
} else {
|
||||||
|
enableIgnoreGroupName(molecule)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public func enableByFieldValidation() {
|
public func enableWithGroupName(_ requiredGroupList: [String], _ enableDisableMolecules: FormValidationEnableDisableProtocol) {
|
||||||
guard let enableMolecule = enableDisableMolecules.first else {
|
|
||||||
return;
|
var groupValidityMap: [String: Bool] = [:]
|
||||||
|
for molecule in fieldMolecules {
|
||||||
|
let valid = molecule.isValidField()
|
||||||
|
let groupName = molecule.formFieldGroupName() ?? dummyGroupName
|
||||||
|
groupValidityMap[groupName] = valid && (groupValidityMap[groupName] ?? true)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var valid = false
|
||||||
|
for groupName in requiredGroupList {
|
||||||
|
valid = groupValidityMap[groupName] ?? false
|
||||||
|
}
|
||||||
|
enableDisableMolecules.enableField?(valid)
|
||||||
|
}
|
||||||
|
|
||||||
|
public func enableIgnoreGroupName(_ enableDisableMolecules: FormValidationEnableDisableProtocol) {
|
||||||
var valid = true
|
var valid = true
|
||||||
for molecule in fieldMolecules {
|
for molecule in fieldMolecules {
|
||||||
valid = valid && molecule.isValidField()
|
valid = valid && molecule.isValidField()
|
||||||
}
|
}
|
||||||
let enableField = valid && (extraValidationBlock?() ?? true)
|
let enableField = valid && (extraValidationBlock?() ?? true)
|
||||||
enableMolecule.enableField?(enableField)
|
enableDisableMolecules.enableField?(enableField)
|
||||||
}
|
}
|
||||||
|
|
||||||
func enableByGroup() {
|
|
||||||
var groupValue: [String: Bool] = [:]
|
|
||||||
for molecule in fieldMolecules {
|
|
||||||
let valid = molecule.isValidField()
|
|
||||||
if let grouName = molecule.formFieldGroupName() {
|
|
||||||
groupValue[grouName] = valid && (groupValue[grouName] ?? true)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for molecule in enableDisableMolecules {
|
|
||||||
var valid = false
|
|
||||||
for groupName in molecule.requiredFields?() ?? [] {
|
|
||||||
valid = groupValue[groupName] ?? false
|
|
||||||
}
|
|
||||||
molecule.enableField?(valid)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user