some fixes for catching and remove file

This commit is contained in:
Pfeil, Scott Robert 2020-02-18 14:59:17 -05:00
parent db8a27ec2f
commit a620dd2401
6 changed files with 20 additions and 196 deletions

View File

@ -96,6 +96,9 @@
// This view controller should subclass this function and check the load to make sure it has all the needed data. Fills the error object if there are any errors. Returns if we should finish the load or not.
- (BOOL)shouldFinishProcessingLoad:(nonnull MVMCoreLoadObject *)loadObject error:(MVMCoreErrorObject *_Nonnull *_Nonnull)error;
/// Called in newDataBuildScreen. Can override to parse the json into a model object.
- (void)parsePageJSON:(NSError * _Nullable * _Nullable)error;
// Sets the screen to use the screen heading.
// it is required in device flow, where we are showing greeting name as screen heading,
// device details screen heading needs to be updated/refreshed again, if user has changed device nick name
@ -277,7 +280,6 @@
// subclass to set up intro animations
- (void)setupIntroAnimations;
- (void)parsePageJSON:(NSError * _Nullable * _Nullable)error;
@end

View File

@ -22,8 +22,8 @@ public class TwoButtonViewModel: MoleculeModelProtocol {
}
public init(_ primaryButton: ButtonModel?, _ secondaryButton: ButtonModel?) {
self.primaryButton = primaryButton
self.secondaryButton = secondaryButton
self.primaryButton = primaryButton
self.secondaryButton = secondaryButton
}
required public init(from decoder: Decoder) throws {

View File

@ -1,190 +0,0 @@
//
// IsaacLandingTemplate.swift
// MVMCoreUI
//
// Created by Suresh, Kamlesh on 2/13/20.
// Copyright © 2020 Verizon Wireless. All rights reserved.
//
import Foundation
import MVMCoreUI
import MVMCore
open class IsaacLandingTemplate: MoleculeListTemplate {
open override func parsePageJSONAndReturnError(_ error: NSErrorPointer) {
guard let pageJSON = self.loadObject?.pageJSON else { return }
var listItems: [MoleculeListItemModel] = []
(pageJSON.arrayForKey("items") as? [[AnyHashable: Any]])?.forEach { (itemJson) in
if let item = getListItem(itemJson) {
listItems.append(item)
}
}
let template = ListPageTemplateModel(pageType: pageJSON.stringForkey(KeyPageType),
screenHeading: pageJSON.stringForkey(KeyScreenHeading),
molecules: listItems)
let backgroudColorString = pageJSON.optionalStringForKey("backgroundColor") ?? "#000000"
template.footer = setFooter(pageJSON, 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(nil, nil)
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?.fillColor = 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?.fillColor = 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? {
guard let type = moleculeJson.optionalStringForKey("type") else {
return nil
}
if type == "rewards" {
return getRewardListItem(moleculeJson)
} else {
return getTitleImageListItem(moleculeJson, type)
}
}
func getTitleImageListItem(_ moleculeJson: [AnyHashable: Any], _ type: String) -> MoleculeListItemModel? {
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 {
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? {
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.verticalAlignment = .top
itemStack.spacing = 0
let horizontalStack = MoleculeStackItemModel(with: itemStack)
horizontalStack.verticalAlignment = .top
stackItems.append(horizontalStack)
}
stackItems.first?.percent = 35
stackItems.last?.percent = 65
let stack = MoleculeStackModel(molecules: stackItems)
stack.axis = .horizontal
stack.horizontalAlignment = .leading
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
}
}

View File

@ -24,7 +24,11 @@ open class MoleculeListTemplate: ThreeLayerTableViewController, TemplateProtocol
//--------------------------------------------------
open override func parsePageJSON(_ error: NSErrorPointer) {
try? parseTemplateJSON()
do {
try parseTemplateJSON()
} catch let parseError {
error?.pointee = parseError as NSError
}
}
open override var loadObject: MVMCoreLoadObject? {

View File

@ -13,7 +13,11 @@ open class MoleculeStackTemplate: ThreeLayerViewController, TemplateProtocol {
var observer: NSKeyValueObservation?
public var templateModel: StackPageTemplateModel?
open override func parsePageJSON(_ error: NSErrorPointer) {
try? parseTemplateJSON()
do {
try parseTemplateJSON()
} catch let parseError {
error?.pointee = parseError as NSError
}
}
open override var loadObject: MVMCoreLoadObject? {

View File

@ -13,7 +13,11 @@ import UIKit
public var templateModel: ThreeLayerPageTemplateModel?
open override func parsePageJSON(_ error: NSErrorPointer) {
try? parseTemplateJSON()
do {
try parseTemplateJSON()
} catch let parseError {
error?.pointee = parseError as NSError
}
}
override open func viewDidLoad() {