From 63a23033cc37c901386d704e9e502d038443b0fa Mon Sep 17 00:00:00 2001 From: Matt Bruce Date: Tue, 11 Jan 2022 10:17:10 -0600 Subject: [PATCH] added ClearableModelProtocol Signed-off-by: Matt Bruce --- MVMCoreUI.xcodeproj/project.pbxproj | 4 ++ .../ClearFormFieldEffectModel.swift | 68 +++++++++++++++++++ .../OtherHandlers/CoreUIModelMapping.swift | 1 + 3 files changed, 73 insertions(+) create mode 100644 MVMCoreUI/FormUIHelpers/FormFieldEffect/ClearFormFieldEffectModel.swift diff --git a/MVMCoreUI.xcodeproj/project.pbxproj b/MVMCoreUI.xcodeproj/project.pbxproj index e2235ca3..fd0d814f 100644 --- a/MVMCoreUI.xcodeproj/project.pbxproj +++ b/MVMCoreUI.xcodeproj/project.pbxproj @@ -569,6 +569,7 @@ DBC4391922442197001AB423 /* DashLine.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBC4391722442197001AB423 /* DashLine.swift */; }; DBC4391B224421A0001AB423 /* CaretLink.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBC4391A224421A0001AB423 /* CaretLink.swift */; }; DBEFFA04225A829700230692 /* Label.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB891E822253FA8500022516 /* Label.swift */; }; + EA05EFA9278DDE2C00828819 /* ClearFormFieldEffectModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA05EFA8278DDE2C00828819 /* ClearFormFieldEffectModel.swift */; }; EA5124FD243601600051A3A4 /* BGImageHeadlineBodyButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA5124FC243601600051A3A4 /* BGImageHeadlineBodyButton.swift */; }; EA5124FF2436018E0051A3A4 /* BGImageHeadlineBodyButtonModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA5124FE2436018E0051A3A4 /* BGImageHeadlineBodyButtonModel.swift */; }; EA7E67742758310500ABF773 /* EnableFormFieldEffectModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA7E67732758310500ABF773 /* EnableFormFieldEffectModel.swift */; }; @@ -1146,6 +1147,7 @@ DBC4391622442196001AB423 /* CaretView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CaretView.swift; sourceTree = ""; }; DBC4391722442197001AB423 /* DashLine.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DashLine.swift; sourceTree = ""; }; DBC4391A224421A0001AB423 /* CaretLink.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CaretLink.swift; sourceTree = ""; }; + EA05EFA8278DDE2C00828819 /* ClearFormFieldEffectModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClearFormFieldEffectModel.swift; sourceTree = ""; }; EA5124FC243601600051A3A4 /* BGImageHeadlineBodyButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BGImageHeadlineBodyButton.swift; sourceTree = ""; }; EA5124FE2436018E0051A3A4 /* BGImageHeadlineBodyButtonModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BGImageHeadlineBodyButtonModel.swift; sourceTree = ""; }; EA7E67732758310500ABF773 /* EnableFormFieldEffectModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EnableFormFieldEffectModel.swift; sourceTree = ""; }; @@ -2425,6 +2427,7 @@ EA7E67732758310500ABF773 /* EnableFormFieldEffectModel.swift */, EAA0CFB2275E831E00D65EB0 /* DisableFormFieldEffectModel.swift */, EAA0CFB0275E823A00D65EB0 /* HideFormFieldEffectModel.swift */, + EA05EFA8278DDE2C00828819 /* ClearFormFieldEffectModel.swift */, ); path = FormFieldEffect; sourceTree = ""; @@ -3013,6 +3016,7 @@ 52267A0723FFE25000906CBA /* ListOneColumnFullWidthTextAllTextAndLinks.swift in Sources */, D2ED2812254B0EB800A1C293 /* MVMCoreTopAlertObject.m in Sources */, 0AA4D2E125CAEC72008DB32D /* AccessibilityModelProtocol.swift in Sources */, + EA05EFA9278DDE2C00828819 /* ClearFormFieldEffectModel.swift in Sources */, C003506123AA94CD00B6AC29 /* Button.swift in Sources */, DBC4391B224421A0001AB423 /* CaretLink.swift in Sources */, D29C559025C095210082E7D6 /* Video.swift in Sources */, diff --git a/MVMCoreUI/FormUIHelpers/FormFieldEffect/ClearFormFieldEffectModel.swift b/MVMCoreUI/FormUIHelpers/FormFieldEffect/ClearFormFieldEffectModel.swift new file mode 100644 index 00000000..07810fe6 --- /dev/null +++ b/MVMCoreUI/FormUIHelpers/FormFieldEffect/ClearFormFieldEffectModel.swift @@ -0,0 +1,68 @@ +// +// ClearFormFieldEffectModel.swift +// MVMCoreUI +// +// Created by Matt Bruce on 1/11/22. +// Copyright © 2022 Verizon Wireless. All rights reserved. +// + +import Foundation + +public protocol ClearableModelProtocol { + func clear() +} + +public class ClearFormFieldEffectModel: FormFieldEffectProtocol { + + + //-------------------------------------------------- + // MARK: - Properties + //-------------------------------------------------- + + public static var identifier: String = "clearFormFieldEffect" + public var fieldKey: String = "" + public var activatedRuleIds: [String]? + public var rules: [RulesProtocol] + + init(_ fieldKey: String, activatedRuleIds: [String], rules: [RulesProtocol]) { + self.fieldKey = fieldKey + self.activatedRuleIds = activatedRuleIds + self.rules = rules + } + + //-------------------------------------------------- + // MARK: - Keys + //-------------------------------------------------- + + private enum CodingKeys: String, CodingKey { + case fieldKey + case activatedRuleIds + case rules + } + + //-------------------------------------------------- + // MARK: - Codec + //-------------------------------------------------- + + required public init(from decoder: Decoder) throws { + let typeContainer = try decoder.container(keyedBy: CodingKeys.self) + self.fieldKey = try typeContainer.decode(String.self, forKey: .fieldKey) + self.activatedRuleIds = try typeContainer.decodeIfPresent([String].self, forKey: .activatedRuleIds) + self.rules = try typeContainer.decodeModels(codingKey: .rules) + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(fieldKey, forKey: .fieldKey) + try container.encode(activatedRuleIds, forKey: .activatedRuleIds) + try container.encodeModels(rules, forKey: .rules) + } + + public func setEffect(validity: Bool, field: FormFieldProtocol,form: FormValidator, group: FormGroupRule) { + guard let field = field as? ClearableModelProtocol, validity else { return } + field.clear() + if let updateField = field as? UIUpdatableModelProtocol { + updateField.updateUI?() + } + } +} diff --git a/MVMCoreUI/OtherHandlers/CoreUIModelMapping.swift b/MVMCoreUI/OtherHandlers/CoreUIModelMapping.swift index 11328440..45021394 100644 --- a/MVMCoreUI/OtherHandlers/CoreUIModelMapping.swift +++ b/MVMCoreUI/OtherHandlers/CoreUIModelMapping.swift @@ -246,5 +246,6 @@ open class CoreUIModelMapping: ModelMapping { ModelRegistry.register(EnableFormFieldEffectModel.self) ModelRegistry.register(DisableFormFieldEffectModel.self) ModelRegistry.register(HideFormFieldEffectModel.self) + ModelRegistry.register(ClearFormFieldEffectModel.self) } }