added nameForReuse check
refactored buttons to either create or set Signed-off-by: Matt Bruce <matt.bruce@verizon.com>
This commit is contained in:
parent
315a96470b
commit
fbcf881535
@ -18,6 +18,7 @@ import VDS
|
||||
open var viewModel: ButtonGroupModel!
|
||||
open var delegateObject: MVMCoreUIDelegateObject?
|
||||
open var additionalData: [AnyHashable : Any]?
|
||||
open var previousModel: ButtonGroupModel?
|
||||
|
||||
//--------------------------------------------------
|
||||
// MARK: - MoleculeViewProtocol
|
||||
@ -31,25 +32,45 @@ import VDS
|
||||
return PillButton.estimatedHeight(with: buttonModel, delegateObject)
|
||||
}
|
||||
|
||||
public func viewModelDidUpdate() {
|
||||
var buttonBases = [ButtonBase]()
|
||||
viewModel.buttons.forEach { buttonModel in
|
||||
if let buttonBaseType = try? ModelRegistry.getHandler(buttonModel) as? MoleculeViewProtocol.Type,
|
||||
let button = buttonBaseType.init(model: buttonModel, delegateObject, additionalData) as? VDS.ButtonBase {
|
||||
buttonBases.append(button)
|
||||
}
|
||||
}
|
||||
public func viewModelDidUpdate() {
|
||||
surface = viewModel.surface
|
||||
isEnabled = viewModel.enabled
|
||||
alignment = viewModel.alignment
|
||||
rowQuantityPhone = viewModel.rowQuantityPhone
|
||||
rowQuantityTablet = viewModel.rowQuantityTablet
|
||||
|
||||
if let childWidthValue = viewModel.childWidthValue {
|
||||
childWidth = .value(childWidthValue)
|
||||
} else if let childWidthPercentage = viewModel.childWidthPercentage {
|
||||
childWidth = .percentage(childWidthPercentage)
|
||||
}
|
||||
buttons = buttonBases
|
||||
|
||||
// create / set the moleculeViews
|
||||
if (previousModel == nil) || Self.nameForReuse(with: previousModel!, delegateObject) != Self.nameForReuse(with: viewModel, delegateObject) {
|
||||
var buttonBases = [ButtonBase]()
|
||||
viewModel.buttons.forEach { buttonModel in
|
||||
do {
|
||||
let buttonBaseType = try ModelRegistry.getHandler(buttonModel) as! MoleculeViewProtocol.Type
|
||||
let button = buttonBaseType.init(model: buttonModel, delegateObject, additionalData) as! VDS.ButtonBase
|
||||
buttonBases.append(button)
|
||||
} catch {
|
||||
if let errorObject = MVMCoreErrorObject.createErrorObject(for: error, location: #function) {
|
||||
MVMCoreLoggingHandler.shared()?.addError(toLog: errorObject)
|
||||
}
|
||||
}
|
||||
}
|
||||
buttons = buttonBases
|
||||
|
||||
} else {
|
||||
// only set the molecule views
|
||||
for (index, buttonBase) in buttons.enumerated() {
|
||||
if let button = buttonBase as? MoleculeViewProtocol, index < viewModel.buttons.count {
|
||||
button.set(with: viewModel.buttons[index], delegateObject, additionalData)
|
||||
}
|
||||
}
|
||||
// force redraw
|
||||
setNeedsUpdate()
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------
|
||||
@ -66,4 +87,22 @@ import VDS
|
||||
public func updateView(_ size: CGFloat) {
|
||||
setNeedsUpdate()
|
||||
}
|
||||
|
||||
public static func nameForReuse(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?) -> String? {
|
||||
// This will aggregate names of molecules to make an id.
|
||||
guard let model = model as? ButtonGroupModel else {
|
||||
return "buttonGroup<>"
|
||||
}
|
||||
var name = "buttonGroup<"
|
||||
for case let item in model.buttons {
|
||||
if let moleculeClass = ModelRegistry.getMoleculeClass(item),
|
||||
let nameForReuse = moleculeClass.nameForReuse(with: item, delegateObject) {
|
||||
name.append(nameForReuse + ",")
|
||||
} else {
|
||||
name.append(item.moleculeName + ",")
|
||||
}
|
||||
}
|
||||
name.append(">")
|
||||
return name
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user