From 66f0cf6b8e2bc428302d1dea1055c1911588c0d3 Mon Sep 17 00:00:00 2001 From: Lekshmi S Date: Tue, 11 Feb 2020 08:39:09 +0530 Subject: [PATCH] Modified code based on review comments Molecule class conforming to TableViewCell instead of Container. Model class conforming to ListItemModelProtocol instead of MoleculeModelProtocol Removed extra spaces and added comments --- .../LeftVariableIconRightCaretList.swift | 77 ++++++++++++------- .../LeftVariableIconRightCaretListModel.swift | 49 ++++++++---- 2 files changed, 80 insertions(+), 46 deletions(-) diff --git a/MVMCoreUI/Molecules/LeftRightViews/LeftVariableIconRightCaretList.swift b/MVMCoreUI/Molecules/LeftRightViews/LeftVariableIconRightCaretList.swift index f7b08220..c35678a2 100644 --- a/MVMCoreUI/Molecules/LeftRightViews/LeftVariableIconRightCaretList.swift +++ b/MVMCoreUI/Molecules/LeftRightViews/LeftVariableIconRightCaretList.swift @@ -9,24 +9,40 @@ import Foundation import UIKit -@objcMembers public class LeftVariableIconRightCaretList : Container { +@objcMembers public class LeftVariableIconRightCaretList: TableViewCell { //----------------------------------------------------- // MARK: - Outlets //------------------------------------------------------- let leftImage = MFLoadImageView() - let leftLabel = Label(frame: .zero) - let rightLabel = Label(frame: .zero) - + let leftLabel = Label.commonLabelB2(true) + let rightLabel = Label.commonLabelB2(true) + let containerView = ViewConstrainingView() //------------------------------------------------------ // MARK: - Properties - //------------------------------------------------------- - let spaceBetweenLabels : CGFloat = 180 - let horizontalPadding : CGFloat = 14 - let imageSize : CGFloat = 30 + //------------------------------------------------------ + let cellHeight: CGFloat = 79 + let leftPadding: CGFloat = 35 + let spaceBetweenImageAndLeftLabel: CGFloat = 16 + let imageSize: CGFloat = 30 + let spaceBetweenLabels: CGFloat = 40 + let rightPadding: CGFloat = 54 + + //------------------------------------------------------ + // MARK: - Initialization + //-------------------------------------------------------- + + override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { + super.init(style: style, reuseIdentifier: reuseIdentifier) + setupView() + } + + required public init?(coder aDecoder: NSCoder) { + super.init(coder: aDecoder) + } //----------------------------------------------------- // MARK: - View Lifecycle @@ -34,10 +50,10 @@ import UIKit open override func updateView(_ size: CGFloat) { super.updateView(size) + containerView.updateView(size) leftImage.updateView(size) leftLabel.updateView(size) rightLabel.updateView(size) - } override open func setupView() { @@ -45,30 +61,36 @@ import UIKit guard leftImage.superview == nil else { return } + containerView.translatesAutoresizingMaskIntoConstraints = false + contentView.heightAnchor.constraint(equalToConstant: cellHeight).isActive = true + contentView.addSubview(containerView) - let container = MVMCoreUICommonViewsUtility.commonView() + //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 - addAndContain(container) - container.addSubview(leftImage) - container.addSubview(leftLabel) - container.addSubview(rightLabel) + containerView.addSubview(leftImage) + containerView.addSubview(leftLabel) + containerView.addSubview(rightLabel) - self.translatesAutoresizingMaskIntoConstraints = false - - leftImage.leadingAnchor.constraint(equalTo: container.leadingAnchor).isActive = true - leftImage.topAnchor.constraint(equalTo: container.topAnchor).isActive = true - leftImage.bottomAnchor.constraint(equalTo: container.bottomAnchor).isActive = true + //leftImage constraints + leftImage.leadingAnchor.constraint(equalTo: containerView.leadingAnchor, constant: leftPadding).isActive = true + leftImage.centerYAnchor.constraint(equalTo: leftLabel.centerYAnchor).isActive = true leftImage.widthAnchor.constraint(equalToConstant: imageSize).isActive = true leftImage.heightAnchor.constraint(equalToConstant: imageSize).isActive = true - leftLabel.leadingAnchor.constraint(equalTo: leftImage.trailingAnchor, constant: horizontalPadding).isActive = true - leftLabel.topAnchor.constraint(equalTo: container.topAnchor).isActive = true - leftLabel.bottomAnchor.constraint(equalTo: container.bottomAnchor).isActive = true + //leftLabel constraints + leftLabel.leadingAnchor.constraint(equalTo: leftImage.trailingAnchor, constant: spaceBetweenImageAndLeftLabel).isActive = true + leftLabel.topAnchor.constraint(equalTo: containerView.topAnchor).isActive = true + leftLabel.bottomAnchor.constraint(equalTo: containerView.bottomAnchor).isActive = true - - rightLabel.leadingAnchor.constraint(equalTo: leftLabel.trailingAnchor,constant: spaceBetweenLabels).isActive = true - rightLabel.topAnchor.constraint(equalTo: container.topAnchor).isActive = true - rightLabel.bottomAnchor.constraint(equalTo: container.bottomAnchor).isActive = true + //rightLabel constraints + rightLabel.leadingAnchor.constraint(greaterThanOrEqualTo: leftLabel.trailingAnchor, constant: spaceBetweenLabels).isActive = true + rightLabel.topAnchor.constraint(equalTo: containerView.topAnchor).isActive = true + rightLabel.bottomAnchor.constraint(equalTo: containerView.bottomAnchor).isActive = true + containerView.trailingAnchor.constraint(equalTo: rightLabel.trailingAnchor,constant: rightPadding).isActive = true } //---------------------------------------------------- @@ -77,17 +99,14 @@ import UIKit override open func reset() { super.reset() - leftImage.reset() leftLabel.reset() rightLabel.reset() } public override func setWithModel(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable : Any]?) { - super.setWithModel(model, delegateObject, additionalData) guard let model = model as? LeftVariableIconRightCaretListModel else { return} - leftImage.setWithModel(model.image, delegateObject, additionalData) leftLabel.setWithModel(model.leftLabel, delegateObject, additionalData) rightLabel.setWithModel(model.rightLabel, delegateObject, additionalData) diff --git a/MVMCoreUI/Molecules/LeftRightViews/LeftVariableIconRightCaretListModel.swift b/MVMCoreUI/Molecules/LeftRightViews/LeftVariableIconRightCaretListModel.swift index 152f8128..dab0b153 100644 --- a/MVMCoreUI/Molecules/LeftRightViews/LeftVariableIconRightCaretListModel.swift +++ b/MVMCoreUI/Molecules/LeftRightViews/LeftVariableIconRightCaretListModel.swift @@ -8,31 +8,38 @@ import Foundation -public class LeftVariableIconRightCaretListModel: MoleculeModelProtocol { +public class LeftVariableIconRightCaretListModel: ContainerModel, ListItemModelProtocol { - public var horizontalAlignment: UIStackView.Alignment? - public var verticalAlignment: UIStackView.Alignment? - public var useHorizontalMargins: Bool? - public var useVerticalMargins: Bool? - public var topMarginPadding: CGFloat? - public var bottomMarginPadding: CGFloat? - - - public var line: LineModel? = LineModel(type: .standard) - public var hideArrow: Bool? + public var line: LineModel? + public var hideArrow: Bool? = false public var backgroundColor: Color? - + public var action: ActionModelProtocol? public static var identifier: String = "listLVImg" public var image: ImageViewModel public var leftLabel: LabelModel public var rightLabel: LabelModel - + func setDefaults() { + if useHorizontalMargins == nil { + useHorizontalMargins = true + } + if useVerticalMargins == nil { + useVerticalMargins = true + } + if topMarginPadding == nil { + topMarginPadding = 24 + } + if bottomMarginPadding == nil { + bottomMarginPadding = 0 + } + } public init(image: ImageViewModel, leftLabel: LabelModel, rightLabel: LabelModel) { self.image = image self.leftLabel = leftLabel self.rightLabel = rightLabel + super.init() + setDefaults() } private enum CodingKeys: String, CodingKey { @@ -40,6 +47,8 @@ public class LeftVariableIconRightCaretListModel: MoleculeModelProtocol { case leftLabel case rightLabel case image + case action + case hideArrow } required public init(from decoder: Decoder) throws { @@ -47,16 +56,22 @@ public class LeftVariableIconRightCaretListModel: MoleculeModelProtocol { leftLabel = try typeContainer.decode(LabelModel.self, forKey: .leftLabel) rightLabel = try typeContainer.decode(LabelModel.self, forKey: .rightLabel) image = try typeContainer.decode(ImageViewModel.self, forKey: .image) + action = try typeContainer.decodeModelIfPresent(codingKey: .action, typeCodingKey: ActionCodingKey.actionType) + hideArrow = try typeContainer.decodeIfPresent(Bool.self, forKey: .hideArrow) + try super.init(from: decoder) + setDefaults() } - - public func encode(to encoder: Encoder) throws { + public override func encode(to encoder: Encoder) throws { + try super.encode(to: encoder) var container = encoder.container(keyedBy: CodingKeys.self) try container.encode(LeftVariableIconRightCaretListModel.identifier, forKey: .moleculeName) try container.encode(leftLabel, forKey: .leftLabel) try container.encode(rightLabel, forKey: .rightLabel) - try container.encodeIfPresent(image, forKey: .image) + try container.encode(image, forKey: .image) + try container.encodeModelIfPresent(action, forKey: .action) + try container.encodeIfPresent(hideArrow, forKey: .hideArrow) } - } +