From 758279f30aa1d37f0ef3a7a3675a969240f8451d Mon Sep 17 00:00:00 2001 From: Lekshmi S Date: Mon, 24 Feb 2020 15:55:46 +0530 Subject: [PATCH] 18979 - List - Two Column - Compare Changes story initial commit. Added molecule and model class. --- MVMCoreUI.xcodeproj/project.pbxproj | 8 ++ .../ListTwoColumnCompareChanges.swift | 135 ++++++++++++++++++ .../ListTwoColumnCompareChangesModel.swift | 83 +++++++++++ .../OtherHandlers/MoleculeObjectMapping.swift | 1 + 4 files changed, 227 insertions(+) create mode 100644 MVMCoreUI/Molecules/DesignedComponents/SectionDividers/ListTwoColumnCompareChanges.swift create mode 100644 MVMCoreUI/Molecules/DesignedComponents/SectionDividers/ListTwoColumnCompareChangesModel.swift diff --git a/MVMCoreUI.xcodeproj/project.pbxproj b/MVMCoreUI.xcodeproj/project.pbxproj index 4afd3a24..a5a8d783 100644 --- a/MVMCoreUI.xcodeproj/project.pbxproj +++ b/MVMCoreUI.xcodeproj/project.pbxproj @@ -132,6 +132,8 @@ 94FB966323D797DA003D482B /* MFTextButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 94FB966123D797DA003D482B /* MFTextButton.m */; }; AA11A41F23F15D3100D7962F /* ListRightVariablePayments.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA11A41E23F15D3100D7962F /* ListRightVariablePayments.swift */; }; AA11A42123F15D7000D7962F /* ListRightVariablePaymentsModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA11A42023F15D7000D7962F /* ListRightVariablePaymentsModel.swift */; }; + AA3320F42403A9B20052BBAC /* ListTwoColumnCompareChanges.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA3320F32403A9B20052BBAC /* ListTwoColumnCompareChanges.swift */; }; + AA3320F62403A9D10052BBAC /* ListTwoColumnCompareChangesModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA3320F52403A9D10052BBAC /* ListTwoColumnCompareChangesModel.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 */; }; @@ -461,6 +463,8 @@ 94FB966123D797DA003D482B /* MFTextButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MFTextButton.m; 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 = ""; }; + AA3320F32403A9B20052BBAC /* ListTwoColumnCompareChanges.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ListTwoColumnCompareChanges.swift; sourceTree = ""; }; + AA3320F52403A9D10052BBAC /* ListTwoColumnCompareChangesModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ListTwoColumnCompareChangesModel.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 = ""; }; @@ -1007,6 +1011,8 @@ isa = PBXGroup; children = ( D22B38ED23F4E11100490EF6 /* ThreeColumn */, + AA3320F32403A9B20052BBAC /* ListTwoColumnCompareChanges.swift */, + AA3320F52403A9D10052BBAC /* ListTwoColumnCompareChangesModel.swift */, ); path = SectionDividers; sourceTree = ""; @@ -1775,6 +1781,7 @@ 94C2D9842386F3F80006CF46 /* LabelAttributeModel.swift in Sources */, 944589212385D6E900DE9FD4 /* DashLineModel.swift in Sources */, D2E2A99623D8CF85000B42E6 /* HeadlineBodyLinkToggleModel.swift in Sources */, + AA3320F42403A9B20052BBAC /* ListTwoColumnCompareChanges.swift in Sources */, C6FA7D5323C77A4A00A3614A /* StringAndMoleculeStack.swift in Sources */, 94AF4A3F23E9D13900676048 /* MFCaretButton.m in Sources */, D29DF27A21E7A533003B2FB9 /* MVMCoreUISession.m in Sources */, @@ -1787,6 +1794,7 @@ D2A6390522CBCE160052ED1F /* MoleculeCollectionViewCell.swift in Sources */, D2A6390122CBB1820052ED1F /* Carousel.swift in Sources */, D29DF2C721E7BF57003B2FB9 /* MFTabBarInteractor.m in Sources */, + AA3320F62403A9D10052BBAC /* ListTwoColumnCompareChangesModel.swift in Sources */, C7F8012123E8303200396FBD /* ListRVWheel.swift in Sources */, D29DF29521E7ADB8003B2FB9 /* ProgrammaticScrollViewController.m in Sources */, D2FB151B23A2B65B00C20E10 /* MoleculeContainer.swift in Sources */, diff --git a/MVMCoreUI/Molecules/DesignedComponents/SectionDividers/ListTwoColumnCompareChanges.swift b/MVMCoreUI/Molecules/DesignedComponents/SectionDividers/ListTwoColumnCompareChanges.swift new file mode 100644 index 00000000..36e30738 --- /dev/null +++ b/MVMCoreUI/Molecules/DesignedComponents/SectionDividers/ListTwoColumnCompareChanges.swift @@ -0,0 +1,135 @@ +// +// ListTwoColumnCompareChanges.swift +// MVMCoreUI +// +// Created by Lekshmi S on 24/02/20. +// Copyright © 2020 Verizon Wireless. All rights reserved. +// + +import Foundation + +@objcMembers open class ListTwoColumnCompareChanges: TableViewCell { + + //------------------------------------------------------- + // MARK: - Outlets + //------------------------------------------------------- + + let leftHeadline1 = Label.commonLabelB1(true) + let leftHeadline2 = Label.commonLabelB1(true) + let leftHeadline3 = Label.commonLabelB1(true) + let leftBody = Label.commonLabelB2(true) + let leftLink = Link() + let rightHeadline1 = Label.commonLabelB1(true) + let rightHeadline2 = Label.commonLabelB1(true) + let rightHeadline3 = Label.commonLabelB1(true) + let rightBody = Label.commonLabelB2(true) + let rightLink = Link() + let containerView = View() + let leftVerticalStack = UIStackView() + let rightVerticalStack = UIStackView() + + //------------------------------------------------------- + // MARK: - View Lifecycle + //------------------------------------------------------- + + open override func updateView(_ size: CGFloat) { + super.updateView(size) + containerView.updateView(size) + leftHeadline1.updateView(size) + leftHeadline2.updateView(size) + leftHeadline3.updateView(size) + leftBody.updateView(size) + leftLink.updateView(size) + rightHeadline1.updateView(size) + rightHeadline2.updateView(size) + rightHeadline3.updateView(size) + rightBody.updateView(size) + rightLink.updateView(size) + } + + open override func setupView() { + super.setupView() + guard leftHeadline1.superview == nil else { + return + } + containerView.translatesAutoresizingMaskIntoConstraints = false + leftVerticalStack.translatesAutoresizingMaskIntoConstraints = false + rightVerticalStack.translatesAutoresizingMaskIntoConstraints = false + leftVerticalStack.addArrangedSubview(leftHeadline1) + leftVerticalStack.addArrangedSubview(leftHeadline2) + leftVerticalStack.addArrangedSubview(leftHeadline3) + leftVerticalStack.addArrangedSubview(leftBody) + leftVerticalStack.addArrangedSubview(leftLink) + leftVerticalStack.axis = .vertical + leftVerticalStack.alignment = .leading + rightVerticalStack.addArrangedSubview(rightHeadline1) + rightVerticalStack.addArrangedSubview(rightHeadline2) + rightVerticalStack.addArrangedSubview(rightHeadline3) + rightVerticalStack.addArrangedSubview(rightBody) + rightVerticalStack.addArrangedSubview(rightLink) + rightVerticalStack.axis = .vertical + rightVerticalStack.alignment = .leading + containerView.addSubview(leftVerticalStack) + containerView.addSubview(rightVerticalStack) + + //containerView constraints + contentView.addSubview(containerView) + containerHelper.constrainView(containerView) + + //leftVerticalStack constraints + leftVerticalStack.leadingAnchor.constraint(equalTo: containerView.leadingAnchor).isActive = true + leftVerticalStack.topAnchor.constraint(equalTo: containerView.topAnchor).isActive = true + leftVerticalStack.widthAnchor.constraint(equalTo: containerView.widthAnchor, multiplier: 0.45).isActive = true + containerView.bottomAnchor.constraint(greaterThanOrEqualTo: leftVerticalStack.bottomAnchor).isActive = true + leftVerticalStack.setCustomSpacing(5.0, after: leftHeadline1) + leftVerticalStack.setCustomSpacing(5.0, after: leftHeadline2) + leftVerticalStack.setCustomSpacing(5.0, after: leftBody) + + //rightVerticalStack constraints + rightVerticalStack.topAnchor.constraint(equalTo: leftVerticalStack.topAnchor).isActive = true + rightVerticalStack.leadingAnchor.constraint(equalTo: leftVerticalStack.trailingAnchor).isActive = true + rightVerticalStack.trailingAnchor.constraint(equalTo: containerView.trailingAnchor).isActive = true + rightVerticalStack.widthAnchor.constraint(equalTo: containerView.widthAnchor, multiplier: 0.45).isActive = true + containerView.bottomAnchor.constraint(greaterThanOrEqualTo: rightVerticalStack.bottomAnchor).isActive = true + rightVerticalStack.setCustomSpacing(5.0, after: rightHeadline1) + rightVerticalStack.setCustomSpacing(5.0, after: rightHeadline2) + rightVerticalStack.setCustomSpacing(5.0, after: rightBody) + } + + //------------------------------------------------------ + // MARK: - Molecule + //------------------------------------------------------ + + public override func setWithModel(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable : Any]?) { + super.setWithModel(model, delegateObject, additionalData) + guard let model = model as? ListTwoColumnCompareChangesModel else { return } + leftHeadline1.setWithModel(model.leftHeadline1, delegateObject, additionalData) + leftHeadline2.setWithModel(model.leftHeadline2, delegateObject, additionalData) + leftHeadline3.setWithModel(model.leftHeadline3, delegateObject, additionalData) + leftBody.setWithModel(model.leftBody, delegateObject, additionalData) + leftLink.setWithModel(model.leftLink, delegateObject, additionalData) + rightHeadline1.setWithModel(model.rightHeadline1, delegateObject, additionalData) + rightHeadline2.setWithModel(model.rightHeadline2, delegateObject, additionalData) + rightHeadline3.setWithModel(model.rightHeadline3, delegateObject, additionalData) + rightBody.setWithModel(model.rightBody, delegateObject, additionalData) + rightLink.setWithModel(model.rightLink, delegateObject, additionalData) + } + + open override func reset() { + super.reset() + leftHeadline1.reset() + leftHeadline2.reset() + leftHeadline3.reset() + leftBody.reset() + leftLink.reset() + rightHeadline1.reset() + rightHeadline2.reset() + rightHeadline3.reset() + rightBody.reset() + rightLink.reset() + } + + public override class func estimatedHeight(forRow molecule: MoleculeModelProtocol?, delegateObject: MVMCoreUIDelegateObject?) -> CGFloat { + return 121 + } +} diff --git a/MVMCoreUI/Molecules/DesignedComponents/SectionDividers/ListTwoColumnCompareChangesModel.swift b/MVMCoreUI/Molecules/DesignedComponents/SectionDividers/ListTwoColumnCompareChangesModel.swift new file mode 100644 index 00000000..5e4e876c --- /dev/null +++ b/MVMCoreUI/Molecules/DesignedComponents/SectionDividers/ListTwoColumnCompareChangesModel.swift @@ -0,0 +1,83 @@ +// +// ListTwoColumnCompareChangesModel.swift +// MVMCoreUI +// +// Created by Lekshmi S on 24/02/20. +// Copyright © 2020 Verizon Wireless. All rights reserved. +// + +import Foundation + +public class ListTwoColumnCompareChangesModel: ListItemModel, MoleculeModelProtocol { + + public static var identifier: String = "list2CCmpr1" + public var leftHeadline1: LabelModel + public var leftHeadline2: LabelModel + public var leftHeadline3: LabelModel + public var leftBody: LabelModel + public var leftLink: LinkModel + public var rightHeadline1: LabelModel + public var rightHeadline2: LabelModel + public var rightHeadline3: LabelModel + public var rightBody: LabelModel + public var rightLink: LinkModel + + public init(leftHeadline1: LabelModel, leftHeadline2: LabelModel, leftHeadline3: LabelModel, leftBody: LabelModel, leftLink: LinkModel, rightHeadline1: LabelModel, rightHeadline2: LabelModel, rightHeadline3: LabelModel, rightBody: LabelModel, rightLink: LinkModel) { + self.leftHeadline1 = leftHeadline1 + self.leftHeadline2 = leftHeadline2 + self.leftHeadline3 = leftHeadline3 + self.leftBody = leftBody + self.leftLink = leftLink + self.rightHeadline1 = rightHeadline1 + self.rightHeadline2 = rightHeadline2 + self.rightHeadline3 = rightHeadline3 + self.rightBody = rightBody + self.rightLink = rightLink + super.init() + } + + private enum CodingKeys: String, CodingKey { + case moleculeName + case leftHeadline1 + case leftHeadline2 + case leftHeadline3 + case leftBody + case leftLink + case rightHeadline1 + case rightHeadline2 + case rightHeadline3 + case rightBody + case rightLink + } + + required public init(from decoder: Decoder) throws { + let typeContainer = try decoder.container(keyedBy: CodingKeys.self) + leftHeadline1 = try typeContainer.decode(LabelModel.self, forKey: .leftHeadline1) + leftHeadline2 = try typeContainer.decode(LabelModel.self, forKey: .leftHeadline2) + leftHeadline3 = try typeContainer.decode(LabelModel.self, forKey: .leftHeadline3) + leftBody = try typeContainer.decode(LabelModel.self, forKey: .leftBody) + leftLink = try typeContainer.decode(LinkModel.self, forKey: .leftLink) + rightHeadline1 = try typeContainer.decode(LabelModel.self, forKey: .rightHeadline1) + rightHeadline2 = try typeContainer.decode(LabelModel.self, forKey: .rightHeadline2) + rightHeadline3 = try typeContainer.decode(LabelModel.self, forKey: .rightHeadline3) + rightBody = try typeContainer.decode(LabelModel.self, forKey: .rightBody) + rightLink = try typeContainer.decode(LinkModel.self, forKey: .rightLink) + 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(leftHeadline1, forKey: .leftHeadline1) + try container.encode(leftHeadline2, forKey: .leftHeadline2) + try container.encode(leftHeadline3, forKey: .leftHeadline3) + try container.encode(leftBody, forKey: .leftBody) + try container.encode(leftLink, forKey: .leftLink) + try container.encode(rightHeadline1, forKey: .rightHeadline1) + try container.encode(rightHeadline2, forKey: .rightHeadline2) + try container.encode(rightHeadline3, forKey: .rightHeadline3) + try container.encode(rightBody, forKey: .rightBody) + try container.encode(rightLink, forKey: .rightLink) + } +} diff --git a/MVMCoreUI/OtherHandlers/MoleculeObjectMapping.swift b/MVMCoreUI/OtherHandlers/MoleculeObjectMapping.swift index 7ae80d49..8ffc3dcf 100644 --- a/MVMCoreUI/OtherHandlers/MoleculeObjectMapping.swift +++ b/MVMCoreUI/OtherHandlers/MoleculeObjectMapping.swift @@ -55,6 +55,7 @@ import Foundation MVMCoreUIMoleculeMappingObject.shared()?.register(viewClass: StringAndMoleculeView.self, viewModelClass: StringAndMoleculeModel.self) MVMCoreUIMoleculeMappingObject.shared()?.register(viewClass: ImageHeadlineBody.self, viewModelClass: ImageHeadlineBodyModel.self) MVMCoreUIMoleculeMappingObject.shared()?.register(viewClass: ListThreeColumnPlanDataDivider.self, viewModelClass: ListThreeColumnPlanDataDividerModel.self) + MVMCoreUIMoleculeMappingObject.shared()?.register(viewClass: ListTwoColumnCompareChanges.self, viewModelClass: ListTwoColumnCompareChangesModel.self) // Vertical Combination Molecules