added Equality to Modelable
added AnyEquality to classes that have an a property with 'any' added default implementation on shouldUpdateView() to check equality, this can be re-implemented in classes removed all shouldUpdateView methods everywhere since above was done Signed-off-by: Matt Bruce <matt.bruce@verizon.com>
This commit is contained in:
parent
a07f86efe3
commit
9e2d5fff47
@ -90,10 +90,6 @@ open class CollectionView<ModelType: Modelable>: UICollectionView, ModelHandlera
|
||||
//--------------------------------------------------
|
||||
// MARK: - Overrides
|
||||
//--------------------------------------------------
|
||||
open func shouldUpdateView(viewModel: ModelType) -> Bool {
|
||||
fatalError("Implement shouldUpdateView")
|
||||
}
|
||||
|
||||
open func updateView(viewModel: ModelType) {
|
||||
fatalError("Implement updateView")
|
||||
}
|
||||
|
||||
@ -96,10 +96,6 @@ open class Control<ModelType: Modelable>: UIControl, ModelHandlerable, ViewProto
|
||||
//--------------------------------------------------
|
||||
// MARK: - Overrides
|
||||
//--------------------------------------------------
|
||||
open func shouldUpdateView(viewModel: ModelType) -> Bool {
|
||||
fatalError("Implement shouldUpdateView")
|
||||
}
|
||||
|
||||
open func updateView(viewModel: ModelType) {
|
||||
fatalError("Implement updateView")
|
||||
}
|
||||
|
||||
@ -84,11 +84,7 @@ open class View<ModelType: Modelable>: UIView, ModelHandlerable, ViewProtocol, R
|
||||
|
||||
//--------------------------------------------------
|
||||
// MARK: - Overrides
|
||||
//--------------------------------------------------
|
||||
open func shouldUpdateView(viewModel: ModelType) -> Bool {
|
||||
fatalError("Implement shouldUpdateView")
|
||||
}
|
||||
|
||||
//--------------------------------------------------
|
||||
open func updateView(viewModel: ModelType) {
|
||||
fatalError("Implement updateView")
|
||||
}
|
||||
|
||||
@ -228,19 +228,7 @@ open class CheckboxBase<ModelType: CheckboxModel>: Control<ModelType> {
|
||||
|
||||
//--------------------------------------------------
|
||||
// MARK: - State
|
||||
//--------------------------------------------------
|
||||
/// Follow the SwiftUI View paradigm
|
||||
/// - Parameter viewModel: state
|
||||
open override func shouldUpdateView(viewModel: ModelType) -> Bool {
|
||||
let update = viewModel.selected != model.selected
|
||||
|| viewModel.labelText != model.labelText
|
||||
|| viewModel.childText != model.childText
|
||||
|| viewModel.hasError != model.hasError
|
||||
|| viewModel.surface != model.surface
|
||||
|| viewModel.disabled != model.disabled
|
||||
return update
|
||||
}
|
||||
|
||||
//--------------------------------------------------
|
||||
open override func updateView(viewModel: ModelType) {
|
||||
let enabled = !viewModel.disabled
|
||||
|
||||
|
||||
@ -67,15 +67,7 @@ public class CheckboxGroupBase<GroupModelType: CheckboxGroupModel, ModelHandlerT
|
||||
mainStackView.trailingAnchor.constraint(equalTo: trailingAnchor).isActive = true
|
||||
mainStackView.bottomAnchor.constraint(equalTo: bottomAnchor).isActive = true
|
||||
}
|
||||
|
||||
open override func shouldUpdateView(viewModel: ModelType) -> Bool {
|
||||
let update = viewModel.selectors.count != model.selectors.count
|
||||
|| viewModel.hasError != model.hasError
|
||||
|| viewModel.surface != model.surface
|
||||
|| viewModel.disabled != model.disabled
|
||||
return update
|
||||
}
|
||||
|
||||
|
||||
open override func updateView(viewModel: ModelType) {
|
||||
for selectorModel in viewModel.selectors {
|
||||
//see if view is there for the model
|
||||
|
||||
@ -91,4 +91,33 @@ public struct DefaultCheckboxModel: CheckboxModel {
|
||||
public var accessibilityLabelDisabled: String?
|
||||
|
||||
public init() {}
|
||||
|
||||
public static func == (lhs: DefaultCheckboxModel, rhs: DefaultCheckboxModel) -> Bool {
|
||||
lhs.isEqual(rhs)
|
||||
}
|
||||
|
||||
public func isEqual(_ equatable: DefaultCheckboxModel) -> Bool {
|
||||
return id == equatable.id
|
||||
&& selected == equatable.selected
|
||||
&& labelText == equatable.labelText
|
||||
&& labelTextAttributes == equatable.labelTextAttributes
|
||||
&& childText == equatable.childText
|
||||
&& childTextAttributes == equatable.childTextAttributes
|
||||
&& hasError == equatable.hasError
|
||||
&& errorText == equatable.errorText
|
||||
&& inputId == equatable.inputId
|
||||
&& value == equatable.value
|
||||
&& surface == equatable.surface
|
||||
&& disabled == equatable.disabled
|
||||
&& dataAnalyticsTrack == equatable.dataAnalyticsTrack
|
||||
&& dataClickStream == equatable.dataClickStream
|
||||
&& dataTrack == equatable.dataTrack
|
||||
&& accessibilityHintEnabled == equatable.accessibilityHintEnabled
|
||||
&& accessibilityHintDisabled == equatable.accessibilityHintDisabled
|
||||
&& accessibilityValueEnabled == equatable.accessibilityValueEnabled
|
||||
&& accessibilityValueDisabled == equatable.accessibilityValueDisabled
|
||||
&& accessibilityLabelEnabled == equatable.accessibilityLabelEnabled
|
||||
&& accessibilityLabelDisabled == equatable.accessibilityLabelDisabled
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -130,17 +130,7 @@ open class LabelBase<ModelType: LabelModel>: UILabel, ModelHandlerable, ViewProt
|
||||
|
||||
//--------------------------------------------------
|
||||
// MARK: - Overrides
|
||||
//--------------------------------------------------
|
||||
/// Follow the SwiftUI View paradigm
|
||||
/// - Parameter viewModel: state
|
||||
open func shouldUpdateView(viewModel: ModelType) -> Bool {
|
||||
return viewModel.text != model.text
|
||||
|| viewModel.disabled != model.disabled
|
||||
|| viewModel.surface != model.surface
|
||||
|| viewModel.font != model.font
|
||||
|| viewModel.textPosition != model.textPosition
|
||||
}
|
||||
|
||||
//--------------------------------------------------
|
||||
open func updateView(viewModel: ModelType) {
|
||||
textAlignment = viewModel.textPosition.textAlignment
|
||||
textColor = textColorConfiguration.getColor(viewModel)
|
||||
|
||||
@ -8,12 +8,12 @@
|
||||
import Foundation
|
||||
import UIKit
|
||||
|
||||
public protocol LabelModel: Modelable, Labelable {
|
||||
public protocol LabelModel: Modelable, Labelable, Equatable, AnyEquatable {
|
||||
var text: String? { get set }
|
||||
var attributes: [any LabelAttributeModel]? { get set }
|
||||
}
|
||||
|
||||
public struct DefaultLabelModel: LabelModel, AnyEquatable, Equatable {
|
||||
public struct DefaultLabelModel: LabelModel {
|
||||
public static func == (lhs: DefaultLabelModel, rhs: DefaultLabelModel) -> Bool {
|
||||
lhs.isEqual(rhs)
|
||||
}
|
||||
|
||||
@ -205,19 +205,7 @@ open class RadioBoxBase<ModelType: RadioBoxModel>: Control<ModelType> {
|
||||
|
||||
//--------------------------------------------------
|
||||
// MARK: - State
|
||||
//--------------------------------------------------
|
||||
/// Follow the SwiftUI View paradigm
|
||||
/// - Parameter viewModel: state
|
||||
open override func shouldUpdateView(viewModel: ModelType) -> Bool {
|
||||
let update = viewModel.selected != model.selected
|
||||
|| viewModel.text != model.text
|
||||
|| viewModel.subText != model.subText
|
||||
|| viewModel.subTextRight != model.subTextRight
|
||||
|| viewModel.surface != model.surface
|
||||
|| viewModel.disabled != model.disabled
|
||||
return update
|
||||
}
|
||||
|
||||
//--------------------------------------------------
|
||||
open override func updateView(viewModel: ModelType) {
|
||||
let enabled = !viewModel.disabled
|
||||
|
||||
|
||||
@ -68,14 +68,6 @@ public class RadioBoxGroupBase<GroupModelType: RadioBoxGroupModel, ModelHandlerT
|
||||
}
|
||||
}.store(in: &subscribers)
|
||||
}
|
||||
|
||||
open override func shouldUpdateView(viewModel: ModelType) -> Bool {
|
||||
let update = viewModel.selectedModel?.inputId != model.selectedModel?.inputId
|
||||
|| viewModel.selectors.count != model.selectors.count
|
||||
|| viewModel.surface != model.surface
|
||||
|| viewModel.disabled != model.disabled
|
||||
return update
|
||||
}
|
||||
|
||||
open override func updateView(viewModel: ModelType) {
|
||||
for selectorModel in viewModel.selectors {
|
||||
|
||||
@ -86,4 +86,37 @@ public struct DefaultRadioBoxModel: RadioBoxModel {
|
||||
public var accessibilityLabelDisabled: String?
|
||||
|
||||
public init() {}
|
||||
|
||||
public static func == (lhs: DefaultRadioBoxModel, rhs: DefaultRadioBoxModel) -> Bool {
|
||||
lhs.isEqual(rhs)
|
||||
}
|
||||
|
||||
public func isEqual(_ equatable: DefaultRadioBoxModel) -> Bool {
|
||||
return id == equatable.id
|
||||
&& selected == equatable.selected
|
||||
&& text == equatable.text
|
||||
&& textAttributes == equatable.textAttributes
|
||||
&& subText == equatable.subText
|
||||
&& subTextAttributes == equatable.subTextAttributes
|
||||
&& subTextRight == equatable.subTextRight
|
||||
&& subTextRightAttributes == equatable.subTextRightAttributes
|
||||
&& selectedAccentColor == equatable.selectedAccentColor
|
||||
&& strikethrough == equatable.strikethrough
|
||||
|
||||
&& inputId == equatable.inputId
|
||||
&& value == equatable.value
|
||||
|
||||
&& surface == equatable.surface
|
||||
&& disabled == equatable.disabled
|
||||
|
||||
&& dataAnalyticsTrack == equatable.dataAnalyticsTrack
|
||||
&& dataClickStream == equatable.dataClickStream
|
||||
&& dataTrack == equatable.dataTrack
|
||||
&& accessibilityHintEnabled == equatable.accessibilityHintEnabled
|
||||
&& accessibilityHintDisabled == equatable.accessibilityHintDisabled
|
||||
&& accessibilityValueEnabled == equatable.accessibilityValueEnabled
|
||||
&& accessibilityValueDisabled == equatable.accessibilityValueDisabled
|
||||
&& accessibilityLabelEnabled == equatable.accessibilityLabelEnabled
|
||||
&& accessibilityLabelDisabled == equatable.accessibilityLabelDisabled
|
||||
}
|
||||
}
|
||||
|
||||
@ -238,19 +238,7 @@ open class RadioButtonBase<ModelType: RadioButtonModel>: Control<ModelType> {
|
||||
|
||||
//--------------------------------------------------
|
||||
// MARK: - State
|
||||
//--------------------------------------------------
|
||||
/// Follow the SwiftUI View paradigm
|
||||
/// - Parameter viewModel: state
|
||||
open override func shouldUpdateView(viewModel: ModelType) -> Bool {
|
||||
let update = viewModel.selected != model.selected
|
||||
|| viewModel.labelText != model.labelText
|
||||
|| viewModel.childText != model.childText
|
||||
|| viewModel.hasError != model.hasError
|
||||
|| viewModel.surface != model.surface
|
||||
|| viewModel.disabled != model.disabled
|
||||
return update
|
||||
}
|
||||
|
||||
//--------------------------------------------------
|
||||
open override func updateView(viewModel: ModelType) {
|
||||
let enabled = !viewModel.disabled
|
||||
|
||||
|
||||
@ -68,15 +68,6 @@ public class RadioButtonGroupBase<GroupModelType: RadioButtonGroupModel, ModelHa
|
||||
mainStackView.trailingAnchor.constraint(equalTo: trailingAnchor).isActive = true
|
||||
mainStackView.bottomAnchor.constraint(equalTo: bottomAnchor).isActive = true
|
||||
}
|
||||
|
||||
open override func shouldUpdateView(viewModel: ModelType) -> Bool {
|
||||
let update = viewModel.selectedModel?.inputId != model.selectedModel?.inputId
|
||||
|| viewModel.selectors.count != model.selectors.count
|
||||
|| viewModel.hasError != model.hasError
|
||||
|| viewModel.surface != model.surface
|
||||
|| viewModel.disabled != model.disabled
|
||||
return update
|
||||
}
|
||||
|
||||
open override func updateView(viewModel: ModelType) {
|
||||
for selectorModel in viewModel.selectors {
|
||||
|
||||
@ -92,4 +92,37 @@ public struct DefaultRadioButtonModel: RadioButtonModel {
|
||||
public var accessibilityLabelDisabled: String?
|
||||
|
||||
public init() {}
|
||||
|
||||
public static func == (lhs: DefaultRadioButtonModel, rhs: DefaultRadioButtonModel) -> Bool {
|
||||
lhs.isEqual(rhs)
|
||||
}
|
||||
|
||||
public func isEqual(_ equatable: DefaultRadioButtonModel) -> Bool {
|
||||
return id == equatable.id
|
||||
&& selected == equatable.selected
|
||||
|
||||
&& labelText == equatable.labelText
|
||||
&& labelTextAttributes == equatable.labelTextAttributes
|
||||
&& childText == equatable.childText
|
||||
&& childTextAttributes == equatable.childTextAttributes
|
||||
|
||||
&& hasError == equatable.hasError
|
||||
&& errorText == equatable.errorText
|
||||
|
||||
&& inputId == equatable.inputId
|
||||
&& value == equatable.value
|
||||
|
||||
&& surface == equatable.surface
|
||||
&& disabled == equatable.disabled
|
||||
|
||||
&& dataAnalyticsTrack == equatable.dataAnalyticsTrack
|
||||
&& dataClickStream == equatable.dataClickStream
|
||||
&& dataTrack == equatable.dataTrack
|
||||
&& accessibilityHintEnabled == equatable.accessibilityHintEnabled
|
||||
&& accessibilityHintDisabled == equatable.accessibilityHintDisabled
|
||||
&& accessibilityValueEnabled == equatable.accessibilityValueEnabled
|
||||
&& accessibilityValueDisabled == equatable.accessibilityValueDisabled
|
||||
&& accessibilityLabelEnabled == equatable.accessibilityLabelEnabled
|
||||
&& accessibilityLabelDisabled == equatable.accessibilityLabelDisabled
|
||||
}
|
||||
}
|
||||
|
||||
@ -139,14 +139,7 @@ open class RadioSwatchBase<ModelType: RadioSwatchModel>: Control<ModelType> {
|
||||
|
||||
//--------------------------------------------------
|
||||
// MARK: - State
|
||||
//--------------------------------------------------
|
||||
/// Follow the SwiftUI View paradigm
|
||||
/// - Parameter viewModel: state
|
||||
open override func shouldUpdateView(viewModel: ModelType) -> Bool {
|
||||
let should = viewModel != model
|
||||
return should
|
||||
}
|
||||
|
||||
//--------------------------------------------------
|
||||
open override func updateView(viewModel: ModelType) {
|
||||
let enabled = !viewModel.disabled
|
||||
|
||||
|
||||
@ -124,10 +124,6 @@ public class RadioSwatchGroupBase<GroupModelType: RadioSwatchGroupModel, ModelHa
|
||||
collectionViewHeight?.constant = CGFloat(height)
|
||||
}
|
||||
|
||||
open override func shouldUpdateView(viewModel: ModelType) -> Bool {
|
||||
return viewModel != model
|
||||
}
|
||||
|
||||
public override func initialSetup() {
|
||||
super.initialSetup()
|
||||
collectionView.delegate = self
|
||||
|
||||
@ -328,13 +328,7 @@ open class ToggleBase<ModelType: ToggleModel>: Control<ModelType> {
|
||||
|
||||
//--------------------------------------------------
|
||||
// MARK: - State
|
||||
//--------------------------------------------------
|
||||
/// Follow the SwiftUI View paradigm
|
||||
/// - Parameter viewModel: state
|
||||
open override func shouldUpdateView(viewModel: ModelType) -> Bool {
|
||||
return true
|
||||
}
|
||||
|
||||
//--------------------------------------------------
|
||||
open override func updateView(viewModel: ModelType) {
|
||||
label.set(with: viewModel.label)
|
||||
updateLabel(viewModel)
|
||||
|
||||
@ -32,6 +32,10 @@ extension ModelHandlerable {
|
||||
}
|
||||
}
|
||||
|
||||
public func shouldUpdateView(viewModel: ModelType) -> Bool {
|
||||
model != viewModel
|
||||
}
|
||||
|
||||
public func setupUpdateView() {
|
||||
handlerPublisher()
|
||||
.subscribe(on: RunLoop.main)
|
||||
|
||||
@ -7,7 +7,7 @@
|
||||
|
||||
import Foundation
|
||||
|
||||
public protocol Modelable: Surfaceable, Disabling, Initable, Withable, Identifiable, CustomDebugStringConvertible where ID == UUID {
|
||||
public protocol Modelable: Surfaceable, Disabling, Initable, Withable, Identifiable, Equatable, CustomDebugStringConvertible where ID == UUID {
|
||||
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user