WIP
This commit is contained in:
parent
e431ea2de9
commit
87dcde3317
@ -39,12 +39,20 @@ public class ButtonModel: ButtonModelProtocol, MoleculeModelProtocol {
|
|||||||
init(with title: String, action: ActionModelProtocol) {
|
init(with title: String, action: ActionModelProtocol) {
|
||||||
self.title = title
|
self.title = title
|
||||||
self.action = action
|
self.action = action
|
||||||
|
moleculeName = Self.identifier
|
||||||
}
|
}
|
||||||
|
|
||||||
init(secondaryButtonWith title: String, action: ActionModelProtocol) {
|
init(secondaryButtonWith title: String, action: ActionModelProtocol) {
|
||||||
self.title = title
|
self.title = title
|
||||||
self.action = action
|
self.action = action
|
||||||
style = .secondary
|
style = .secondary
|
||||||
|
moleculeName = Self.identifier
|
||||||
|
}
|
||||||
|
|
||||||
|
init(primaryButtonWith title: String, action: ActionModelProtocol) {
|
||||||
|
self.title = title
|
||||||
|
self.action = action
|
||||||
|
style = .primary
|
||||||
}
|
}
|
||||||
|
|
||||||
private enum CodingKeys: String, CodingKey {
|
private enum CodingKeys: String, CodingKey {
|
||||||
|
|||||||
@ -28,7 +28,13 @@ import Foundation
|
|||||||
var type: String
|
var type: String
|
||||||
var location: Int
|
var location: Int
|
||||||
var length: Int
|
var length: Int
|
||||||
|
|
||||||
|
init(_ type: String, _ location: Int, _ length: Int) {
|
||||||
|
self.type = type
|
||||||
|
self.location = location
|
||||||
|
self.length = length
|
||||||
|
}
|
||||||
|
|
||||||
//--------------------------------------------------
|
//--------------------------------------------------
|
||||||
// MARK: - Keys
|
// MARK: - Keys
|
||||||
//--------------------------------------------------
|
//--------------------------------------------------
|
||||||
|
|||||||
@ -48,6 +48,7 @@ import Foundation
|
|||||||
|
|
||||||
public init(text: String) {
|
public init(text: String) {
|
||||||
self.text = text
|
self.text = text
|
||||||
|
moleculeName = Self.identifier
|
||||||
}
|
}
|
||||||
|
|
||||||
required public init(from decoder: Decoder) throws {
|
required public init(from decoder: Decoder) throws {
|
||||||
|
|||||||
@ -88,12 +88,13 @@ public typealias ButtonAction = (Button) -> ()
|
|||||||
// MARK:- ModelMoleculeViewProtocol
|
// MARK:- ModelMoleculeViewProtocol
|
||||||
open func setWithModel(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) {
|
open func setWithModel(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) {
|
||||||
self.model = model
|
self.model = model
|
||||||
if let backgroundColor = model?.backgroundColor {
|
|
||||||
self.backgroundColor = backgroundColor.uiColor
|
|
||||||
}
|
|
||||||
|
|
||||||
guard let model = model as? ButtonModelProtocol else { return }
|
guard let model = model as? ButtonModelProtocol else { return }
|
||||||
isEnabled = model.enabled
|
isEnabled = model.enabled
|
||||||
|
|
||||||
|
if let backgroundColor = (model as? MoleculeModelProtocol)?.backgroundColor {
|
||||||
|
self.backgroundColor = backgroundColor.uiColor
|
||||||
|
}
|
||||||
set(with: model.action, delegateObject: delegateObject, additionalData: additionalData)
|
set(with: model.action, delegateObject: delegateObject, additionalData: additionalData)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -12,6 +12,7 @@ import Foundation
|
|||||||
@objcMembers public class FooterModel: MoleculeContainerModel, MoleculeModelProtocol {
|
@objcMembers public class FooterModel: MoleculeContainerModel, MoleculeModelProtocol {
|
||||||
public static var identifier: String = "footer"
|
public static var identifier: String = "footer"
|
||||||
public var backgroundColor: Color?
|
public var backgroundColor: Color?
|
||||||
|
public var moleculeName: String?
|
||||||
|
|
||||||
private enum CodingKeys: String, CodingKey {
|
private enum CodingKeys: String, CodingKey {
|
||||||
case moleculeName
|
case moleculeName
|
||||||
@ -37,6 +38,7 @@ import Foundation
|
|||||||
public override init(with moleculeModel: MoleculeModelProtocol) {
|
public override init(with moleculeModel: MoleculeModelProtocol) {
|
||||||
super.init(with: moleculeModel)
|
super.init(with: moleculeModel)
|
||||||
setDefaults()
|
setDefaults()
|
||||||
|
moleculeName = Self.identifier
|
||||||
}
|
}
|
||||||
|
|
||||||
required public init(from decoder: Decoder) throws {
|
required public init(from decoder: Decoder) throws {
|
||||||
|
|||||||
@ -10,6 +10,7 @@ import UIKit
|
|||||||
|
|
||||||
public class TwoButtonViewModel: MoleculeModelProtocol {
|
public class TwoButtonViewModel: MoleculeModelProtocol {
|
||||||
public static var identifier: String = "twoButtonView"
|
public static var identifier: String = "twoButtonView"
|
||||||
|
public var moleculeName: String?
|
||||||
public var backgroundColor: Color?
|
public var backgroundColor: Color?
|
||||||
public var primaryButton: ButtonModel?
|
public var primaryButton: ButtonModel?
|
||||||
public var secondaryButton: ButtonModel?
|
public var secondaryButton: ButtonModel?
|
||||||
@ -21,6 +22,10 @@ public class TwoButtonViewModel: MoleculeModelProtocol {
|
|||||||
case secondaryButton
|
case secondaryButton
|
||||||
}
|
}
|
||||||
|
|
||||||
|
init() {
|
||||||
|
moleculeName = Self.identifier
|
||||||
|
}
|
||||||
|
|
||||||
required public init(from decoder: Decoder) throws {
|
required public init(from decoder: Decoder) throws {
|
||||||
let typeContainer = try decoder.container(keyedBy: CodingKeys.self)
|
let typeContainer = try decoder.container(keyedBy: CodingKeys.self)
|
||||||
backgroundColor = try typeContainer.decodeIfPresent(Color.self, forKey: .backgroundColor)
|
backgroundColor = try typeContainer.decodeIfPresent(Color.self, forKey: .backgroundColor)
|
||||||
|
|||||||
@ -13,6 +13,7 @@ import Foundation
|
|||||||
public var backgroundColor: Color?
|
public var backgroundColor: Color?
|
||||||
public var spacing: CGFloat?
|
public var spacing: CGFloat?
|
||||||
public var percent: Int?
|
public var percent: Int?
|
||||||
|
public var moleculeName: String?
|
||||||
public var gone: Bool = false
|
public var gone: Bool = false
|
||||||
|
|
||||||
private enum CodingKeys: String, CodingKey {
|
private enum CodingKeys: String, CodingKey {
|
||||||
@ -24,6 +25,7 @@ import Foundation
|
|||||||
|
|
||||||
public override init(with moleculeModel: MoleculeModelProtocol) {
|
public override init(with moleculeModel: MoleculeModelProtocol) {
|
||||||
super.init(with: moleculeModel)
|
super.init(with: moleculeModel)
|
||||||
|
moleculeName = Self.identifier
|
||||||
}
|
}
|
||||||
|
|
||||||
required public init(from decoder: Decoder) throws {
|
required public init(from decoder: Decoder) throws {
|
||||||
|
|||||||
@ -29,8 +29,59 @@ open class IsaacLandingTemplate: MoleculeListTemplate {
|
|||||||
screenHeading: pageJSON.stringForkey(KeyScreenHeading),
|
screenHeading: pageJSON.stringForkey(KeyScreenHeading),
|
||||||
molecules: listItems)
|
molecules: listItems)
|
||||||
|
|
||||||
|
let backgroudColorString = pageJSON.optionalStringForKey("backgroundColor") ?? "#000000"
|
||||||
|
template.footer = setFooter(pageJSON, template)
|
||||||
|
//print(template.toJSONString())
|
||||||
self.templateModel = template
|
self.templateModel = template
|
||||||
|
|
||||||
|
DispatchQueue.main.async { [weak self] in
|
||||||
|
self?.view.backgroundColor = UIColor.mfGet(forHex: backgroudColorString)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func setFooter(_ pageJSON: [AnyHashable: Any], _ template: ListPageTemplateModel) -> FooterModel? {
|
||||||
|
|
||||||
|
let primaryButtonBGColor = pageJSON.optionalStringForKey("primaryButtonBGColor") ?? "#FFFFFF"
|
||||||
|
let primaryButtonTextColor = pageJSON.optionalStringForKey("primaryButtonTextColor") ?? "#000000"
|
||||||
|
|
||||||
|
let backgroudColorString = pageJSON.optionalStringForKey("backgroundColor") ?? "#000000"
|
||||||
|
if let buttonMap = pageJSON.optionalDictionaryForKey("ButtonMap") {
|
||||||
|
let twoButtonModel = TwoButtonViewModel()
|
||||||
|
|
||||||
|
if let primarybutton = buttonMap.optionalDictionaryForKey(KeyPrimaryButton) {
|
||||||
|
let buttonDict: [String : Any] = ["title": primarybutton.stringForkey(KeyTitle),
|
||||||
|
"action": primarybutton,
|
||||||
|
"moleculeName": "button"]
|
||||||
|
if let data = try? JSONSerialization.data(withJSONObject: buttonDict) {
|
||||||
|
let decoder = JSONDecoder()
|
||||||
|
twoButtonModel.primaryButton = try? decoder.decode(ButtonModel.self, from: data)
|
||||||
|
twoButtonModel.primaryButton?.backgroundColor = Color(uiColor: UIColor.mfGet(forHex: primaryButtonBGColor))
|
||||||
|
twoButtonModel.primaryButton?.textColor = Color(uiColor: UIColor.mfGet(forHex: primaryButtonTextColor))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if let secondaryButton = buttonMap.optionalDictionaryForKey(KeySecondaryButton) {
|
||||||
|
let buttonDict: [String : Any] = ["title": secondaryButton.stringForkey(KeyTitle),
|
||||||
|
"action": secondaryButton,
|
||||||
|
"moleculeName": "button"]
|
||||||
|
if let data = try? JSONSerialization.data(withJSONObject: buttonDict) {
|
||||||
|
let decoder = JSONDecoder()
|
||||||
|
twoButtonModel.secondaryButton = try? decoder.decode(ButtonModel.self, from: data)
|
||||||
|
twoButtonModel.secondaryButton?.backgroundColor = Color(uiColor: UIColor.mfGet(forHex: primaryButtonTextColor))
|
||||||
|
twoButtonModel.secondaryButton?.textColor = Color(uiColor: UIColor.mfGet(forHex:primaryButtonBGColor))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let footerStack = MoleculeStackModel(molecules: [MoleculeStackItemModel(with:LineModel(type: .standard)),
|
||||||
|
MoleculeStackItemModel(with: twoButtonModel)])
|
||||||
|
footerStack.useHorizontalMargins = false
|
||||||
|
footerStack.spacing = PaddingFour
|
||||||
|
|
||||||
|
let footer = FooterModel(with: footerStack)
|
||||||
|
footer.useHorizontalMargins = false
|
||||||
|
footer.backgroundColor = Color(uiColor: UIColor.mfGet(forHex: backgroudColorString))
|
||||||
|
return footer
|
||||||
|
}
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getListItem(_ moleculeJson: [AnyHashable: Any]) -> MoleculeListItemModel? {
|
func getListItem(_ moleculeJson: [AnyHashable: Any]) -> MoleculeListItemModel? {
|
||||||
@ -40,61 +91,104 @@ open class IsaacLandingTemplate: MoleculeListTemplate {
|
|||||||
|
|
||||||
if type == "rewards" {
|
if type == "rewards" {
|
||||||
return getRewardListItem(moleculeJson)
|
return getRewardListItem(moleculeJson)
|
||||||
}
|
|
||||||
|
|
||||||
let textcolor = moleculeJson.optionalStringForKey("textColor")
|
|
||||||
var stackItems: [MoleculeStackItemModel] = []
|
|
||||||
|
|
||||||
let titleLabel = LabelModel(text: moleculeJson.stringForkey(KeyTitle))
|
|
||||||
titleLabel.fontName = "NHaasGroteskDSStd-75Bd"
|
|
||||||
titleLabel.textColor = textcolor
|
|
||||||
titleLabel.fontSize = (type == "topHeader") ? 70.0 : 25.0
|
|
||||||
|
|
||||||
|
|
||||||
let messageLabel = LabelModel(text: moleculeJson.stringForkey("message"))
|
|
||||||
messageLabel.fontStyle = "B2"
|
|
||||||
messageLabel.textColor = textcolor
|
|
||||||
|
|
||||||
let headlineBodyModel = HeadlineBodyModel(headline: titleLabel)
|
|
||||||
headlineBodyModel.body = messageLabel
|
|
||||||
|
|
||||||
if let linkMap = moleculeJson.optionalDictionaryForKey("link") {
|
|
||||||
do {
|
|
||||||
let linkDict: [String : Any] = ["title": linkMap.stringForkey(KeyTitle),
|
|
||||||
"action": linkMap]
|
|
||||||
let data = try JSONSerialization.data(withJSONObject: linkDict)
|
|
||||||
let decoder = JSONDecoder()
|
|
||||||
let linkModel = try decoder.decode(LinkModel.self, from: data)
|
|
||||||
linkModel.textColor = Color(uiColor: UIColor.mfGet(forHex: textcolor ?? "#FFFFFF"))
|
|
||||||
let headlineBodyLinkModel = HeadlineBodyLinkModel(headlineBody: headlineBodyModel,
|
|
||||||
link: linkModel)
|
|
||||||
stackItems.append(MoleculeStackItemModel(with: headlineBodyLinkModel))
|
|
||||||
} catch {
|
|
||||||
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
stackItems.append(MoleculeStackItemModel(with: headlineBodyModel))
|
return getTitleImageListItem(moleculeJson, type)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if let imageurl = moleculeJson.optionalStringForKey("imageUrl") {
|
func getTitleImageListItem(_ moleculeJson: [AnyHashable: Any], _ type: String) -> MoleculeListItemModel? {
|
||||||
let imageModel = ImageViewModel(image: imageurl)
|
let textcolor = moleculeJson.optionalStringForKey("textColor")
|
||||||
imageModel.height = moleculeJson.optionalCGFloatForKey("imageHeight") ?? 300
|
var stackItems: [MoleculeStackItemModel] = []
|
||||||
imageModel.imageFormat = "jpeg"
|
|
||||||
imageModel.contentMode = .scaleAspectFit
|
|
||||||
stackItems.append(MoleculeStackItemModel(with: imageModel))
|
|
||||||
}
|
|
||||||
|
|
||||||
let stack = MoleculeStackModel(molecules: stackItems)
|
let titleLabel = LabelModel(text: moleculeJson.stringForkey(KeyTitle))
|
||||||
let listItem = MoleculeListItemModel(with: stack)
|
titleLabel.fontName = "NHaasGroteskDSStd-75Bd"
|
||||||
|
titleLabel.textColor = textcolor
|
||||||
|
titleLabel.fontSize = (type == "topHeader") ? 70.0 : 25.0
|
||||||
|
|
||||||
let backgroudColorString = moleculeJson.optionalStringForKey("backgroundColor") ?? "#000000"
|
let messageLabel = LabelModel(text: moleculeJson.stringForkey("message"))
|
||||||
listItem.backgroundColor = Color(uiColor: UIColor.mfGet(forHex: backgroudColorString))
|
messageLabel.fontStyle = "B2"
|
||||||
listItem.line = LineModel(type: .none)
|
messageLabel.textColor = textcolor
|
||||||
return listItem
|
|
||||||
|
let headlineBodyModel = HeadlineBodyModel(headline: titleLabel)
|
||||||
|
headlineBodyModel.body = messageLabel
|
||||||
|
|
||||||
|
if let linkMap = moleculeJson.optionalDictionaryForKey("link") {
|
||||||
|
do {
|
||||||
|
let linkDict: [String : Any] = ["title": linkMap.stringForkey(KeyTitle),
|
||||||
|
"action": linkMap]
|
||||||
|
let data = try JSONSerialization.data(withJSONObject: linkDict)
|
||||||
|
let decoder = JSONDecoder()
|
||||||
|
let linkModel = try decoder.decode(LinkModel.self, from: data)
|
||||||
|
linkModel.textColor = Color(uiColor: UIColor.mfGet(forHex: textcolor ?? "#FFFFFF"))
|
||||||
|
let headlineBodyLinkModel = HeadlineBodyLinkModel(headlineBody: headlineBodyModel,
|
||||||
|
link: linkModel)
|
||||||
|
stackItems.append(MoleculeStackItemModel(with: headlineBodyLinkModel))
|
||||||
|
} catch {
|
||||||
|
stackItems.append(MoleculeStackItemModel(with: headlineBodyModel))
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
stackItems.append(MoleculeStackItemModel(with: headlineBodyModel))
|
||||||
|
}
|
||||||
|
|
||||||
|
if let imageurl = moleculeJson.optionalStringForKey("imageUrl") {
|
||||||
|
let imageModel = ImageViewModel(image: imageurl)
|
||||||
|
imageModel.height = moleculeJson.optionalCGFloatForKey("imageHeight") ?? 300
|
||||||
|
imageModel.imageFormat = "jpeg"
|
||||||
|
imageModel.contentMode = .scaleAspectFit
|
||||||
|
stackItems.append(MoleculeStackItemModel(with: imageModel))
|
||||||
|
}
|
||||||
|
|
||||||
|
let stack = MoleculeStackModel(molecules: stackItems)
|
||||||
|
let listItem = MoleculeListItemModel(with: stack)
|
||||||
|
|
||||||
|
let backgroudColorString = moleculeJson.optionalStringForKey("backgroundColor") ?? "#000000"
|
||||||
|
listItem.backgroundColor = Color(uiColor: UIColor.mfGet(forHex: backgroudColorString))
|
||||||
|
listItem.line = LineModel(type: .none)
|
||||||
|
return listItem
|
||||||
}
|
}
|
||||||
|
|
||||||
func getRewardListItem(_ moleculeJson: [AnyHashable: Any]) -> MoleculeListItemModel? {
|
func getRewardListItem(_ moleculeJson: [AnyHashable: Any]) -> MoleculeListItemModel? {
|
||||||
return nil
|
|
||||||
|
var stackItems: [MoleculeStackItemModel] = []
|
||||||
|
|
||||||
|
(moleculeJson.arrayForKey("rewards") as? [[AnyHashable: Any]])?.forEach { (rewardItem) in
|
||||||
|
let textcolor = rewardItem.optionalStringForKey("textColor")
|
||||||
|
|
||||||
|
let titleLabel = LabelModel(text: rewardItem.stringForkey(KeyTitle))
|
||||||
|
titleLabel.fontName = "NHaasGroteskDSStd-75Bd"
|
||||||
|
titleLabel.textColor = textcolor
|
||||||
|
titleLabel.fontSize = 48
|
||||||
|
|
||||||
|
let messageLabel = LabelModel(text: rewardItem.stringForkey("message"))
|
||||||
|
messageLabel.fontName = "NHaasGroteskDSStd-75Bd"
|
||||||
|
messageLabel.textColor = textcolor
|
||||||
|
messageLabel.fontSize = 14
|
||||||
|
|
||||||
|
let titleStackItem = MoleculeStackItemModel(with: titleLabel)
|
||||||
|
let messageStackItem = MoleculeStackItemModel(with: messageLabel)
|
||||||
|
|
||||||
|
let itemStack = MoleculeStackModel(molecules: [titleStackItem, messageStackItem])
|
||||||
|
itemStack.useVerticalMargins = false
|
||||||
|
itemStack.topMarginPadding = 0
|
||||||
|
|
||||||
|
itemStack.verticalAlignment = .leading
|
||||||
|
itemStack.axis = .vertical
|
||||||
|
itemStack.spacing = 0
|
||||||
|
|
||||||
|
stackItems.append(MoleculeStackItemModel(with: itemStack))
|
||||||
|
}
|
||||||
|
|
||||||
|
let stack = MoleculeStackModel(molecules: stackItems)
|
||||||
|
stack.axis = .horizontal
|
||||||
|
stack.spacing = 65
|
||||||
|
stack.verticalAlignment = .leading
|
||||||
|
|
||||||
|
let listItem = MoleculeListItemModel(with: stack)
|
||||||
|
let backgroudColorString = moleculeJson.optionalStringForKey("backgroundColor") ?? "#000000"
|
||||||
|
listItem.backgroundColor = Color(uiColor: UIColor.mfGet(forHex: backgroudColorString))
|
||||||
|
listItem.line = LineModel(type: .none)
|
||||||
|
|
||||||
|
return listItem
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user