85 lines
3.9 KiB
Swift
85 lines
3.9 KiB
Swift
//
|
|
// ModuleMolecule.swift
|
|
// MVMCoreUI
|
|
//
|
|
// Created by Scott Pfeil on 6/25/19.
|
|
// Copyright © 2019 Verizon Wireless. All rights reserved.
|
|
//
|
|
|
|
import UIKit
|
|
|
|
open class ModuleMolecule: Container {
|
|
|
|
open var moduleMolecule: (UIView & MVMCoreUIMoleculeViewProtocol & ModelMoleculeViewProtocol)?
|
|
var moduleMoleculeModel: ModuleMoleculeModel? {
|
|
get { return model as? ModuleMoleculeModel }
|
|
}
|
|
|
|
public override func setupView() {
|
|
super.setupView()
|
|
}
|
|
|
|
public override func setWithModel(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) {
|
|
super.setWithModel(model, delegateObject, additionalData)
|
|
|
|
guard let moduleMoleculeModel = model as? ModuleMoleculeModel,
|
|
let moduleModel = delegateObject?.moleculeDelegate?.getModuleWithName(moduleMoleculeModel.moduleName) else {
|
|
// Critical error
|
|
return
|
|
}
|
|
|
|
if moduleMolecule == nil {
|
|
if let moleculeView = MVMCoreUIMoleculeMappingObject.shared()?.createMolecule(moduleModel, delegateObject, false) {
|
|
addSubview(moleculeView)
|
|
NSLayoutConstraint.activate(Array(NSLayoutConstraint.pinView(toSuperview: moleculeView, useMargins: false).values))
|
|
moduleMolecule = moleculeView as? (UIView & MVMCoreUIMoleculeViewProtocol & ModelMoleculeViewProtocol)
|
|
|
|
isAccessibilityElement = false
|
|
if moleculeView.accessibilityElements != nil {
|
|
accessibilityElements = moleculeView.accessibilityElements
|
|
} else {
|
|
accessibilityElements = [moleculeView]
|
|
}
|
|
}
|
|
} else {
|
|
moduleMolecule?.setWithModel(model, delegateObject, additionalData)
|
|
}
|
|
}
|
|
|
|
public override class func estimatedHeight(forRow molecule: MoleculeModelProtocol?, delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? {
|
|
|
|
guard let moduleMolecule = molecule as? ModuleMoleculeModel,
|
|
let moduleModel = delegateObject?.moleculeDelegate?.getModuleWithName(moduleMolecule.moduleName),
|
|
let classType = MVMCoreUIMoleculeMappingObject.shared()?.getMoleculeClass(moduleModel) as? ModelMoleculeViewProtocol.Type,
|
|
let height = classType.estimatedHeight(forRow: moduleModel, delegateObject: delegateObject)else {
|
|
// Critical error
|
|
return 0
|
|
}
|
|
return height
|
|
}
|
|
|
|
public override class func nameForReuse(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?) -> String? {
|
|
guard let moduleMolecule = model as? ModuleMoleculeModel,
|
|
let moduleModel = delegateObject?.moleculeDelegate?.getModuleWithName(moduleMolecule.moduleName),
|
|
let classType = MVMCoreUIMoleculeMappingObject.shared()?.getMoleculeClass(moduleModel) as? ModelMoleculeViewProtocol.Type,
|
|
let name = classType.nameForReuse(moduleModel, delegateObject) else {
|
|
// Critical error
|
|
return "moduleMolecule<>"
|
|
}
|
|
return name
|
|
}
|
|
|
|
public override class func requiredModules(_ molecule: MoleculeModelProtocol?, delegateObject: MVMCoreUIDelegateObject?, error: AutoreleasingUnsafeMutablePointer<MVMCoreErrorObject?>?) -> [String]? {
|
|
|
|
guard let moduleName = (molecule as? ModuleMoleculeModel)?.moduleName,
|
|
let _ = delegateObject?.moleculeDelegate?.getModuleWithName(moduleName) else {
|
|
if let errorObject = MVMCoreErrorObject(title: nil, message: MVMCoreGetterUtility.hardcodedString(withKey: HardcodedErrorUnableToProcess), code: CoreUIErrorCode.ErrorCodeModuleMolecule.rawValue, domain: ErrorDomainNative, location: String(describing: self)) {
|
|
error?.pointee = errorObject
|
|
MVMCoreUILoggingHandler.shared()?.addError(toLog: errorObject)
|
|
}
|
|
return nil
|
|
}
|
|
return [moduleName]
|
|
}
|
|
}
|