From 6fde7bc8b492fbf55602f7ed3a0c58d75403b6d4 Mon Sep 17 00:00:00 2001 From: "Pfeil, Scott Robert" Date: Fri, 28 Jun 2019 13:34:15 -0400 Subject: [PATCH] two typo fix list and stack template required molecules --- MVMCoreUI/BaseControllers/MFViewController.m | 2 +- MVMCoreUI/Molecules/MoleculeStackView.swift | 2 +- .../Templates/MoleculeListTemplate.swift | 31 ++++++++++++++++--- .../Templates/MoleculeStackTemplate.swift | 28 ++++++++++++++--- 4 files changed, 52 insertions(+), 11 deletions(-) diff --git a/MVMCoreUI/BaseControllers/MFViewController.m b/MVMCoreUI/BaseControllers/MFViewController.m index 18e15216..256bf050 100644 --- a/MVMCoreUI/BaseControllers/MFViewController.m +++ b/MVMCoreUI/BaseControllers/MFViewController.m @@ -218,7 +218,7 @@ __block BOOL newData = NO; [pageTypesListeningFor enumerateObjectsUsingBlock:^(NSString * _Nonnull pageToListenFor, NSUInteger idx, BOOL * _Nonnull stop) { NSDictionary *page = [pages dict:pageToListenFor]; - NSString *pageType = [pages string:KeyPageType]; + NSString *pageType = [page string:KeyPageType]; if (page && [pageType isEqualToString:self.pageType]) { newData = [self newPageLoaded:page]; *stop = YES; diff --git a/MVMCoreUI/Molecules/MoleculeStackView.swift b/MVMCoreUI/Molecules/MoleculeStackView.swift index 59c8280d..869dda5d 100644 --- a/MVMCoreUI/Molecules/MoleculeStackView.swift +++ b/MVMCoreUI/Molecules/MoleculeStackView.swift @@ -188,7 +188,7 @@ public class MoleculeStackView: ViewConstrainingView { if let moleculeJSON = map.optionalDictionaryForKey(KeyMolecule) { var view: UIView? if let item = items?[index] { - item.update(with: moleculeJSON) + item.update(with: map) view = item.view (view as? MVMCoreUIMoleculeViewProtocol)?.setWithJSON(moleculeJSON, delegateObject: delegateObject, additionalData: nil) addStackItem(item, lastItem: index == molecules.count - 1) diff --git a/MVMCoreUI/Templates/MoleculeListTemplate.swift b/MVMCoreUI/Templates/MoleculeListTemplate.swift index 7ef4cf38..f3a4f310 100644 --- a/MVMCoreUI/Templates/MoleculeListTemplate.swift +++ b/MVMCoreUI/Templates/MoleculeListTemplate.swift @@ -10,7 +10,22 @@ import UIKit open class MoleculeListTemplate: ThreeLayerTableViewController { var moleculesInfo: [(identifier: String, class: AnyClass, molecule: [AnyHashable: Any])]? + var observer: NSKeyValueObservation? + open override var loadObject: MVMCoreLoadObject? { + didSet { + if loadObject != oldValue { + updateRequiredModules() + observer?.invalidate() + if let newObject = loadObject { + observer = newObject.observe(\MVMCoreLoadObject.pageJSON, options: [.old, .new]) { [weak self] (object, change) in + self?.updateRequiredModules() + } + } + } + } + } + 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 { @@ -128,12 +143,20 @@ open class MoleculeListTemplate: ThreeLayerTableViewController { moleculesInfo = moleculeList } - open override func requiredModules(fromPageJSON page: [AnyHashable : Any]?) -> [Any]? { + /// Adds modules from requiredModules() to the MVMCoreViewControllerMapping.requiredModules map. + open func updateRequiredModules() { + if let requiredModules = requiredModules(), let pageType = pageType { + MVMCoreViewControllerMappingObject.shared()?.addRequiredModules(toMapping: requiredModules, forPageType: pageType) + } + } + + /// Gets modules required by the loadObject.pageJSON. + open func requiredModules() -> [Any]? { let modules: NSMutableArray = [] let delegate = delegateObject() as? MVMCoreUIDelegateObject - MVMCoreUIMoleculeMappingObject.addRequiredModules(forJSON: page?.optionalDictionaryForKey("header"), delegateObject: delegate, moduleList: modules, errorList: nil) - MVMCoreUIMoleculeMappingObject.addRequiredModules(forJSON: page?.optionalDictionaryForKey("footer"), delegateObject: delegate, moduleList: modules, errorList: nil) - if let molecules = page?.optionalArrayForKey(KeyMolecules) as? [[AnyHashable: Any]] { + MVMCoreUIMoleculeMappingObject.addRequiredModules(forJSON: loadObject?.pageJSON?.optionalDictionaryForKey("header"), delegateObject: delegate, moduleList: modules, errorList: nil) + MVMCoreUIMoleculeMappingObject.addRequiredModules(forJSON: loadObject?.pageJSON?.optionalDictionaryForKey("footer"), delegateObject: delegate, moduleList: modules, errorList: nil) + if let molecules = loadObject?.pageJSON?.optionalArrayForKey(KeyMolecules) as? [[AnyHashable: Any]] { for molecule in molecules { MVMCoreUIMoleculeMappingObject.addRequiredModules(forJSON: molecule, delegateObject: delegate, moduleList: modules, errorList: nil) } diff --git a/MVMCoreUI/Templates/MoleculeStackTemplate.swift b/MVMCoreUI/Templates/MoleculeStackTemplate.swift index 47138961..064c910c 100644 --- a/MVMCoreUI/Templates/MoleculeStackTemplate.swift +++ b/MVMCoreUI/Templates/MoleculeStackTemplate.swift @@ -9,6 +9,21 @@ import UIKit public class MoleculeStackTemplate: ThreeLayerViewController { + var observer: NSKeyValueObservation? + + open override var loadObject: MVMCoreLoadObject? { + didSet { + if loadObject != oldValue { + updateRequiredModules() + observer?.invalidate() + if let newObject = loadObject { + observer = newObject.observe(\MVMCoreLoadObject.pageJSON, options: [.old, .new]) { [weak self] (object, change) in + self?.updateRequiredModules() + } + } + } + } + } public override func spaceBetweenTopAndMiddle() -> CGFloat? { return 0 @@ -50,17 +65,20 @@ public class MoleculeStackTemplate: ThreeLayerViewController { return loadObject?.requestParameters?.modules } - open override func requiredModules(fromPageJSON page: [AnyHashable : Any]?) -> [Any]? { - return modulesNeeded() as? [Any] + /// Adds modules from requiredModules() to the MVMCoreViewControllerMapping.requiredModules map. + open func updateRequiredModules() { + if let requiredModules = requiredModules(), let pageType = pageType { + MVMCoreViewControllerMappingObject.shared()?.addRequiredModules(toMapping: requiredModules, forPageType: pageType) + } } - /// Gets the modules needed. - func modulesNeeded() -> NSMutableArray? { + /// Gets modules required by the loadObject.pageJSON. + open func requiredModules() -> [Any]? { let modules: NSMutableArray = [] let delegate = delegateObject() as? MVMCoreUIDelegateObject MVMCoreUIMoleculeMappingObject.addRequiredModules(forJSON: loadObject?.pageJSON?.optionalDictionaryForKey("header"), delegateObject: delegate, moduleList: modules, errorList: nil) MVMCoreUIMoleculeMappingObject.addRequiredModules(forJSON: loadObject?.pageJSON?.optionalDictionaryForKey("footer"), delegateObject: delegate, moduleList: modules, errorList: nil) MVMCoreUIMoleculeMappingObject.addRequiredModules(forJSON: loadObject?.pageJSON?.optionalDictionaryForKey("moleculeStack"), delegateObject: delegate, moduleList: modules, errorList: nil) - return modules.count > 0 ? modules : nil + return modules as? [Any] } }