77 lines
3.4 KiB
Swift
77 lines
3.4 KiB
Swift
//
|
|
// MoleculeStackTemplate.swift
|
|
// MVMCoreUI
|
|
//
|
|
// Created by Scott Pfeil on 2/11/19.
|
|
// Copyright © 2019 Verizon Wireless. All rights reserved.
|
|
//
|
|
|
|
import UIKit
|
|
|
|
public class MoleculeStackTemplate: ThreeLayerViewController {
|
|
|
|
public override func shouldFinishProcessingLoad(_ loadObject: MVMCoreLoadObject, error: AutoreleasingUnsafeMutablePointer<MVMCoreErrorObject>) -> Bool {
|
|
var shouldFinish = super.shouldFinishProcessingLoad(loadObject, error: error)
|
|
if shouldFinish, let firstError = modulesNeeded().errors?.first {
|
|
// Don't continue if there was an error loading needed modules.
|
|
error.pointee = firstError
|
|
shouldFinish = false
|
|
}
|
|
return shouldFinish
|
|
}
|
|
|
|
public override func spaceBetweenTopAndMiddle() -> CGFloat? {
|
|
return 0
|
|
}
|
|
|
|
public 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
|
|
}
|
|
return molecule
|
|
}
|
|
|
|
public override func viewForMiddle() -> UIView? {
|
|
guard let moleculeJSON = loadObject?.pageJSON?.optionalDictionaryForKey("moleculeStack") else {
|
|
return nil
|
|
}
|
|
return MoleculeStackView(withJSON: moleculeJSON, delegateObject: delegateObject() as? MVMCoreUIDelegateObject, additionalData: nil)
|
|
}
|
|
|
|
override public func viewForBottom() -> UIView? {
|
|
guard let moleculeJSON = loadObject?.pageJSON?.optionalDictionaryForKey("footer"), let molecule = MVMCoreUIMoleculeMappingObject.shared()?.createMolecule(forJSON: moleculeJSON, delegateObject: delegateObject() as? MVMCoreUIDelegateObject, constrainIfNeeded: true) else {
|
|
return nil
|
|
}
|
|
return molecule
|
|
}
|
|
|
|
// MARK: - cache handling
|
|
public override func pageTypesToListenFor() -> [Any]? {
|
|
guard let pageType = self.pageType else {
|
|
return super.pageTypesToListenFor()
|
|
}
|
|
return [pageType]
|
|
}
|
|
|
|
public override func modulesToListenFor() -> [Any]? {
|
|
// Get all of the molecules that need modules.
|
|
return modulesNeeded().modules
|
|
}
|
|
|
|
// MARK: - Module Molecule Handling
|
|
func modulesNeeded() -> (modules: [String]?, errors: [MVMCoreErrorObject]?) {
|
|
var modules: [String]? = []
|
|
var errors: [MVMCoreErrorObject]? = []
|
|
let delegate = delegateObject() as? MVMCoreUIDelegateObject
|
|
|
|
let _ = MVMCoreUIMoleculeMappingObject.getMoleculeJSON(for: loadObject?.pageJSON?.optionalDictionaryForKey("header"), delegateObject: delegate, moduleNames: &modules, errors: &errors)
|
|
let _ = MVMCoreUIMoleculeMappingObject.getMoleculeJSON(for: loadObject?.pageJSON?.optionalDictionaryForKey("footer"), delegateObject: delegate, moduleNames: &modules, errors: &errors)
|
|
if let molecules = loadObject?.pageJSON?.optionalArrayForChainOfKeysOrIndexes(["moleculeStack",KeyMolecules]) as? [[AnyHashable: Any]] {
|
|
for molecule in molecules {
|
|
let _ = MVMCoreUIMoleculeMappingObject.getMoleculeJSON(for: molecule, delegateObject: delegate, moduleNames: &modules, errors: &errors)
|
|
}
|
|
}
|
|
return (modules?.count ?? 0 > 0 ? modules : nil, errors?.count ?? 0 > 0 ? errors : nil)
|
|
}
|
|
}
|