From 3e8b69a0bc76c53a4fad50e5badd1770bf89c6c6 Mon Sep 17 00:00:00 2001 From: "Pfeil, Scott Robert" Date: Thu, 9 Jan 2020 11:38:32 -0500 Subject: [PATCH] Line and image update --- MVMCoreUI/Atoms/Views/ImageViewModel.swift | 1 - .../Atoms/Views/LeftRightLabelModel.swift | 1 - MVMCoreUI/Atoms/Views/Line.swift | 68 +++++++++---------- .../Containers/NavigationController.swift | 2 +- MVMCoreUI/Models/Molecules/LineModel.swift | 38 ++++++++++- .../Items/DropDownFilterTableViewCell.swift | 4 +- MVMCoreUI/Molecules/Items/TableViewCell.swift | 24 +++---- MVMCoreUI/Molecules/StandardHeaderView.swift | 4 +- 8 files changed, 88 insertions(+), 54 deletions(-) diff --git a/MVMCoreUI/Atoms/Views/ImageViewModel.swift b/MVMCoreUI/Atoms/Views/ImageViewModel.swift index a65c946a..0944c36e 100644 --- a/MVMCoreUI/Atoms/Views/ImageViewModel.swift +++ b/MVMCoreUI/Atoms/Views/ImageViewModel.swift @@ -10,7 +10,6 @@ import Foundation @objcMembers public class ImageViewModel: MoleculeProtocol { public static var identifier: String = "image" - public var moleculeName: String public var backgroundColor: Color? public var image: String diff --git a/MVMCoreUI/Atoms/Views/LeftRightLabelModel.swift b/MVMCoreUI/Atoms/Views/LeftRightLabelModel.swift index e006afc9..5e091446 100644 --- a/MVMCoreUI/Atoms/Views/LeftRightLabelModel.swift +++ b/MVMCoreUI/Atoms/Views/LeftRightLabelModel.swift @@ -13,5 +13,4 @@ import UIKit public var backgroundColor: Color? public var leftText: LabelModel public var rightText: LabelModel - } diff --git a/MVMCoreUI/Atoms/Views/Line.swift b/MVMCoreUI/Atoms/Views/Line.swift index d5f4f4b6..7b80d59a 100644 --- a/MVMCoreUI/Atoms/Views/Line.swift +++ b/MVMCoreUI/Atoms/Views/Line.swift @@ -9,42 +9,35 @@ import UIKit @objcMembers open class Line: View { + var lineModel: LineModel? { + get { return model as? LineModel } + } public var heightConstraint: NSLayoutConstraint? - public enum Style: String, Codable { - case standard - case thin - case medium - case heavy - case none - } - - public var style = Style.standard { - didSet { - switch style { - case .standard: - heightConstraint?.constant = 1 - backgroundColor = .mfSilver() - case .thin: - heightConstraint?.constant = 1 - backgroundColor = .black - case .medium: - heightConstraint?.constant = 2 - backgroundColor = .black - case .heavy: - heightConstraint?.constant = 4 - backgroundColor = .black - case .none: - heightConstraint?.constant = 0 - } + open func setStyle(_ style: LineModel.Style) { + switch style { + case .standard: + heightConstraint?.constant = 1 + backgroundColor = .mfSilver() + case .thin: + heightConstraint?.constant = 1 + backgroundColor = .black + case .medium: + heightConstraint?.constant = 2 + backgroundColor = .black + case .heavy: + heightConstraint?.constant = 4 + backgroundColor = .black + case .none: + heightConstraint?.constant = 0 } } // MARK: - Helpers open func shouldBeVisible() -> Bool { - guard let type = json?.optionalStringForKey(KeyType) else { return false } - return type != "none" + guard let type = lineModel?.type else { return false } + return type != .none } public convenience init(pinTo view: UIView, edge: UIRectEdge, useMargin: Bool) { @@ -56,26 +49,33 @@ import UIKit // MARK: - MVMCoreViewProtocol open override func setupView() { super.setupView() - backgroundColor = .black heightConstraint = heightAnchor.constraint(equalToConstant: 1) heightConstraint?.isActive = true + setStyle(.standard) } // MARK: - MVMCoreUIMoleculeViewProtocol open override func setWithJSON(_ json: [AnyHashable : Any]?, delegateObject: MVMCoreUIDelegateObject?, additionalData: [AnyHashable : Any]?) { // If no type, default to standard. - if let typeString = json?.optionalStringForKey(KeyType), let type = Style.init(rawValue: typeString) { - style = type + if let typeString = json?.optionalStringForKey(KeyType), let type = LineModel.Style.init(rawValue: typeString) { + setStyle(type) } else { - style = .standard + setStyle(.standard) } super.setWithJSON(json, delegateObject: delegateObject, additionalData: additionalData) } + open override func setWithModel(_ model: MoleculeProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [String : AnyHashable]?) { + if let lineModel = model as? LineModel { + setStyle(lineModel.type ?? .standard) + } + super.setWithModel(model, delegateObject, additionalData) + } + open override func reset() { - style = .standard + setStyle(.standard) } open func copyBackgroundColor() -> Bool { @@ -83,7 +83,7 @@ import UIKit } public static func estimatedHeight(forRow json: [AnyHashable : Any]?, delegateObject: MVMCoreUIDelegateObject?) -> CGFloat { - guard let type = json?.optionalStringForKey(KeyType), let style = Style(rawValue: type) else { return 1 } + guard let type = json?.optionalStringForKey(KeyType), let style = LineModel.Style(rawValue: type) else { return 1 } switch style { case .none: return 0 diff --git a/MVMCoreUI/Containers/NavigationController.swift b/MVMCoreUI/Containers/NavigationController.swift index 353ea861..623b2f47 100644 --- a/MVMCoreUI/Containers/NavigationController.swift +++ b/MVMCoreUI/Containers/NavigationController.swift @@ -29,7 +29,7 @@ import UIKit let navigationController = self.init() style(navigationController.navigationBar) navigationController.separatorView = Line(pinTo: navigationController.navigationBar, edge: .bottom, useMargin: false) - navigationController.separatorView?.style = .standard + navigationController.separatorView?.setStyle(.standard) MVMCoreUISession.sharedGlobal()?.navigationController = navigationController MVMCoreNavigationHandler.shared()?.viewControllerToPresentOn = navigationController MVMCoreNavigationHandler.shared()?.navigationController = navigationController diff --git a/MVMCoreUI/Models/Molecules/LineModel.swift b/MVMCoreUI/Models/Molecules/LineModel.swift index 66010536..88e09be0 100644 --- a/MVMCoreUI/Models/Molecules/LineModel.swift +++ b/MVMCoreUI/Models/Molecules/LineModel.swift @@ -9,7 +9,43 @@ import UIKit @objcMembers public class LineModel: MoleculeProtocol { + + /* + The frequency of the line in a moleculeList. + all (between all cells, above top, below bottom) + allExceptTop (between all cells, below bottom) + allExceptBottom (between all cells, above top) + between (between all cells) + */ + public enum Frequency: String, Codable { + case all + case allExceptTop + case allExceptBottom + case between + } + + /* + The style of the line. + standard (1 height, silver) + thin (1 height, black) + medium (2 height, black) + heavy (4 height, black) + none (hidden) + */ + public enum Style: String, Codable { + case standard + case thin + case medium + case heavy + case none + } + public static var identifier: String = "line" + public var type: Style? = .standard + public var frequency: Frequency? = .allExceptTop public var backgroundColor: Color? - public var type: String? + + public init(type: Style) { + self.type = type + } } diff --git a/MVMCoreUI/Molecules/Items/DropDownFilterTableViewCell.swift b/MVMCoreUI/Molecules/Items/DropDownFilterTableViewCell.swift index 2f856074..a9d9c360 100644 --- a/MVMCoreUI/Molecules/Items/DropDownFilterTableViewCell.swift +++ b/MVMCoreUI/Molecules/Items/DropDownFilterTableViewCell.swift @@ -53,7 +53,7 @@ import UIKit } public override func setWithModel(_ model: MoleculeProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [String : AnyHashable]?) { - bottomSeparatorView?.style = .none + bottomSeparatorView?.setStyle(.none) self.delegateObject = delegateObject super.setWithModel(model, delegateObject, additionalData) @@ -65,6 +65,6 @@ import UIKit public override func reset() { super.reset() bottomMarginPadding = 0 - bottomSeparatorView?.style = .none + bottomSeparatorView?.setStyle(.none) } } diff --git a/MVMCoreUI/Molecules/Items/TableViewCell.swift b/MVMCoreUI/Molecules/Items/TableViewCell.swift index d74f0ee5..ba017c4e 100644 --- a/MVMCoreUI/Molecules/Items/TableViewCell.swift +++ b/MVMCoreUI/Molecules/Items/TableViewCell.swift @@ -62,29 +62,29 @@ import UIKit open func styleStandard() { topMarginPadding = 24 bottomMarginPadding = 24 - topSeparatorView?.style = .none - bottomSeparatorView?.style = .standard + topSeparatorView?.setStyle(.none) + bottomSeparatorView?.setStyle(.standard) } open func styleHeader() { topMarginPadding = 48 bottomMarginPadding = 16 - topSeparatorView?.style = .none - bottomSeparatorView?.style = .thin + topSeparatorView?.setStyle(.none) + bottomSeparatorView?.setStyle(.thin) } open func styleFooter() { topMarginPadding = 24 bottomMarginPadding = 0 - topSeparatorView?.style = .none - bottomSeparatorView?.style = .none + topSeparatorView?.setStyle(.none) + bottomSeparatorView?.setStyle(.none) } open func styleNone() { topMarginPadding = 0 bottomMarginPadding = 0 - topSeparatorView?.style = .none - bottomSeparatorView?.style = .none + topSeparatorView?.setStyle(.none) + bottomSeparatorView?.setStyle(.none) } /// Adds the molecule to the view. @@ -264,8 +264,8 @@ import UIKit setSeparatorFrequency(separatorFrequency, indexPath: indexPath) } } else { - topSeparatorView?.style = .standard - bottomSeparatorView?.style = .standard + topSeparatorView?.setStyle(.standard) + bottomSeparatorView?.setStyle(.standard) setSeparatorFrequency(TableViewCell.SeparatorFrequency.allExceptTop, indexPath: indexPath) } } @@ -285,7 +285,7 @@ import UIKit open func addSeparatorsIfNeeded() { if topSeparatorView == nil { let line = Line() - line.style = .none + line.setStyle(.none) addSubview(line) NSLayoutConstraint.pinViewTop(toSuperview: line, useMargins: false, constant: 0).isActive = true NSLayoutConstraint.pinViewLeft(toSuperview: line, useMargins: true, constant: 0).isActive = true @@ -294,7 +294,7 @@ import UIKit } if bottomSeparatorView == nil { let line = Line() - line.style = .none + line.setStyle(.none) addSubview(line) NSLayoutConstraint.pinViewBottom(toSuperview: line, useMargins: false, constant: 0).isActive = true NSLayoutConstraint.pinViewLeft(toSuperview: line, useMargins: true, constant: 0).isActive = true diff --git a/MVMCoreUI/Molecules/StandardHeaderView.swift b/MVMCoreUI/Molecules/StandardHeaderView.swift index 686aac3b..eeb46a6a 100644 --- a/MVMCoreUI/Molecules/StandardHeaderView.swift +++ b/MVMCoreUI/Molecules/StandardHeaderView.swift @@ -26,7 +26,7 @@ public class StandardHeaderView: MoleculeContainer { guard line == nil else { return } let line = Line() - line.style = .heavy + line.setStyle(.heavy) addSubview(line) NSLayoutConstraint.pinViewBottom(toSuperview: line, useMargins: false, constant: 0).isActive = true NSLayoutConstraint.pinViewLeft(toSuperview: line, useMargins: true, constant: 0).isActive = true @@ -56,7 +56,7 @@ public class StandardHeaderView: MoleculeContainer { open override func reset() { super.reset() - line?.style = .heavy + line?.setStyle(.heavy) } public class func estimatedHeight(forRow json: [AnyHashable : Any]?, delegateObject: MVMCoreUIDelegateObject?) -> CGFloat {