diff --git a/MVMCoreUI/Models/Extensions/ModelHelper.swift b/MVMCoreUI/Models/Extensions/ModelHelper.swift index c56a0a5a..661280a9 100644 --- a/MVMCoreUI/Models/Extensions/ModelHelper.swift +++ b/MVMCoreUI/Models/Extensions/ModelHelper.swift @@ -8,8 +8,6 @@ import Foundation - - extension KeyedDecodingContainer where Key : CodingKey{ private enum TypeCodingKey: String, CodingKey { case moleculeName diff --git a/MVMCoreUI/Models/Molecules/HeaderModel.swift b/MVMCoreUI/Models/Molecules/HeaderModel.swift index db794d10..4cbc1c82 100644 --- a/MVMCoreUI/Models/Molecules/HeaderModel.swift +++ b/MVMCoreUI/Models/Molecules/HeaderModel.swift @@ -29,7 +29,6 @@ import Foundation let typeContainer = try decoder.container(keyedBy: CodingKeys.self) self.moleculeName = try typeContainer.decode(String.self, forKey: .moleculeName) self.molecule = try typeContainer.decodeIfPresent(codingKey: .molecule) - } public func encode(to encoder: Encoder) throws { diff --git a/MVMCoreUI/Models/Molecules/LabelModel.swift b/MVMCoreUI/Models/Molecules/LabelModel.swift index 61fa9fda..e5de1ccf 100644 --- a/MVMCoreUI/Models/Molecules/LabelModel.swift +++ b/MVMCoreUI/Models/Molecules/LabelModel.swift @@ -13,9 +13,4 @@ import Foundation public static var identifier: String = "label" public var moleculeName: String? public var text: String? - - public init(text: String?) { - self.text = text - self.moleculeName = Self.identifier - } } diff --git a/MVMCoreUI/Models/Molecules/ListItemModel.swift b/MVMCoreUI/Models/Molecules/ListItemModel.swift index e1f9dc68..a903299a 100644 --- a/MVMCoreUI/Models/Molecules/ListItemModel.swift +++ b/MVMCoreUI/Models/Molecules/ListItemModel.swift @@ -38,4 +38,5 @@ import Foundation try container.encode(moleculeName, forKey: .moleculeName) try container.encodeIfPresent(self.molecule, forKey: .molecule) try container.encodeIfPresent(actionMap, forKey: .actionMap) - }} + } +} diff --git a/MVMCoreUI/Models/Molecules/MoleculeStackItemModel.swift b/MVMCoreUI/Models/Molecules/MoleculeStackItemModel.swift index 1ad99dec..5bceda3e 100644 --- a/MVMCoreUI/Models/Molecules/MoleculeStackItemModel.swift +++ b/MVMCoreUI/Models/Molecules/MoleculeStackItemModel.swift @@ -9,7 +9,7 @@ import Foundation @objcMembers public class MoleculeStackItemModel: MoleculeProtocol { - public static var identifier: String = "moleculeStackItem" + public static var identifier: String = "stackItem" public var moleculeName: String? public var molecule: MoleculeProtocol? diff --git a/MVMCoreUI/Models/Molecules/MoleculeStackModel.swift b/MVMCoreUI/Models/Molecules/MoleculeStackModel.swift index c1a223ff..30c15822 100644 --- a/MVMCoreUI/Models/Molecules/MoleculeStackModel.swift +++ b/MVMCoreUI/Models/Molecules/MoleculeStackModel.swift @@ -9,6 +9,7 @@ import Foundation @objcMembers public class MoleculeStackModel: MoleculeProtocol { + public static var identifier: String = "moleculeStack" public var moleculeName: String? public var molecules: [MoleculeStackItemModel]? @@ -19,4 +20,24 @@ import Foundation self.molecules = molecules self.moleculeName = Self.identifier } + + enum CodingKeys: String, CodingKey { + case moleculeName + case molecules + case axis + } + + required public init(from decoder: Decoder) throws { + let typeContainer = try decoder.container(keyedBy: CodingKeys.self) + self.moleculeName = try typeContainer.decodeIfPresent(String.self, forKey: .moleculeName) + self.molecules = try typeContainer.decode([MoleculeStackItemModel].self, forKey: .molecules) + self.axis = try typeContainer.decodeIfPresent(String.self, forKey: .axis) + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(moleculeName, forKey: .moleculeName) + try container.encodeIfPresent(molecules, forKey: .molecules) + try container.encode(axis, forKey: .axis) + } } diff --git a/MVMCoreUI/Models/PageModel.swift b/MVMCoreUI/Models/PageModel.swift index ac2a4a15..a47c78e1 100644 --- a/MVMCoreUI/Models/PageModel.swift +++ b/MVMCoreUI/Models/PageModel.swift @@ -15,4 +15,5 @@ import UIKit public var isAtomicTabs: Bool? = false public var header: HeaderModel? public var molecules: [ListItemModel]? + public var moleculeStack: MoleculeStackModel? } diff --git a/MVMCoreUI/OtherHandlers/MVMCoreUIMoleculeMappingObject+ModelExtension.swift b/MVMCoreUI/OtherHandlers/MVMCoreUIMoleculeMappingObject+ModelExtension.swift index 9fd6c0ca..650264fc 100644 --- a/MVMCoreUI/OtherHandlers/MVMCoreUIMoleculeMappingObject+ModelExtension.swift +++ b/MVMCoreUI/OtherHandlers/MVMCoreUIMoleculeMappingObject+ModelExtension.swift @@ -8,6 +8,7 @@ import Foundation + public extension MVMCoreUIMoleculeMappingObject { func createMolecule(_ model: MoleculeProtocol, _ delegateObject: MVMCoreUIDelegateObject?) -> (UIView & MVMCoreUIMoleculeViewProtocol)? { @@ -28,7 +29,8 @@ public extension MVMCoreUIMoleculeMappingObject { } } - if constrainIfNeeded, let castMolecule = molecule as? MVMCoreUIViewConstrainingProtocol, castMolecule.needsToBeConstrained?() ?? false { + if constrainIfNeeded, let castMolecule = molecule as? MVMCoreUIViewConstrainingProtocol, + castMolecule.needsToBeConstrained?() ?? false { let view = ViewConstrainingView(molecule: molecule, alignment: castMolecule.alignment?() ?? .fill) setData(view) return view diff --git a/MVMCoreUI/OtherHandlers/MVMCoreUIMoleculeMappingObject+ModelMapping.swift b/MVMCoreUI/OtherHandlers/MVMCoreUIMoleculeMappingObject+ModelMapping.swift index b3a20c2c..67d3df02 100644 --- a/MVMCoreUI/OtherHandlers/MVMCoreUIMoleculeMappingObject+ModelMapping.swift +++ b/MVMCoreUI/OtherHandlers/MVMCoreUIMoleculeMappingObject+ModelMapping.swift @@ -14,8 +14,8 @@ import Foundation ModelRegistry.register(HeaderModel.self) ModelRegistry.register(HeadlineBodyModel.self) ModelRegistry.register(MoleculeStackModel.self) - ModelRegistry.register(ListItemModel.self) ModelRegistry.register(MoleculeStackItemModel.self) + ModelRegistry.register(ListItemModel.self) ModelRegistry.register(TextFieldModel.self) ModelRegistry.register(LineModel.self) } diff --git a/MVMCoreUI/Templates/MoleculeStackTemplate.swift b/MVMCoreUI/Templates/MoleculeStackTemplate.swift index d6f78b05..dad4d5ef 100644 --- a/MVMCoreUI/Templates/MoleculeStackTemplate.swift +++ b/MVMCoreUI/Templates/MoleculeStackTemplate.swift @@ -30,9 +30,13 @@ open class MoleculeStackTemplate: ThreeLayerViewController { } open override func viewForTop() -> UIView? { - guard let moleculeJSON = loadObject?.pageJSON?.optionalDictionaryForKey("header"), let molecule = MVMCoreUIMoleculeMappingObject.shared()?.createMolecule(forJSON: moleculeJSON, delegateObject: delegateObject() as? MVMCoreUIDelegateObject, constrainIfNeeded: true) else { - return nil + guard let moleculeModel = pageModel?.header, + let molecule = MVMCoreUIMoleculeMappingObject.shared()?.createMolecule(moleculeModel, delegateObject() as? MVMCoreUIDelegateObject, true) else { + return nil } +// guard let moleculeJSON = loadObject?.pageJSON?.optionalDictionaryForKey("header"), let molecule = MVMCoreUIMoleculeMappingObject.shared()?.createMolecule(forJSON: moleculeJSON, delegateObject: delegateObject() as? MVMCoreUIDelegateObject, constrainIfNeeded: true) else { +// return nil +// } return molecule }