From 63201a8fa69c909c3fa4e6523577825388beea21 Mon Sep 17 00:00:00 2001 From: Lekshmi S Date: Wed, 12 Feb 2020 15:11:41 +0530 Subject: [PATCH 01/12] 19042 - List - Left Variable - Checkbox - With Right Caret - All Text & Links story commit. Added Molecule class, Model class --- MVMCoreUI.xcodeproj/project.pbxproj | 8 ++ ...heckboxWithRightCaretAllTextAndLinks.swift | 87 +++++++++++++++++++ ...oxWithRightCaretAllTextAndLinksModel.swift | 66 ++++++++++++++ .../OtherHandlers/MoleculeObjectMapping.swift | 1 + 4 files changed, 162 insertions(+) create mode 100644 MVMCoreUI/Molecules/LeftRightViews/ListLeftVariableCheckboxWithRightCaretAllTextAndLinks.swift create mode 100644 MVMCoreUI/Molecules/LeftRightViews/ListLeftVariableCheckboxWithRightCaretAllTextAndLinksModel.swift diff --git a/MVMCoreUI.xcodeproj/project.pbxproj b/MVMCoreUI.xcodeproj/project.pbxproj index f97e81aa..b9fad525 100644 --- a/MVMCoreUI.xcodeproj/project.pbxproj +++ b/MVMCoreUI.xcodeproj/project.pbxproj @@ -123,6 +123,8 @@ 94F217B723E0BF6100A47C06 /* PrimaryButtonView.m in Sources */ = {isa = PBXBuildFile; fileRef = 94F217B523E0BF6100A47C06 /* PrimaryButtonView.m */; }; 94FB966223D797DA003D482B /* MFTextButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 94FB966023D797DA003D482B /* MFTextButton.h */; settings = {ATTRIBUTES = (Public, ); }; }; 94FB966323D797DA003D482B /* MFTextButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 94FB966123D797DA003D482B /* MFTextButton.m */; }; + AA29DC9B23F2AA3800A52198 /* ListLeftVariableCheckboxWithRightCaretAllTextAndLinks.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA29DC9A23F2AA3800A52198 /* ListLeftVariableCheckboxWithRightCaretAllTextAndLinks.swift */; }; + AA29DC9D23F2ACAC00A52198 /* ListLeftVariableCheckboxWithRightCaretAllTextAndLinksModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA29DC9C23F2ACAC00A52198 /* ListLeftVariableCheckboxWithRightCaretAllTextAndLinksModel.swift */; }; C003506123AA94CD00B6AC29 /* Button.swift in Sources */ = {isa = PBXBuildFile; fileRef = C003506023AA94CD00B6AC29 /* Button.swift */; }; C07065C42395677300FBF997 /* Link.swift in Sources */ = {isa = PBXBuildFile; fileRef = C07065C32395677300FBF997 /* Link.swift */; }; C695A67F23C9830600BFB94E /* UnOrderedListModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = C695A67E23C9830600BFB94E /* UnOrderedListModel.swift */; }; @@ -439,6 +441,8 @@ 94F217B523E0BF6100A47C06 /* PrimaryButtonView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PrimaryButtonView.m; sourceTree = ""; }; 94FB966023D797DA003D482B /* MFTextButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MFTextButton.h; sourceTree = ""; }; 94FB966123D797DA003D482B /* MFTextButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MFTextButton.m; sourceTree = ""; }; + AA29DC9A23F2AA3800A52198 /* ListLeftVariableCheckboxWithRightCaretAllTextAndLinks.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ListLeftVariableCheckboxWithRightCaretAllTextAndLinks.swift; sourceTree = ""; }; + AA29DC9C23F2ACAC00A52198 /* ListLeftVariableCheckboxWithRightCaretAllTextAndLinksModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ListLeftVariableCheckboxWithRightCaretAllTextAndLinksModel.swift; sourceTree = ""; }; C003506023AA94CD00B6AC29 /* Button.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Button.swift; sourceTree = ""; }; C07065C32395677300FBF997 /* Link.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Link.swift; sourceTree = ""; }; C695A67E23C9830600BFB94E /* UnOrderedListModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UnOrderedListModel.swift; sourceTree = ""; }; @@ -897,6 +901,8 @@ D28A839023CD4FD400DFE4FC /* CornerLabelsModel.swift */, 01509D902327ECE600EF99AA /* CornerLabels.swift */, D224798823142BF2003FCCF9 /* ToggleMolecules */, + AA29DC9A23F2AA3800A52198 /* ListLeftVariableCheckboxWithRightCaretAllTextAndLinks.swift */, + AA29DC9C23F2ACAC00A52198 /* ListLeftVariableCheckboxWithRightCaretAllTextAndLinksModel.swift */, ); path = LeftRightViews; sourceTree = ""; @@ -1582,6 +1588,7 @@ 01C851D323CF9E740021F976 /* LabelToggleModel.swift in Sources */, D29DF2C521E7BF57003B2FB9 /* MFTabBarSwipeAnimator.m in Sources */, D2E2A98323D8B32D000B42E6 /* EyebrowHeadlineBodyLinkModel.swift in Sources */, + AA29DC9D23F2ACAC00A52198 /* ListLeftVariableCheckboxWithRightCaretAllTextAndLinksModel.swift in Sources */, 012A88AD238C418100FE3DA1 /* TemplateProtocol.swift in Sources */, D29DF2B421E7B76D003B2FB9 /* MFLoadingSpinner.m in Sources */, D260106323D0C05000764D80 /* StackItemModel.swift in Sources */, @@ -1724,6 +1731,7 @@ D28A839323CE828900DFE4FC /* HeadlineBodyCaretLinkImageModel.swift in Sources */, D29770C821F7C4AE00B2F0D0 /* TopLabelsView.m in Sources */, D260105F23D0BFFC00764D80 /* StackItem.swift in Sources */, + AA29DC9B23F2AA3800A52198 /* ListLeftVariableCheckboxWithRightCaretAllTextAndLinks.swift in Sources */, 9432A79F23DB47BA00719041 /* EntryFieldContainer.swift in Sources */, 01EB369323609801006832FA /* HeaderModel.swift in Sources */, D2E1FADF2268B8E700AEFD8C /* ThreeLayerTableViewController.swift in Sources */, diff --git a/MVMCoreUI/Molecules/LeftRightViews/ListLeftVariableCheckboxWithRightCaretAllTextAndLinks.swift b/MVMCoreUI/Molecules/LeftRightViews/ListLeftVariableCheckboxWithRightCaretAllTextAndLinks.swift new file mode 100644 index 00000000..2b47e704 --- /dev/null +++ b/MVMCoreUI/Molecules/LeftRightViews/ListLeftVariableCheckboxWithRightCaretAllTextAndLinks.swift @@ -0,0 +1,87 @@ +// +// ListLeftVariableCheckboxWithRightCaretAllTextAndLinks.swift +// MVMCoreUI +// +// Created by Lekshmi S on 11/02/20. +// Copyright © 2020 Verizon Wireless. All rights reserved. +// + +import Foundation + +@objcMembers public class ListLeftVariableCheckboxWithRightCaretAllTextAndLinks: TableViewCell { + + //----------------------------------------------------- + // MARK: - Outlets + //------------------------------------------------------- + + let checkbox = Checkbox(frame: .zero) + let eyebrowHeadlineBodyLink = EyebrowHeadlineBodyLink(frame: .zero) + let containerView = Container() + + //------------------------------------------------------ + // MARK: - Properties + //------------------------------------------------------ + + let cellHeight: CGFloat = 125.0 + let leftPadding: CGFloat = 35.0 + let rightPadding: CGFloat = 35.0 + let spaceBetweenCheckBoxAndEyebrowHedline: CGFloat = 16.0 + let checkBoxSize: CGFloat = 18.0 + + //----------------------------------------------------- + // MARK: - View Lifecycle + //------------------------------------------------------- + + open override func updateView(_ size: CGFloat) { + super.updateView(size) + containerView.updateView(size) + checkbox.updateView(size) + eyebrowHeadlineBodyLink.updateView(size) + } + + override open func setupView() { + super.setupView() + guard checkbox.superview == nil else { + return + } + containerView.translatesAutoresizingMaskIntoConstraints = false + contentView.heightAnchor.constraint(equalToConstant: cellHeight).isActive = true + contentView.addSubview(containerView) + + //containerView constraints + containerView.leadingAnchor.constraint(equalTo: leadingAnchor).isActive = true + containerView.trailingAnchor.constraint(equalTo: trailingAnchor).isActive = true + containerView.topAnchor.constraint(equalTo: topAnchor).isActive = true + containerView.bottomAnchor.constraint(equalTo: bottomAnchor).isActive = true + + containerView.addSubview(checkbox) + containerView.addSubview(eyebrowHeadlineBodyLink) + + //checkBox constraints + checkbox.centerYAnchor.constraint(equalTo: eyebrowHeadlineBodyLink.centerYAnchor).isActive = true + checkbox.leadingAnchor.constraint(equalTo: containerView.leadingAnchor, constant: leftPadding).isActive = true + + //eyebrowHeadlineBodyLink constraints + eyebrowHeadlineBodyLink.topAnchor.constraint(equalTo: containerView.topAnchor).isActive = true + eyebrowHeadlineBodyLink.bottomAnchor.constraint(equalTo: containerView.bottomAnchor).isActive = true + eyebrowHeadlineBodyLink.leadingAnchor.constraint(equalTo: checkbox.trailingAnchor, constant: spaceBetweenCheckBoxAndEyebrowHedline).isActive = true + eyebrowHeadlineBodyLink.trailingAnchor.constraint(equalTo: containerView.trailingAnchor).isActive = true + } + + //---------------------------------------------------- + // MARK: - Molecule + //------------------------------------------------------ + + override open func reset() { + super.reset() + checkbox.reset() + eyebrowHeadlineBodyLink.reset() + } + + public override func setWithModel(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable : Any]?) { + super.setWithModel(model, delegateObject, additionalData) + guard let model = model as? ListLeftVariableCheckboxWithRightCaretAllTextAndLinksModel else { return} + checkbox.setWithModel(model.checkbox, delegateObject, additionalData) + eyebrowHeadlineBodyLink.setWithModel(model.eyebrowHeadlineBodyLink, delegateObject, additionalData) + } +} diff --git a/MVMCoreUI/Molecules/LeftRightViews/ListLeftVariableCheckboxWithRightCaretAllTextAndLinksModel.swift b/MVMCoreUI/Molecules/LeftRightViews/ListLeftVariableCheckboxWithRightCaretAllTextAndLinksModel.swift new file mode 100644 index 00000000..86925752 --- /dev/null +++ b/MVMCoreUI/Molecules/LeftRightViews/ListLeftVariableCheckboxWithRightCaretAllTextAndLinksModel.swift @@ -0,0 +1,66 @@ +// +// ListLeftVariableCheckboxWithRightCaretAllTextAndLinksModel.swift +// MVMCoreUI +// +// Created by Lekshmi S on 11/02/20. +// Copyright © 2020 Verizon Wireless. All rights reserved. +// + +import Foundation + +public class ListLeftVariableCheckboxWithRightCaretAllTextAndLinksModel: ContainerModel, ListItemModelProtocol { + + public var line: LineModel? + public var hideArrow: Bool? + public var backgroundColor: Color? + public static var identifier: String = "listLVCB" + public var checkbox: CheckboxModel + var eyebrowHeadlineBodyLink: EyebrowHeadlineBodyLinkModel + + func setDefaults() { + if useHorizontalMargins == nil { + useHorizontalMargins = true + } + if useVerticalMargins == nil { + useVerticalMargins = true + } + if topMarginPadding == nil { + topMarginPadding = 24 + } + if bottomMarginPadding == nil { + bottomMarginPadding = 0 + } + } + + init(checkbox: CheckboxModel, eyebrowHeadlineBodyLink: EyebrowHeadlineBodyLinkModel) { + self.checkbox = checkbox + self.eyebrowHeadlineBodyLink = eyebrowHeadlineBodyLink + super.init() + } + + private enum CodingKeys: String, CodingKey { + case moleculeName + case backgroundColor + case eyebrowHeadlineBodyLink + case checkbox + } + + required public init(from decoder: Decoder) throws { + let typeContainer = try decoder.container(keyedBy: CodingKeys.self) + backgroundColor = try typeContainer.decodeIfPresent(Color.self, forKey: .backgroundColor) + eyebrowHeadlineBodyLink = try typeContainer.decode(EyebrowHeadlineBodyLinkModel.self, forKey: .eyebrowHeadlineBodyLink) + checkbox = try typeContainer.decode(CheckboxModel.self, forKey: .checkbox) + try super.init(from: decoder) + setDefaults() + } + + public override func encode(to encoder: Encoder) throws { + try super.encode(to: encoder) + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(EyebrowHeadlineBodyLinkModel.identifier, forKey: .moleculeName) + try container.encodeIfPresent(backgroundColor, forKey: .backgroundColor) + try container.encode(eyebrowHeadlineBodyLink, forKey: .eyebrowHeadlineBodyLink) + try container.encode(checkbox, forKey: .checkbox) + } + +} diff --git a/MVMCoreUI/OtherHandlers/MoleculeObjectMapping.swift b/MVMCoreUI/OtherHandlers/MoleculeObjectMapping.swift index 8c1a36e3..caffd59f 100644 --- a/MVMCoreUI/OtherHandlers/MoleculeObjectMapping.swift +++ b/MVMCoreUI/OtherHandlers/MoleculeObjectMapping.swift @@ -70,6 +70,7 @@ import Foundation MVMCoreUIMoleculeMappingObject.shared()?.register(viewClass: HeadlineBodyToggle.self, viewModelClass: HeadlineBodyToggleModel.self) MVMCoreUIMoleculeMappingObject.shared()?.register(viewClass: HeadlineBodyLinkToggle.self, viewModelClass: HeadlineBodyLinkToggleModel.self) MVMCoreUIMoleculeMappingObject.shared()?.register(viewClass: ActionDetailWithImage.self, viewModelClass: ActionDetailWithImageModel.self) + MVMCoreUIMoleculeMappingObject.shared()?.register(viewClass: ListLeftVariableCheckboxWithRightCaretAllTextAndLinks.self, viewModelClass: ListLeftVariableCheckboxWithRightCaretAllTextAndLinksModel.self) // List items MVMCoreUIMoleculeMappingObject.shared()?.register(viewClass: MoleculeTableViewCell.self, viewModelClass: ListItemModel.self) From 3dbbc1a876d4f604e9bab61b64e18867069fe0f2 Mon Sep 17 00:00:00 2001 From: Lekshmi S Date: Wed, 12 Feb 2020 16:50:46 +0530 Subject: [PATCH 02/12] Code fix --- ...LeftVariableCheckboxWithRightCaretAllTextAndLinksModel.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MVMCoreUI/Molecules/LeftRightViews/ListLeftVariableCheckboxWithRightCaretAllTextAndLinksModel.swift b/MVMCoreUI/Molecules/LeftRightViews/ListLeftVariableCheckboxWithRightCaretAllTextAndLinksModel.swift index 86925752..07efdf1e 100644 --- a/MVMCoreUI/Molecules/LeftRightViews/ListLeftVariableCheckboxWithRightCaretAllTextAndLinksModel.swift +++ b/MVMCoreUI/Molecules/LeftRightViews/ListLeftVariableCheckboxWithRightCaretAllTextAndLinksModel.swift @@ -57,7 +57,7 @@ public class ListLeftVariableCheckboxWithRightCaretAllTextAndLinksModel: Contain public override func encode(to encoder: Encoder) throws { try super.encode(to: encoder) var container = encoder.container(keyedBy: CodingKeys.self) - try container.encode(EyebrowHeadlineBodyLinkModel.identifier, forKey: .moleculeName) + try container.encode(ListLeftVariableCheckboxWithRightCaretAllTextAndLinksModel.identifier, forKey: .moleculeName) try container.encodeIfPresent(backgroundColor, forKey: .backgroundColor) try container.encode(eyebrowHeadlineBodyLink, forKey: .eyebrowHeadlineBodyLink) try container.encode(checkbox, forKey: .checkbox) From 5b1b29c10d723d55b56602474828715fc31de44c Mon Sep 17 00:00:00 2001 From: Lekshmi S Date: Fri, 14 Feb 2020 10:17:54 +0530 Subject: [PATCH 03/12] Removed container and added stackmodel code changes. --- ...heckboxWithRightCaretAllTextAndLinks.swift | 56 ++++++------------- ...oxWithRightCaretAllTextAndLinksModel.swift | 15 ++++- 2 files changed, 31 insertions(+), 40 deletions(-) diff --git a/MVMCoreUI/Molecules/LeftRightViews/ListLeftVariableCheckboxWithRightCaretAllTextAndLinks.swift b/MVMCoreUI/Molecules/LeftRightViews/ListLeftVariableCheckboxWithRightCaretAllTextAndLinks.swift index 2b47e704..c1f68e94 100644 --- a/MVMCoreUI/Molecules/LeftRightViews/ListLeftVariableCheckboxWithRightCaretAllTextAndLinks.swift +++ b/MVMCoreUI/Molecules/LeftRightViews/ListLeftVariableCheckboxWithRightCaretAllTextAndLinks.swift @@ -16,17 +16,7 @@ import Foundation let checkbox = Checkbox(frame: .zero) let eyebrowHeadlineBodyLink = EyebrowHeadlineBodyLink(frame: .zero) - let containerView = Container() - - //------------------------------------------------------ - // MARK: - Properties - //------------------------------------------------------ - - let cellHeight: CGFloat = 125.0 - let leftPadding: CGFloat = 35.0 - let rightPadding: CGFloat = 35.0 - let spaceBetweenCheckBoxAndEyebrowHedline: CGFloat = 16.0 - let checkBoxSize: CGFloat = 18.0 + let stack = Stack(frame: .zero) //----------------------------------------------------- // MARK: - View Lifecycle @@ -34,9 +24,7 @@ import Foundation open override func updateView(_ size: CGFloat) { super.updateView(size) - containerView.updateView(size) - checkbox.updateView(size) - eyebrowHeadlineBodyLink.updateView(size) + stack.updateView(size) } override open func setupView() { @@ -44,28 +32,10 @@ import Foundation guard checkbox.superview == nil else { return } - containerView.translatesAutoresizingMaskIntoConstraints = false - contentView.heightAnchor.constraint(equalToConstant: cellHeight).isActive = true - contentView.addSubview(containerView) - - //containerView constraints - containerView.leadingAnchor.constraint(equalTo: leadingAnchor).isActive = true - containerView.trailingAnchor.constraint(equalTo: trailingAnchor).isActive = true - containerView.topAnchor.constraint(equalTo: topAnchor).isActive = true - containerView.bottomAnchor.constraint(equalTo: bottomAnchor).isActive = true - - containerView.addSubview(checkbox) - containerView.addSubview(eyebrowHeadlineBodyLink) - - //checkBox constraints - checkbox.centerYAnchor.constraint(equalTo: eyebrowHeadlineBodyLink.centerYAnchor).isActive = true - checkbox.leadingAnchor.constraint(equalTo: containerView.leadingAnchor, constant: leftPadding).isActive = true - - //eyebrowHeadlineBodyLink constraints - eyebrowHeadlineBodyLink.topAnchor.constraint(equalTo: containerView.topAnchor).isActive = true - eyebrowHeadlineBodyLink.bottomAnchor.constraint(equalTo: containerView.bottomAnchor).isActive = true - eyebrowHeadlineBodyLink.leadingAnchor.constraint(equalTo: checkbox.trailingAnchor, constant: spaceBetweenCheckBoxAndEyebrowHedline).isActive = true - eyebrowHeadlineBodyLink.trailingAnchor.constraint(equalTo: containerView.trailingAnchor).isActive = true + stack.translatesAutoresizingMaskIntoConstraints = false + stack.stackItems = [StackItem(andContain: checkbox),StackItem(andContain: eyebrowHeadlineBodyLink)] + contentView.addSubview(stack) + containerHelper.constrainView(stack) } //---------------------------------------------------- @@ -74,8 +44,7 @@ import Foundation override open func reset() { super.reset() - checkbox.reset() - eyebrowHeadlineBodyLink.reset() + stack.reset() } public override func setWithModel(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable : Any]?) { @@ -83,5 +52,16 @@ import Foundation guard let model = model as? ListLeftVariableCheckboxWithRightCaretAllTextAndLinksModel else { return} checkbox.setWithModel(model.checkbox, delegateObject, additionalData) eyebrowHeadlineBodyLink.setWithModel(model.eyebrowHeadlineBodyLink, delegateObject, additionalData) + + // Create a stack model to use for the internal stack and set the alignment of labels + let checkbox = StackItemModel() + checkbox.horizontalAlignment = .leading + let eyebrowHeadlineBodyLink = StackItemModel() + eyebrowHeadlineBodyLink.horizontalAlignment = .leading + eyebrowHeadlineBodyLink.spacing = 20 + let stackModel = StackModel(molecules: [checkbox,eyebrowHeadlineBodyLink]) + stackModel.axis = .horizontal + stack.model = stackModel + stack.restack() } } diff --git a/MVMCoreUI/Molecules/LeftRightViews/ListLeftVariableCheckboxWithRightCaretAllTextAndLinksModel.swift b/MVMCoreUI/Molecules/LeftRightViews/ListLeftVariableCheckboxWithRightCaretAllTextAndLinksModel.swift index 07efdf1e..24979f78 100644 --- a/MVMCoreUI/Molecules/LeftRightViews/ListLeftVariableCheckboxWithRightCaretAllTextAndLinksModel.swift +++ b/MVMCoreUI/Molecules/LeftRightViews/ListLeftVariableCheckboxWithRightCaretAllTextAndLinksModel.swift @@ -11,10 +11,13 @@ import Foundation public class ListLeftVariableCheckboxWithRightCaretAllTextAndLinksModel: ContainerModel, ListItemModelProtocol { public var line: LineModel? - public var hideArrow: Bool? + public var style: String? = "standard" + public var hideArrow: Bool? = false public var backgroundColor: Color? + public var action: ActionModelProtocol? public static var identifier: String = "listLVCB" public var checkbox: CheckboxModel + public var spacing: CGFloat = 16.0 var eyebrowHeadlineBodyLink: EyebrowHeadlineBodyLinkModel func setDefaults() { @@ -43,6 +46,8 @@ public class ListLeftVariableCheckboxWithRightCaretAllTextAndLinksModel: Contain case backgroundColor case eyebrowHeadlineBodyLink case checkbox + case action + case spacing } required public init(from decoder: Decoder) throws { @@ -50,6 +55,10 @@ public class ListLeftVariableCheckboxWithRightCaretAllTextAndLinksModel: Contain backgroundColor = try typeContainer.decodeIfPresent(Color.self, forKey: .backgroundColor) eyebrowHeadlineBodyLink = try typeContainer.decode(EyebrowHeadlineBodyLinkModel.self, forKey: .eyebrowHeadlineBodyLink) checkbox = try typeContainer.decode(CheckboxModel.self, forKey: .checkbox) + action = try typeContainer.decodeModelIfPresent(codingKey: .action, typeCodingKey: ActionCodingKey.actionType) + if let spacing = try typeContainer.decodeIfPresent(CGFloat.self, forKey: .spacing) { + self.spacing = spacing + } try super.init(from: decoder) setDefaults() } @@ -57,10 +66,12 @@ public class ListLeftVariableCheckboxWithRightCaretAllTextAndLinksModel: Contain public override func encode(to encoder: Encoder) throws { try super.encode(to: encoder) var container = encoder.container(keyedBy: CodingKeys.self) - try container.encode(ListLeftVariableCheckboxWithRightCaretAllTextAndLinksModel.identifier, forKey: .moleculeName) + try container.encode(moleculeName, forKey: .moleculeName) try container.encodeIfPresent(backgroundColor, forKey: .backgroundColor) try container.encode(eyebrowHeadlineBodyLink, forKey: .eyebrowHeadlineBodyLink) try container.encode(checkbox, forKey: .checkbox) + try container.encodeModelIfPresent(action, forKey: .action) + try container.encodeIfPresent(spacing, forKey: .spacing) } } From 69919f5beb90ecb056a0414713512c1914c63392 Mon Sep 17 00:00:00 2001 From: Lekshmi S Date: Fri, 14 Feb 2020 14:05:54 +0530 Subject: [PATCH 04/12] Added percent for stack items. Removed conformance to ContainerModel and ListItemModelProtocol. --- ...heckboxWithRightCaretAllTextAndLinks.swift | 7 ++-- ...oxWithRightCaretAllTextAndLinksModel.swift | 35 +------------------ 2 files changed, 4 insertions(+), 38 deletions(-) diff --git a/MVMCoreUI/Molecules/LeftRightViews/ListLeftVariableCheckboxWithRightCaretAllTextAndLinks.swift b/MVMCoreUI/Molecules/LeftRightViews/ListLeftVariableCheckboxWithRightCaretAllTextAndLinks.swift index c1f68e94..c194cc50 100644 --- a/MVMCoreUI/Molecules/LeftRightViews/ListLeftVariableCheckboxWithRightCaretAllTextAndLinks.swift +++ b/MVMCoreUI/Molecules/LeftRightViews/ListLeftVariableCheckboxWithRightCaretAllTextAndLinks.swift @@ -54,11 +54,10 @@ import Foundation eyebrowHeadlineBodyLink.setWithModel(model.eyebrowHeadlineBodyLink, delegateObject, additionalData) // Create a stack model to use for the internal stack and set the alignment of labels - let checkbox = StackItemModel() + let checkbox = StackItemModel(percent: 10) checkbox.horizontalAlignment = .leading - let eyebrowHeadlineBodyLink = StackItemModel() - eyebrowHeadlineBodyLink.horizontalAlignment = .leading - eyebrowHeadlineBodyLink.spacing = 20 + let eyebrowHeadlineBodyLink = StackItemModel(percent: 90) + eyebrowHeadlineBodyLink.horizontalAlignment = .fill let stackModel = StackModel(molecules: [checkbox,eyebrowHeadlineBodyLink]) stackModel.axis = .horizontal stack.model = stackModel diff --git a/MVMCoreUI/Molecules/LeftRightViews/ListLeftVariableCheckboxWithRightCaretAllTextAndLinksModel.swift b/MVMCoreUI/Molecules/LeftRightViews/ListLeftVariableCheckboxWithRightCaretAllTextAndLinksModel.swift index 24979f78..790e8598 100644 --- a/MVMCoreUI/Molecules/LeftRightViews/ListLeftVariableCheckboxWithRightCaretAllTextAndLinksModel.swift +++ b/MVMCoreUI/Molecules/LeftRightViews/ListLeftVariableCheckboxWithRightCaretAllTextAndLinksModel.swift @@ -8,33 +8,12 @@ import Foundation -public class ListLeftVariableCheckboxWithRightCaretAllTextAndLinksModel: ContainerModel, ListItemModelProtocol { +public class ListLeftVariableCheckboxWithRightCaretAllTextAndLinksModel: ListItemModel, MoleculeModelProtocol { - public var line: LineModel? - public var style: String? = "standard" - public var hideArrow: Bool? = false - public var backgroundColor: Color? - public var action: ActionModelProtocol? public static var identifier: String = "listLVCB" public var checkbox: CheckboxModel - public var spacing: CGFloat = 16.0 var eyebrowHeadlineBodyLink: EyebrowHeadlineBodyLinkModel - func setDefaults() { - if useHorizontalMargins == nil { - useHorizontalMargins = true - } - if useVerticalMargins == nil { - useVerticalMargins = true - } - if topMarginPadding == nil { - topMarginPadding = 24 - } - if bottomMarginPadding == nil { - bottomMarginPadding = 0 - } - } - init(checkbox: CheckboxModel, eyebrowHeadlineBodyLink: EyebrowHeadlineBodyLinkModel) { self.checkbox = checkbox self.eyebrowHeadlineBodyLink = eyebrowHeadlineBodyLink @@ -43,35 +22,23 @@ public class ListLeftVariableCheckboxWithRightCaretAllTextAndLinksModel: Contain private enum CodingKeys: String, CodingKey { case moleculeName - case backgroundColor case eyebrowHeadlineBodyLink case checkbox - case action - case spacing } required public init(from decoder: Decoder) throws { let typeContainer = try decoder.container(keyedBy: CodingKeys.self) - backgroundColor = try typeContainer.decodeIfPresent(Color.self, forKey: .backgroundColor) eyebrowHeadlineBodyLink = try typeContainer.decode(EyebrowHeadlineBodyLinkModel.self, forKey: .eyebrowHeadlineBodyLink) checkbox = try typeContainer.decode(CheckboxModel.self, forKey: .checkbox) - action = try typeContainer.decodeModelIfPresent(codingKey: .action, typeCodingKey: ActionCodingKey.actionType) - if let spacing = try typeContainer.decodeIfPresent(CGFloat.self, forKey: .spacing) { - self.spacing = spacing - } try super.init(from: decoder) - setDefaults() } public override func encode(to encoder: Encoder) throws { try super.encode(to: encoder) var container = encoder.container(keyedBy: CodingKeys.self) try container.encode(moleculeName, forKey: .moleculeName) - try container.encodeIfPresent(backgroundColor, forKey: .backgroundColor) try container.encode(eyebrowHeadlineBodyLink, forKey: .eyebrowHeadlineBodyLink) try container.encode(checkbox, forKey: .checkbox) - try container.encodeModelIfPresent(action, forKey: .action) - try container.encodeIfPresent(spacing, forKey: .spacing) } } From 6cbf4a53bc42073a56f141c94b42dde190963bc8 Mon Sep 17 00:00:00 2001 From: Lekshmi S Date: Fri, 14 Feb 2020 14:09:03 +0530 Subject: [PATCH 05/12] Restructured file group. --- MVMCoreUI.xcodeproj/project.pbxproj | 4 ++-- ...istLeftVariableCheckboxWithRightCaretAllTextAndLinks.swift | 0 ...ftVariableCheckboxWithRightCaretAllTextAndLinksModel.swift | 0 3 files changed, 2 insertions(+), 2 deletions(-) rename MVMCoreUI/Molecules/{LeftRightViews => DesignedComponents/List/LeftVariable}/ListLeftVariableCheckboxWithRightCaretAllTextAndLinks.swift (100%) rename MVMCoreUI/Molecules/{LeftRightViews => DesignedComponents/List/LeftVariable}/ListLeftVariableCheckboxWithRightCaretAllTextAndLinksModel.swift (100%) diff --git a/MVMCoreUI.xcodeproj/project.pbxproj b/MVMCoreUI.xcodeproj/project.pbxproj index 455cb573..f31234f2 100644 --- a/MVMCoreUI.xcodeproj/project.pbxproj +++ b/MVMCoreUI.xcodeproj/project.pbxproj @@ -912,8 +912,6 @@ D28A839023CD4FD400DFE4FC /* CornerLabelsModel.swift */, 01509D902327ECE600EF99AA /* CornerLabels.swift */, D224798823142BF2003FCCF9 /* ToggleMolecules */, - AA29DC9A23F2AA3800A52198 /* ListLeftVariableCheckboxWithRightCaretAllTextAndLinks.swift */, - AA29DC9C23F2ACAC00A52198 /* ListLeftVariableCheckboxWithRightCaretAllTextAndLinksModel.swift */, ); path = LeftRightViews; sourceTree = ""; @@ -977,6 +975,8 @@ children = ( 8D24041423E7FC0B009E23BE /* ListLeftVariableIconWithRightCaretModel.swift */, 8D24041023E7FB9E009E23BE /* ListLeftVariableIconWithRightCaret.swift */, + AA29DC9A23F2AA3800A52198 /* ListLeftVariableCheckboxWithRightCaretAllTextAndLinks.swift */, + AA29DC9C23F2ACAC00A52198 /* ListLeftVariableCheckboxWithRightCaretAllTextAndLinksModel.swift */, ); path = LeftVariable; sourceTree = ""; diff --git a/MVMCoreUI/Molecules/LeftRightViews/ListLeftVariableCheckboxWithRightCaretAllTextAndLinks.swift b/MVMCoreUI/Molecules/DesignedComponents/List/LeftVariable/ListLeftVariableCheckboxWithRightCaretAllTextAndLinks.swift similarity index 100% rename from MVMCoreUI/Molecules/LeftRightViews/ListLeftVariableCheckboxWithRightCaretAllTextAndLinks.swift rename to MVMCoreUI/Molecules/DesignedComponents/List/LeftVariable/ListLeftVariableCheckboxWithRightCaretAllTextAndLinks.swift diff --git a/MVMCoreUI/Molecules/LeftRightViews/ListLeftVariableCheckboxWithRightCaretAllTextAndLinksModel.swift b/MVMCoreUI/Molecules/DesignedComponents/List/LeftVariable/ListLeftVariableCheckboxWithRightCaretAllTextAndLinksModel.swift similarity index 100% rename from MVMCoreUI/Molecules/LeftRightViews/ListLeftVariableCheckboxWithRightCaretAllTextAndLinksModel.swift rename to MVMCoreUI/Molecules/DesignedComponents/List/LeftVariable/ListLeftVariableCheckboxWithRightCaretAllTextAndLinksModel.swift From 5da415d0fc21accdc4c40738ed98dca4639029cb Mon Sep 17 00:00:00 2001 From: Subhankar Acharya Date: Fri, 14 Feb 2020 18:17:10 +0530 Subject: [PATCH 06/12] removed line break. --- ...tLeftVariableCheckboxWithRightCaretAllTextAndLinksModel.swift | 1 - 1 file changed, 1 deletion(-) diff --git a/MVMCoreUI/Molecules/DesignedComponents/List/LeftVariable/ListLeftVariableCheckboxWithRightCaretAllTextAndLinksModel.swift b/MVMCoreUI/Molecules/DesignedComponents/List/LeftVariable/ListLeftVariableCheckboxWithRightCaretAllTextAndLinksModel.swift index 790e8598..330901a6 100644 --- a/MVMCoreUI/Molecules/DesignedComponents/List/LeftVariable/ListLeftVariableCheckboxWithRightCaretAllTextAndLinksModel.swift +++ b/MVMCoreUI/Molecules/DesignedComponents/List/LeftVariable/ListLeftVariableCheckboxWithRightCaretAllTextAndLinksModel.swift @@ -40,5 +40,4 @@ public class ListLeftVariableCheckboxWithRightCaretAllTextAndLinksModel: ListIte try container.encode(eyebrowHeadlineBodyLink, forKey: .eyebrowHeadlineBodyLink) try container.encode(checkbox, forKey: .checkbox) } - } From dc3178815c1cb7886fdc07281275f301e0338750 Mon Sep 17 00:00:00 2001 From: Subhankar Acharya Date: Thu, 20 Feb 2020 14:08:47 +0530 Subject: [PATCH 07/12] Renaming of molecule file, class and model --- MVMCoreUI.xcodeproj/project.pbxproj | 16 ++++++++-------- ...istLeftVariableCheckboxAllTextAndLinks.swift} | 4 ++-- ...ftVariableCheckboxAllTextAndLinksModel.swift} | 4 ++-- .../OtherHandlers/MoleculeObjectMapping.swift | 2 +- 4 files changed, 13 insertions(+), 13 deletions(-) rename MVMCoreUI/Molecules/DesignedComponents/List/LeftVariable/{ListLeftVariableCheckboxWithRightCaretAllTextAndLinks.swift => ListLeftVariableCheckboxAllTextAndLinks.swift} (93%) rename MVMCoreUI/Molecules/DesignedComponents/List/LeftVariable/{ListLeftVariableCheckboxWithRightCaretAllTextAndLinksModel.swift => ListLeftVariableCheckboxAllTextAndLinksModel.swift} (89%) diff --git a/MVMCoreUI.xcodeproj/project.pbxproj b/MVMCoreUI.xcodeproj/project.pbxproj index f31234f2..47d783ce 100644 --- a/MVMCoreUI.xcodeproj/project.pbxproj +++ b/MVMCoreUI.xcodeproj/project.pbxproj @@ -127,8 +127,8 @@ 94F217B723E0BF6100A47C06 /* PrimaryButtonView.m in Sources */ = {isa = PBXBuildFile; fileRef = 94F217B523E0BF6100A47C06 /* PrimaryButtonView.m */; }; 94FB966223D797DA003D482B /* MFTextButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 94FB966023D797DA003D482B /* MFTextButton.h */; settings = {ATTRIBUTES = (Public, ); }; }; 94FB966323D797DA003D482B /* MFTextButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 94FB966123D797DA003D482B /* MFTextButton.m */; }; - AA29DC9B23F2AA3800A52198 /* ListLeftVariableCheckboxWithRightCaretAllTextAndLinks.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA29DC9A23F2AA3800A52198 /* ListLeftVariableCheckboxWithRightCaretAllTextAndLinks.swift */; }; - AA29DC9D23F2ACAC00A52198 /* ListLeftVariableCheckboxWithRightCaretAllTextAndLinksModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA29DC9C23F2ACAC00A52198 /* ListLeftVariableCheckboxWithRightCaretAllTextAndLinksModel.swift */; }; + AA29DC9B23F2AA3800A52198 /* ListLeftVariableCheckboxAllTextAndLinks.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA29DC9A23F2AA3800A52198 /* ListLeftVariableCheckboxAllTextAndLinks.swift */; }; + AA29DC9D23F2ACAC00A52198 /* ListLeftVariableCheckboxAllTextAndLinksModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA29DC9C23F2ACAC00A52198 /* ListLeftVariableCheckboxAllTextAndLinksModel.swift */; }; C003506123AA94CD00B6AC29 /* Button.swift in Sources */ = {isa = PBXBuildFile; fileRef = C003506023AA94CD00B6AC29 /* Button.swift */; }; C07065C42395677300FBF997 /* Link.swift in Sources */ = {isa = PBXBuildFile; fileRef = C07065C32395677300FBF997 /* Link.swift */; }; C695A67F23C9830600BFB94E /* UnOrderedListModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = C695A67E23C9830600BFB94E /* UnOrderedListModel.swift */; }; @@ -451,8 +451,8 @@ 94F217B523E0BF6100A47C06 /* PrimaryButtonView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PrimaryButtonView.m; sourceTree = ""; }; 94FB966023D797DA003D482B /* MFTextButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MFTextButton.h; sourceTree = ""; }; 94FB966123D797DA003D482B /* MFTextButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MFTextButton.m; sourceTree = ""; }; - AA29DC9A23F2AA3800A52198 /* ListLeftVariableCheckboxWithRightCaretAllTextAndLinks.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ListLeftVariableCheckboxWithRightCaretAllTextAndLinks.swift; sourceTree = ""; }; - AA29DC9C23F2ACAC00A52198 /* ListLeftVariableCheckboxWithRightCaretAllTextAndLinksModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ListLeftVariableCheckboxWithRightCaretAllTextAndLinksModel.swift; sourceTree = ""; }; + AA29DC9A23F2AA3800A52198 /* ListLeftVariableCheckboxAllTextAndLinks.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ListLeftVariableCheckboxAllTextAndLinks.swift; sourceTree = ""; }; + AA29DC9C23F2ACAC00A52198 /* ListLeftVariableCheckboxAllTextAndLinksModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ListLeftVariableCheckboxAllTextAndLinksModel.swift; sourceTree = ""; }; C003506023AA94CD00B6AC29 /* Button.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Button.swift; sourceTree = ""; }; C07065C32395677300FBF997 /* Link.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Link.swift; sourceTree = ""; }; C695A67E23C9830600BFB94E /* UnOrderedListModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UnOrderedListModel.swift; sourceTree = ""; }; @@ -975,8 +975,8 @@ children = ( 8D24041423E7FC0B009E23BE /* ListLeftVariableIconWithRightCaretModel.swift */, 8D24041023E7FB9E009E23BE /* ListLeftVariableIconWithRightCaret.swift */, - AA29DC9A23F2AA3800A52198 /* ListLeftVariableCheckboxWithRightCaretAllTextAndLinks.swift */, - AA29DC9C23F2ACAC00A52198 /* ListLeftVariableCheckboxWithRightCaretAllTextAndLinksModel.swift */, + AA29DC9A23F2AA3800A52198 /* ListLeftVariableCheckboxAllTextAndLinks.swift */, + AA29DC9C23F2ACAC00A52198 /* ListLeftVariableCheckboxAllTextAndLinksModel.swift */, ); path = LeftVariable; sourceTree = ""; @@ -1645,7 +1645,7 @@ 01C851D323CF9E740021F976 /* LabelToggleModel.swift in Sources */, D29DF2C521E7BF57003B2FB9 /* MFTabBarSwipeAnimator.m in Sources */, D2E2A98323D8B32D000B42E6 /* EyebrowHeadlineBodyLinkModel.swift in Sources */, - AA29DC9D23F2ACAC00A52198 /* ListLeftVariableCheckboxWithRightCaretAllTextAndLinksModel.swift in Sources */, + AA29DC9D23F2ACAC00A52198 /* ListLeftVariableCheckboxAllTextAndLinksModel.swift in Sources */, 012A88AD238C418100FE3DA1 /* TemplateProtocol.swift in Sources */, D29DF2B421E7B76D003B2FB9 /* MFLoadingSpinner.m in Sources */, D260106323D0C05000764D80 /* StackItemModel.swift in Sources */, @@ -1792,7 +1792,7 @@ D28A839323CE828900DFE4FC /* HeadlineBodyCaretLinkImageModel.swift in Sources */, D29770C821F7C4AE00B2F0D0 /* TopLabelsView.m in Sources */, D260105F23D0BFFC00764D80 /* StackItem.swift in Sources */, - AA29DC9B23F2AA3800A52198 /* ListLeftVariableCheckboxWithRightCaretAllTextAndLinks.swift in Sources */, + AA29DC9B23F2AA3800A52198 /* ListLeftVariableCheckboxAllTextAndLinks.swift in Sources */, 9432A79F23DB47BA00719041 /* EntryFieldContainer.swift in Sources */, 01EB369323609801006832FA /* HeaderModel.swift in Sources */, D2E1FADF2268B8E700AEFD8C /* ThreeLayerTableViewController.swift in Sources */, diff --git a/MVMCoreUI/Molecules/DesignedComponents/List/LeftVariable/ListLeftVariableCheckboxWithRightCaretAllTextAndLinks.swift b/MVMCoreUI/Molecules/DesignedComponents/List/LeftVariable/ListLeftVariableCheckboxAllTextAndLinks.swift similarity index 93% rename from MVMCoreUI/Molecules/DesignedComponents/List/LeftVariable/ListLeftVariableCheckboxWithRightCaretAllTextAndLinks.swift rename to MVMCoreUI/Molecules/DesignedComponents/List/LeftVariable/ListLeftVariableCheckboxAllTextAndLinks.swift index c194cc50..d68c9d1f 100644 --- a/MVMCoreUI/Molecules/DesignedComponents/List/LeftVariable/ListLeftVariableCheckboxWithRightCaretAllTextAndLinks.swift +++ b/MVMCoreUI/Molecules/DesignedComponents/List/LeftVariable/ListLeftVariableCheckboxAllTextAndLinks.swift @@ -1,5 +1,5 @@ // -// ListLeftVariableCheckboxWithRightCaretAllTextAndLinks.swift +// ListLeftVariableCheckboxAllTextAndLinks.swift // MVMCoreUI // // Created by Lekshmi S on 11/02/20. @@ -8,7 +8,7 @@ import Foundation -@objcMembers public class ListLeftVariableCheckboxWithRightCaretAllTextAndLinks: TableViewCell { +@objcMembers public class ListLeftVariableCheckboxAllTextAndLinks: TableViewCell { //----------------------------------------------------- // MARK: - Outlets diff --git a/MVMCoreUI/Molecules/DesignedComponents/List/LeftVariable/ListLeftVariableCheckboxWithRightCaretAllTextAndLinksModel.swift b/MVMCoreUI/Molecules/DesignedComponents/List/LeftVariable/ListLeftVariableCheckboxAllTextAndLinksModel.swift similarity index 89% rename from MVMCoreUI/Molecules/DesignedComponents/List/LeftVariable/ListLeftVariableCheckboxWithRightCaretAllTextAndLinksModel.swift rename to MVMCoreUI/Molecules/DesignedComponents/List/LeftVariable/ListLeftVariableCheckboxAllTextAndLinksModel.swift index 330901a6..80ab9506 100644 --- a/MVMCoreUI/Molecules/DesignedComponents/List/LeftVariable/ListLeftVariableCheckboxWithRightCaretAllTextAndLinksModel.swift +++ b/MVMCoreUI/Molecules/DesignedComponents/List/LeftVariable/ListLeftVariableCheckboxAllTextAndLinksModel.swift @@ -1,5 +1,5 @@ // -// ListLeftVariableCheckboxWithRightCaretAllTextAndLinksModel.swift +// ListLeftVariableCheckboxAllTextAndLinksModel.swift // MVMCoreUI // // Created by Lekshmi S on 11/02/20. @@ -8,7 +8,7 @@ import Foundation -public class ListLeftVariableCheckboxWithRightCaretAllTextAndLinksModel: ListItemModel, MoleculeModelProtocol { +public class ListLeftVariableCheckboxAllTextAndLinksModel: ListItemModel, MoleculeModelProtocol { public static var identifier: String = "listLVCB" public var checkbox: CheckboxModel diff --git a/MVMCoreUI/OtherHandlers/MoleculeObjectMapping.swift b/MVMCoreUI/OtherHandlers/MoleculeObjectMapping.swift index 049183a4..4b4ee536 100644 --- a/MVMCoreUI/OtherHandlers/MoleculeObjectMapping.swift +++ b/MVMCoreUI/OtherHandlers/MoleculeObjectMapping.swift @@ -72,7 +72,7 @@ import Foundation MVMCoreUIMoleculeMappingObject.shared()?.register(viewClass: HeadlineBodyLinkToggle.self, viewModelClass: HeadlineBodyLinkToggleModel.self) MVMCoreUIMoleculeMappingObject.shared()?.register(viewClass: ActionDetailWithImage.self, viewModelClass: ActionDetailWithImageModel.self) MVMCoreUIMoleculeMappingObject.shared()?.register(viewClass: ListLeftVariableIconWithRightCaret.self, viewModelClass: ListLeftVariableIconWithRightCaretModel.self) - MVMCoreUIMoleculeMappingObject.shared()?.register(viewClass: ListLeftVariableCheckboxWithRightCaretAllTextAndLinks.self, viewModelClass: ListLeftVariableCheckboxWithRightCaretAllTextAndLinksModel.self) + MVMCoreUIMoleculeMappingObject.shared()?.register(viewClass: ListLeftVariableCheckboxAllTextAndLinks.self, viewModelClass: ListLeftVariableCheckboxAllTextAndLinksModel.self) // List items MVMCoreUIMoleculeMappingObject.shared()?.register(viewClass: MoleculeTableViewCell.self, viewModelClass: MoleculeListItemModel.self) From 576ce2ff56150d710da0844f37de8eace8e1fd0a Mon Sep 17 00:00:00 2001 From: Subhankar Acharya Date: Thu, 20 Feb 2020 14:41:01 +0530 Subject: [PATCH 08/12] renamed model --- ...stLeftVariableCheckboxAllTextAndLinks.swift | 18 +++--------------- 1 file changed, 3 insertions(+), 15 deletions(-) diff --git a/MVMCoreUI/Molecules/DesignedComponents/List/LeftVariable/ListLeftVariableCheckboxAllTextAndLinks.swift b/MVMCoreUI/Molecules/DesignedComponents/List/LeftVariable/ListLeftVariableCheckboxAllTextAndLinks.swift index d68c9d1f..d83e8389 100644 --- a/MVMCoreUI/Molecules/DesignedComponents/List/LeftVariable/ListLeftVariableCheckboxAllTextAndLinks.swift +++ b/MVMCoreUI/Molecules/DesignedComponents/List/LeftVariable/ListLeftVariableCheckboxAllTextAndLinks.swift @@ -10,18 +10,10 @@ import Foundation @objcMembers public class ListLeftVariableCheckboxAllTextAndLinks: TableViewCell { - //----------------------------------------------------- - // MARK: - Outlets - //------------------------------------------------------- - let checkbox = Checkbox(frame: .zero) let eyebrowHeadlineBodyLink = EyebrowHeadlineBodyLink(frame: .zero) let stack = Stack(frame: .zero) - - //----------------------------------------------------- - // MARK: - View Lifecycle - //------------------------------------------------------- - + open override func updateView(_ size: CGFloat) { super.updateView(size) stack.updateView(size) @@ -38,10 +30,6 @@ import Foundation containerHelper.constrainView(stack) } - //---------------------------------------------------- - // MARK: - Molecule - //------------------------------------------------------ - override open func reset() { super.reset() stack.reset() @@ -49,10 +37,10 @@ import Foundation public override func setWithModel(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable : Any]?) { super.setWithModel(model, delegateObject, additionalData) - guard let model = model as? ListLeftVariableCheckboxWithRightCaretAllTextAndLinksModel else { return} + guard let model = model as? ListLeftVariableCheckboxAllTextAndLinksModel else { return} checkbox.setWithModel(model.checkbox, delegateObject, additionalData) eyebrowHeadlineBodyLink.setWithModel(model.eyebrowHeadlineBodyLink, delegateObject, additionalData) - + // Create a stack model to use for the internal stack and set the alignment of labels let checkbox = StackItemModel(percent: 10) checkbox.horizontalAlignment = .leading From 4803e20363d118392c263937ac8e8497d885ddf3 Mon Sep 17 00:00:00 2001 From: Subhankar Acharya Date: Thu, 20 Feb 2020 14:52:57 +0530 Subject: [PATCH 09/12] Merge branch 'develop' of https://gitlab.verizon.com/BPHV_MIPS/mvm_core_ui into feature/ListLeftVar_Checkbox-_Right_Caret # Conflicts: # MVMCoreUI.xcodeproj/project.pbxproj # MVMCoreUI/OtherHandlers/MoleculeObjectMapping.swift --- MVMCoreUI.xcodeproj/project.pbxproj | 28 ++- MVMCoreUI/Atoms/Buttons/ButtonModel.swift | 8 +- MVMCoreUI/Atoms/Buttons/CaretLinkModel.swift | 2 + MVMCoreUI/Atoms/Buttons/Link.swift | 4 + MVMCoreUI/Atoms/Buttons/LinkModel.swift | 20 ++ .../BaseDropdownEntryFieldModel.swift | 2 +- .../Atoms/TextFields/EntryFieldModel.swift | 4 +- .../Atoms/TextFields/TextFieldModel.swift | 2 +- MVMCoreUI/Atoms/Views/CaretViewModel.swift | 2 + MVMCoreUI/Atoms/Views/CheckboxModel.swift | 2 + .../Atoms/Views/CircleProgressModel.swift | 2 + MVMCoreUI/Atoms/Views/DashLineModel.swift | 2 + MVMCoreUI/Atoms/Views/ImageViewModel.swift | 20 +- .../Label/LabelAttributeActionModel.swift | 15 +- .../Views/Label/LabelAttributeModel.swift | 13 +- MVMCoreUI/Atoms/Views/Label/LabelModel.swift | 9 +- .../Atoms/Views/LeftRightLabelModel.swift | 5 + MVMCoreUI/Atoms/Views/MFLoadImageView.swift | 25 ++- .../Atoms/Views/MultiProgressModel.swift | 2 + MVMCoreUI/Atoms/Views/ToggleModel.swift | 1 - MVMCoreUI/BaseClasses/Button.swift | 11 +- .../MFViewController+Model.swift | 4 - MVMCoreUI/BaseControllers/MFViewController.h | 3 + MVMCoreUI/BaseControllers/MFViewController.m | 8 +- MVMCoreUI/Categories/UIColor+Extension.swift | 177 +++++++++++++++--- MVMCoreUI/Categories/UIColor+MFConvenience.h | 1 + MVMCoreUI/Categories/UIColor+MFConvenience.m | 5 +- .../Categories/UIContentMode+Extension.swift | 98 ++++++++++ MVMCoreUI/CustomPrimitives/Color.swift | 2 +- .../MoleculeModelProtocol.swift | 2 +- .../ListRightVariablePayments.swift | 69 +++++++ .../ListRightVariablePaymentsModel.swift | 52 +++++ .../Doughnut/DoughnutChartModel.swift | 2 + .../ImageHeadlineBodyModel.swift | 1 + .../TabsModel.swift | 2 + .../TwoButtonViewModel.swift | 5 + .../Molecules/Items/CarouselItemModel.swift | 2 - .../Items/MoleculeStackItemModel.swift | 2 +- .../Molecules/Items/StackItemModel.swift | 1 + .../ActionDetailWithImageModel.swift | 1 + .../LeftRightViews/CornerLabelsModel.swift | 2 + .../HeadlineBodyLinkToggleModel.swift | 1 + .../HeadlineBodyToggleModel.swift | 1 + .../ToggleMolecules/LabelToggleModel.swift | 6 + MVMCoreUI/Molecules/ScrollerModel.swift | 1 + .../EyebrowHeadlineBodyLinkModel.swift | 2 +- .../HeadlineBodyButtonModel.swift | 1 + .../HeadlineBodyLinkModel.swift | 1 + .../HeadlineBodyModel.swift | 2 +- .../StringAndMoleculeModel.swift | 1 + MVMCoreUI/Organisms/CarouselModel.swift | 2 +- MVMCoreUI/Organisms/StackModel.swift | 1 + .../MVMCoreUIViewControllerMappingObject.m | 3 +- .../OtherHandlers/MoleculeObjectMapping.swift | 2 +- .../Contents.json | 23 +++ .../paypal_horiz_logo.jpeg | Bin 0 -> 1826 bytes .../paypal_horiz_logo@2x.jpeg | Bin 0 -> 3418 bytes .../paypal_horiz_logo@3x.jpeg | Bin 0 -> 4606 bytes .../Templates/MoleculeListTemplate.swift | 8 +- .../Templates/MoleculeStackTemplate.swift | 8 +- MVMCoreUI/Templates/ThreeLayerTemplate.swift | 9 +- MVMCoreUI/TopAlert/MVMCoreUITopAlertView.m | 2 +- 62 files changed, 609 insertions(+), 83 deletions(-) create mode 100644 MVMCoreUI/Categories/UIContentMode+Extension.swift create mode 100644 MVMCoreUI/Molecules/DesignedComponents/List/RightVariable/ListRightVariablePayments.swift create mode 100644 MVMCoreUI/Molecules/DesignedComponents/List/RightVariable/ListRightVariablePaymentsModel.swift create mode 100644 MVMCoreUI/SupportingFiles/Media.xcassets/imageName_PayPal_logo.imageset/Contents.json create mode 100644 MVMCoreUI/SupportingFiles/Media.xcassets/imageName_PayPal_logo.imageset/paypal_horiz_logo.jpeg create mode 100644 MVMCoreUI/SupportingFiles/Media.xcassets/imageName_PayPal_logo.imageset/paypal_horiz_logo@2x.jpeg create mode 100644 MVMCoreUI/SupportingFiles/Media.xcassets/imageName_PayPal_logo.imageset/paypal_horiz_logo@3x.jpeg diff --git a/MVMCoreUI.xcodeproj/project.pbxproj b/MVMCoreUI.xcodeproj/project.pbxproj index 47d783ce..281a0672 100644 --- a/MVMCoreUI.xcodeproj/project.pbxproj +++ b/MVMCoreUI.xcodeproj/project.pbxproj @@ -27,6 +27,7 @@ 012A88F123985E0100FE3DA1 /* Color.swift in Sources */ = {isa = PBXBuildFile; fileRef = 012A88F023985E0100FE3DA1 /* Color.swift */; }; 012CA99A2384A687003F810F /* MFTextField+ModelExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 012CA9992384A687003F810F /* MFTextField+ModelExtension.swift */; }; 012CA99E2385A2D3003F810F /* MFView+ModelExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 012CA99D2385A2D3003F810F /* MFView+ModelExtension.swift */; }; + 013F801923FB4A8E00AD8013 /* UIContentMode+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 013F801823FB4A8E00AD8013 /* UIContentMode+Extension.swift */; }; 014AA72423C501E2006F3E93 /* MoleculeContainerModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 014AA72123C501E2006F3E93 /* MoleculeContainerModel.swift */; }; 014AA72523C501E2006F3E93 /* ContainerModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 014AA72223C501E2006F3E93 /* ContainerModel.swift */; }; 014AA72623C501E2006F3E93 /* ContainerModelProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 014AA72323C501E2006F3E93 /* ContainerModelProtocol.swift */; }; @@ -127,8 +128,8 @@ 94F217B723E0BF6100A47C06 /* PrimaryButtonView.m in Sources */ = {isa = PBXBuildFile; fileRef = 94F217B523E0BF6100A47C06 /* PrimaryButtonView.m */; }; 94FB966223D797DA003D482B /* MFTextButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 94FB966023D797DA003D482B /* MFTextButton.h */; settings = {ATTRIBUTES = (Public, ); }; }; 94FB966323D797DA003D482B /* MFTextButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 94FB966123D797DA003D482B /* MFTextButton.m */; }; - AA29DC9B23F2AA3800A52198 /* ListLeftVariableCheckboxAllTextAndLinks.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA29DC9A23F2AA3800A52198 /* ListLeftVariableCheckboxAllTextAndLinks.swift */; }; - AA29DC9D23F2ACAC00A52198 /* ListLeftVariableCheckboxAllTextAndLinksModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA29DC9C23F2ACAC00A52198 /* ListLeftVariableCheckboxAllTextAndLinksModel.swift */; }; + AA11A41F23F15D3100D7962F /* ListRightVariablePayments.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA11A41E23F15D3100D7962F /* ListRightVariablePayments.swift */; }; + AA11A42123F15D7000D7962F /* ListRightVariablePaymentsModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA11A42023F15D7000D7962F /* ListRightVariablePaymentsModel.swift */; }; C003506123AA94CD00B6AC29 /* Button.swift in Sources */ = {isa = PBXBuildFile; fileRef = C003506023AA94CD00B6AC29 /* Button.swift */; }; C07065C42395677300FBF997 /* Link.swift in Sources */ = {isa = PBXBuildFile; fileRef = C07065C32395677300FBF997 /* Link.swift */; }; C695A67F23C9830600BFB94E /* UnOrderedListModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = C695A67E23C9830600BFB94E /* UnOrderedListModel.swift */; }; @@ -361,6 +362,7 @@ 012A88F023985E0100FE3DA1 /* Color.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Color.swift; sourceTree = ""; }; 012CA9992384A687003F810F /* MFTextField+ModelExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "MFTextField+ModelExtension.swift"; sourceTree = ""; }; 012CA99D2385A2D3003F810F /* MFView+ModelExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "MFView+ModelExtension.swift"; sourceTree = ""; }; + 013F801823FB4A8E00AD8013 /* UIContentMode+Extension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIContentMode+Extension.swift"; sourceTree = ""; }; 014AA72123C501E2006F3E93 /* MoleculeContainerModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MoleculeContainerModel.swift; sourceTree = ""; }; 014AA72223C501E2006F3E93 /* ContainerModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ContainerModel.swift; sourceTree = ""; }; 014AA72323C501E2006F3E93 /* ContainerModelProtocol.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ContainerModelProtocol.swift; sourceTree = ""; }; @@ -451,8 +453,8 @@ 94F217B523E0BF6100A47C06 /* PrimaryButtonView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PrimaryButtonView.m; sourceTree = ""; }; 94FB966023D797DA003D482B /* MFTextButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MFTextButton.h; sourceTree = ""; }; 94FB966123D797DA003D482B /* MFTextButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MFTextButton.m; sourceTree = ""; }; - AA29DC9A23F2AA3800A52198 /* ListLeftVariableCheckboxAllTextAndLinks.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ListLeftVariableCheckboxAllTextAndLinks.swift; sourceTree = ""; }; - AA29DC9C23F2ACAC00A52198 /* ListLeftVariableCheckboxAllTextAndLinksModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ListLeftVariableCheckboxAllTextAndLinksModel.swift; sourceTree = ""; }; + AA11A41E23F15D3100D7962F /* ListRightVariablePayments.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ListRightVariablePayments.swift; sourceTree = ""; }; + AA11A42023F15D7000D7962F /* ListRightVariablePaymentsModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ListRightVariablePaymentsModel.swift; sourceTree = ""; }; C003506023AA94CD00B6AC29 /* Button.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Button.swift; sourceTree = ""; }; C07065C32395677300FBF997 /* Link.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Link.swift; sourceTree = ""; }; C695A67E23C9830600BFB94E /* UnOrderedListModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UnOrderedListModel.swift; sourceTree = ""; }; @@ -784,6 +786,15 @@ name = "Recovered References"; sourceTree = ""; }; + AA4FC2A323F4F69600E251DB /* RightVariable */ = { + isa = PBXGroup; + children = ( + AA11A42023F15D7000D7962F /* ListRightVariablePaymentsModel.swift */, + AA11A41E23F15D3100D7962F /* ListRightVariablePayments.swift */, + ); + path = RightVariable; + sourceTree = ""; + }; D213347423842FE3008E41B3 /* Controllers */ = { isa = PBXGroup; children = ( @@ -965,6 +976,7 @@ D22B38EA23F4E08B00490EF6 /* List */ = { isa = PBXGroup; children = ( + AA4FC2A323F4F69600E251DB /* RightVariable */, D22B38EB23F4E0AE00490EF6 /* LeftVariable */, ); path = List; @@ -975,8 +987,6 @@ children = ( 8D24041423E7FC0B009E23BE /* ListLeftVariableIconWithRightCaretModel.swift */, 8D24041023E7FB9E009E23BE /* ListLeftVariableIconWithRightCaret.swift */, - AA29DC9A23F2AA3800A52198 /* ListLeftVariableCheckboxAllTextAndLinks.swift */, - AA29DC9C23F2ACAC00A52198 /* ListLeftVariableCheckboxAllTextAndLinksModel.swift */, ); path = LeftVariable; sourceTree = ""; @@ -1148,6 +1158,7 @@ D29DF11021E6805F003B2FB9 /* Categories */ = { isa = PBXGroup; children = ( + 013F801823FB4A8E00AD8013 /* UIContentMode+Extension.swift */, D29DF11121E6805F003B2FB9 /* UIColor+MFConvenience.h */, D29DF11321E6805F003B2FB9 /* UIColor+MFConvenience.m */, D29DF11221E6805F003B2FB9 /* NSLayoutConstraint+MFConvenience.h */, @@ -1619,6 +1630,7 @@ DBC4391922442197001AB423 /* DashLine.swift in Sources */, 0A7BAD74232A8DC700FB8E22 /* HeadlineBodyButton.swift in Sources */, D2FB151D23A40F1500C20E10 /* MoleculeStackItem.swift in Sources */, + AA11A41F23F15D3100D7962F /* ListRightVariablePayments.swift in Sources */, D29DF29621E7ADB8003B2FB9 /* StackableViewController.m in Sources */, 0116A4E5228B19640094F3ED /* RadioButtonModel.swift in Sources */, 017BEB48236230DB0024EF95 /* MoleculeViewProtocol.swift in Sources */, @@ -1645,7 +1657,6 @@ 01C851D323CF9E740021F976 /* LabelToggleModel.swift in Sources */, D29DF2C521E7BF57003B2FB9 /* MFTabBarSwipeAnimator.m in Sources */, D2E2A98323D8B32D000B42E6 /* EyebrowHeadlineBodyLinkModel.swift in Sources */, - AA29DC9D23F2ACAC00A52198 /* ListLeftVariableCheckboxAllTextAndLinksModel.swift in Sources */, 012A88AD238C418100FE3DA1 /* TemplateProtocol.swift in Sources */, D29DF2B421E7B76D003B2FB9 /* MFLoadingSpinner.m in Sources */, D260106323D0C05000764D80 /* StackItemModel.swift in Sources */, @@ -1681,6 +1692,7 @@ D2755D7B23689C7500485468 /* TableViewCell.swift in Sources */, 0A21DB85235E06EF00C160A2 /* MFTextField.m in Sources */, 014AA72623C501E2006F3E93 /* ContainerModelProtocol.swift in Sources */, + AA11A42123F15D7000D7962F /* ListRightVariablePaymentsModel.swift in Sources */, 01EB369223609801006832FA /* MoleculeStackModel.swift in Sources */, 012CA99E2385A2D3003F810F /* MFView+ModelExtension.swift in Sources */, D282AABA224131D100C46919 /* MFTransparentGIFView.swift in Sources */, @@ -1792,7 +1804,6 @@ D28A839323CE828900DFE4FC /* HeadlineBodyCaretLinkImageModel.swift in Sources */, D29770C821F7C4AE00B2F0D0 /* TopLabelsView.m in Sources */, D260105F23D0BFFC00764D80 /* StackItem.swift in Sources */, - AA29DC9B23F2AA3800A52198 /* ListLeftVariableCheckboxAllTextAndLinks.swift in Sources */, 9432A79F23DB47BA00719041 /* EntryFieldContainer.swift in Sources */, 01EB369323609801006832FA /* HeaderModel.swift in Sources */, D2E1FADF2268B8E700AEFD8C /* ThreeLayerTableViewController.swift in Sources */, @@ -1809,6 +1820,7 @@ 943784F6236B77BB006A1E82 /* GraphViewAnimationHandler.swift in Sources */, D29DF2AA21E7B2F9003B2FB9 /* MVMCoreUIConstants.m in Sources */, 948DB67E2326DCD90011F916 /* MultiProgress.swift in Sources */, + 013F801923FB4A8E00AD8013 /* UIContentMode+Extension.swift in Sources */, D2A5146122121FBF00345BFB /* MoleculeStackTemplate.swift in Sources */, D2E2A9A323E096B1000B42E6 /* DisableableModelProtocol.swift in Sources */, D29DF11821E6805F003B2FB9 /* NSLayoutConstraint+MFConvenience.m in Sources */, diff --git a/MVMCoreUI/Atoms/Buttons/ButtonModel.swift b/MVMCoreUI/Atoms/Buttons/ButtonModel.swift index cfe8bb2f..f02eaf5c 100644 --- a/MVMCoreUI/Atoms/Buttons/ButtonModel.swift +++ b/MVMCoreUI/Atoms/Buttons/ButtonModel.swift @@ -20,7 +20,6 @@ public enum ButtonSize: String, Codable { public class ButtonModel: ButtonModelProtocol, MoleculeModelProtocol { public static var identifier: String = "button" - public var moleculeName: String? public var backgroundColor: Color? public var title: String public var action: ActionModelProtocol @@ -46,6 +45,12 @@ public class ButtonModel: ButtonModelProtocol, MoleculeModelProtocol { self.action = action style = .secondary } + + init(primaryButtonWith title: String, action: ActionModelProtocol) { + self.title = title + self.action = action + style = .primary + } private enum CodingKeys: String, CodingKey { case moleculeName @@ -67,7 +72,6 @@ public class ButtonModel: ButtonModelProtocol, MoleculeModelProtocol { required public init(from decoder: Decoder) throws { let typeContainer = try decoder.container(keyedBy: CodingKeys.self) - moleculeName = try typeContainer.decodeIfPresent(String.self, forKey: .moleculeName) backgroundColor = try typeContainer.decodeIfPresent(Color.self, forKey: .backgroundColor) title = try typeContainer.decode(String.self, forKey: .title) diff --git a/MVMCoreUI/Atoms/Buttons/CaretLinkModel.swift b/MVMCoreUI/Atoms/Buttons/CaretLinkModel.swift index defe6816..4b28fc8c 100644 --- a/MVMCoreUI/Atoms/Buttons/CaretLinkModel.swift +++ b/MVMCoreUI/Atoms/Buttons/CaretLinkModel.swift @@ -30,6 +30,7 @@ public class CaretLinkModel: ButtonModelProtocol, MoleculeModelProtocol { case enabledColor case disabledColor case enabled + case moleculeName } required public init(from decoder: Decoder) throws { @@ -50,6 +51,7 @@ public class CaretLinkModel: ButtonModelProtocol, MoleculeModelProtocol { public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(moleculeName, forKey: .moleculeName) try container.encode(title, forKey: .title) try container.encodeIfPresent(backgroundColor, forKey: .backgroundColor) try container.encodeModel(action, forKey: .action) diff --git a/MVMCoreUI/Atoms/Buttons/Link.swift b/MVMCoreUI/Atoms/Buttons/Link.swift index b4c00c94..5dbbed16 100644 --- a/MVMCoreUI/Atoms/Buttons/Link.swift +++ b/MVMCoreUI/Atoms/Buttons/Link.swift @@ -36,6 +36,10 @@ import UIKit context?.strokePath() } + //-------------------------------------------------- + // MARK: - ModelMoleculeViewProtocol + //-------------------------------------------------- + public override func setWithModel(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) { super.setWithModel(model, delegateObject, additionalData) guard let model = model as? LinkModel else { return } diff --git a/MVMCoreUI/Atoms/Buttons/LinkModel.swift b/MVMCoreUI/Atoms/Buttons/LinkModel.swift index f4fab34c..7094a038 100644 --- a/MVMCoreUI/Atoms/Buttons/LinkModel.swift +++ b/MVMCoreUI/Atoms/Buttons/LinkModel.swift @@ -9,7 +9,12 @@ import UIKit public class LinkModel: ButtonModelProtocol, MoleculeModelProtocol { + //-------------------------------------------------- + // MARK: - Properties + //-------------------------------------------------- + public static var identifier: String = "link" + public var backgroundColor: Color? public var title: String public var action: ActionModelProtocol @@ -17,12 +22,21 @@ public class LinkModel: ButtonModelProtocol, MoleculeModelProtocol { public var textColor = Color(uiColor: .mvmBlack) public var disabledColor = Color(uiColor: .mvmCoolGray6) + //-------------------------------------------------- + // MARK: - Initializer + //-------------------------------------------------- + public init(title: String, action: ActionModelProtocol) { self.title = title self.action = action } + //-------------------------------------------------- + // MARK: - Keys + //-------------------------------------------------- + private enum CodingKeys: String, CodingKey { + case moleculeName case backgroundColor case title case action @@ -31,11 +45,16 @@ public class LinkModel: ButtonModelProtocol, MoleculeModelProtocol { case disabledColor } + //-------------------------------------------------- + // MARK: - Codec + //-------------------------------------------------- + required public init(from decoder: Decoder) throws { let typeContainer = try decoder.container(keyedBy: CodingKeys.self) backgroundColor = try typeContainer.decodeIfPresent(Color.self, forKey: .backgroundColor) title = try typeContainer.decode(String.self, forKey: .title) action = try typeContainer.decodeModel(codingKey: .action, typeCodingKey: ActionCodingKey.actionType) + if let enabled = try typeContainer.decodeIfPresent(Bool.self, forKey: .enabled) { self.enabled = enabled } @@ -51,6 +70,7 @@ public class LinkModel: ButtonModelProtocol, MoleculeModelProtocol { public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) try container.encode(title, forKey: .title) + try container.encode(moleculeName, forKey: .moleculeName) try container.encodeIfPresent(backgroundColor, forKey: .backgroundColor) try container.encodeModel(action, forKey: .action) try container.encode(enabled, forKey: .enabled) diff --git a/MVMCoreUI/Atoms/TextFields/BaseDropdownEntryFieldModel.swift b/MVMCoreUI/Atoms/TextFields/BaseDropdownEntryFieldModel.swift index e6e7cb24..496625dc 100644 --- a/MVMCoreUI/Atoms/TextFields/BaseDropdownEntryFieldModel.swift +++ b/MVMCoreUI/Atoms/TextFields/BaseDropdownEntryFieldModel.swift @@ -37,9 +37,9 @@ } public override func encode(to encoder: Encoder) throws { - try super.encode(to: encoder) try super.encode(to: encoder) var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(moleculeName, forKey: .moleculeName) try container.encode(caretView, forKey: .caretView) } } diff --git a/MVMCoreUI/Atoms/TextFields/EntryFieldModel.swift b/MVMCoreUI/Atoms/TextFields/EntryFieldModel.swift index 5f60081e..e4a794bc 100644 --- a/MVMCoreUI/Atoms/TextFields/EntryFieldModel.swift +++ b/MVMCoreUI/Atoms/TextFields/EntryFieldModel.swift @@ -19,7 +19,6 @@ import Foundation } public var backgroundColor: Color? - public var moleculeName: String? public var title: String? public var feedback: String? public var errorMessage: String = "" @@ -37,7 +36,7 @@ import Foundation private enum CodingKeys: String, CodingKey { case moleculeName case backgroundColor - case title + case title = "label" case isEnabled case feedback case errorMessage = "errorMsg" @@ -54,7 +53,6 @@ import Foundation required public init(from decoder: Decoder) throws { let typeContainer = try decoder.container(keyedBy: CodingKeys.self) - moleculeName = try typeContainer.decodeIfPresent(String.self, forKey: .moleculeName) backgroundColor = try typeContainer.decodeIfPresent(Color.self, forKey: .backgroundColor) title = try typeContainer.decodeIfPresent(String.self, forKey: .title) feedback = try typeContainer.decodeIfPresent(String.self, forKey: .feedback) diff --git a/MVMCoreUI/Atoms/TextFields/TextFieldModel.swift b/MVMCoreUI/Atoms/TextFields/TextFieldModel.swift index 6caa70b0..e26995d6 100644 --- a/MVMCoreUI/Atoms/TextFields/TextFieldModel.swift +++ b/MVMCoreUI/Atoms/TextFields/TextFieldModel.swift @@ -12,7 +12,7 @@ import UIKit public static var identifier: String = "textField" public var backgroundColor: Color? - public var moleculeName: String + public var moleculeName: String? = TextFieldModel.identifier public var editable: Bool? public var disabled: Bool? public var errorMsg: String? diff --git a/MVMCoreUI/Atoms/Views/CaretViewModel.swift b/MVMCoreUI/Atoms/Views/CaretViewModel.swift index 58291984..cf90496f 100644 --- a/MVMCoreUI/Atoms/Views/CaretViewModel.swift +++ b/MVMCoreUI/Atoms/Views/CaretViewModel.swift @@ -18,6 +18,7 @@ import Foundation public var lineWidth: CGFloat? private enum CodingKeys: String, CodingKey { + case moleculeName case backgroundColor case strokeColor case isHidden @@ -38,6 +39,7 @@ import Foundation public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(moleculeName, forKey: .moleculeName) try container.encode(strokeColor, forKey: .strokeColor) try container.encodeIfPresent(isHidden, forKey: .isHidden) try container.encodeIfPresent(isOpaque, forKey: .isOpaque) diff --git a/MVMCoreUI/Atoms/Views/CheckboxModel.swift b/MVMCoreUI/Atoms/Views/CheckboxModel.swift index aa5dedb4..de79c6c6 100644 --- a/MVMCoreUI/Atoms/Views/CheckboxModel.swift +++ b/MVMCoreUI/Atoms/Views/CheckboxModel.swift @@ -39,6 +39,7 @@ import Foundation //-------------------------------------------------- private enum CodingKeys: String, CodingKey { + case moleculeName case groupName case value case fieldKey @@ -85,6 +86,7 @@ import Foundation public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(moleculeName, forKey: .moleculeName) try container.encodeIfPresent(groupName, forKey: .groupName) try container.encodeIfPresent(value, forKey: .value) try container.encodeIfPresent(fieldKey, forKey: .fieldKey) diff --git a/MVMCoreUI/Atoms/Views/CircleProgressModel.swift b/MVMCoreUI/Atoms/Views/CircleProgressModel.swift index c4f55bef..9a1908f8 100644 --- a/MVMCoreUI/Atoms/Views/CircleProgressModel.swift +++ b/MVMCoreUI/Atoms/Views/CircleProgressModel.swift @@ -48,6 +48,7 @@ public class CircleProgressModel: MoleculeModelProtocol { case duration case colors case backgroundColor + case moleculeName } required public init(from decoder: Decoder) throws { @@ -78,6 +79,7 @@ public class CircleProgressModel: MoleculeModelProtocol { public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(moleculeName, forKey: .moleculeName) try container.encode(style, forKey: .style) try container.encode(size, forKey: .size) try container.encode(diameter, forKey: .diameter) diff --git a/MVMCoreUI/Atoms/Views/DashLineModel.swift b/MVMCoreUI/Atoms/Views/DashLineModel.swift index 1346b5c2..7f5ac992 100644 --- a/MVMCoreUI/Atoms/Views/DashLineModel.swift +++ b/MVMCoreUI/Atoms/Views/DashLineModel.swift @@ -20,6 +20,7 @@ import Foundation } private enum CodingKeys: String, CodingKey { + case moleculeName case backgroundColor case dashColor case isHidden @@ -36,6 +37,7 @@ import Foundation public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(moleculeName, forKey: .moleculeName) try container.encode(dashColor, forKey: .dashColor) try container.encodeIfPresent(isHidden, forKey: .isHidden) try container.encodeIfPresent(backgroundColor, forKey: .backgroundColor) diff --git a/MVMCoreUI/Atoms/Views/ImageViewModel.swift b/MVMCoreUI/Atoms/Views/ImageViewModel.swift index ce46a930..0f585119 100644 --- a/MVMCoreUI/Atoms/Views/ImageViewModel.swift +++ b/MVMCoreUI/Atoms/Views/ImageViewModel.swift @@ -11,11 +11,29 @@ import Foundation @objcMembers public class ImageViewModel: MoleculeModelProtocol { public static var identifier: String = "image" public var backgroundColor: Color? - + public var moleculeName: String? = ImageViewModel.identifier public var image: String public var accessibilityText: String? public var fallbackImage: String? public var imageFormat: String? public var width: CGFloat? public var height: CGFloat? + public var contentMode: UIView.ContentMode? + public var localBundle: Bundle? + + public init(image: String) { + self.image = image + } + + private enum CodingKeys: String, CodingKey { + case moleculeName + case backgroundColor + case image + case accessibilityText + case fallbackImage + case imageFormat + case width + case height + case contentMode + } } diff --git a/MVMCoreUI/Atoms/Views/Label/LabelAttributeActionModel.swift b/MVMCoreUI/Atoms/Views/Label/LabelAttributeActionModel.swift index 2ebcb4b4..503f00d8 100644 --- a/MVMCoreUI/Atoms/Views/Label/LabelAttributeActionModel.swift +++ b/MVMCoreUI/Atoms/Views/Label/LabelAttributeActionModel.swift @@ -8,12 +8,21 @@ import UIKit -class LabelAttributeActionModel: LabelAttributeModel { +open class LabelAttributeActionModel: LabelAttributeModel { override public class var identifier: String { return "action" } var action: ActionModelProtocol + public init(_ location: Int, _ length: Int, action: ActionModelProtocol) { + self.action = action + super.init(location, length) + } + + private enum CodingKeys: String, CodingKey { + case action + } + required public init(from decoder: Decoder) throws { let typeContainer = try decoder.container(keyedBy: CodingKeys.self) action = try typeContainer.decodeModel(codingKey: .action, typeCodingKey: ActionCodingKey.actionType) @@ -25,8 +34,4 @@ class LabelAttributeActionModel: LabelAttributeModel { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeModel(action, forKey: .action) } - - private enum CodingKeys: String, CodingKey { - case action - } } diff --git a/MVMCoreUI/Atoms/Views/Label/LabelAttributeModel.swift b/MVMCoreUI/Atoms/Views/Label/LabelAttributeModel.swift index 22bb10d8..437ec0cc 100644 --- a/MVMCoreUI/Atoms/Views/Label/LabelAttributeModel.swift +++ b/MVMCoreUI/Atoms/Views/Label/LabelAttributeModel.swift @@ -25,10 +25,18 @@ import Foundation return "" } - var type: String + var type: String { + get { return Self.identifier } + } + var location: Int var length: Int - + + init(_ location: Int, _ length: Int) { + self.location = location + self.length = length + } + //-------------------------------------------------- // MARK: - Keys //-------------------------------------------------- @@ -45,7 +53,6 @@ import Foundation required public init(from decoder: Decoder) throws { let typeContainer = try decoder.container(keyedBy: CodingKeys.self) - type = try typeContainer.decode(String.self, forKey: .type) location = try typeContainer.decode(Int.self, forKey: .location) length = try typeContainer.decode(Int.self, forKey: .length) } diff --git a/MVMCoreUI/Atoms/Views/Label/LabelModel.swift b/MVMCoreUI/Atoms/Views/Label/LabelModel.swift index 731b23da..d7fb4fa3 100644 --- a/MVMCoreUI/Atoms/Views/Label/LabelModel.swift +++ b/MVMCoreUI/Atoms/Views/Label/LabelModel.swift @@ -11,9 +11,7 @@ import Foundation @objcMembers public class LabelModel: MoleculeModelProtocol { public static var identifier: String = "label" - public var moleculeName: String? public var backgroundColor: Color? - public var text: String public var accessibilityText: String? public var textColor: String? @@ -45,10 +43,13 @@ import Foundation enum AttributeTypeKey: String, CodingKey { case type } - + + public init(text: String) { + self.text = text + } + required public init(from decoder: Decoder) throws { let typeContainer = try decoder.container(keyedBy: CodingKeys.self) - moleculeName = try typeContainer.decodeIfPresent(String.self, forKey: .moleculeName) text = try typeContainer.decode(String.self, forKey: .text) accessibilityText = try typeContainer.decodeIfPresent(String.self, forKey: .accessibilityText) textColor = try typeContainer.decodeIfPresent(String.self, forKey: .textColor) diff --git a/MVMCoreUI/Atoms/Views/LeftRightLabelModel.swift b/MVMCoreUI/Atoms/Views/LeftRightLabelModel.swift index 325611ec..d7ee1553 100644 --- a/MVMCoreUI/Atoms/Views/LeftRightLabelModel.swift +++ b/MVMCoreUI/Atoms/Views/LeftRightLabelModel.swift @@ -10,7 +10,12 @@ import UIKit @objcMembers public class LeftRightLabelModel: MoleculeModelProtocol { public static var identifier: String = "leftRightLabelView" + public var moleculeName: String? = LeftRightLabelModel.identifier public var backgroundColor: Color? public var leftText: LabelModel public var rightText: LabelModel? + + init(_ leftText: LabelModel) { + self.leftText = leftText + } } diff --git a/MVMCoreUI/Atoms/Views/MFLoadImageView.swift b/MVMCoreUI/Atoms/Views/MFLoadImageView.swift index 1c54b891..0079d1a6 100644 --- a/MVMCoreUI/Atoms/Views/MFLoadImageView.swift +++ b/MVMCoreUI/Atoms/Views/MFLoadImageView.swift @@ -210,6 +210,9 @@ import UIKit } public func setWithModel(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) { + self.delegateObject = delegateObject + // TODO: Temporary, should be moved to init once we have type erasure ready. + setAsMolecule() guard let imageModel = model as? ImageViewModel else { return } @@ -230,7 +233,11 @@ import UIKit if shouldLoadImage(withName: imageModel.image, width: width, height: height) { imageView.image = nil imageView.animatedImage = nil - loadImage(withName: imageModel.image, format: imageModel.imageFormat, width: width as NSNumber?, height: height as NSNumber?, customFallbackImage: imageModel.fallbackImage) + loadImage(withName: imageModel.image, format: imageModel.imageFormat, width: width as NSNumber?, height: height as NSNumber?, customFallbackImage: imageModel.fallbackImage, localBundle: imageModel.localBundle) + } + + if let contentMode = imageModel.contentMode { + imageView.contentMode = contentMode } } @@ -269,7 +276,9 @@ import UIKit } // MARK: - load functions - public func loadImage(withName imageName: String?, format: String?, width: NSNumber?, height: NSNumber?, customFallbackImage: String?, completionHandler: @escaping MVMCoreGetImageBlock) { + public func loadImage(withName imageName: String?, format: String? = nil, width: NSNumber? = nil, height: NSNumber? = nil, customFallbackImage: String? = nil, allowServerParameters: Bool = false, localBundle: Bundle? = nil, completionHandler: MVMCoreGetImageBlock? = nil) { + + let completionBlock = completionHandler ?? defaultCompletionBlock() MVMCoreDispatchUtility.performBlock(onMainThread: { [unowned self] in self.currentImageName = imageName self.currentImageWidth = width?.cgfloat() @@ -291,15 +300,15 @@ import UIKit if layoutWillChange { self?.delegateObject?.moleculeDelegate?.moleculeLayoutUpdated(self!) } - completionHandler(image,data,isFallbackImage) + completionBlock(image,data,isFallbackImage) })} let fallbackImageName = customFallbackImage ?? MVMCoreUIUtility.localizedImageName("fallback") if let format = format, format.lowercased().contains("gif") { // Gifs aren't supported by default and need special handling - MVMCoreCache.shared()?.getGif(imageName, useWidth: width != nil, widthForS7: width?.intValue ?? 0, useHeight: height != nil, heightForS7: height?.intValue ?? 0, format: format, localFallbackImageName: fallbackImageName, completionHandler: finishedLoadingBlock) + MVMCoreCache.shared()?.getGif(imageName, useWidth: width != nil, widthForS7: width?.intValue ?? 0, useHeight: height != nil, heightForS7: height?.intValue ?? 0, format: format, localFallbackImageName: fallbackImageName, allowServerQueryParameters: allowServerParameters, completionHandler: finishedLoadingBlock) } else { - MVMCoreCache.shared()?.getImage(imageName, useWidth: width != nil, widthForS7: width?.intValue ?? 0, useHeight: height != nil, heightForS7: height?.intValue ?? 0, format: format, localFallbackImageName: fallbackImageName, completionHandler: finishedLoadingBlock) + MVMCoreCache.shared()?.getImage(imageName, useWidth: width != nil, widthForS7: width?.intValue ?? 0, useHeight: height != nil, heightForS7: height?.intValue ?? 0, format: format, localFallbackImageName: fallbackImageName, allowServerQueryParameters: allowServerParameters, localBundle: localBundle, completionHandler: finishedLoadingBlock) } }) } @@ -329,6 +338,8 @@ import UIKit }) } + // Note: Exposed for objective-c interfaces. + public func loadImage(withName imageName: String?) { loadImage(withName: imageName, format: nil, width: nil, height: nil, customFallbackImage: nil, completionHandler: defaultCompletionBlock()) } @@ -364,4 +375,8 @@ import UIKit public func loadImage(withName imageName: String?, format: String?, width: NSNumber?, height: NSNumber?, customFallbackImage: String?) { loadImage(withName: imageName, format: format, width: width, height: height, customFallbackImage: customFallbackImage, completionHandler: defaultCompletionBlock()) } + + public func loadImage(withName imageName: String?, format: String?, width: NSNumber?, height: NSNumber?, customFallbackImage: String?, completionHandler: @escaping MVMCoreGetImageBlock) { + loadImage(withName: imageName, format: format, width: width, height: height, customFallbackImage: customFallbackImage, allowServerParameters: false, completionHandler: completionHandler) + } } diff --git a/MVMCoreUI/Atoms/Views/MultiProgressModel.swift b/MVMCoreUI/Atoms/Views/MultiProgressModel.swift index 6dd05b0b..4033fd28 100644 --- a/MVMCoreUI/Atoms/Views/MultiProgressModel.swift +++ b/MVMCoreUI/Atoms/Views/MultiProgressModel.swift @@ -26,6 +26,7 @@ import Foundation public var roundedRect: Bool? private enum CodingKeys: String, CodingKey { + case moleculeName case progressList case thickness case roundedRect @@ -46,6 +47,7 @@ import Foundation public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(moleculeName, forKey: .moleculeName) try container.encode(progressList, forKey: .progressList) try container.encodeIfPresent(thickness, forKey: .thickness) try container.encodeIfPresent(roundedRect, forKey: .roundedRect) diff --git a/MVMCoreUI/Atoms/Views/ToggleModel.swift b/MVMCoreUI/Atoms/Views/ToggleModel.swift index 9cd96f45..aafacec8 100644 --- a/MVMCoreUI/Atoms/Views/ToggleModel.swift +++ b/MVMCoreUI/Atoms/Views/ToggleModel.swift @@ -10,7 +10,6 @@ import UIKit public class ToggleModel: MoleculeModelProtocol { public static var identifier: String = "toggle" - public var moleculeName: String? public var backgroundColor: Color? public var state: Bool = true public var action: ActionModelProtocol? diff --git a/MVMCoreUI/BaseClasses/Button.swift b/MVMCoreUI/BaseClasses/Button.swift index a780151a..c0ff0e81 100644 --- a/MVMCoreUI/BaseClasses/Button.swift +++ b/MVMCoreUI/BaseClasses/Button.swift @@ -12,6 +12,7 @@ public typealias ButtonAction = (Button) -> () //-------------------------------------------------- // MARK: - Properties //-------------------------------------------------- + open var model: MoleculeModelProtocol? open var actionModel: ActionModelProtocol? @@ -67,7 +68,7 @@ public typealias ButtonAction = (Button) -> () addTarget(self, action: #selector(callActionBlock(_:)), for: event) } - @objc private func callActionBlock(_ sender: Button) { + @objc func callActionBlock(_ sender: Button) { buttonAction?(self) } @@ -88,11 +89,13 @@ public typealias ButtonAction = (Button) -> () // MARK:- ModelMoleculeViewProtocol open func setWithModel(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) { self.model = model + if let backgroundColor = model?.backgroundColor { self.backgroundColor = backgroundColor.uiColor } - + guard let model = model as? ButtonModelProtocol else { return } + isEnabled = model.enabled set(with: model.action, delegateObject: delegateObject, additionalData: additionalData) } @@ -113,7 +116,7 @@ public typealias ButtonAction = (Button) -> () // MARK: - MVMCoreViewProtocol extension Button: MVMCoreViewProtocol { - open func updateView(_ size: CGFloat) {} + open func updateView(_ size: CGFloat) { } /// Will be called only once. open func setupView() { @@ -126,6 +129,7 @@ extension Button: MVMCoreViewProtocol { // MARK: - MVMCoreUIMoleculeViewProtocol extension Button: MVMCoreUIMoleculeViewProtocol { + open func reset() { backgroundColor = .clear } @@ -133,6 +137,7 @@ extension Button: MVMCoreUIMoleculeViewProtocol { // MARK: AppleGuidelinesProtocol extension Button: AppleGuidelinesProtocol { + override open func point(inside point: CGPoint, with event: UIEvent?) -> Bool { return Self.acceptablyOutsideBounds(point: point, bounds: bounds) } diff --git a/MVMCoreUI/BaseControllers/MFViewController+Model.swift b/MVMCoreUI/BaseControllers/MFViewController+Model.swift index 1ddbd4ab..e70e68f6 100644 --- a/MVMCoreUI/BaseControllers/MFViewController+Model.swift +++ b/MVMCoreUI/BaseControllers/MFViewController+Model.swift @@ -37,7 +37,3 @@ extension MFViewController: MoleculeDelegateProtocol { @objc public func removeMolecules(_ molecules: [[AnyHashable: Any]], sender: UITableViewCell, animation: UITableView.RowAnimation) { } } - -public extension MFViewController { - @objc func parsePageJSON() throws { } -} diff --git a/MVMCoreUI/BaseControllers/MFViewController.h b/MVMCoreUI/BaseControllers/MFViewController.h index cd96a07f..38ced354 100644 --- a/MVMCoreUI/BaseControllers/MFViewController.h +++ b/MVMCoreUI/BaseControllers/MFViewController.h @@ -96,6 +96,9 @@ // This view controller should subclass this function and check the load to make sure it has all the needed data. Fills the error object if there are any errors. Returns if we should finish the load or not. - (BOOL)shouldFinishProcessingLoad:(nonnull MVMCoreLoadObject *)loadObject error:(MVMCoreErrorObject *_Nonnull *_Nonnull)error; +/// Called in newDataBuildScreen. Can override to parse the json into a model object. +- (void)parsePageJSON:(NSError * _Nullable * _Nullable)error; + // Sets the screen to use the screen heading. // it is required in device flow, where we are showing greeting name as screen heading, // device details screen heading needs to be updated/refreshed again, if user has changed device nick name diff --git a/MVMCoreUI/BaseControllers/MFViewController.m b/MVMCoreUI/BaseControllers/MFViewController.m index 09700268..f663193f 100644 --- a/MVMCoreUI/BaseControllers/MFViewController.m +++ b/MVMCoreUI/BaseControllers/MFViewController.m @@ -98,7 +98,7 @@ self.loadObject = loadObject; NSError *parseError = nil; - [self parsePageJSONAndReturnError:&parseError]; + [self parsePageJSON:&parseError]; if (parseError) { if (error) { MVMCoreErrorObject *errorObject = [MVMCoreErrorObject createErrorObjectForNSError:parseError location:[[MVMCoreLoadHandler sharedGlobal] errorLocationForRequest:loadObject]]; @@ -112,6 +112,10 @@ return [MFViewController verifyRequiredModulesLoadedForLoadObject:loadObject error:error]; } +- (void)parsePageJSON:(NSError * _Nullable * _Nullable)error { + +} + // Sets the screen to use the screen heading. // it is required in device flow, where we are showing greeting name as screen heading, // device details screen heading needs to be updated/refreshed again, if user has changed device nick name @@ -261,7 +265,7 @@ - (BOOL)newPageLoaded:(nonnull NSDictionary *)page { self.loadObject.pageJSON = page; NSError *parseError = nil; - [self parsePageJSONAndReturnError:&parseError]; + [self parsePageJSON:&parseError]; return YES; } diff --git a/MVMCoreUI/Categories/UIColor+Extension.swift b/MVMCoreUI/Categories/UIColor+Extension.swift index 55a10c03..94bf780d 100644 --- a/MVMCoreUI/Categories/UIColor+Extension.swift +++ b/MVMCoreUI/Categories/UIColor+Extension.swift @@ -12,24 +12,52 @@ public typealias ColorHexTuple = (uiColor: UIColor, hex: String) extension UIColor { + //-------------------------------------------------- + // MARK: - Convenience Dictionary + //-------------------------------------------------- /// Dictionary to access brand approved colors by name. public static let names: [String: ColorHexTuple] = ["black": (.mvmBlack, "#000000"), "white": (.mvmWhite, "#FFFFFF"), "red": (.mvmRed, "#D52B1E"), - "orange": (.mvmOrange, "#CC4D0F"), - "green": (.mvmGreen, "#008631"), - "blue": (.mvmBlue, "#007AB8"), - "blueGradient": (.mvmBlueGradient, "#007AB8"), + "pink": (.mvmPink, "#D90368"), + "pink33": (.mvmPink33, "#F2ABCD"), + "pink66": (.mvmPink66, "#E6589B"), + "pinkShade1": (.mvmPinkShade1, "#B31C63"), + "pinkShade2": (.mvmPinkShade2, "#830842"), + "purple": (.mvmPurple, "#8C00AC"), + "purple33": (.mvmPurple33, "#D9ABE4"), + "purple66": (.mvmPurple66, "#B356C8"), + "purpleShade1": (.mvmPurpleShade1, "#6C177F"), + "purpleShade2": (.mvmPurpleShade2, "#4A0E58"), + "green": (.mvmGreen, "#008330"), + "green33": (.mvmGreen33, "#ABE4BF"), + "green66": (.mvmGreen66, "#57C880"), + "greenShade1": (.mvmGreenShade1, "#178437"), + "greenShade2": (.mvmGreenShade2, "#0F5B25"), + "orange": (.mvmOrange, "#ED7000"), + "orange66": (.mvmOrange66, "#F3A157"), + "orange33": (.mvmOrange33, "#F9D0AB"), + "orangeShade1": (.mvmOrangeShade1, "#CB5F00"), + "orangeShade2": (.mvmOrangeShade2, "#984700"), + "orangeAA": (.mvmOrangeAA, "#CC4D0F"), + "blue": (.mvmBlue, "#0077B4"), + "blue33": (.mvmBlue33, "#57B1DF"), + "blue66": (.mvmBlue66, "#57B1DF"), + "blueShade1": (.mvmBlueShade1, "#136598"), + "blueShade2": (.mvmBlueShade2, "#0B4467"), "yellow": (.mvmYellow, "#FFBC3D"), + "yellow33": (.mvmYellow33, "#FFE9BF"), + "yellow66": (.mvmYellow66, "#FFD37F"), + "yellowShade1": (.mvmYellowShade1, "#CC9630"), + "yellowShade2": (.mvmYellowShade2, "#997126"), "coolGray1": (.mvmCoolGray1, "#F6F6F6"), "coolGray3": (.mvmCoolGray3, "#D8DADA"), "coolGray6": (.mvmCoolGray6, "#747676"), "coolGray10": (.mvmCoolGray10, "#333333"), - "vzupGold": (.vzupGold, "#B89B56"), - "vzupYellow1": (.vzupYellow1, "#F9D542"), - "vzupYellow2": (.vzupYellow2, "#F4CA53"), - "vzupYellow3": (.vzupYellow3, "#CC9B2D")] + "upGold1": (.vzupGold1, "#F9D542"), + "upGold2": (.vzupGold2, "#F4CA53"), + "upGold3": (.vzupGold3, "#CC9B2D")] //-------------------------------------------------- // MARK: - Brand @@ -41,24 +69,134 @@ extension UIColor { /// HEX: #FFFFFF public static let mvmWhite = UIColor.white + //-------------------------------------------------- + // MARK: - Red + //-------------------------------------------------- + /// HEX: #D52B1E public static let mvmRed = UIColor.color8Bits(red: 213, green: 43, blue: 30) + //-------------------------------------------------- + // MARK: - Pink + //-------------------------------------------------- + + /// HEX: #D90368 + public static let mvmPink = UIColor.color8Bits(red: 217, green: 3, blue: 104) + + /// HEX: #F2ABCD + public static let mvmPink33 = UIColor.color8Bits(red: 242, green: 171, blue: 205) + + /// HEX: #E6589B + public static let mvmPink66 = UIColor.color8Bits(red: 230, green: 88, blue: 155) + + /// HEX: #B31C63 + public static let mvmPinkShade1 = UIColor.color8Bits(red: 179, green: 28, blue: 99) + + /// HEX: #830842 + public static let mvmPinkShade2 = UIColor.color8Bits(red: 131, green: 8, blue: 66) + + //-------------------------------------------------- + // MARK: - Purple + //-------------------------------------------------- + + /// HEX: #8C00AC + public static let mvmPurple = UIColor.color8Bits(red: 140, green: 0, blue: 172) + + /// HEX: #D9ABE4 + public static let mvmPurple33 = UIColor.color8Bits(red: 217, green: 171, blue: 228) + + /// HEX: #B356C8 + public static let mvmPurple66 = UIColor.color8Bits(red: 179, green: 86, blue: 200) + + /// HEX: #6C177F + public static let mvmPurpleShade1 = UIColor.color8Bits(red: 108, green: 23, blue: 127) + + /// HEX: #4A0E58 + public static let mvmPurpleShade2 = UIColor.color8Bits(red: 74, green: 14, blue: 88) + + //-------------------------------------------------- + // MARK: - Orange + //-------------------------------------------------- + + /// HEX: #ED7000 + public static let mvmOrange = UIColor.color8Bits(red: 237, green: 112, blue: 0) + /// HEX: #CC4D0F - public static let mvmOrange = UIColor.color8Bits(red: 204, green: 77, blue: 15) + public static let mvmOrangeAA = UIColor.color8Bits(red: 204, green: 77, blue: 15) - /// HEX: #008631 - public static let mvmGreen = UIColor.color8Bits(red: 0, green: 134, blue: 49) + /// HEX: #F9D0AB + public static let mvmOrange33 = UIColor.color8Bits(red: 249, green: 208, blue: 171) - /// HEX: #007AB8 - public static let mvmBlue = UIColor.color8Bits(red: 0, green: 122, blue: 184) + /// HEX: #F3A157 + public static let mvmOrange66 = UIColor.color8Bits(red: 243, green: 161, blue: 87) - /// HEX: #007AB8 - public static let mvmBlueGradient = UIColor.color8Bits(red: 0, green: 122, blue: 184) + /// HEX: #CB5F00 + public static let mvmOrangeShade1 = UIColor.color8Bits(red: 203, green: 95, blue: 0) + + /// HEX: #984700 + public static let mvmOrangeShade2 = UIColor.color8Bits(red: 152, green: 71, blue: 0) + + //-------------------------------------------------- + // MARK: - Green + //-------------------------------------------------- + + /// HEX: #008330 + public static let mvmGreen = UIColor.color8Bits(red: 0, green: 134, blue: 48) + + /// HEX: #ABE4BF + public static let mvmGreen33 = UIColor.color8Bits(red: 171, green: 228, blue: 191) + + /// HEX: #57C880 + public static let mvmGreen66 = UIColor.color8Bits(red: 87, green: 200, blue: 128) + + /// HEX: #178437 + public static let mvmGreenShade1 = UIColor.color8Bits(red: 23, green: 132, blue: 55) + + /// HEX: #0F5B25 + public static let mvmGreenShade2 = UIColor.color8Bits(red: 15, green: 91, blue: 37) + + //-------------------------------------------------- + // MARK: - Blue + //-------------------------------------------------- + + /// HEX: #0077B4 + public static let mvmBlue = UIColor.color8Bits(red: 0, green: 119, blue: 180) + + /// HEX: #57B1DF + public static let mvmBlue33 = UIColor.color8Bits(red: 87, green: 177, blue: 223) + + /// HEX: #57B1DF + public static let mvmBlue66 = UIColor.color8Bits(red: 87, green: 177, blue: 223) + + /// HEX: #136598 + public static let mvmBlueShade1 = UIColor.color8Bits(red: 19, green: 101, blue: 152) + + /// HEX: #0B4467 + public static let mvmBlueShade2 = UIColor.color8Bits(red: 11, green: 68, blue: 103) + + //-------------------------------------------------- + // MARK: - Yellow + //-------------------------------------------------- /// HEX: #FFBC3D public static let mvmYellow = UIColor.color8Bits(red: 255, green: 188, blue: 61) + /// HEX: #FFE9BF + public static let mvmYellow33 = UIColor.color8Bits(red: 255, green: 233, blue: 191) + + /// HEX: #FFD37F + public static let mvmYellow66 = UIColor.color8Bits(red: 255, green: 211, blue: 127) + + /// HEX: #CC9630 + public static let mvmYellowShade1 = UIColor.color8Bits(red: 204, green: 150, blue: 48) + + /// HEX: #997126 + public static let mvmYellowShade2 = UIColor.color8Bits(red: 153, green: 113, blue: 38) + + //-------------------------------------------------- + // MARK: - Gray + //-------------------------------------------------- + /// HEX: #F6F6F6 public static let mvmCoolGray1 = UIColor.grayscale(rgb: 246) @@ -75,17 +213,14 @@ extension UIColor { // MARK: - VZ UP Brand //-------------------------------------------------- - /// HEX: #B89B56 - public static let vzupGold = UIColor.color8Bits(red: 184, green: 155, blue: 68) - /// HEX: #F9D542 - public static let vzupYellow1 = UIColor.color8Bits(red: 249, green: 213, blue: 66) + public static let vzupGold1 = UIColor.color8Bits(red: 249, green: 213, blue: 66) /// HEX: #F4CA53 - public static let vzupYellow2 = UIColor.color8Bits(red: 244, green: 202, blue: 83) + public static let vzupGold2 = UIColor.color8Bits(red: 244, green: 202, blue: 83) /// HEX: #CC9B2D - public static let vzupYellow3 = UIColor.color8Bits(red: 204, green: 155, blue: 45) + public static let vzupGold3 = UIColor.color8Bits(red: 204, green: 155, blue: 45) //-------------------------------------------------- // MARK: - Functions diff --git a/MVMCoreUI/Categories/UIColor+MFConvenience.h b/MVMCoreUI/Categories/UIColor+MFConvenience.h index 4a51a13b..c3c78c7a 100644 --- a/MVMCoreUI/Categories/UIColor+MFConvenience.h +++ b/MVMCoreUI/Categories/UIColor+MFConvenience.h @@ -21,6 +21,7 @@ + (nonnull UIColor *)mfLightSilver; + (nonnull UIColor *)mfDarkSilver; + (nonnull UIColor *)mfTomatoRed; ++ (nonnull UIColor *)mvmOrange; + (nonnull UIColor *)mfPumpkinColor; + (nonnull UIColor *)mfShamrock; + (nonnull UIColor *)mfCerulean; diff --git a/MVMCoreUI/Categories/UIColor+MFConvenience.m b/MVMCoreUI/Categories/UIColor+MFConvenience.m index e56d89bc..6ff8f70f 100644 --- a/MVMCoreUI/Categories/UIColor+MFConvenience.m +++ b/MVMCoreUI/Categories/UIColor+MFConvenience.m @@ -37,7 +37,6 @@ return [UIColor mfColor8bitsWithRed:198 green:197 blue:197 alpha:1.0]; } - + (nonnull UIColor *)mfPrimaryButtonHighlightBlackColor { return [UIColor mfColor8bitsWithRed:51 green:51 blue:51 alpha:1.0]; } @@ -54,6 +53,10 @@ return [UIColor mfColor8bitsWithRed:204 green:77 blue:15 alpha:1.0]; } ++ (nonnull UIColor *)mvmOrange { + return [UIColor mfColor8bitsWithRed:237 green:112 blue:0 alpha:1.0]; +} + + (nonnull UIColor *)mfShamrock { return [UIColor mfColor8bitsWithRed:0 green:134 blue:49 alpha:1.0]; } diff --git a/MVMCoreUI/Categories/UIContentMode+Extension.swift b/MVMCoreUI/Categories/UIContentMode+Extension.swift new file mode 100644 index 00000000..19cf523b --- /dev/null +++ b/MVMCoreUI/Categories/UIContentMode+Extension.swift @@ -0,0 +1,98 @@ +// +// UIContentMode+Extension.swift +// MVMCoreUI +// +// Created by Scott Pfeil on 2/17/20. +// Copyright © 2020 Verizon Wireless. All rights reserved. +// + +import Foundation + +enum ContentModeError: Error { + case notAContentMode +} + +extension UIView.ContentMode: RawRepresentable { + + init?(rawValue: String) { + switch rawValue { + case "scaleToFill": + self = .scaleToFill + case "scaleAspectFit": + self = .scaleAspectFit + case "scaleAspectFill": + self = .scaleAspectFill + case "redraw": + self = .redraw + case "center": + self = .center + case "top": + self = .top + case "bottom": + self = .bottom + case "left": + self = .left + case "right": + self = .right + case "topLeft": + self = .topLeft + case "topRight": + self = .topRight + case "bottomLeft": + self = .bottomLeft + case "bottomRight": + self = .bottomRight + default: + return nil + } + } + + var rawValueString: String { + switch self { + case .scaleToFill: + return "scaleToFill" + case .scaleAspectFit: + return "scaleAspectFit" + case .scaleAspectFill: + return "scaleAspectFill" + case .redraw: + return "redraw" + case .center: + return "center" + case .top: + return "top" + case .bottom: + return "bottom" + case .left: + return "left" + case .right: + return "right" + case .topLeft: + return "topLeft" + case .topRight: + return "topRight" + case .bottomLeft: + return "bottomLeft" + case .bottomRight: + return "bottomRight" + @unknown default: + return "" + } + } +} + +extension UIView.ContentMode: Codable { + public init(from decoder: Decoder) throws { + let typeContainer = try decoder.singleValueContainer() + let string = try typeContainer.decode(String.self) + guard let mode = UIView.ContentMode(rawValue: string) else { + throw ContentModeError.notAContentMode + } + self = mode + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.singleValueContainer() + try container.encode(rawValueString) + } +} diff --git a/MVMCoreUI/CustomPrimitives/Color.swift b/MVMCoreUI/CustomPrimitives/Color.swift index a34fbd45..165fa8ad 100644 --- a/MVMCoreUI/CustomPrimitives/Color.swift +++ b/MVMCoreUI/CustomPrimitives/Color.swift @@ -49,7 +49,7 @@ public final class Color: Codable { // MARK: - Class Initializers //-------------------------------------------------- - init(uiColor: UIColor) { + public init(uiColor: UIColor) { self.uiColor = uiColor hex = UIColor.hexString(for: uiColor) ?? "" determineRGBA() diff --git a/MVMCoreUI/Models/ModelProtocols/MoleculeModelProtocol.swift b/MVMCoreUI/Models/ModelProtocols/MoleculeModelProtocol.swift index 1ec0d13c..cec7b90a 100644 --- a/MVMCoreUI/Models/ModelProtocols/MoleculeModelProtocol.swift +++ b/MVMCoreUI/Models/ModelProtocols/MoleculeModelProtocol.swift @@ -3,7 +3,7 @@ import Foundation public protocol MoleculeModelProtocol: Model { var moleculeName: String? { get } - var backgroundColor: Color? { get set} + var backgroundColor: Color? { get set } } public extension MoleculeModelProtocol { diff --git a/MVMCoreUI/Molecules/DesignedComponents/List/RightVariable/ListRightVariablePayments.swift b/MVMCoreUI/Molecules/DesignedComponents/List/RightVariable/ListRightVariablePayments.swift new file mode 100644 index 00000000..2bfbc321 --- /dev/null +++ b/MVMCoreUI/Molecules/DesignedComponents/List/RightVariable/ListRightVariablePayments.swift @@ -0,0 +1,69 @@ +// +// ListRightVariablePayments.swift +// MVMCoreUI +// +// Created by Lekshmi S on 10/02/20. +// Copyright © 2020 Verizon Wireless. All rights reserved. +// + +import Foundation + +@objcMembers public class ListRightVariablePayments: TableViewCell { + + //----------------------------------------------------- + // MARK: - Outlets + //------------------------------------------------------- + + let leftLabel = Label.commonLabelB1(true) + let rightImage = MFLoadImageView(pinnedEdges: .all) + let stack = Stack(frame: .zero) + + //----------------------------------------------------- + // MARK: - View Lifecycle + //------------------------------------------------------- + + open override func updateView(_ size: CGFloat) { + super.updateView(size) + stack.updateView(size) + } + + override open func setupView() { + super.setupView() + guard leftLabel.superview == nil else { + return + } + stack.translatesAutoresizingMaskIntoConstraints = false + stack.stackItems = [StackItem(andContain: leftLabel),StackItem(andContain: rightImage)] + contentView.addSubview(stack) + containerHelper.constrainView(stack) + } + + //---------------------------------------------------- + // MARK: - Molecule + //------------------------------------------------------ + override open func reset() { + super.reset() + stack.reset() + } + + public override func setWithModel(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable : Any]?) { + super.setWithModel(model, delegateObject, additionalData) + guard let model = model as? ListRightVariablePaymentsModel else { return } + leftLabel.setWithModel(model.leftLabel, delegateObject, additionalData) + rightImage.setWithModel(model.image, delegateObject, additionalData) + + // Create a stack model to use for the internal stack and set the alignment of label and image + let leftLabel = StackItemModel() + leftLabel.horizontalAlignment = .leading + let rightImage = StackItemModel() + rightImage.horizontalAlignment = .fill + let stackModel = StackModel(molecules: [leftLabel,rightImage]) + stackModel.axis = .horizontal + stack.model = stackModel + stack.restack() + } + + public override class func estimatedHeight(forRow molecule: MoleculeModelProtocol?, delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? { + return 65 + } +} diff --git a/MVMCoreUI/Molecules/DesignedComponents/List/RightVariable/ListRightVariablePaymentsModel.swift b/MVMCoreUI/Molecules/DesignedComponents/List/RightVariable/ListRightVariablePaymentsModel.swift new file mode 100644 index 00000000..a8c6ff80 --- /dev/null +++ b/MVMCoreUI/Molecules/DesignedComponents/List/RightVariable/ListRightVariablePaymentsModel.swift @@ -0,0 +1,52 @@ +// +// ListRightVariablePaymentsModel.swift +// MVMCoreUI +// +// Created by Lekshmi S on 10/02/20. +// Copyright © 2020 Verizon Wireless. All rights reserved. +// + +import Foundation + +public class ListRightVariablePaymentsModel: ListItemModel, MoleculeModelProtocol { + + public static var identifier: String = "listRVImg" + public var image: ImageViewModel + public var leftLabel: LabelModel + + public init(image: ImageViewModel, leftLabel: LabelModel) { + self.leftLabel = leftLabel + self.image = image + super.init() + } + + static func createPayPalImage() -> ImageViewModel { + let image = ImageViewModel(image: "imageName_PayPal_logo") + image.localBundle = MVMCoreUIUtility.bundleForMVMCoreUI() + image.width = 70.0 + image.height = 18.0 + image.contentMode = .scaleAspectFit + return image + } + + private enum CodingKeys: String, CodingKey { + case moleculeName + case leftLabel + case image + } + + required public init(from decoder: Decoder) throws { + let typeContainer = try decoder.container(keyedBy: CodingKeys.self) + leftLabel = try typeContainer.decode(LabelModel.self, forKey: .leftLabel) + image = try typeContainer.decodeIfPresent(ImageViewModel.self, forKey: .image) ?? ListRightVariablePaymentsModel.createPayPalImage() + try super.init(from: decoder) + } + + public override func encode(to encoder: Encoder) throws { + try super.encode(to: encoder) + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(moleculeName, forKey: .moleculeName) + try container.encode(leftLabel, forKey: .leftLabel) + try container.encode(image, forKey: .image) + } +} diff --git a/MVMCoreUI/Molecules/Doughnut/DoughnutChartModel.swift b/MVMCoreUI/Molecules/Doughnut/DoughnutChartModel.swift index 42acd2f0..1e5c7dce 100644 --- a/MVMCoreUI/Molecules/Doughnut/DoughnutChartModel.swift +++ b/MVMCoreUI/Molecules/Doughnut/DoughnutChartModel.swift @@ -11,6 +11,7 @@ import Foundation @objcMembers public class DoughnutChartModel: MoleculeModelProtocol { public var backgroundColor: Color? public static var identifier: String = "doughnutChart" + public var moleculeName: String? = DoughnutChartModel.identifier public var title: LabelModel? public var subtitle: LabelModel? public var sections: [DoughnutChartItemModel] @@ -24,6 +25,7 @@ import Foundation @objcMembers public class DoughnutChartItemModel: MoleculeModelProtocol { public var backgroundColor: Color? public static var identifier: String = "doughnutChartItem" + public var moleculeName: String? = DoughnutChartItemModel.identifier public var label: LabelModel @Percent public var percent: CGFloat public var color: Color diff --git a/MVMCoreUI/Molecules/HorizontalCombinationViews/ImageHeadlineBodyModel.swift b/MVMCoreUI/Molecules/HorizontalCombinationViews/ImageHeadlineBodyModel.swift index 4966ce58..7f3d52dc 100644 --- a/MVMCoreUI/Molecules/HorizontalCombinationViews/ImageHeadlineBodyModel.swift +++ b/MVMCoreUI/Molecules/HorizontalCombinationViews/ImageHeadlineBodyModel.swift @@ -10,6 +10,7 @@ import Foundation public struct ImageHeadlineBodyModel: MoleculeModelProtocol { public static var identifier: String = "imageHeadlineBody" + public var moleculeName: String? = ImageHeadlineBodyModel.identifier public var backgroundColor: Color? public var image: ImageViewModel public var headlineBody: HeadlineBodyModel diff --git a/MVMCoreUI/Molecules/HorizontalCombinationViews/TabsModel.swift b/MVMCoreUI/Molecules/HorizontalCombinationViews/TabsModel.swift index f45c771d..8b69c590 100644 --- a/MVMCoreUI/Molecules/HorizontalCombinationViews/TabsModel.swift +++ b/MVMCoreUI/Molecules/HorizontalCombinationViews/TabsModel.swift @@ -22,6 +22,7 @@ public class TabsModel: MoleculeModelProtocol { case backgroundColor case selectedColor case selectedIndex + case moleculeName } public init(with tabs: [LabelModel]) { @@ -42,6 +43,7 @@ public class TabsModel: MoleculeModelProtocol { public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(moleculeName, forKey: .moleculeName) try container.encode(tabs, forKey: .tabs) try container.encode(backgroundColor, forKey: .backgroundColor) try container.encode(selectedColor, forKey: .selectedColor) diff --git a/MVMCoreUI/Molecules/HorizontalCombinationViews/TwoButtonViewModel.swift b/MVMCoreUI/Molecules/HorizontalCombinationViews/TwoButtonViewModel.swift index 5938692b..057203e9 100644 --- a/MVMCoreUI/Molecules/HorizontalCombinationViews/TwoButtonViewModel.swift +++ b/MVMCoreUI/Molecules/HorizontalCombinationViews/TwoButtonViewModel.swift @@ -21,6 +21,11 @@ public class TwoButtonViewModel: MoleculeModelProtocol { case secondaryButton } + public init(_ primaryButton: ButtonModel?, _ secondaryButton: ButtonModel?) { + self.primaryButton = primaryButton + self.secondaryButton = secondaryButton + } + required public init(from decoder: Decoder) throws { let typeContainer = try decoder.container(keyedBy: CodingKeys.self) backgroundColor = try typeContainer.decodeIfPresent(Color.self, forKey: .backgroundColor) diff --git a/MVMCoreUI/Molecules/Items/CarouselItemModel.swift b/MVMCoreUI/Molecules/Items/CarouselItemModel.swift index f2c88e9b..9fc218a7 100644 --- a/MVMCoreUI/Molecules/Items/CarouselItemModel.swift +++ b/MVMCoreUI/Molecules/Items/CarouselItemModel.swift @@ -14,7 +14,6 @@ import Foundation public var backgroundColor: Color? public var peakingUI: Bool? public var peakingArrowColor: Color? - public var moleculeName: String? private enum CodingKeys: String, CodingKey { case moleculeName @@ -25,7 +24,6 @@ import Foundation required public init(from decoder: Decoder) throws { let typeContainer = try decoder.container(keyedBy: CodingKeys.self) - moleculeName = try typeContainer.decodeIfPresent(String.self, forKey: .moleculeName) backgroundColor = try typeContainer.decodeIfPresent(Color.self, forKey: .backgroundColor) peakingUI = try typeContainer.decodeIfPresent(Bool.self, forKey: .peakingUI) peakingArrowColor = try typeContainer.decodeIfPresent(Color.self, forKey: .peakingArrowColor) diff --git a/MVMCoreUI/Molecules/Items/MoleculeStackItemModel.swift b/MVMCoreUI/Molecules/Items/MoleculeStackItemModel.swift index 4731ef34..dc01fd11 100644 --- a/MVMCoreUI/Molecules/Items/MoleculeStackItemModel.swift +++ b/MVMCoreUI/Molecules/Items/MoleculeStackItemModel.swift @@ -25,7 +25,7 @@ import Foundation public override init(with moleculeModel: MoleculeModelProtocol) { super.init(with: moleculeModel) } - + required public init(from decoder: Decoder) throws { let typeContainer = try decoder.container(keyedBy: CodingKeys.self) spacing = try typeContainer.decodeIfPresent(CGFloat.self, forKey: .spacing) diff --git a/MVMCoreUI/Molecules/Items/StackItemModel.swift b/MVMCoreUI/Molecules/Items/StackItemModel.swift index 2058353c..b7d1a269 100644 --- a/MVMCoreUI/Molecules/Items/StackItemModel.swift +++ b/MVMCoreUI/Molecules/Items/StackItemModel.swift @@ -10,6 +10,7 @@ import Foundation @objcMembers public class StackItemModel: ContainerModel, StackItemModelProtocol, MoleculeModelProtocol { public static var identifier: String = "simpleStackItem" + public var moleculeName: String? = StackItemModel.identifier public var backgroundColor: Color? public var spacing: CGFloat? public var percent: Int? diff --git a/MVMCoreUI/Molecules/LeftRightViews/ActionDetailWithImageModel.swift b/MVMCoreUI/Molecules/LeftRightViews/ActionDetailWithImageModel.swift index a397c1a1..9dbf53c0 100644 --- a/MVMCoreUI/Molecules/LeftRightViews/ActionDetailWithImageModel.swift +++ b/MVMCoreUI/Molecules/LeftRightViews/ActionDetailWithImageModel.swift @@ -10,6 +10,7 @@ import Foundation public struct ActionDetailWithImageModel: MoleculeModelProtocol { public static var identifier: String = "actionDetailWithImage" + public var moleculeName: String? = ActionDetailWithImageModel.identifier public var backgroundColor: Color? public var headlineBodyButton: HeadlineBodyButtonModel public var image: ImageViewModel diff --git a/MVMCoreUI/Molecules/LeftRightViews/CornerLabelsModel.swift b/MVMCoreUI/Molecules/LeftRightViews/CornerLabelsModel.swift index f4b67216..bb3e6f17 100644 --- a/MVMCoreUI/Molecules/LeftRightViews/CornerLabelsModel.swift +++ b/MVMCoreUI/Molecules/LeftRightViews/CornerLabelsModel.swift @@ -28,6 +28,7 @@ public class CornerLabelsModel: MoleculeModelProtocol { case bottomLeftLabel case bottomRightLabel case molecule + case moleculeName } required public init(from decoder: Decoder) throws { @@ -48,5 +49,6 @@ public class CornerLabelsModel: MoleculeModelProtocol { try container.encodeIfPresent(topRightLabel, forKey: .topRightLabel) try container.encodeIfPresent(bottomLeftLabel, forKey: .bottomLeftLabel) try container.encodeIfPresent(bottomRightLabel, forKey: .bottomRightLabel) + try container.encode(moleculeName, forKey: .moleculeName) } } diff --git a/MVMCoreUI/Molecules/LeftRightViews/ToggleMolecules/HeadlineBodyLinkToggleModel.swift b/MVMCoreUI/Molecules/LeftRightViews/ToggleMolecules/HeadlineBodyLinkToggleModel.swift index 5ce04f9c..aad8ec06 100644 --- a/MVMCoreUI/Molecules/LeftRightViews/ToggleMolecules/HeadlineBodyLinkToggleModel.swift +++ b/MVMCoreUI/Molecules/LeftRightViews/ToggleMolecules/HeadlineBodyLinkToggleModel.swift @@ -9,6 +9,7 @@ import Foundation public struct HeadlineBodyLinkToggleModel: MoleculeModelProtocol { public static var identifier: String = "headlineBodyLinkToggle" + public var moleculeName: String? = HeadlineBodyLinkToggleModel.identifier public var backgroundColor: Color? public var headlineBodyLink: HeadlineBodyLinkModel public var toggle: ToggleModel diff --git a/MVMCoreUI/Molecules/LeftRightViews/ToggleMolecules/HeadlineBodyToggleModel.swift b/MVMCoreUI/Molecules/LeftRightViews/ToggleMolecules/HeadlineBodyToggleModel.swift index dd7c2b1c..bb3391a6 100644 --- a/MVMCoreUI/Molecules/LeftRightViews/ToggleMolecules/HeadlineBodyToggleModel.swift +++ b/MVMCoreUI/Molecules/LeftRightViews/ToggleMolecules/HeadlineBodyToggleModel.swift @@ -11,6 +11,7 @@ import Foundation open class HeadlineBodyToggleModel: MoleculeModelProtocol { public static var identifier: String = "headlineBodyToggle" + public var moleculeName: String? = HeadlineBodyToggleModel.identifier open var backgroundColor: Color? open var headlineBody: HeadlineBodyModel open var toggle: ToggleModel diff --git a/MVMCoreUI/Molecules/LeftRightViews/ToggleMolecules/LabelToggleModel.swift b/MVMCoreUI/Molecules/LeftRightViews/ToggleMolecules/LabelToggleModel.swift index 7ed5857e..526ac6b9 100644 --- a/MVMCoreUI/Molecules/LeftRightViews/ToggleMolecules/LabelToggleModel.swift +++ b/MVMCoreUI/Molecules/LeftRightViews/ToggleMolecules/LabelToggleModel.swift @@ -10,7 +10,13 @@ import Foundation public class LabelToggleModel: MoleculeModelProtocol { public static var identifier: String = "labelToggle" + public var moleculeName: String? = LabelToggleModel.identifier public var backgroundColor: Color? public var label: LabelModel public var toggle: ToggleModel + + init(_ label: LabelModel, _ toggle: ToggleModel) { + self.label = label + self.toggle = toggle + } } diff --git a/MVMCoreUI/Molecules/ScrollerModel.swift b/MVMCoreUI/Molecules/ScrollerModel.swift index f92fe13b..91dc2e1c 100644 --- a/MVMCoreUI/Molecules/ScrollerModel.swift +++ b/MVMCoreUI/Molecules/ScrollerModel.swift @@ -10,5 +10,6 @@ import UIKit public class ScrollerModel: MoleculeContainerModel, MoleculeModelProtocol { public static var identifier: String = "scroller" + public var moleculeName: String? = ScrollerModel.identifier public var backgroundColor: Color? } diff --git a/MVMCoreUI/Molecules/VerticalCombinationViews/EyebrowHeadlineBodyLinkModel.swift b/MVMCoreUI/Molecules/VerticalCombinationViews/EyebrowHeadlineBodyLinkModel.swift index e9341535..81a38111 100644 --- a/MVMCoreUI/Molecules/VerticalCombinationViews/EyebrowHeadlineBodyLinkModel.swift +++ b/MVMCoreUI/Molecules/VerticalCombinationViews/EyebrowHeadlineBodyLinkModel.swift @@ -11,7 +11,7 @@ import Foundation struct EyebrowHeadlineBodyLinkModel: MoleculeModelProtocol { static var identifier: String = "eyebrowHeadlineBodyLink" var backgroundColor: Color? - + var moleculeName: String? = EyebrowHeadlineBodyLinkModel.identifier public var eyeBrow: LabelModel? public var headline: LabelModel? public var body: LabelModel? diff --git a/MVMCoreUI/Molecules/VerticalCombinationViews/HeadlineBodyButtonModel.swift b/MVMCoreUI/Molecules/VerticalCombinationViews/HeadlineBodyButtonModel.swift index 74e85ea9..ec97fda0 100644 --- a/MVMCoreUI/Molecules/VerticalCombinationViews/HeadlineBodyButtonModel.swift +++ b/MVMCoreUI/Molecules/VerticalCombinationViews/HeadlineBodyButtonModel.swift @@ -10,6 +10,7 @@ import Foundation public struct HeadlineBodyButtonModel: MoleculeModelProtocol { public static var identifier: String = "headlineBodyButton" + public var moleculeName: String? = HeadlineBodyButtonModel.identifier public var backgroundColor: Color? public var headlineBody: HeadlineBodyModel diff --git a/MVMCoreUI/Molecules/VerticalCombinationViews/HeadlineBodyLinkModel.swift b/MVMCoreUI/Molecules/VerticalCombinationViews/HeadlineBodyLinkModel.swift index 9eae8e03..27f0d670 100644 --- a/MVMCoreUI/Molecules/VerticalCombinationViews/HeadlineBodyLinkModel.swift +++ b/MVMCoreUI/Molecules/VerticalCombinationViews/HeadlineBodyLinkModel.swift @@ -10,6 +10,7 @@ import Foundation public struct HeadlineBodyLinkModel: MoleculeModelProtocol { public static var identifier: String = "headlineBodyLink" + public var moleculeName: String? = HeadlineBodyLinkModel.identifier public var headlineBody: HeadlineBodyModel public var link: LinkModel public var backgroundColor: Color? diff --git a/MVMCoreUI/Molecules/VerticalCombinationViews/HeadlineBodyModel.swift b/MVMCoreUI/Molecules/VerticalCombinationViews/HeadlineBodyModel.swift index 1fbe98e7..d7a08091 100644 --- a/MVMCoreUI/Molecules/VerticalCombinationViews/HeadlineBodyModel.swift +++ b/MVMCoreUI/Molecules/VerticalCombinationViews/HeadlineBodyModel.swift @@ -10,7 +10,7 @@ import Foundation @objcMembers public class HeadlineBodyModel: MoleculeModelProtocol { public static var identifier: String = "headlineBody" - public var moleculeName: String? + public var moleculeName: String? = HeadlineBodyModel.identifier public var headline: LabelModel? public var body: LabelModel? public var style: String? diff --git a/MVMCoreUI/Molecules/VerticalCombinationViews/Lists/StringAndMoleculeStack/StringAndMoleculeModel.swift b/MVMCoreUI/Molecules/VerticalCombinationViews/Lists/StringAndMoleculeStack/StringAndMoleculeModel.swift index caa00021..c66f27b8 100644 --- a/MVMCoreUI/Molecules/VerticalCombinationViews/Lists/StringAndMoleculeStack/StringAndMoleculeModel.swift +++ b/MVMCoreUI/Molecules/VerticalCombinationViews/Lists/StringAndMoleculeStack/StringAndMoleculeModel.swift @@ -38,5 +38,6 @@ public class StringAndMoleculeModel: MoleculeModelProtocol { try container.encodeIfPresent(backgroundColor, forKey: .backgroundColor) try container.encode(string, forKey: .string) try container.encodeModel(molecule, forKey: .molecule) + try container.encode(moleculeName, forKey: .moleculeName) } } diff --git a/MVMCoreUI/Organisms/CarouselModel.swift b/MVMCoreUI/Organisms/CarouselModel.swift index e43e6caa..79693135 100644 --- a/MVMCoreUI/Organisms/CarouselModel.swift +++ b/MVMCoreUI/Organisms/CarouselModel.swift @@ -53,7 +53,7 @@ import UIKit public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) - try container.encodeIfPresent(moleculeName, forKey: .moleculeName) + try container.encode(moleculeName, forKey: .moleculeName) try container.encodeIfPresent(backgroundColor, forKey: .backgroundColor) try container.encode(molecules, forKey: .molecules) try container.encode(spacing, forKey: .spacing) diff --git a/MVMCoreUI/Organisms/StackModel.swift b/MVMCoreUI/Organisms/StackModel.swift index 741946c5..8d670efb 100644 --- a/MVMCoreUI/Organisms/StackModel.swift +++ b/MVMCoreUI/Organisms/StackModel.swift @@ -45,5 +45,6 @@ import Foundation try container.encodeIfPresent(molecules, forKey: .molecules) try container.encodeIfPresent(axis.rawValueString, forKey: .axis) try container.encodeIfPresent(spacing, forKey: .spacing) + try container.encode(moleculeName, forKey: .moleculeName) } } diff --git a/MVMCoreUI/OtherHandlers/MVMCoreUIViewControllerMappingObject.m b/MVMCoreUI/OtherHandlers/MVMCoreUIViewControllerMappingObject.m index 7bdccc8e..5b9592cc 100644 --- a/MVMCoreUI/OtherHandlers/MVMCoreUIViewControllerMappingObject.m +++ b/MVMCoreUI/OtherHandlers/MVMCoreUIViewControllerMappingObject.m @@ -22,8 +22,7 @@ @"stack" : [[MVMCoreViewControllerProgrammaticMappingObject alloc] initWithClass:[MoleculeStackTemplate class]], @"centerMoleculeStack" : [[MVMCoreViewControllerProgrammaticMappingObject alloc] initWithClass:[MoleculeStackCenteredTemplate class]], @"list" : [[MVMCoreViewControllerProgrammaticMappingObject alloc] initWithClass:[MoleculeListTemplate class]], - @"threeLayer" : - [[MVMCoreViewControllerProgrammaticMappingObject alloc] initWithClass:[ThreeLayerTemplate class]] + @"threeLayer" : [[MVMCoreViewControllerProgrammaticMappingObject alloc] initWithClass:[ThreeLayerTemplate class]] } mutableCopy]; }); return viewControllerMapping; diff --git a/MVMCoreUI/OtherHandlers/MoleculeObjectMapping.swift b/MVMCoreUI/OtherHandlers/MoleculeObjectMapping.swift index 4b4ee536..ac7375d7 100644 --- a/MVMCoreUI/OtherHandlers/MoleculeObjectMapping.swift +++ b/MVMCoreUI/OtherHandlers/MoleculeObjectMapping.swift @@ -72,7 +72,7 @@ import Foundation MVMCoreUIMoleculeMappingObject.shared()?.register(viewClass: HeadlineBodyLinkToggle.self, viewModelClass: HeadlineBodyLinkToggleModel.self) MVMCoreUIMoleculeMappingObject.shared()?.register(viewClass: ActionDetailWithImage.self, viewModelClass: ActionDetailWithImageModel.self) MVMCoreUIMoleculeMappingObject.shared()?.register(viewClass: ListLeftVariableIconWithRightCaret.self, viewModelClass: ListLeftVariableIconWithRightCaretModel.self) - MVMCoreUIMoleculeMappingObject.shared()?.register(viewClass: ListLeftVariableCheckboxAllTextAndLinks.self, viewModelClass: ListLeftVariableCheckboxAllTextAndLinksModel.self) + MVMCoreUIMoleculeMappingObject.shared()?.register(viewClass: ListRightVariablePayments.self, viewModelClass: ListRightVariablePaymentsModel.self) // List items MVMCoreUIMoleculeMappingObject.shared()?.register(viewClass: MoleculeTableViewCell.self, viewModelClass: MoleculeListItemModel.self) diff --git a/MVMCoreUI/SupportingFiles/Media.xcassets/imageName_PayPal_logo.imageset/Contents.json b/MVMCoreUI/SupportingFiles/Media.xcassets/imageName_PayPal_logo.imageset/Contents.json new file mode 100644 index 00000000..b4c381b8 --- /dev/null +++ b/MVMCoreUI/SupportingFiles/Media.xcassets/imageName_PayPal_logo.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "paypal_horiz_logo.jpeg", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "paypal_horiz_logo@2x.jpeg", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "paypal_horiz_logo@3x.jpeg", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/MVMCoreUI/SupportingFiles/Media.xcassets/imageName_PayPal_logo.imageset/paypal_horiz_logo.jpeg b/MVMCoreUI/SupportingFiles/Media.xcassets/imageName_PayPal_logo.imageset/paypal_horiz_logo.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..95113ebf4001cf2eed20fbe23530dea3d1e475a9 GIT binary patch literal 1826 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 literal 0 HcmV?d00001 diff --git a/MVMCoreUI/SupportingFiles/Media.xcassets/imageName_PayPal_logo.imageset/paypal_horiz_logo@3x.jpeg b/MVMCoreUI/SupportingFiles/Media.xcassets/imageName_PayPal_logo.imageset/paypal_horiz_logo@3x.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..cbd78652ce3bdb9fb3e62b4b4522b2f40b1556a2 GIT binary patch literal 4606 zcmb7HXE+-Uw@>V?cI^={gCf;Xp`KAdx&b1tVY7XVlE?jr93fIuKX_b&jKGk_=n z4HY#FH5CmFH4QB-4IRT31_pY122K`MrYk(0SFiGLa&z+uf`$3`K?2;|A`lUfgru~L zG_SDSH94tkU@2)SAT2E|104eg0|SQ?A2*-W|JyEG0c>;t6~G83kPSe=2Bc&IUUmQo z000H$zm)#lXsBuFD5-!~06 zCDeyuZgW2@?n@g;+;NcytPIsg6n-2TT>}0GH}zjW3Lq^T07wO-prWLv`&<0Kx&LOe zQBkvVh$@|ag;nEvKcuu-xBGy(s>T7n<1U@~>*wga907@Nlij=P!L~(PJ34|65AAn*jMtA`RZk{k=!Ptk{Eowj<>iqi+eVve zMKWK>SdZC@kI;bvnfZn2<&>dYkJqdGdwpCvtmnkT?escK*@HgWAC}y|L-&7$Ic@Rb z?q0rQC-QXUT|V0yu0&50UfXWq{nh9}evifgq{hhn`nr;8w&c1AhUW=1IPb@k?LmdY z;~0E^_*&7nKGVxy#KR$naVe%nX^i-JwBLcV!vldKa9?aJMj({MD-eP0n5sm^Z`nGG z?P`zs(N!!@t-x6})t1bb)4PEag5GKNC;Hv&ii)XA% zSNn6!x&df3xE4mNF03HOU)O^@zDvw~>>%7Nd=WVR`@_jU!shF7hX$uSuj>tvey+1> zvh`(2rJ_~Ct;_l*8#%wPO16W9K38i{F7ZdaFLqw+im%&>%;XgPHzc+Pd~)O@AOYHY zhU$?u89`JD3n2pQd2MeNAB5!F*qY%yt*ayat@)i#M=UM@`n%yJM*EuQ<9k0|{5;nv zb30GI1WfLqDwwyt`j8zeo#z#p-n&+x!{S7`b?$j%ql$9s>7TKZS3CUlWxR-Q^M@6s z93YZtjXZx@(9JSZG`@f{haBJ|=Ud1fBaN1&oO;ML*N75}5{r^qHr-d=K$D4K7GFdm zQsRyFGpWywLQG*W|>vdln)(9$Z zi7tnMMJEF~(zC_u`>||!02EfITXJ46Fec&}s9*ZekUCLt01mVels1}_#8DPO`@R+%MP%OFVM!v|dOJ=Ds1{x%XN+b_=7B z(ZJk`R5e!r(3h)-bQ%LI01hn$DZQ|LJt%B#8C5i8vW~IG^t*=ax5a3KoU-6g3AeS4 zbBDVpuH;Ouss27Khg`MWdQkhdl^fNkZZXWNOExJ5QLpo&eZZPcDB8hyF#m`!O96{u zRD;~3cXA)uJGOV4Gt8nI+3_!-rOrZjRQ^@`NwU!~X`5j>D5Bo@=WsAVZqQ(k-xtiD zE^PY3E6NR~0cQ>oO>V4Zad>R^O@0#1^6sN2wfbAR5%KX_AO_ONiDK2h6Y@Jxc$xG0 z!fv#l`u0Pm20LrCM{Sy%CybslQ~Wo>0^Tr>1{BNEe$R4yshGVhmi;%w$7j@Og%9Nt+SX(~V~@B1LQ zY}^B^Lf143k;e2(%okeo`r^nY5d3B3spEMG?rh9glVR%CoPZo{5A{znp7*2B;+oMx zZU0>kK3NEeTpN`i2IzDW+8LDB@Y?8q;Dpe@ehtU^6X)4UPO4XyY6sOnGF$?xayOoxo0vdjV~_Z%Qc#GOVM`tQv=MDr?Qkw6uAD|HFkBG zZ@|Jxgm_{~=bnn*@Dt@)`Jv(>l~X<8Cz&kbN7PoW8qEdQQ^#C640ShD<>pcnF#Fbm zV?Q-phOe7*4#@1If`>_}V<_bpq=|1Dcbp!a5b&Kon^|y6c0LcQ`tOQC+c;!J0i&OC zPpGu7i+FJ)P{^iScWsv%KcGPK8b52&1vf9PRG7*06So>FE*R!2Op}u&AjOke%egEd zSBruc`^#*Vv!(qOB@)8VLhej2jAV}1kIuR1TKlF&J@tMu1Y1vhp;2*`27689|DAMa zeNGuy^!LR(K@>vnU(RS#9>NMBsUaS|ktW2-Zm3DWI$V3`z}T+X0b)Hxnh zHNHJ|w~AVotz8cVJdk($fh4$@x^6MAl>AuxOt4$!yT^MVI-r*-p&akfA+_#__0?&N zcODS{3VD9wbgz^w56B2R45{x%Je#ZhHl3T2_+W>$a51j1APqIOxUX@0q<+mtkFY?! zw-GM>#oKeb*KXw^2?o~v+fev{O=G*GiqI~H5BPqXh{Q{xjA z>+X`QZH5Nh^ok#Ko30x7y=#ZY=**@$GP{9lkcif9_g;l4VIy;aip_0aa!b{z+cMJhTQ3d?RJ#NKm2;T zE2R2bz;_(TR5 z(ZT&te??`fX7nNTMRu=Ia0e znV)O57*yczv(H>{GOoE;~*QNU1fn3^*Sb6@8Dk}3TTvmR-A z!4+ocJ@7O##{Zt#OA07i4q2U*6p)a4Z7Ol)C7=Cwi)$%)kE4|b(}p{}q2?jh0=r%Y zitV!^?GfIaeRhleK8a~hUV~MYg@4J+GdHJnxW}u*#@M`fsMvttVrC3!C=72=j^~;= z5%;oeXIX`MfzF0Pc1|8UUhba~pTlQ)uefd2-#;w&!*m6GpZohQ)7QvFKpJK)tY#NVCqA ztfu8QB1zF%ZY!|VrplktCX44VhkLCJ z?G3f)2(H*3IBL`Za4th!c@i_{ZIgI)iHrZ%1$Xe|PUA!kv1B2bm%(^wR(DMR=zi=G-N4z zwKzSg77MW4DE9$xxn37stzZ52?>#un5#2qX+=u4Fw0N4l+_$@K2W1DZ zHk=aX2p5ej!6iD{N#R!T2u+2o7Fn4FSy2)UQC)0=Jtdb}&tmjt?sZ)&H1tzynuz%H z9ze4fVRld9pI0k_(m^AMM4=1LJGdWuBlGSrHSpJ1P`cZ>b_9nwSr-p~=IG2xB&!pv zvBLZ%prfzI@p!<}!;P0lkKtvhKwk3oIrOhv$B#K1{`chm&)qGy@1*sq+B?}%Y)yo2 zhzAMz6%lHv@uN%i+;c+S=%x7hbfWHYe4SuhI5%F4vQ!Vildcb67P%_ z=zKK&h#rX)j2eaYq~iHeaO0yw9mh9sgK^3E%1sN-tPBUX`eBTS$EO92hd$%qHJrnq z@T?gGLb@ENy9G>Ea1mG!CuJ=|;?)CNB zynah9(N}D$_FZ1ghKxItbyrQ;Az_u11Y8T^&V+<5?}S31Sdm&izX%9(|!<&pa4cz>K5B@U}Wyq$hka!Z{uEeU*`_W9N z1wZ&k)7m>sZY@ojyu3H_OyO2@h7h|Fxvq+Nh}hkxjYi+>X$4?|nO0T~_e+;2biLvA z&+H4+?Q359SKat_p|F-Ip9R$)#z49Trqu?IglRVp zw#Ldp%N%(%4g|BD%Ds|-Jwvs5=W7$KDcN}(xsk+yF?CY}!ZU-N&zQ9Aq|G#g0ZYy+qUNJ0Dp> iR+f_wddt=apA39AYjhTk880w1>-mo|bOnr;-~S7Sc4Ha< literal 0 HcmV?d00001 diff --git a/MVMCoreUI/Templates/MoleculeListTemplate.swift b/MVMCoreUI/Templates/MoleculeListTemplate.swift index 01d0a5e6..9741f110 100644 --- a/MVMCoreUI/Templates/MoleculeListTemplate.swift +++ b/MVMCoreUI/Templates/MoleculeListTemplate.swift @@ -23,8 +23,12 @@ open class MoleculeListTemplate: ThreeLayerTableViewController, TemplateProtocol // MARK: - Computed Properties //-------------------------------------------------- - @objc public override func parsePageJSON() throws { - try parseTemplateJSON() + open override func parsePageJSON(_ error: NSErrorPointer) { + do { + try parseTemplateJSON() + } catch let parseError { + error?.pointee = parseError as NSError + } } open override var loadObject: MVMCoreLoadObject? { diff --git a/MVMCoreUI/Templates/MoleculeStackTemplate.swift b/MVMCoreUI/Templates/MoleculeStackTemplate.swift index 03d21c6b..ef7a470d 100644 --- a/MVMCoreUI/Templates/MoleculeStackTemplate.swift +++ b/MVMCoreUI/Templates/MoleculeStackTemplate.swift @@ -12,8 +12,12 @@ open class MoleculeStackTemplate: ThreeLayerViewController, TemplateProtocol { var observer: NSKeyValueObservation? public var templateModel: StackPageTemplateModel? - public override func parsePageJSON() throws { - try parseTemplateJSON() + open override func parsePageJSON(_ error: NSErrorPointer) { + do { + try parseTemplateJSON() + } catch let parseError { + error?.pointee = parseError as NSError + } } open override var loadObject: MVMCoreLoadObject? { diff --git a/MVMCoreUI/Templates/ThreeLayerTemplate.swift b/MVMCoreUI/Templates/ThreeLayerTemplate.swift index 785d1055..eb822279 100644 --- a/MVMCoreUI/Templates/ThreeLayerTemplate.swift +++ b/MVMCoreUI/Templates/ThreeLayerTemplate.swift @@ -11,8 +11,13 @@ import UIKit @objcMembers open class ThreeLayerTemplate: ThreeLayerViewController, TemplateProtocol { public var templateModel: ThreeLayerPageTemplateModel? - @objc public override func parsePageJSON() throws { - try parseTemplateJSON() + + open override func parsePageJSON(_ error: NSErrorPointer) { + do { + try parseTemplateJSON() + } catch let parseError { + error?.pointee = parseError as NSError + } } override open func viewDidLoad() { diff --git a/MVMCoreUI/TopAlert/MVMCoreUITopAlertView.m b/MVMCoreUI/TopAlert/MVMCoreUITopAlertView.m index 947e6ffc..d0a027b3 100644 --- a/MVMCoreUI/TopAlert/MVMCoreUITopAlertView.m +++ b/MVMCoreUI/TopAlert/MVMCoreUITopAlertView.m @@ -108,7 +108,7 @@ NSString * const MFAccTopAlertClosed = @"Top alert notification is closed."; - (nonnull UIColor *)getBackgroundColorForType:(nullable NSString *)type { if ([type isEqualToString:ValueTypeError]) { - return [UIColor mfPumpkinColor]; + return [UIColor mvmOrange]; } else { return [UIColor mfShamrock]; } From d7a13704f2aadc4329b45fc523c8aefeb6399303 Mon Sep 17 00:00:00 2001 From: Subhankar Acharya Date: Thu, 20 Feb 2020 15:56:02 +0530 Subject: [PATCH 10/12] Reference files --- MVMCoreUI.xcodeproj/project.pbxproj | 8 ++++++++ MVMCoreUI/OtherHandlers/MoleculeObjectMapping.swift | 1 + 2 files changed, 9 insertions(+) diff --git a/MVMCoreUI.xcodeproj/project.pbxproj b/MVMCoreUI.xcodeproj/project.pbxproj index 281a0672..6fed15b6 100644 --- a/MVMCoreUI.xcodeproj/project.pbxproj +++ b/MVMCoreUI.xcodeproj/project.pbxproj @@ -96,6 +96,8 @@ 0AE14F64238315D2005417F8 /* TextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AE14F63238315D2005417F8 /* TextField.swift */; }; 31BE15CB23D8924D00452370 /* CheckboxLabelModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 31BE15C923D8924C00452370 /* CheckboxLabelModel.swift */; }; 31BE15CC23D8924D00452370 /* CheckboxModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 31BE15CA23D8924C00452370 /* CheckboxModel.swift */; }; + 522679C123FE886900906CBA /* ListLeftVariableCheckboxAllTextAndLinks.swift in Sources */ = {isa = PBXBuildFile; fileRef = 522679BF23FE886900906CBA /* ListLeftVariableCheckboxAllTextAndLinks.swift */; }; + 522679C223FE886900906CBA /* ListLeftVariableCheckboxAllTextAndLinksModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 522679C023FE886900906CBA /* ListLeftVariableCheckboxAllTextAndLinksModel.swift */; }; 5248BFEC23F12E350059236A /* ListThreeColumnPlanDataDivider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5248BFEA23F12E350059236A /* ListThreeColumnPlanDataDivider.swift */; }; 5248BFED23F12E350059236A /* ListThreeColumnPlanDataDividerModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5248BFEB23F12E350059236A /* ListThreeColumnPlanDataDividerModel.swift */; }; 8D24041123E7FB9E009E23BE /* ListLeftVariableIconWithRightCaret.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D24041023E7FB9E009E23BE /* ListLeftVariableIconWithRightCaret.swift */; }; @@ -422,6 +424,8 @@ 0AE14F63238315D2005417F8 /* TextField.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextField.swift; sourceTree = ""; }; 31BE15C923D8924C00452370 /* CheckboxLabelModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CheckboxLabelModel.swift; sourceTree = ""; }; 31BE15CA23D8924C00452370 /* CheckboxModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CheckboxModel.swift; sourceTree = ""; }; + 522679BF23FE886900906CBA /* ListLeftVariableCheckboxAllTextAndLinks.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ListLeftVariableCheckboxAllTextAndLinks.swift; sourceTree = ""; }; + 522679C023FE886900906CBA /* ListLeftVariableCheckboxAllTextAndLinksModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ListLeftVariableCheckboxAllTextAndLinksModel.swift; sourceTree = ""; }; 5248BFEA23F12E350059236A /* ListThreeColumnPlanDataDivider.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ListThreeColumnPlanDataDivider.swift; sourceTree = ""; }; 5248BFEB23F12E350059236A /* ListThreeColumnPlanDataDividerModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ListThreeColumnPlanDataDividerModel.swift; sourceTree = ""; }; 8D24041023E7FB9E009E23BE /* ListLeftVariableIconWithRightCaret.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ListLeftVariableIconWithRightCaret.swift; sourceTree = ""; }; @@ -985,6 +989,8 @@ D22B38EB23F4E0AE00490EF6 /* LeftVariable */ = { isa = PBXGroup; children = ( + 522679BF23FE886900906CBA /* ListLeftVariableCheckboxAllTextAndLinks.swift */, + 522679C023FE886900906CBA /* ListLeftVariableCheckboxAllTextAndLinksModel.swift */, 8D24041423E7FC0B009E23BE /* ListLeftVariableIconWithRightCaretModel.swift */, 8D24041023E7FB9E009E23BE /* ListLeftVariableIconWithRightCaret.swift */, ); @@ -1652,6 +1658,7 @@ DBC4392122491730001AB423 /* LabelWithInternalButton.swift in Sources */, D224798C231450C8003FCCF9 /* HeadlineBodyToggle.swift in Sources */, 017BEB442362192F0024EF95 /* MVMCoreUIMoleculeMappingObject+ModelExtension.swift in Sources */, + 522679C123FE886900906CBA /* ListLeftVariableCheckboxAllTextAndLinks.swift in Sources */, 9445890C2385BCE300DE9FD4 /* ProgressBarModel.swift in Sources */, 9445891F2385D2E900DE9FD4 /* CaretViewModel.swift in Sources */, 01C851D323CF9E740021F976 /* LabelToggleModel.swift in Sources */, @@ -1777,6 +1784,7 @@ D2FB151B23A2B65B00C20E10 /* MoleculeContainer.swift in Sources */, D2A638FD22CA98280052ED1F /* HeadlineBody.swift in Sources */, D29DF16121E69996003B2FB9 /* MFViewController.m in Sources */, + 522679C223FE886900906CBA /* ListLeftVariableCheckboxAllTextAndLinksModel.swift in Sources */, 0ABD1371237DB0450081388D /* ItemDropdownEntryField.swift in Sources */, 8D24041123E7FB9E009E23BE /* ListLeftVariableIconWithRightCaret.swift in Sources */, D2E1FAE12268E81D00AEFD8C /* MoleculeListTemplate.swift in Sources */, diff --git a/MVMCoreUI/OtherHandlers/MoleculeObjectMapping.swift b/MVMCoreUI/OtherHandlers/MoleculeObjectMapping.swift index ac7375d7..b3bfd241 100644 --- a/MVMCoreUI/OtherHandlers/MoleculeObjectMapping.swift +++ b/MVMCoreUI/OtherHandlers/MoleculeObjectMapping.swift @@ -72,6 +72,7 @@ import Foundation MVMCoreUIMoleculeMappingObject.shared()?.register(viewClass: HeadlineBodyLinkToggle.self, viewModelClass: HeadlineBodyLinkToggleModel.self) MVMCoreUIMoleculeMappingObject.shared()?.register(viewClass: ActionDetailWithImage.self, viewModelClass: ActionDetailWithImageModel.self) MVMCoreUIMoleculeMappingObject.shared()?.register(viewClass: ListLeftVariableIconWithRightCaret.self, viewModelClass: ListLeftVariableIconWithRightCaretModel.self) + MVMCoreUIMoleculeMappingObject.shared()?.register(viewClass: ListLeftVariableCheckboxAllTextAndLinks.self, viewModelClass: ListLeftVariableCheckboxAllTextAndLinksModel.self) MVMCoreUIMoleculeMappingObject.shared()?.register(viewClass: ListRightVariablePayments.self, viewModelClass: ListRightVariablePaymentsModel.self) // List items From eacaff5a104fe372871694ad196902fbd55a2243 Mon Sep 17 00:00:00 2001 From: Subhankar Acharya Date: Thu, 20 Feb 2020 17:58:50 +0530 Subject: [PATCH 11/12] changing eybrow variable as per contract --- .../VerticalCombinationViews/EyebrowHeadlineBodyLink.swift | 2 +- .../VerticalCombinationViews/EyebrowHeadlineBodyLinkModel.swift | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/MVMCoreUI/Molecules/VerticalCombinationViews/EyebrowHeadlineBodyLink.swift b/MVMCoreUI/Molecules/VerticalCombinationViews/EyebrowHeadlineBodyLink.swift index ff8e6cfa..76eb447f 100644 --- a/MVMCoreUI/Molecules/VerticalCombinationViews/EyebrowHeadlineBodyLink.swift +++ b/MVMCoreUI/Molecules/VerticalCombinationViews/EyebrowHeadlineBodyLink.swift @@ -47,7 +47,7 @@ import UIKit // MARK:- ModelMoleculeViewProtocol open override func setWithModel(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable : Any]?) { super.setWithModel(model, delegateObject, additionalData) - eyebrow.setWithModel(casteModel?.eyeBrow, delegateObject, additionalData) + eyebrow.setWithModel(casteModel?.eyebrow, delegateObject, additionalData) headline.setWithModel(casteModel?.headline, delegateObject, additionalData) body.setWithModel(casteModel?.body, delegateObject, additionalData) link.setWithModel(casteModel?.link, delegateObject, additionalData) diff --git a/MVMCoreUI/Molecules/VerticalCombinationViews/EyebrowHeadlineBodyLinkModel.swift b/MVMCoreUI/Molecules/VerticalCombinationViews/EyebrowHeadlineBodyLinkModel.swift index 81a38111..e63d69e2 100644 --- a/MVMCoreUI/Molecules/VerticalCombinationViews/EyebrowHeadlineBodyLinkModel.swift +++ b/MVMCoreUI/Molecules/VerticalCombinationViews/EyebrowHeadlineBodyLinkModel.swift @@ -12,7 +12,7 @@ struct EyebrowHeadlineBodyLinkModel: MoleculeModelProtocol { static var identifier: String = "eyebrowHeadlineBodyLink" var backgroundColor: Color? var moleculeName: String? = EyebrowHeadlineBodyLinkModel.identifier - public var eyeBrow: LabelModel? + public var eyebrow: LabelModel? public var headline: LabelModel? public var body: LabelModel? public var link: LinkModel? From cc5536a8d1c9f255b5912d0e1dba6d670774de40 Mon Sep 17 00:00:00 2001 From: "Pfeil, Scott Robert" Date: Thu, 20 Feb 2020 19:07:54 -0500 Subject: [PATCH 12/12] Minor fixes --- MVMCoreUI.xcodeproj/project.pbxproj | 2 +- ...tLeftVariableCheckboxAllTextAndLinks.swift | 26 ++++++++++--------- ...VariableCheckboxAllTextAndLinksModel.swift | 5 ++-- .../EyebrowHeadlineBodyLink.swift | 3 --- .../EyebrowHeadlineBodyLinkModel.swift | 8 +++--- 5 files changed, 21 insertions(+), 23 deletions(-) diff --git a/MVMCoreUI.xcodeproj/project.pbxproj b/MVMCoreUI.xcodeproj/project.pbxproj index 7ed0a2e3..4afd3a24 100644 --- a/MVMCoreUI.xcodeproj/project.pbxproj +++ b/MVMCoreUI.xcodeproj/project.pbxproj @@ -995,8 +995,8 @@ D22B38EB23F4E0AE00490EF6 /* LeftVariable */ = { isa = PBXGroup; children = ( - 522679BF23FE886900906CBA /* ListLeftVariableCheckboxAllTextAndLinks.swift */, 522679C023FE886900906CBA /* ListLeftVariableCheckboxAllTextAndLinksModel.swift */, + 522679BF23FE886900906CBA /* ListLeftVariableCheckboxAllTextAndLinks.swift */, 8D24041423E7FC0B009E23BE /* ListLeftVariableIconWithRightCaretModel.swift */, 8D24041023E7FB9E009E23BE /* ListLeftVariableIconWithRightCaret.swift */, ); diff --git a/MVMCoreUI/Molecules/DesignedComponents/List/LeftVariable/ListLeftVariableCheckboxAllTextAndLinks.swift b/MVMCoreUI/Molecules/DesignedComponents/List/LeftVariable/ListLeftVariableCheckboxAllTextAndLinks.swift index d83e8389..553e6359 100644 --- a/MVMCoreUI/Molecules/DesignedComponents/List/LeftVariable/ListLeftVariableCheckboxAllTextAndLinks.swift +++ b/MVMCoreUI/Molecules/DesignedComponents/List/LeftVariable/ListLeftVariableCheckboxAllTextAndLinks.swift @@ -9,11 +9,11 @@ import Foundation @objcMembers public class ListLeftVariableCheckboxAllTextAndLinks: TableViewCell { - - let checkbox = Checkbox(frame: .zero) - let eyebrowHeadlineBodyLink = EyebrowHeadlineBodyLink(frame: .zero) - let stack = Stack(frame: .zero) + public let checkbox = Checkbox(frame: .zero) + public let eyebrowHeadlineBodyLink = EyebrowHeadlineBodyLink(frame: .zero) + public let stack = Stack(frame: .zero) + // MARK: - View Lifecycle open override func updateView(_ size: CGFloat) { super.updateView(size) stack.updateView(size) @@ -21,20 +21,18 @@ import Foundation override open func setupView() { super.setupView() - guard checkbox.superview == nil else { - return - } - stack.translatesAutoresizingMaskIntoConstraints = false stack.stackItems = [StackItem(andContain: checkbox),StackItem(andContain: eyebrowHeadlineBodyLink)] contentView.addSubview(stack) containerHelper.constrainView(stack) } + // MARK:- ModelMoleculeViewProtocol override open func reset() { super.reset() stack.reset() } + // MARK:- MVMCoreUIMoleculeViewProtocol public override func setWithModel(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable : Any]?) { super.setWithModel(model, delegateObject, additionalData) guard let model = model as? ListLeftVariableCheckboxAllTextAndLinksModel else { return} @@ -42,13 +40,17 @@ import Foundation eyebrowHeadlineBodyLink.setWithModel(model.eyebrowHeadlineBodyLink, delegateObject, additionalData) // Create a stack model to use for the internal stack and set the alignment of labels - let checkbox = StackItemModel(percent: 10) - checkbox.horizontalAlignment = .leading - let eyebrowHeadlineBodyLink = StackItemModel(percent: 90) - eyebrowHeadlineBodyLink.horizontalAlignment = .fill + let checkbox = StackItemModel() + checkbox.horizontalAlignment = .fill + let eyebrowHeadlineBodyLink = StackItemModel() + eyebrowHeadlineBodyLink.horizontalAlignment = .leading let stackModel = StackModel(molecules: [checkbox,eyebrowHeadlineBodyLink]) stackModel.axis = .horizontal stack.model = stackModel stack.restack() } + + public override class func estimatedHeight(forRow molecule: MoleculeModelProtocol?, delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? { + return 140 + } } diff --git a/MVMCoreUI/Molecules/DesignedComponents/List/LeftVariable/ListLeftVariableCheckboxAllTextAndLinksModel.swift b/MVMCoreUI/Molecules/DesignedComponents/List/LeftVariable/ListLeftVariableCheckboxAllTextAndLinksModel.swift index 80ab9506..2fb89b1e 100644 --- a/MVMCoreUI/Molecules/DesignedComponents/List/LeftVariable/ListLeftVariableCheckboxAllTextAndLinksModel.swift +++ b/MVMCoreUI/Molecules/DesignedComponents/List/LeftVariable/ListLeftVariableCheckboxAllTextAndLinksModel.swift @@ -9,12 +9,11 @@ import Foundation public class ListLeftVariableCheckboxAllTextAndLinksModel: ListItemModel, MoleculeModelProtocol { - public static var identifier: String = "listLVCB" public var checkbox: CheckboxModel - var eyebrowHeadlineBodyLink: EyebrowHeadlineBodyLinkModel + public var eyebrowHeadlineBodyLink: EyebrowHeadlineBodyLinkModel - init(checkbox: CheckboxModel, eyebrowHeadlineBodyLink: EyebrowHeadlineBodyLinkModel) { + public init(checkbox: CheckboxModel, eyebrowHeadlineBodyLink: EyebrowHeadlineBodyLinkModel) { self.checkbox = checkbox self.eyebrowHeadlineBodyLink = eyebrowHeadlineBodyLink super.init() diff --git a/MVMCoreUI/Molecules/VerticalCombinationViews/EyebrowHeadlineBodyLink.swift b/MVMCoreUI/Molecules/VerticalCombinationViews/EyebrowHeadlineBodyLink.swift index 76eb447f..8f206e35 100644 --- a/MVMCoreUI/Molecules/VerticalCombinationViews/EyebrowHeadlineBodyLink.swift +++ b/MVMCoreUI/Molecules/VerticalCombinationViews/EyebrowHeadlineBodyLink.swift @@ -21,9 +21,6 @@ import UIKit // MARK: - MFViewProtocol open override func setupView() { super.setupView() - guard stack.superview == nil else { - return - } stack.stackItems = [StackItem(andContain: eyebrow),StackItem(andContain: headline),StackItem(andContain: body),StackItem(andContain: link)] addSubview(stack) NSLayoutConstraint.constraintPinSubview(toSuperview: stack) diff --git a/MVMCoreUI/Molecules/VerticalCombinationViews/EyebrowHeadlineBodyLinkModel.swift b/MVMCoreUI/Molecules/VerticalCombinationViews/EyebrowHeadlineBodyLinkModel.swift index e63d69e2..913933d9 100644 --- a/MVMCoreUI/Molecules/VerticalCombinationViews/EyebrowHeadlineBodyLinkModel.swift +++ b/MVMCoreUI/Molecules/VerticalCombinationViews/EyebrowHeadlineBodyLinkModel.swift @@ -8,10 +8,10 @@ import Foundation -struct EyebrowHeadlineBodyLinkModel: MoleculeModelProtocol { - static var identifier: String = "eyebrowHeadlineBodyLink" - var backgroundColor: Color? - var moleculeName: String? = EyebrowHeadlineBodyLinkModel.identifier +public struct EyebrowHeadlineBodyLinkModel: MoleculeModelProtocol { + public static var identifier: String = "eyebrowHeadlineBodyLink" + public var moleculeName: String? = EyebrowHeadlineBodyLinkModel.identifier + public var backgroundColor: Color? public var eyebrow: LabelModel? public var headline: LabelModel? public var body: LabelModel?