Merge branch 'develop' into 'release/7_4_0'

Develop

See merge request BPHV_MIPS/mvm_core_ui!271
This commit is contained in:
Pan, Xinlei (Ryan) 2020-02-19 15:11:42 -05:00
commit 545d9af415
35 changed files with 80 additions and 12 deletions

View File

@ -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)

View File

@ -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 }

View File

@ -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)

View File

@ -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)
}
}

View File

@ -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 = ""
@ -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)

View File

@ -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?

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -11,6 +11,7 @@ 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?

View File

@ -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
}
}

View File

@ -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
}

View File

@ -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)

View File

@ -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?

View File

@ -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)
}

View File

@ -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 {

View File

@ -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

View File

@ -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

View File

@ -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)

View File

@ -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)

View File

@ -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?

View File

@ -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

View File

@ -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)
}
}

View File

@ -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

View File

@ -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

View File

@ -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
}
}

View File

@ -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?
}

View File

@ -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?

View File

@ -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

View File

@ -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?

View File

@ -10,6 +10,7 @@ import Foundation
@objcMembers public class HeadlineBodyModel: MoleculeModelProtocol {
public static var identifier: String = "headlineBody"
public var moleculeName: String? = HeadlineBodyModel.identifier
public var headline: LabelModel?
public var body: LabelModel?
public var style: String?

View File

@ -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)
}
}

View File

@ -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)

View File

@ -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)
}
}