diff --git a/MVMCoreUI/Atomic/Molecules/DesignedComponents/List/LeftVariable/ListLeftVariableIconWithRightCaretAllTextLinksModel.swift b/MVMCoreUI/Atomic/Molecules/DesignedComponents/List/LeftVariable/ListLeftVariableIconWithRightCaretAllTextLinksModel.swift index 9d9291e8..3f48a2d6 100644 --- a/MVMCoreUI/Atomic/Molecules/DesignedComponents/List/LeftVariable/ListLeftVariableIconWithRightCaretAllTextLinksModel.swift +++ b/MVMCoreUI/Atomic/Molecules/DesignedComponents/List/LeftVariable/ListLeftVariableIconWithRightCaretAllTextLinksModel.swift @@ -6,7 +6,8 @@ // Copyright © 2020 Verizon Wireless. All rights reserved. // -public class ListLeftVariableIconWithRightCaretAllTextLinksModel: ListItemModel, MoleculeModelProtocol { +public class ListLeftVariableIconWithRightCaretAllTextLinksModel: ListItemModel, ParentMoleculeModelProtocol { + //----------------------------------------------------- // MARK: - Properties //----------------------------------------------------- @@ -16,6 +17,10 @@ public class ListLeftVariableIconWithRightCaretAllTextLinksModel: ListItemModel, public var eyebrowHeadlineBodyLink: EyebrowHeadlineBodyLinkModel public var rightLabel: LabelModel + public var children: [MoleculeModelProtocol] { + return [image, eyebrowHeadlineBodyLink,rightLabel] + } + //----------------------------------------------------- // MARK: - Methods //----------------------------------------------------- diff --git a/MVMCoreUI/BaseControllers/ViewController.swift b/MVMCoreUI/BaseControllers/ViewController.swift index 293bd49f..20ba4a66 100644 --- a/MVMCoreUI/BaseControllers/ViewController.swift +++ b/MVMCoreUI/BaseControllers/ViewController.swift @@ -653,7 +653,7 @@ import UIKit // MARK: - Behavior Execution //-------------------------------------------------- - func executeBehaviors(_ behaviorBlock: (_ behavior: T) -> Void) { + public func executeBehaviors(_ behaviorBlock: (_ behavior: T) -> Void) { behaviors?.compactMap { $0 as? T }.forEach { behaviorBlock($0) } } } diff --git a/MVMCoreUI/Behaviors/GetContactBehavior.swift b/MVMCoreUI/Behaviors/GetContactBehavior.swift index 2c6205f2..6ea969ac 100644 --- a/MVMCoreUI/Behaviors/GetContactBehavior.swift +++ b/MVMCoreUI/Behaviors/GetContactBehavior.swift @@ -21,7 +21,8 @@ public class PageGetContactBehaviorModel: PageBehaviorModelProtocol { public init() {} } -public class PageGetContactBehavior: PageVisibilityBehavior { +public class PageGetContactBehavior: PageVisibilityBehavior,PageNextBatchActionBehavior { + var delegate: MVMCoreUIDelegateObject? public required init(model: PageBehaviorModelProtocol, delegateObject: MVMCoreUIDelegateObject?) { @@ -32,24 +33,34 @@ public class PageGetContactBehavior: PageVisibilityBehavior { // Ask for permission CNContactStore().requestAccess(for: .contacts) { [weak self] (access, error) in guard access, - error == nil, - let rootMolecules = self?.delegate?.moleculeDelegate?.getRootMolecules() else { return } + error == nil else { return } // Iterate models and provide contact - let store = CNContactStore() - let consumers: [PageGetContactBehaviorConsumerProtocol] = rootMolecules.allMoleculesOfType() - for consumer in consumers { - guard let parameters = consumer.getMatchParameters(), - let contacts = try? store.unifiedContacts(matching: parameters.0, keysToFetch: parameters.1) else { return } - consumer.consume(contacts: contacts) - } + self?.getContacts() // Tell template to update MVMCoreDispatchUtility.performBlock(onMainThread: { // TODO: move to protocol function instead - (self?.delegate?.moleculeDelegate as? ViewController)?.handleNewData() + (self?.delegate?.moleculeDelegate as? ViewController)?.handleNewDataAndUpdateUI() }) } } + func getContacts() { + guard let rootMolecules = self.delegate?.moleculeDelegate?.getRootMolecules() else { return } + let store = CNContactStore() + let consumers: [PageGetContactBehaviorConsumerProtocol] = rootMolecules.allMoleculesOfType() + for consumer in consumers { + guard let parameters = consumer.getMatchParameters(), + let contacts = try? store.unifiedContacts(matching: parameters.0, keysToFetch: parameters.1) else { return } + consumer.consume(contacts: contacts) + } + } + public func onPageHidden(_ delegateObject: MVMCoreUIDelegateObject?) {} + + public func nextBatchAction(_ delegateObject: MVMCoreUIDelegateObject?) { + if CNContactStore.authorizationStatus(for: .contacts) == .authorized { + getContacts() + } + } } diff --git a/MVMCoreUI/Behaviors/Protocols/PageBehaviorProtocol.swift b/MVMCoreUI/Behaviors/Protocols/PageBehaviorProtocol.swift index e7db54bc..87df7007 100644 --- a/MVMCoreUI/Behaviors/Protocols/PageBehaviorProtocol.swift +++ b/MVMCoreUI/Behaviors/Protocols/PageBehaviorProtocol.swift @@ -39,6 +39,12 @@ public protocol PageLocalDataShareBehavior: PageBehaviorProtocol { func receiveLocalPageData(_ data:[AnyHashable: Any], _ delegateObject: MVMCoreUIDelegateObject) } +public protocol PageNextBatchActionBehavior: PageBehaviorProtocol { + + func nextBatchAction(_ delegateObject: MVMCoreUIDelegateObject?) + +} + public protocol PageCustomActionHandlerBehavior: PageBehaviorProtocol { func handleAction(type actionType: String?, information: [AnyHashable : Any]?, additionalData: [AnyHashable : Any]?) -> Bool