Digital PCT265 defect CXTDT-546577 - Track UI updates from module changes.

This commit is contained in:
Hedden, Kyle Matthew 2024-04-17 19:23:45 -04:00
parent 70bc766c41
commit c48eab03ec
4 changed files with 13 additions and 5 deletions

View File

@ -22,7 +22,8 @@ public protocol MoleculeDelegateProtocol: AnyObject {
/// Notifies the delegate that the molecule layout update. Should be called when the layout may change due to an async method. Mainly used for list or collections.
func moleculeLayoutUpdated(_ molecule: MoleculeViewProtocol) //optional
func replaceMoleculeData(_ moleculeModels: [MoleculeModelProtocol])
/// Attempts to replace the molecules provided. Returns the ones that replaced successfully.
func replaceMoleculeData(_ moleculeModels: [MoleculeModelProtocol], completionHandler: (([MoleculeModelProtocol])->Void)?)
}
extension MoleculeDelegateProtocol {

View File

@ -511,7 +511,7 @@ import MVMCore
// Needed otherwise when subclassed, the extension gets called.
open func moleculeLayoutUpdated(_ molecule: MoleculeViewProtocol) { }
public func replaceMoleculeData(_ moleculeModels: [MoleculeModelProtocol]) {
public func replaceMoleculeData(_ moleculeModels: [MoleculeModelProtocol], completionHandler: (([MoleculeModelProtocol])->Void)? = nil) {
pageUpdateQueue.addOperation {
let replacedModels:[MoleculeModelProtocol] = moleculeModels.compactMap { model in
guard self.attemptToReplace(with: model) else {
@ -524,6 +524,7 @@ import MVMCore
self.updateUI(for: replacedModels)
}
}
completionHandler?(replacedModels)
}
}

View File

@ -62,7 +62,7 @@ public class ReplaceableMoleculeBehavior: PageMoleculeTransformationBehavior {
}
}
if moleculeModels.count > 0 {
delegateObject?.moleculeDelegate?.replaceMoleculeData(moleculeModels)
delegateObject?.moleculeDelegate?.replaceMoleculeData(moleculeModels, completionHandler: nil)
}
}
@ -95,8 +95,11 @@ public class ReplaceableMoleculeBehavior: PageMoleculeTransformationBehavior {
return nil
}
}
if modules.count > 0 {
delegateObject?.moleculeDelegate?.replaceMoleculeData(modules)
guard modules.count > 0 else { return }
delegateObject?.moleculeDelegate?.replaceMoleculeData(modules) { replacedModels in
let modules = replacedModels.compactMap { modulesLoaded.dictionaryForKey($0.id) }
guard let viewController = self.delegateObject?.moleculeDelegate as? MVMCoreViewControllerProtocol else { return }
modules.forEach { MVMCoreUILoggingHandler.shared()?.defaultLogPageUpdate(forController: viewController, from: $0) }
}
}

View File

@ -13,4 +13,7 @@
// Action Logging
@objc open func defaultLogAction(forController controller: MVMCoreViewControllerProtocol?, actionInformation: [AnyHashable : Any]?, additionalData: [AnyHashable : Any]?) { }
// Module Update Logging
@objc open func defaultLogPageUpdate(forController controller: MVMCoreViewControllerProtocol, from module: [AnyHashable: Any]) { }
}