From 521ad8711df8868476d9b598d3adb2c0de284137 Mon Sep 17 00:00:00 2001 From: "Suresh, Kamlesh" Date: Fri, 6 Mar 2020 17:26:42 -0500 Subject: [PATCH] value changed rules --- MVMCoreUI.xcodeproj/project.pbxproj | 16 +++++----- .../Atoms/TextFields/EntryFieldModel.swift | 9 ++++-- MVMCoreUI/Atoms/Views/CheckboxModel.swift | 6 ++-- MVMCoreUI/Atoms/Views/RadioButton.swift | 7 ++-- MVMCoreUI/Atoms/Views/RadioButtonModel.swift | 20 ++++++------ MVMCoreUI/Atoms/Views/ToggleModel.swift | 5 +-- MVMCoreUI/FormUIHelpers/FormValidator.swift | 3 +- .../FormUIHelpers/New/FormFieldProtocol.swift | 9 +++++- ...l.swift => RuleAllValueChangedModel.swift} | 8 ++--- .../New/Rules/RuleAnyModel.swift | 20 ------------ .../New/Rules/RuleAnyValueChangedModel.swift | 32 +++++++++++++++++++ .../RadioButtonSelectionHelper.swift | 5 ++- .../OtherHandlers/MoleculeObjectMapping.swift | 4 +-- 13 files changed, 88 insertions(+), 56 deletions(-) rename MVMCoreUI/FormUIHelpers/New/Rules/{RuleValueChangeModel.swift => RuleAllValueChangedModel.swift} (53%) delete mode 100644 MVMCoreUI/FormUIHelpers/New/Rules/RuleAnyModel.swift create mode 100644 MVMCoreUI/FormUIHelpers/New/Rules/RuleAnyValueChangedModel.swift diff --git a/MVMCoreUI.xcodeproj/project.pbxproj b/MVMCoreUI.xcodeproj/project.pbxproj index 113ebc13..b29cdf75 100644 --- a/MVMCoreUI.xcodeproj/project.pbxproj +++ b/MVMCoreUI.xcodeproj/project.pbxproj @@ -18,8 +18,8 @@ 011D958724042492000E3791 /* FormFieldProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 011D958624042492000E3791 /* FormFieldProtocol.swift */; }; 011D95892404249B000E3791 /* FormProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 011D95882404249B000E3791 /* FormProtocol.swift */; }; 011D959B240451E3000E3791 /* RuleRequiredModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 011D959A240451E3000E3791 /* RuleRequiredModel.swift */; }; - 011D959D2404536F000E3791 /* RuleAnyModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 011D959C2404536F000E3791 /* RuleAnyModel.swift */; }; - 011D959F240453A1000E3791 /* RuleValueChangeModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 011D959E240453A1000E3791 /* RuleValueChangeModel.swift */; }; + 011D959D2404536F000E3791 /* RuleAnyValueChangedModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 011D959C2404536F000E3791 /* RuleAnyValueChangedModel.swift */; }; + 011D959F240453A1000E3791 /* RuleAllValueChangedModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 011D959E240453A1000E3791 /* RuleAllValueChangedModel.swift */; }; 011D95A1240453D0000E3791 /* RuleEqualsModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 011D95A0240453D0000E3791 /* RuleEqualsModel.swift */; }; 011D95A3240453F8000E3791 /* RuleRegexModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 011D95A2240453F8000E3791 /* RuleRegexModel.swift */; }; 011D95A5240455DC000E3791 /* FormGroupRule.swift in Sources */ = {isa = PBXBuildFile; fileRef = 011D95A4240455DC000E3791 /* FormGroupRule.swift */; }; @@ -385,8 +385,8 @@ 011D958624042492000E3791 /* FormFieldProtocol.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FormFieldProtocol.swift; sourceTree = ""; }; 011D95882404249B000E3791 /* FormProtocol.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FormProtocol.swift; sourceTree = ""; }; 011D959A240451E3000E3791 /* RuleRequiredModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RuleRequiredModel.swift; sourceTree = ""; }; - 011D959C2404536F000E3791 /* RuleAnyModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RuleAnyModel.swift; sourceTree = ""; }; - 011D959E240453A1000E3791 /* RuleValueChangeModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RuleValueChangeModel.swift; sourceTree = ""; }; + 011D959C2404536F000E3791 /* RuleAnyValueChangedModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RuleAnyValueChangedModel.swift; sourceTree = ""; }; + 011D959E240453A1000E3791 /* RuleAllValueChangedModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RuleAllValueChangedModel.swift; sourceTree = ""; }; 011D95A0240453D0000E3791 /* RuleEqualsModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RuleEqualsModel.swift; sourceTree = ""; }; 011D95A2240453F8000E3791 /* RuleRegexModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RuleRegexModel.swift; sourceTree = ""; }; 011D95A4240455DC000E3791 /* FormGroupRule.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FormGroupRule.swift; sourceTree = ""; }; @@ -790,8 +790,8 @@ children = ( 011D958424042432000E3791 /* RulesProtocol.swift */, 011D959A240451E3000E3791 /* RuleRequiredModel.swift */, - 011D959C2404536F000E3791 /* RuleAnyModel.swift */, - 011D959E240453A1000E3791 /* RuleValueChangeModel.swift */, + 011D959C2404536F000E3791 /* RuleAnyValueChangedModel.swift */, + 011D959E240453A1000E3791 /* RuleAllValueChangedModel.swift */, 011D95A0240453D0000E3791 /* RuleEqualsModel.swift */, 011D95A2240453F8000E3791 /* RuleRegexModel.swift */, 011D95A4240455DC000E3791 /* FormGroupRule.swift */, @@ -2010,7 +2010,7 @@ D29DF2BE21E7BEA4003B2FB9 /* TopTabbar.m in Sources */, 014AA72E23C5059B006F3E93 /* StackCenteredPageTemplateModel.swift in Sources */, D2A514632213643100345BFB /* MoleculeStackCenteredTemplate.swift in Sources */, - 011D959D2404536F000E3791 /* RuleAnyModel.swift in Sources */, + 011D959D2404536F000E3791 /* RuleAnyValueChangedModel.swift in Sources */, D260105923D0A92900764D80 /* ContainerProtocol.swift in Sources */, C695A69423C9909000BFB94E /* DoughnutChartModel.swift in Sources */, D29DF32421ED0DA2003B2FB9 /* TextButtonView.m in Sources */, @@ -2028,7 +2028,7 @@ D22D1F1B220341F60077CEC0 /* MVMCoreUICheckBox.m in Sources */, C695A69823C990C200BFB94E /* DoughnutChartView.swift in Sources */, D29DF2CB21E7BFCC003B2FB9 /* MFSizeThreshold.m in Sources */, - 011D959F240453A1000E3791 /* RuleValueChangeModel.swift in Sources */, + 011D959F240453A1000E3791 /* RuleAllValueChangedModel.swift in Sources */, 011D95AD2406BB57000E3791 /* FormHolderProtocol.swift in Sources */, 946EE1BA237B66D80036751F /* MoleculeModelHelper.swift in Sources */, 01509D932327ECFB00EF99AA /* ProgressBar.swift in Sources */, diff --git a/MVMCoreUI/Atoms/TextFields/EntryFieldModel.swift b/MVMCoreUI/Atoms/TextFields/EntryFieldModel.swift index 5ccb67d7..2b2ef27b 100644 --- a/MVMCoreUI/Atoms/TextFields/EntryFieldModel.swift +++ b/MVMCoreUI/Atoms/TextFields/EntryFieldModel.swift @@ -29,6 +29,7 @@ import Foundation public var fieldKey: String? public var groupName: String? = FormValidator.defaultGroupName public var text: String? + public var baseValue: JSONValue? public var isValid: Bool? { didSet { @@ -60,8 +61,12 @@ import Foundation case groupName } - public func formFieldValue() -> Any? { - return text + public func formFieldValue() -> JSONValue? { + if let text = text { + return JSONValue(stringLiteral: text) + } else { + return nil + } } //-------------------------------------------------- diff --git a/MVMCoreUI/Atoms/Views/CheckboxModel.swift b/MVMCoreUI/Atoms/Views/CheckboxModel.swift index 77fffecd..cf7f7298 100644 --- a/MVMCoreUI/Atoms/Views/CheckboxModel.swift +++ b/MVMCoreUI/Atoms/Views/CheckboxModel.swift @@ -9,7 +9,6 @@ import Foundation @objcMembers public class CheckboxModel: MoleculeModelProtocol, FormFieldProtocol { - //-------------------------------------------------- // MARK: - Properties //-------------------------------------------------- @@ -33,6 +32,7 @@ import Foundation public var fieldKey: String? public var groupName: String? = FormValidator.defaultGroupName + public var baseValue: JSONValue? //-------------------------------------------------- // MARK: - Keys @@ -59,8 +59,8 @@ import Foundation init(isChecked: Bool = false) {} - public func formFieldValue() -> Any? { - return isChecked + public func formFieldValue() -> JSONValue? { + return JSONValue(booleanLiteral: isChecked) } //-------------------------------------------------- diff --git a/MVMCoreUI/Atoms/Views/RadioButton.swift b/MVMCoreUI/Atoms/Views/RadioButton.swift index 2883c4ec..49625eb2 100644 --- a/MVMCoreUI/Atoms/Views/RadioButton.swift +++ b/MVMCoreUI/Atoms/Views/RadioButton.swift @@ -83,8 +83,11 @@ import UIKit return radioModel?.fieldKey } - public func formFieldValue() -> String? { - return radioModel?.fieldValue + public func formFieldValue() -> JSONValue? { + if let fieldValue = radioModel?.fieldValue { + return JSONValue(stringLiteral: fieldValue) + } + return nil } // MARK: - MVMViewProtocol diff --git a/MVMCoreUI/Atoms/Views/RadioButtonModel.swift b/MVMCoreUI/Atoms/Views/RadioButtonModel.swift index f185971d..a8a5de28 100644 --- a/MVMCoreUI/Atoms/Views/RadioButtonModel.swift +++ b/MVMCoreUI/Atoms/Views/RadioButtonModel.swift @@ -7,22 +7,22 @@ // import Foundation - +import MVMCore public class RadioButtonModel: MoleculeModelProtocol, FormFieldProtocol { - public static var identifier: String = "radioButton" public var backgroundColor: Color? public var state: Bool? = false public var fieldKey: String? public var groupName: String? = FormValidator.defaultGroupName - public var fieldValue: String - public func formFieldValue() -> Any? { - return fieldValue - } - - init(_ fieldKey: String, _ fieldValue: String) { - self.fieldKey = fieldKey - self.fieldValue = fieldValue + public var fieldValue: String? + public var baseValue: JSONValue? + + public func formFieldValue() -> JSONValue? { + if let fieldValue = fieldValue { + return JSONValue(stringLiteral: fieldValue) + } else { + return nil + } } } diff --git a/MVMCoreUI/Atoms/Views/ToggleModel.swift b/MVMCoreUI/Atoms/Views/ToggleModel.swift index 14f43d02..51f49828 100644 --- a/MVMCoreUI/Atoms/Views/ToggleModel.swift +++ b/MVMCoreUI/Atoms/Views/ToggleModel.swift @@ -17,6 +17,7 @@ public class ToggleModel: MoleculeModelProtocol, FormFieldProtocol { public var alternateAction: ActionModelProtocol? public var fieldKey: String? public var groupName: String? = FormValidator.defaultGroupName + public var baseValue: JSONValue? private enum CodingKeys: String, CodingKey { case moleculeName @@ -29,8 +30,8 @@ public class ToggleModel: MoleculeModelProtocol, FormFieldProtocol { case groupName } - public func formFieldValue() -> Any? { - return state + public func formFieldValue() -> JSONValue? { + return JSONValue(booleanLiteral: state) } public init(_ state: Bool) { diff --git a/MVMCoreUI/FormUIHelpers/FormValidator.swift b/MVMCoreUI/FormUIHelpers/FormValidator.swift index d3f238af..ebc47f23 100644 --- a/MVMCoreUI/FormUIHelpers/FormValidator.swift +++ b/MVMCoreUI/FormUIHelpers/FormValidator.swift @@ -24,7 +24,8 @@ import MVMCore } public func insertMolecule(_ molecule: FormItemProtocol) { - if let molecule = molecule as? FormFieldProtocol { + if var molecule = molecule as? FormFieldProtocol { + molecule.baseValue = molecule.formFieldValue() fieldMolecules.append(molecule) } if let molecule = molecule as? FormActionFieldProtocol { diff --git a/MVMCoreUI/FormUIHelpers/New/FormFieldProtocol.swift b/MVMCoreUI/FormUIHelpers/New/FormFieldProtocol.swift index 9ba8ad4d..0a099000 100644 --- a/MVMCoreUI/FormUIHelpers/New/FormFieldProtocol.swift +++ b/MVMCoreUI/FormUIHelpers/New/FormFieldProtocol.swift @@ -11,5 +11,12 @@ import Foundation public protocol FormFieldProtocol: FormItemProtocol { var fieldKey: String? { get set } - func formFieldValue() -> Any? + var baseValue: JSONValue? { get set } + func formFieldValue() -> JSONValue? +} + +extension FormFieldProtocol { + var baseValue: JSONValue? { + return nil + } } diff --git a/MVMCoreUI/FormUIHelpers/New/Rules/RuleValueChangeModel.swift b/MVMCoreUI/FormUIHelpers/New/Rules/RuleAllValueChangedModel.swift similarity index 53% rename from MVMCoreUI/FormUIHelpers/New/Rules/RuleValueChangeModel.swift rename to MVMCoreUI/FormUIHelpers/New/Rules/RuleAllValueChangedModel.swift index 221c4b5d..a33cb64c 100644 --- a/MVMCoreUI/FormUIHelpers/New/Rules/RuleValueChangeModel.swift +++ b/MVMCoreUI/FormUIHelpers/New/Rules/RuleAllValueChangedModel.swift @@ -8,13 +8,13 @@ import Foundation -public class RuleValueChangeModel: RulesProtocol { +public class RuleAllValueChangedModel: RulesProtocol { - public static var identifier: String = "valueChanged" - public var ruleType: String = RuleAnyModel.identifier + public static var identifier: String = "allValueChanged" + public var ruleType: String = RuleAllValueChangedModel.identifier public var fields: [String] public func isValid(_ formField: FormFieldProtocol) -> Bool { - return false + return formField.baseValue != formField.formFieldValue() } } diff --git a/MVMCoreUI/FormUIHelpers/New/Rules/RuleAnyModel.swift b/MVMCoreUI/FormUIHelpers/New/Rules/RuleAnyModel.swift deleted file mode 100644 index 3e10b7af..00000000 --- a/MVMCoreUI/FormUIHelpers/New/Rules/RuleAnyModel.swift +++ /dev/null @@ -1,20 +0,0 @@ -// -// RuleAnyModel.swift -// MVMCoreUI -// -// Created by Suresh, Kamlesh on 2/24/20. -// Copyright © 2020 Verizon Wireless. All rights reserved. -// - -import Foundation - -public class RuleAnyModel: RulesProtocol { - - public static var identifier: String = "any" - public var ruleType: String = RuleAnyModel.identifier - public var fields: [String] - - public func isValid(_ formField: FormFieldProtocol) -> Bool { - return false - } -} diff --git a/MVMCoreUI/FormUIHelpers/New/Rules/RuleAnyValueChangedModel.swift b/MVMCoreUI/FormUIHelpers/New/Rules/RuleAnyValueChangedModel.swift new file mode 100644 index 00000000..80b95514 --- /dev/null +++ b/MVMCoreUI/FormUIHelpers/New/Rules/RuleAnyValueChangedModel.swift @@ -0,0 +1,32 @@ +// +// RuleAnyModel.swift +// MVMCoreUI +// +// Created by Suresh, Kamlesh on 2/24/20. +// Copyright © 2020 Verizon Wireless. All rights reserved. +// + +import Foundation + +public class RuleAnyValueChangedModel: RulesProtocol { + + public static var identifier: String = "anyValueChanged" + public var ruleType: String = RuleAnyValueChangedModel.identifier + public var fields: [String] + + public func isValid(_ formField: FormFieldProtocol) -> Bool { + return formField.baseValue != formField.formFieldValue() + } + + public func isValid(_ formValidator: FormValidator) -> Bool { + for formKey in fields { + guard let formField = formValidator.formField(for: formKey) else { + continue + } + if isValid(formField) { + return true + } + } + return false + } +} diff --git a/MVMCoreUI/Molecules/RadioButtonSelectionHelper.swift b/MVMCoreUI/Molecules/RadioButtonSelectionHelper.swift index 8297a2a3..6674fe4d 100644 --- a/MVMCoreUI/Molecules/RadioButtonSelectionHelper.swift +++ b/MVMCoreUI/Molecules/RadioButtonSelectionHelper.swift @@ -10,10 +10,13 @@ import Foundation import UIKit @objcMembers public class RadioButtonSelectionHelper: FormFieldProtocol { + + public var fieldKey: String? public var groupName: String? = FormValidator.defaultGroupName private var selectedRadioButton: RadioButton? private var fieldGroupName: String? + public var baseValue: JSONValue? init(_ fieldKey: String?) { self.fieldKey = fieldKey @@ -44,7 +47,7 @@ extension RadioButtonSelectionHelper { return selectedRadioButton?.formFieldGroupName() ?? self.fieldGroupName } - public func formFieldValue() -> Any? { + public func formFieldValue() -> JSONValue? { return selectedRadioButton?.formFieldValue() } } diff --git a/MVMCoreUI/OtherHandlers/MoleculeObjectMapping.swift b/MVMCoreUI/OtherHandlers/MoleculeObjectMapping.swift index ae8f19fe..8d150395 100644 --- a/MVMCoreUI/OtherHandlers/MoleculeObjectMapping.swift +++ b/MVMCoreUI/OtherHandlers/MoleculeObjectMapping.swift @@ -121,8 +121,8 @@ import Foundation // Helper models try? ModelRegistry.register(RuleRequiredModel.self) - try? ModelRegistry.register(RuleAnyModel.self) - try? ModelRegistry.register(RuleValueChangeModel.self) + try? ModelRegistry.register(RuleAnyValueChangedModel.self) + try? ModelRegistry.register(RuleAllValueChangedModel.self) try? ModelRegistry.register(RuleEqualsModel.self) try? ModelRegistry.register(RuleRegexModel.self) }