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 viewModel: ButtonGroupModel!
|
||||||
open var delegateObject: MVMCoreUIDelegateObject?
|
open var delegateObject: MVMCoreUIDelegateObject?
|
||||||
open var additionalData: [AnyHashable : Any]?
|
open var additionalData: [AnyHashable : Any]?
|
||||||
|
open var previousModel: ButtonGroupModel?
|
||||||
|
|
||||||
//--------------------------------------------------
|
//--------------------------------------------------
|
||||||
// MARK: - MoleculeViewProtocol
|
// MARK: - MoleculeViewProtocol
|
||||||
@ -31,25 +32,45 @@ import VDS
|
|||||||
return PillButton.estimatedHeight(with: buttonModel, delegateObject)
|
return PillButton.estimatedHeight(with: buttonModel, delegateObject)
|
||||||
}
|
}
|
||||||
|
|
||||||
public func viewModelDidUpdate() {
|
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)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
surface = viewModel.surface
|
surface = viewModel.surface
|
||||||
isEnabled = viewModel.enabled
|
isEnabled = viewModel.enabled
|
||||||
alignment = viewModel.alignment
|
alignment = viewModel.alignment
|
||||||
rowQuantityPhone = viewModel.rowQuantityPhone
|
rowQuantityPhone = viewModel.rowQuantityPhone
|
||||||
rowQuantityTablet = viewModel.rowQuantityTablet
|
rowQuantityTablet = viewModel.rowQuantityTablet
|
||||||
|
|
||||||
if let childWidthValue = viewModel.childWidthValue {
|
if let childWidthValue = viewModel.childWidthValue {
|
||||||
childWidth = .value(childWidthValue)
|
childWidth = .value(childWidthValue)
|
||||||
} else if let childWidthPercentage = viewModel.childWidthPercentage {
|
} else if let childWidthPercentage = viewModel.childWidthPercentage {
|
||||||
childWidth = .percentage(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) {
|
public func updateView(_ size: CGFloat) {
|
||||||
setNeedsUpdate()
|
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