This commit is contained in:
Suresh, Kamlesh 2019-12-18 12:06:13 -05:00
parent c6d5775d57
commit 1db2a5b058
17 changed files with 96 additions and 72 deletions

View File

@ -7,19 +7,48 @@
// //
import Foundation import Foundation
import MVMCore
public class CaretButtonModel: MoleculeProtocol { public class CaretButtonModel: MoleculeProtocol {
public static var identifier: String = "caretButton" public static var identifier: String = "caretButton"
public var backgroundColor: String? public var backgroundColor: String?
public var label: String public var label: LabelModel
public var action: ActionModel public var action: ActionProtocol
public var enabledColor: String? public var enabledColor: String?
public var disabledColor: String? public var disabledColor: String?
public var enabled: Bool? public var enabled: Bool?
public init(label: String, action: ActionModel) { public init(label: LabelModel, action: ActionProtocol) {
self.label = label self.label = label
self.action = action self.action = action
} }
enum CodingKeys: String, CodingKey {
case backgroundColor
case label
case action
case enabledColor
case disabledColor
case enabled
}
required public init(from decoder: Decoder) throws {
let typeContainer = try decoder.container(keyedBy: CodingKeys.self)
backgroundColor = try typeContainer.decodeIfPresent(String.self, forKey: .backgroundColor)
label = try typeContainer.decode(LabelModel.self, forKey: .label)
enabledColor = try typeContainer.decodeIfPresent(String.self, forKey: .enabledColor)
disabledColor = try typeContainer.decodeIfPresent(String.self, forKey: .disabledColor)
enabled = try typeContainer.decodeIfPresent(Bool.self, forKey: .enabled)
action = try typeContainer.decode(codingKey: .action, typeCodingKey: ActionCodingKey.type)
}
public func encode(to encoder: Encoder) throws {
var container = encoder.container(keyedBy: CodingKeys.self)
try container.encode(label, forKey: .label)
try container.encodeIfPresent(backgroundColor, forKey: .backgroundColor)
try container.encodeIfPresent(action, forKey: .action)
try container.encodeIfPresent(enabledColor, forKey: .enabledColor)
try container.encodeIfPresent(disabledColor, forKey: .disabledColor)
try container.encodeIfPresent(enabled, forKey: .enabled)
}
} }

View File

@ -38,7 +38,9 @@ extension MFTextField: ModelMoleculeViewProtocol {
formText = textFieldModel.label as NSString? formText = textFieldModel.label as NSString?
text = textFieldModel.value as NSString? text = textFieldModel.value as NSString?
enable(textFieldModel.disabled) if let disabled = textFieldModel.disabled {
enable(disabled)
}
errMessage = textFieldModel.errorMsg errMessage = textFieldModel.errorMsg
fieldKey = textFieldModel.fieldKey fieldKey = textFieldModel.fieldKey
groupName = textFieldModel.groupName groupName = textFieldModel.groupName

View File

@ -9,7 +9,7 @@
import Foundation import Foundation
public protocol ContainerMoleculeProtocol: MoleculeProtocol { public protocol ContainerMoleculeProtocol: MoleculeProtocol {
var molecule: MoleculeProtocol? { get } var molecule: MoleculeProtocol { get }
var useHorizontalMargins: Bool? { get } var useHorizontalMargins: Bool? { get }
var useVerticalMargins: Bool? { get } var useVerticalMargins: Bool? { get }
var horizontalAlignment: String? { get } var horizontalAlignment: String? { get }
@ -17,11 +17,6 @@ public protocol ContainerMoleculeProtocol: MoleculeProtocol {
} }
extension ContainerMoleculeProtocol { extension ContainerMoleculeProtocol {
public var molecule: MoleculeProtocol? {
get { return nil }
}
public var backgroundColor: String? { public var backgroundColor: String? {
get { return nil } get { return nil }
} }

View File

@ -9,6 +9,6 @@
import Foundation import Foundation
public protocol ListItemModelProtocol: ContainerMoleculeProtocol { public protocol ListItemModelProtocol: ContainerMoleculeProtocol {
var molecule: MoleculeProtocol? { get } var molecule: MoleculeProtocol { get }
var separator: LineModel? { get set } var separator: LineModel? { get set }
} }

View File

@ -3,15 +3,10 @@ import Foundation
public protocol MoleculeProtocol: Model { public protocol MoleculeProtocol: Model {
var moleculeName: String? { get } var moleculeName: String? { get }
var backgroundColor: String? { get } var backgroundColor: String? { get }
var dictionary: [AnyHashable: Any]? { get }
} }
extension MoleculeProtocol { extension MoleculeProtocol {
public var moleculeName: String? { public var moleculeName: String? {
get { return Self.identifier } get { return Self.identifier }
} }
public var dictionary: [AnyHashable: Any]? {
return toJSON()
}
} }

View File

@ -11,10 +11,10 @@ import Foundation
@objcMembers public class CarouselItemModel: ContainerMoleculeProtocol { @objcMembers public class CarouselItemModel: ContainerMoleculeProtocol {
public static var identifier: String = "carouselItem" public static var identifier: String = "carouselItem"
public var backgroundColor: String? public var molecule: MoleculeProtocol
public init(backgroundColor: String?) { public init(molecule: MoleculeProtocol) {
self.backgroundColor = backgroundColor self.molecule = molecule
} }
enum CodingKeys: String, CodingKey { enum CodingKeys: String, CodingKey {
@ -25,13 +25,14 @@ import Foundation
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)
self.backgroundColor = try typeContainer.decode(String.self, forKey: .backgroundColor) molecule = try typeContainer.decode(codingKey: .molecule)
} }
public func encode(to encoder: Encoder) throws { public func encode(to encoder: Encoder) throws {
var container = encoder.container(keyedBy: CodingKeys.self) var container = encoder.container(keyedBy: CodingKeys.self)
try container.encode(moleculeName, forKey: .moleculeName) try container.encode(moleculeName, forKey: .moleculeName)
try container.encode(backgroundColor, forKey: .backgroundColor) try container.encode(backgroundColor, forKey: .backgroundColor)
try container.encode(molecule, forKey: .molecule)
try container.encodeIfPresent(self.molecule, forKey: .molecule) try container.encodeIfPresent(self.molecule, forKey: .molecule)
} }
} }

View File

@ -10,17 +10,20 @@ import Foundation
@objcMembers public class DropDownListItemModel: ListItemModelProtocol { @objcMembers public class DropDownListItemModel: ListItemModelProtocol {
public static var identifier: String = "dropDownListItem" public static var identifier: String = "dropDownListItem"
public var molecule: MoleculeProtocol
public var molecules: [[ListItemModel]] public var molecules: [[ListItemModel]]
public var backgroundColor: String? public var backgroundColor: String?
public var separator: LineModel? public var separator: LineModel?
public var dropDown: DropDownModel public var dropDown: DropDownModel
public init(molecules: [[ListItemModel]], dropDown: DropDownModel) { public init(molecule: MoleculeProtocol, molecules: [[ListItemModel]], dropDown: DropDownModel) {
self.molecule = molecule
self.molecules = molecules self.molecules = molecules
self.dropDown = dropDown self.dropDown = dropDown
} }
enum CodingKeys: String, CodingKey { enum CodingKeys: String, CodingKey {
case molecule
case moleculeName case moleculeName
case molecules case molecules
case separator case separator
@ -30,6 +33,7 @@ import Foundation
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)
molecule = try typeContainer.decode(codingKey: .molecule)
self.molecules = try typeContainer.decode([[ListItemModel]].self, forKey: .molecules) self.molecules = try typeContainer.decode([[ListItemModel]].self, forKey: .molecules)
self.separator = try typeContainer.decode(LineModel.self, forKey: .separator) self.separator = try typeContainer.decode(LineModel.self, forKey: .separator)
self.backgroundColor = try typeContainer.decodeIfPresent(String.self, forKey: .backgroundColor) self.backgroundColor = try typeContainer.decodeIfPresent(String.self, forKey: .backgroundColor)
@ -38,6 +42,7 @@ import Foundation
public func encode(to encoder: Encoder) throws { public func encode(to encoder: Encoder) throws {
var container = encoder.container(keyedBy: CodingKeys.self) var container = encoder.container(keyedBy: CodingKeys.self)
try container.encode(molecule, forKey: .molecule)
try container.encode(moleculeName, forKey: .moleculeName) try container.encode(moleculeName, forKey: .moleculeName)
try container.encode(molecules, forKey: .molecules) try container.encode(molecules, forKey: .molecules)
try container.encodeIfPresent(backgroundColor, forKey: .backgroundColor) try container.encodeIfPresent(backgroundColor, forKey: .backgroundColor)

View File

@ -13,11 +13,10 @@ import Foundation
public static var identifier: String = "footer" public static var identifier: String = "footer"
public var moleculeName: String? public var moleculeName: String?
public var backgroundColor: String? public var backgroundColor: String?
public var molecule: MoleculeProtocol? public var molecule: MoleculeProtocol
public init(molecule: MoleculeProtocol?, backgroundColor: String?){ public init(molecule: MoleculeProtocol){
self.molecule = molecule self.molecule = molecule
self.backgroundColor = backgroundColor
} }
enum CodingKeys: String, CodingKey { enum CodingKeys: String, CodingKey {
@ -31,7 +30,7 @@ import Foundation
let typeContainer = try decoder.container(keyedBy: CodingKeys.self) let typeContainer = try decoder.container(keyedBy: CodingKeys.self)
self.moleculeName = try typeContainer.decode(String.self, forKey: .moleculeName) self.moleculeName = try typeContainer.decode(String.self, forKey: .moleculeName)
self.backgroundColor = try typeContainer.decodeIfPresent(String.self, forKey: .backgroundColor) self.backgroundColor = try typeContainer.decodeIfPresent(String.self, forKey: .backgroundColor)
self.molecule = try typeContainer.decodeIfPresent(codingKey: .molecule) self.molecule = try typeContainer.decode(codingKey: .molecule)
} }
public func encode(to encoder: Encoder) throws { public func encode(to encoder: Encoder) throws {
@ -39,5 +38,6 @@ import Foundation
try container.encode(moleculeName, forKey: .moleculeName) try container.encode(moleculeName, forKey: .moleculeName)
try container.encodeIfPresent(self.molecule, forKey: .molecule) try container.encodeIfPresent(self.molecule, forKey: .molecule)
try container.encodeIfPresent(self.backgroundColor, forKey: .backgroundColor) try container.encodeIfPresent(self.backgroundColor, forKey: .backgroundColor)
try container.encode(molecule, forKey: .molecule)
} }
} }

View File

@ -12,13 +12,11 @@ import Foundation
public static var identifier: String = "header" public static var identifier: String = "header"
public var moleculeName: String? public var moleculeName: String?
public var backgroundColor: String? public var backgroundColor: String?
public var molecule: MoleculeProtocol? public var molecule: MoleculeProtocol
public var seperator: LineModel? public var seperator: LineModel?
public init(molecule: MoleculeProtocol?, backgroundColor: String?, seperator: LineModel?){ public init(molecule: MoleculeProtocol){
self.molecule = molecule self.molecule = molecule
self.backgroundColor = backgroundColor
self.seperator = seperator
} }
enum CodingKeys: String, CodingKey { enum CodingKeys: String, CodingKey {
@ -32,7 +30,7 @@ import Foundation
let typeContainer = try decoder.container(keyedBy: CodingKeys.self) let typeContainer = try decoder.container(keyedBy: CodingKeys.self)
self.moleculeName = try typeContainer.decode(String.self, forKey: .moleculeName) self.moleculeName = try typeContainer.decode(String.self, forKey: .moleculeName)
self.backgroundColor = try typeContainer.decodeIfPresent(String.self, forKey: .backgroundColor) self.backgroundColor = try typeContainer.decodeIfPresent(String.self, forKey: .backgroundColor)
self.molecule = try typeContainer.decodeIfPresent(codingKey: .molecule) self.molecule = try typeContainer.decode(codingKey: .molecule)
self.seperator = try typeContainer.decodeIfPresent(LineModel.self, forKey: .separator) self.seperator = try typeContainer.decodeIfPresent(LineModel.self, forKey: .separator)
} }
@ -42,5 +40,6 @@ import Foundation
try container.encodeIfPresent(self.molecule, forKey: .molecule) try container.encodeIfPresent(self.molecule, forKey: .molecule)
try container.encodeIfPresent(self.backgroundColor, forKey: .backgroundColor) try container.encodeIfPresent(self.backgroundColor, forKey: .backgroundColor)
try container.encodeIfPresent(self.seperator, forKey: .separator) try container.encodeIfPresent(self.seperator, forKey: .separator)
try container.encode(molecule, forKey: .molecule)
} }
} }

View File

@ -13,8 +13,8 @@ import UIKit
public static var identifier: String = "textField" public static var identifier: String = "textField"
public var backgroundColor: String? public var backgroundColor: String?
public var editable = true public var editable: Bool?
public var disabled = false public var disabled: Bool?
public var errorMsg: String? public var errorMsg: String?
public var label: String? public var label: String?
public var type: String? public var type: String?

View File

@ -7,16 +7,21 @@
// //
import Foundation import Foundation
import MVMCore
@objcMembers public class ListItemModel: ListItemModelProtocol { @objcMembers public class ListItemModel: ListItemModelProtocol {
public static var identifier: String = "listItem" public static var identifier: String = "listItem"
public var molecule: MoleculeProtocol? public var molecule: MoleculeProtocol
public var backgroundColor: String? public var backgroundColor: String?
public var action: ActionModel? public var action: ActionProtocol?
public var hideArrow: Bool? public var hideArrow: Bool?
public var separator: LineModel? public var separator: LineModel?
public var style: String? public var style: String?
public init(molecule: MoleculeProtocol) {
self.molecule = molecule
}
enum CodingKeys: String, CodingKey { enum CodingKeys: String, CodingKey {
case moleculeName case moleculeName
case molecule case molecule
@ -28,8 +33,8 @@ import Foundation
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)
molecule = try typeContainer.decodeIfPresent(codingKey: .molecule) molecule = try typeContainer.decode(codingKey: .molecule)
action = try typeContainer.decodeIfPresent(ActionModel.self, forKey: .action) action = try typeContainer.decodeIfPresent(codingKey: .action, typeCodingKey: ActionCodingKey.type)
hideArrow = try typeContainer.decodeIfPresent(Bool.self, forKey: .hideArrow) hideArrow = try typeContainer.decodeIfPresent(Bool.self, forKey: .hideArrow)
separator = try typeContainer.decodeIfPresent(LineModel.self, forKey: .separator) separator = try typeContainer.decodeIfPresent(LineModel.self, forKey: .separator)
style = try typeContainer.decodeIfPresent(String.self, forKey: .style) style = try typeContainer.decodeIfPresent(String.self, forKey: .style)
@ -38,7 +43,7 @@ import Foundation
public func encode(to encoder: Encoder) throws { public func encode(to encoder: Encoder) throws {
var container = encoder.container(keyedBy: CodingKeys.self) var container = encoder.container(keyedBy: CodingKeys.self)
try container.encode(moleculeName, forKey: .moleculeName) try container.encode(moleculeName, forKey: .moleculeName)
try container.encodeIfPresent(molecule, forKey: .molecule) try container.encode(molecule, forKey: .molecule)
try container.encodeIfPresent(action, forKey: .action) try container.encodeIfPresent(action, forKey: .action)
try container.encodeIfPresent(hideArrow, forKey: .hideArrow) try container.encodeIfPresent(hideArrow, forKey: .hideArrow)
try container.encodeIfPresent(separator, forKey: .separator) try container.encodeIfPresent(separator, forKey: .separator)

View File

@ -90,18 +90,14 @@ open class MoleculeCollectionViewCell: UICollectionViewCell, MVMCoreUIMoleculeVi
backgroundColor = UIColor.mfGet(forHex: backgroundColorString) backgroundColor = UIColor.mfGet(forHex: backgroundColorString)
} }
guard let moleculeModel = collectionModel.molecule else {
return
}
if molecule == nil { if molecule == nil {
if let moleculeView = MVMCoreUIMoleculeMappingObject.shared()?.createMolecule(moleculeModel, delegateObject, true) { if let moleculeView = MVMCoreUIMoleculeMappingObject.shared()?.createMolecule(collectionModel.molecule, delegateObject, true) {
contentView.insertSubview(moleculeView, at: 0) contentView.insertSubview(moleculeView, at: 0)
NSLayoutConstraint.activate(Array(NSLayoutConstraint.pinView(toSuperview: moleculeView, useMargins: true).values)) NSLayoutConstraint.activate(Array(NSLayoutConstraint.pinView(toSuperview: moleculeView, useMargins: true).values))
molecule = moleculeView molecule = moleculeView
} }
} else { } else {
(molecule as? ModelMoleculeViewProtocol)?.setWithModel(moleculeModel, delegateObject, additionalData) (molecule as? ModelMoleculeViewProtocol)?.setWithModel(collectionModel.molecule, delegateObject, additionalData)
} }
// This molecule will handle spacing by default. // This molecule will handle spacing by default.

View File

@ -14,7 +14,7 @@ import UIKit
super.setWithModel(model, delegateObject, additionalData) super.setWithModel(model, delegateObject, additionalData)
guard let model = model, guard let model = model,
let moleculeModel = (model as? ContainerMoleculeProtocol)?.molecule, let moleculeModel = (model as? ListItemModelProtocol)?.molecule,
let moleculeView = MVMCoreUIMoleculeMappingObject.shared()?.createMolecule(moleculeModel, delegateObject, true) else { let moleculeView = MVMCoreUIMoleculeMappingObject.shared()?.createMolecule(moleculeModel, delegateObject, true) else {
return return
} }
@ -22,7 +22,7 @@ import UIKit
} }
public override class func name(forReuse molecule: MoleculeProtocol?, delegateObject: MVMCoreUIDelegateObject?) -> String? { public override class func name(forReuse molecule: MoleculeProtocol?, delegateObject: MVMCoreUIDelegateObject?) -> String? {
guard let moleculeModel = (molecule as? ContainerMoleculeProtocol)?.molecule else { guard let moleculeModel = (molecule as? ListItemModelProtocol)?.molecule else {
return "\(self)<>" return "\(self)<>"
} }
let className = MVMCoreUIMoleculeMappingObject.shared()?.getMoleculeClass(moleculeModel) as? ModelMoleculeViewProtocol let className = MVMCoreUIMoleculeMappingObject.shared()?.getMoleculeClass(moleculeModel) as? ModelMoleculeViewProtocol

View File

@ -179,8 +179,7 @@ import UIKit
bottomSeparatorView?.setWithModel(separator, nil, nil) bottomSeparatorView?.setWithModel(separator, nil, nil)
} }
guard let moleculeModel = model.molecule else { return } (molecule as? ModelMoleculeViewProtocol)?.setWithModel(model.molecule, delegateObject, additionalData)
(molecule as? ModelMoleculeViewProtocol)?.setWithModel(moleculeModel, delegateObject, additionalData)
// This molecule will by default handle margins. // This molecule will by default handle margins.
if let castView = molecule as? MVMCoreUIViewConstrainingProtocol { if let castView = molecule as? MVMCoreUIViewConstrainingProtocol {

View File

@ -31,7 +31,7 @@ public extension MVMCoreUIMoleculeMappingObject {
if let molecule = molecule as? ModelMoleculeViewProtocol { if let molecule = molecule as? ModelMoleculeViewProtocol {
molecule.setWithModel(model, delegateObject, nil) molecule.setWithModel(model, delegateObject, nil)
} else { } else {
molecule.setWithJSON?(model.dictionary, delegateObject: delegateObject, additionalData: nil) molecule.setWithJSON?(model.toJSON(), delegateObject: delegateObject, additionalData: nil)
} }
} }

View File

@ -9,6 +9,6 @@
import Foundation import Foundation
public protocol ModelMoleculeDelegateProtocol { public protocol ModelMoleculeDelegateProtocol {
func addMolecules(_ molecules: [MoleculeProtocol], sender: UITableViewCell, animation: UITableView.RowAnimation) func addMolecules(_ molecules: [ListItemModelProtocol], sender: UITableViewCell, animation: UITableView.RowAnimation)
func removeMolecules(_ molecules: [MoleculeProtocol], sender: UITableViewCell, animation: UITableView.RowAnimation) func removeMolecules(_ molecules: [ListItemModelProtocol], sender: UITableViewCell, animation: UITableView.RowAnimation)
} }

View File

@ -10,7 +10,7 @@ import UIKit
open class MoleculeListTemplate: ThreeLayerTableViewController, TemplateProtocol, ModelMoleculeDelegateProtocol { open class MoleculeListTemplate: ThreeLayerTableViewController, TemplateProtocol, ModelMoleculeDelegateProtocol {
public var moleculesInfo: [(identifier: String, class: AnyClass, molecule: MoleculeProtocol)]? public var moleculesInfo: [(identifier: String, class: AnyClass, molecule: ListItemModelProtocol)]?
var observer: NSKeyValueObservation? var observer: NSKeyValueObservation?
public var templateModel: TemplateModelProtocol? public var templateModel: TemplateModelProtocol?
@ -139,7 +139,7 @@ open class MoleculeListTemplate: ThreeLayerTableViewController, TemplateProtocol
} }
} }
public func addMolecules(_ molecules: [MoleculeProtocol], sender: UITableViewCell, animation: UITableView.RowAnimation) { public func addMolecules(_ molecules: [ListItemModelProtocol], sender: UITableViewCell, animation: UITableView.RowAnimation) {
// This dispatch is needed to fix a race condition that can occur if this function is called during the table setup. // This dispatch is needed to fix a race condition that can occur if this function is called during the table setup.
DispatchQueue.main.async { DispatchQueue.main.async {
guard let indexPath = self.tableView?.indexPath(for: sender) else { return } guard let indexPath = self.tableView?.indexPath(for: sender) else { return }
@ -157,7 +157,7 @@ open class MoleculeListTemplate: ThreeLayerTableViewController, TemplateProtocol
self.view.layoutIfNeeded() self.view.layoutIfNeeded()
} }
} }
public func removeMolecules(_ molecules: [MoleculeProtocol], sender: UITableViewCell, animation: UITableView.RowAnimation) { public func removeMolecules(_ molecules: [ListItemModelProtocol], sender: UITableViewCell, animation: UITableView.RowAnimation) {
var indexPaths: [IndexPath] = [] var indexPaths: [IndexPath] = []
//TODO: cehck for molecule protocola eqality //TODO: cehck for molecule protocola eqality
for molecule in molecules { for molecule in molecules {
@ -172,23 +172,21 @@ open class MoleculeListTemplate: ThreeLayerTableViewController, TemplateProtocol
self.updateViewConstraints() self.updateViewConstraints()
self.view.layoutIfNeeded() self.view.layoutIfNeeded()
} }
// MARK: - Convenience // MARK: - Convenience
/// Returns the (identifier, class) of the molecule for the given map. /// Returns the (identifier, class) of the molecule for the given map.
func getMoleculeInfo(with molecule: MoleculeProtocol?) -> (identifier: String, class: AnyClass, molecule: MoleculeProtocol)? { func getMoleculeInfo(with listItem: ListItemModelProtocol?) -> (identifier: String, class: AnyClass, molecule: ListItemModelProtocol)? {
guard let molecule = molecule, guard let listItem = listItem,
let moleculeClass = MVMCoreUIMoleculeMappingObject.shared()?.getMoleculeClass(molecule), let moleculeClass = MVMCoreUIMoleculeMappingObject.shared()?.getMoleculeClass(listItem),
let moleculeName = (moleculeClass as? ModelMoleculeViewProtocol.Type)?.name(forReuse: molecule, delegateObject: delegateObject() as? MVMCoreUIDelegateObject) ?? molecule.moleculeName else { let moleculeName = (moleculeClass as? ModelMoleculeViewProtocol.Type)?.name(forReuse: listItem, delegateObject: delegateObject() as? MVMCoreUIDelegateObject) ?? listItem.molecule.moleculeName else {
return nil return nil
} }
return (moleculeName, moleculeClass, molecule) return (moleculeName, moleculeClass, listItem)
} }
/// Sets up the molecule list and ensures no errors loading all content. /// Sets up the molecule list and ensures no errors loading all content.
func getMoleculeInfoList() -> [(identifier: String, class: AnyClass, molecule: MoleculeProtocol)]? { func getMoleculeInfoList() -> [(identifier: String, class: AnyClass, molecule: ListItemModelProtocol)]? {
var moleculeList: [(identifier: String, class: AnyClass, molecule: MoleculeProtocol)] = [] var moleculeList: [(identifier: String, class: AnyClass, molecule: ListItemModelProtocol)] = []
if let molecules = (templateModel as? ListPageTemplateModel)?.molecules { if let molecules = (templateModel as? ListPageTemplateModel)?.molecules {
for molecule in molecules { for molecule in molecules {
if let info = getMoleculeInfo(with: molecule) { if let info = getMoleculeInfo(with: molecule) {
@ -201,14 +199,14 @@ open class MoleculeListTemplate: ThreeLayerTableViewController, TemplateProtocol
/// Sets up the header, footer, molecule list and ensures no errors loading all content. /// Sets up the header, footer, molecule list and ensures no errors loading all content.
func setup() { func setup() {
var moleculeList: [(identifier: String, class: AnyClass, molecule: MoleculeProtocol)] = [] var moleculeList: [(identifier: String, class: AnyClass, molecule: ListItemModelProtocol)] = []
if let molecules = loadObject?.pageJSON?.optionalArrayForKey(KeyMolecules) as? [MoleculeProtocol] { if let molecules = (templateModel as? ListPageTemplateModel)?.molecules {
for molecule in molecules { for molecule in molecules {
if let info = getMoleculeInfo(with: molecule) { if let info = getMoleculeInfo(with: molecule) {
moleculeList.append(info) moleculeList.append(info)
} }
} }
} }
moleculesInfo = moleculeList moleculesInfo = moleculeList
} }