refactored to use layoutSubviews
Signed-off-by: Matt Bruce <matt.bruce@verizon.com>
This commit is contained in:
parent
e53e66b96a
commit
60dbfa9d2b
@ -22,7 +22,7 @@ open class CollectionView: UICollectionView, ModelHandlerable, ViewProtocol, Res
|
||||
//--------------------------------------------------
|
||||
private var initialSetupPerformed = false
|
||||
|
||||
open var surface: Surface = .light { didSet { subject.send() }}
|
||||
open var surface: Surface = .light { didSet { didChange() }}
|
||||
|
||||
open var disabled: Bool = false { didSet { isEnabled = !disabled } }
|
||||
|
||||
@ -33,7 +33,7 @@ open class CollectionView: UICollectionView, ModelHandlerable, ViewProtocol, Res
|
||||
disabled = !newValue
|
||||
}
|
||||
isUserInteractionEnabled = isEnabled
|
||||
subject.send()
|
||||
didChange()
|
||||
}
|
||||
}
|
||||
|
||||
@ -67,18 +67,20 @@ open class CollectionView: UICollectionView, ModelHandlerable, ViewProtocol, Res
|
||||
open func initialSetup() {
|
||||
if !initialSetupPerformed {
|
||||
initialSetupPerformed = true
|
||||
setupUpdateView()
|
||||
setup()
|
||||
updateView()
|
||||
}
|
||||
}
|
||||
|
||||
open override func layoutSubviews() {
|
||||
super.layoutSubviews()
|
||||
updateView()
|
||||
}
|
||||
|
||||
//--------------------------------------------------
|
||||
// MARK: - Overrides
|
||||
//--------------------------------------------------
|
||||
open func updateView() {
|
||||
fatalError("Implement updateView")
|
||||
}
|
||||
open func updateView() {}
|
||||
|
||||
open func reset() {
|
||||
backgroundColor = .clear
|
||||
|
||||
@ -8,6 +8,6 @@
|
||||
import Foundation
|
||||
|
||||
public struct Constants {
|
||||
public static let ModelStateDebounce = 0.02
|
||||
public static let ModelStateDebounce = 0.0 //.001
|
||||
public static let PaddingOne = 10.0
|
||||
}
|
||||
|
||||
@ -17,16 +17,18 @@ open class Control: UIControl, ModelHandlerable, ViewProtocol, Resettable {
|
||||
//--------------------------------------------------
|
||||
public var subject = PassthroughSubject<Void, Never>()
|
||||
public var subscribers = Set<AnyCancellable>()
|
||||
|
||||
|
||||
//--------------------------------------------------
|
||||
// MARK: - Properties
|
||||
//--------------------------------------------------
|
||||
private var initialSetupPerformed = false
|
||||
|
||||
open var surface: Surface = .light { didSet { subject.send() }}
|
||||
open var surface: Surface = .light { didSet { didChange() } }
|
||||
|
||||
open var disabled: Bool = false { didSet { isEnabled = !disabled } }
|
||||
|
||||
open override var isSelected: Bool { didSet { didChange() } }
|
||||
|
||||
open override var isEnabled: Bool {
|
||||
get { !disabled }
|
||||
set {
|
||||
@ -34,7 +36,7 @@ open class Control: UIControl, ModelHandlerable, ViewProtocol, Resettable {
|
||||
disabled = !newValue
|
||||
}
|
||||
isUserInteractionEnabled = isEnabled
|
||||
subject.send()
|
||||
didChange()
|
||||
}
|
||||
}
|
||||
|
||||
@ -63,7 +65,6 @@ open class Control: UIControl, ModelHandlerable, ViewProtocol, Resettable {
|
||||
open func initialSetup() {
|
||||
if !initialSetupPerformed {
|
||||
initialSetupPerformed = true
|
||||
setupUpdateView()
|
||||
setup()
|
||||
updateView()
|
||||
}
|
||||
@ -79,10 +80,13 @@ open class Control: UIControl, ModelHandlerable, ViewProtocol, Resettable {
|
||||
//--------------------------------------------------
|
||||
// MARK: - Overrides
|
||||
//--------------------------------------------------
|
||||
open func updateView() {
|
||||
fatalError("Implement updateView")
|
||||
open override func layoutSubviews() {
|
||||
super.layoutSubviews()
|
||||
updateView()
|
||||
}
|
||||
|
||||
open func updateView() {}
|
||||
|
||||
open func reset() {
|
||||
backgroundColor = .clear
|
||||
surface = .light
|
||||
|
||||
@ -17,13 +17,13 @@ open class View: UIView, ModelHandlerable, ViewProtocol, Resettable {
|
||||
//--------------------------------------------------
|
||||
public var subject = PassthroughSubject<Void, Never>()
|
||||
public var subscribers = Set<AnyCancellable>()
|
||||
|
||||
|
||||
//--------------------------------------------------
|
||||
// MARK: - Properties
|
||||
//--------------------------------------------------
|
||||
private var initialSetupPerformed = false
|
||||
|
||||
open var surface: Surface = .light { didSet { subject.send() }}
|
||||
open var surface: Surface = .light { didSet { didChange() }}
|
||||
|
||||
open var disabled: Bool = false { didSet { isEnabled = !disabled } }
|
||||
|
||||
@ -34,7 +34,7 @@ open class View: UIView, ModelHandlerable, ViewProtocol, Resettable {
|
||||
disabled = !newValue
|
||||
}
|
||||
isUserInteractionEnabled = isEnabled
|
||||
subject.send()
|
||||
didChange()
|
||||
}
|
||||
}
|
||||
|
||||
@ -63,18 +63,19 @@ open class View: UIView, ModelHandlerable, ViewProtocol, Resettable {
|
||||
open func initialSetup() {
|
||||
if !initialSetupPerformed {
|
||||
initialSetupPerformed = true
|
||||
setupUpdateView()
|
||||
setup()
|
||||
updateView()
|
||||
}
|
||||
}
|
||||
|
||||
open override func layoutSubviews() {
|
||||
super.layoutSubviews()
|
||||
updateView()
|
||||
}
|
||||
|
||||
//--------------------------------------------------
|
||||
// MARK: - Overrides
|
||||
//--------------------------------------------------
|
||||
open func updateView() {
|
||||
fatalError("Implement updateView")
|
||||
}
|
||||
open func updateView() {}
|
||||
|
||||
open func reset() {
|
||||
backgroundColor = .clear
|
||||
|
||||
@ -20,25 +20,25 @@ open class BadgeBase: View, Accessable {
|
||||
//--------------------------------------------------
|
||||
// MARK: - Public Properties
|
||||
//--------------------------------------------------
|
||||
open var fillColor: BadgeFillColor = .red { didSet { subject.send() }}
|
||||
open var fillColor: BadgeFillColor = .red { didSet { didChange() }}
|
||||
|
||||
open var text: String = "" { didSet { subject.send() }}
|
||||
open var text: String = "" { didSet { didChange() }}
|
||||
|
||||
open var maxWidth: CGFloat? { didSet { subject.send() }}
|
||||
open var maxWidth: CGFloat? { didSet { didChange() }}
|
||||
|
||||
open var numberOfLines: Int = 1 { didSet { subject.send() }}
|
||||
open var numberOfLines: Int = 1 { didSet { didChange() }}
|
||||
|
||||
open var accessibilityHintEnabled: String? { didSet { subject.send() }}
|
||||
open var accessibilityHintEnabled: String? { didSet { didChange() }}
|
||||
|
||||
open var accessibilityHintDisabled: String? { didSet { subject.send() }}
|
||||
open var accessibilityHintDisabled: String? { didSet { didChange() }}
|
||||
|
||||
open var accessibilityValueEnabled: String? { didSet { subject.send() }}
|
||||
open var accessibilityValueEnabled: String? { didSet { didChange() }}
|
||||
|
||||
open var accessibilityValueDisabled: String? { didSet { subject.send() }}
|
||||
open var accessibilityValueDisabled: String? { didSet { didChange() }}
|
||||
|
||||
open var accessibilityLabelEnabled: String? { didSet { subject.send() }}
|
||||
open var accessibilityLabelEnabled: String? { didSet { didChange() }}
|
||||
|
||||
open var accessibilityLabelDisabled: String? { didSet { subject.send() }}
|
||||
open var accessibilityLabelDisabled: String? { didSet { didChange() }}
|
||||
|
||||
//--------------------------------------------------
|
||||
// MARK: - Constraints
|
||||
|
||||
@ -29,15 +29,15 @@ open class Button: UIButton, ModelHandlerable, ViewProtocol, Resettable, Useable
|
||||
//--------------------------------------------------
|
||||
// MARK: - Properties
|
||||
//--------------------------------------------------
|
||||
open var text: String? { didSet { subject.send() }}
|
||||
open var text: String? { didSet { didChange() } }
|
||||
|
||||
open var use: Use = .primary { didSet { subject.send() }}
|
||||
open var use: Use = .primary { didSet { didChange() }}
|
||||
|
||||
open var size: ButtonSize = .large { didSet { subject.send() }}
|
||||
open var size: ButtonSize = .large { didSet { didChange() }}
|
||||
|
||||
open var width: CGFloat? { didSet { subject.send() }}
|
||||
open var width: CGFloat? { didSet { didChange() }}
|
||||
|
||||
open var surface: Surface = .light { didSet { subject.send() }}
|
||||
open var surface: Surface = .light { didSet { didChange() }}
|
||||
|
||||
open var disabled: Bool = false { didSet { isEnabled = !disabled } }
|
||||
|
||||
@ -48,7 +48,7 @@ open class Button: UIButton, ModelHandlerable, ViewProtocol, Resettable, Useable
|
||||
disabled = !newValue
|
||||
}
|
||||
isUserInteractionEnabled = isEnabled
|
||||
subject.send()
|
||||
didChange()
|
||||
}
|
||||
}
|
||||
|
||||
@ -118,9 +118,7 @@ open class Button: UIButton, ModelHandlerable, ViewProtocol, Resettable, Useable
|
||||
translatesAutoresizingMaskIntoConstraints = false
|
||||
accessibilityCustomActions = []
|
||||
accessibilityTraits = .staticText
|
||||
setupUpdateView()
|
||||
setup()
|
||||
updateView()
|
||||
}
|
||||
|
||||
open func setup() {
|
||||
@ -146,6 +144,11 @@ open class Button: UIButton, ModelHandlerable, ViewProtocol, Resettable, Useable
|
||||
accessibilityCustomActions = []
|
||||
accessibilityTraits = .staticText
|
||||
}
|
||||
|
||||
open override func layoutSubviews() {
|
||||
super.layoutSubviews()
|
||||
updateView()
|
||||
}
|
||||
|
||||
//--------------------------------------------------
|
||||
// MARK: - Overrides
|
||||
@ -162,11 +165,7 @@ open class Button: UIButton, ModelHandlerable, ViewProtocol, Resettable, Useable
|
||||
let font = size == .large ? TypographicalStyle.BoldBodyLarge.font : TypographicalStyle.BoldBodySmall.font
|
||||
let edgeInsets = size.edgeInsets
|
||||
|
||||
if let text = text {
|
||||
setTitle(text, for: .normal)
|
||||
} else {
|
||||
setTitle("No ViewModel Text", for: .normal)
|
||||
}
|
||||
setTitle(text ?? "No Text", for: .normal)
|
||||
titleLabel?.font = font
|
||||
backgroundColor = bgColor
|
||||
setTitleColor(titleColor, for: .normal)
|
||||
@ -187,7 +186,7 @@ open class Button: UIButton, ModelHandlerable, ViewProtocol, Resettable, Useable
|
||||
minWidthConstraint?.isActive = true
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//--------------------------------------------------
|
||||
// MARK: - PRIVATE
|
||||
//--------------------------------------------------
|
||||
|
||||
@ -91,41 +91,41 @@ open class CheckboxBase: Control, Accessable, BinaryColorable, Errorable {
|
||||
}()
|
||||
|
||||
//can't bind to @Proxy
|
||||
open override var isSelected: Bool { didSet { subject.send() }}
|
||||
open override var isSelected: Bool { didSet { didChange() }}
|
||||
|
||||
open var labelText: String? { didSet { subject.send() }}
|
||||
open var labelText: String? { didSet { didChange() }}
|
||||
|
||||
open var labelTextAttributes: [any LabelAttributeModel]? { didSet { subject.send() }}
|
||||
open var labelTextAttributes: [any LabelAttributeModel]? { didSet { didChange() }}
|
||||
|
||||
open var childText: String? { didSet { subject.send() }}
|
||||
open var childText: String? { didSet { didChange() }}
|
||||
|
||||
open var childTextAttributes: [any LabelAttributeModel]? { didSet { subject.send() }}
|
||||
open var childTextAttributes: [any LabelAttributeModel]? { didSet { didChange() }}
|
||||
|
||||
open var showError: Bool = false { didSet { subject.send() }}
|
||||
open var showError: Bool = false { didSet { didChange() }}
|
||||
|
||||
open var errorText: String? { didSet { subject.send() }}
|
||||
open var errorText: String? { didSet { didChange() }}
|
||||
|
||||
open var inputId: String? { didSet { subject.send() }}
|
||||
open var inputId: String? { didSet { didChange() }}
|
||||
|
||||
open var value: AnyHashable? { didSet { subject.send() }}
|
||||
open var value: AnyHashable? { didSet { didChange() }}
|
||||
|
||||
open var dataAnalyticsTrack: String? { didSet { subject.send() }}
|
||||
open var dataAnalyticsTrack: String? { didSet { didChange() }}
|
||||
|
||||
open var dataClickStream: String? { didSet { subject.send() }}
|
||||
open var dataClickStream: String? { didSet { didChange() }}
|
||||
|
||||
open var dataTrack: String? { didSet { subject.send() }}
|
||||
open var dataTrack: String? { didSet { didChange() }}
|
||||
|
||||
open var accessibilityHintEnabled: String? { didSet { subject.send() }}
|
||||
open var accessibilityHintEnabled: String? { didSet { didChange() }}
|
||||
|
||||
open var accessibilityHintDisabled: String? { didSet { subject.send() }}
|
||||
open var accessibilityHintDisabled: String? { didSet { didChange() }}
|
||||
|
||||
open var accessibilityValueEnabled: String? { didSet { subject.send() }}
|
||||
open var accessibilityValueEnabled: String? { didSet { didChange() }}
|
||||
|
||||
open var accessibilityValueDisabled: String? { didSet { subject.send() }}
|
||||
open var accessibilityValueDisabled: String? { didSet { didChange() }}
|
||||
|
||||
open var accessibilityLabelEnabled: String? { didSet { subject.send() }}
|
||||
open var accessibilityLabelEnabled: String? { didSet { didChange() }}
|
||||
|
||||
open var accessibilityLabelDisabled: String? { didSet { subject.send() }}
|
||||
open var accessibilityLabelDisabled: String? { didSet { didChange() }}
|
||||
|
||||
private var labelModel: DefaultLabelModel? {
|
||||
guard let labelText = labelText else { return nil }
|
||||
@ -289,8 +289,6 @@ open class CheckboxBase: Control, Accessable, BinaryColorable, Errorable {
|
||||
setAccessibilityHint()
|
||||
setAccessibilityValue(isSelected)
|
||||
setAccessibilityLabel(isSelected)
|
||||
setNeedsLayout()
|
||||
layoutIfNeeded()
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -28,6 +28,11 @@ public class CheckboxGroupBase<ModelHandlerType: CheckboxBase>: SelectorGroupHan
|
||||
didSet {
|
||||
for selector in selectorViews {
|
||||
if !mainStackView.arrangedSubviews.contains(selector) {
|
||||
selector
|
||||
.publisher(for: .touchUpInside)
|
||||
.sink { [weak self] handler in
|
||||
self?.didSelect(handler)
|
||||
}.store(in: &subscribers)
|
||||
mainStackView.addArrangedSubview(selector)
|
||||
}
|
||||
}
|
||||
|
||||
@ -19,19 +19,20 @@ open class LabelBase: UILabel, ModelHandlerable, ViewProtocol, Resettable {
|
||||
//--------------------------------------------------
|
||||
public var subject = PassthroughSubject<Void, Never>()
|
||||
public var subscribers = Set<AnyCancellable>()
|
||||
|
||||
public var hasChanged: Bool = false
|
||||
|
||||
//--------------------------------------------------
|
||||
// MARK: - Properties
|
||||
//--------------------------------------------------
|
||||
open var surface: Surface = .light { didSet { subject.send() }}
|
||||
open var surface: Surface = .light { didSet { didChange() }}
|
||||
|
||||
open var disabled: Bool = false { didSet { isEnabled = !disabled } }
|
||||
|
||||
open var attributes: [any LabelAttributeModel]? { didSet { subject.send() }}
|
||||
open var attributes: [any LabelAttributeModel]? { didSet { didChange() }}
|
||||
|
||||
open var typograpicalStyle: TypographicalStyle = .defaultStyle { didSet { subject.send() }}
|
||||
open var typograpicalStyle: TypographicalStyle = .defaultStyle { didSet { didChange() }}
|
||||
|
||||
open var textPosition: TextPosition = .left { didSet { subject.send() }}
|
||||
open var textPosition: TextPosition = .left { didSet { didChange() }}
|
||||
|
||||
open override var isEnabled: Bool {
|
||||
get { !disabled }
|
||||
@ -40,13 +41,13 @@ open class LabelBase: UILabel, ModelHandlerable, ViewProtocol, Resettable {
|
||||
disabled = !newValue
|
||||
}
|
||||
isUserInteractionEnabled = isEnabled
|
||||
subject.send()
|
||||
didChange()
|
||||
}
|
||||
}
|
||||
|
||||
override open var text: String? {
|
||||
didSet {
|
||||
subject.send()
|
||||
didChange()
|
||||
}
|
||||
}
|
||||
|
||||
@ -88,9 +89,7 @@ open class LabelBase: UILabel, ModelHandlerable, ViewProtocol, Resettable {
|
||||
translatesAutoresizingMaskIntoConstraints = false
|
||||
accessibilityCustomActions = []
|
||||
accessibilityTraits = .staticText
|
||||
setupUpdateView()
|
||||
setup()
|
||||
updateView()
|
||||
}
|
||||
|
||||
open func setup() {}
|
||||
@ -107,10 +106,15 @@ open class LabelBase: UILabel, ModelHandlerable, ViewProtocol, Resettable {
|
||||
accessibilityTraits = .staticText
|
||||
numberOfLines = 0
|
||||
}
|
||||
|
||||
|
||||
//--------------------------------------------------
|
||||
// MARK: - Overrides
|
||||
//--------------------------------------------------
|
||||
open override func layoutSubviews() {
|
||||
super.layoutSubviews()
|
||||
updateView()
|
||||
}
|
||||
|
||||
open func updateView() {
|
||||
textAlignment = textPosition.textAlignment
|
||||
textColor = textColorConfiguration.getColor(self)
|
||||
|
||||
@ -82,41 +82,41 @@ open class RadioBoxBase: Control, BinaryColorable, Accessable {
|
||||
}
|
||||
}()
|
||||
|
||||
open var text: String = "Default Text" { didSet { subject.send() }}
|
||||
open var text: String = "Default Text" { didSet { didChange() }}
|
||||
|
||||
open var textAttributes: [any LabelAttributeModel]? { didSet { subject.send() }}
|
||||
open var textAttributes: [any LabelAttributeModel]? { didSet { didChange() }}
|
||||
|
||||
open var subText: String? { didSet { subject.send() }}
|
||||
open var subText: String? { didSet { didChange() }}
|
||||
|
||||
open var subTextAttributes: [any LabelAttributeModel]? { didSet { subject.send() }}
|
||||
open var subTextAttributes: [any LabelAttributeModel]? { didSet { didChange() }}
|
||||
|
||||
open var subTextRight: String? { didSet { subject.send() }}
|
||||
open var subTextRight: String? { didSet { didChange() }}
|
||||
|
||||
open var subTextRightAttributes: [any LabelAttributeModel]? { didSet { subject.send() }}
|
||||
open var subTextRightAttributes: [any LabelAttributeModel]? { didSet { didChange() }}
|
||||
|
||||
open var strikethrough: Bool = false { didSet { subject.send() }}
|
||||
open var strikethrough: Bool = false { didSet { didChange() }}
|
||||
|
||||
open var inputId: String? { didSet { subject.send() }}
|
||||
open var inputId: String? { didSet { didChange() }}
|
||||
|
||||
open var value: AnyHashable? { didSet { subject.send() }}
|
||||
open var value: AnyHashable? { didSet { didChange() }}
|
||||
|
||||
open var dataAnalyticsTrack: String? { didSet { subject.send() }}
|
||||
open var dataAnalyticsTrack: String? { didSet { didChange() }}
|
||||
|
||||
open var dataClickStream: String? { didSet { subject.send() }}
|
||||
open var dataClickStream: String? { didSet { didChange() }}
|
||||
|
||||
open var dataTrack: String? { didSet { subject.send() }}
|
||||
open var dataTrack: String? { didSet { didChange() }}
|
||||
|
||||
open var accessibilityHintEnabled: String? { didSet { subject.send() }}
|
||||
open var accessibilityHintEnabled: String? { didSet { didChange() }}
|
||||
|
||||
open var accessibilityHintDisabled: String? { didSet { subject.send() }}
|
||||
open var accessibilityHintDisabled: String? { didSet { didChange() }}
|
||||
|
||||
open var accessibilityValueEnabled: String? { didSet { subject.send() }}
|
||||
open var accessibilityValueEnabled: String? { didSet { didChange() }}
|
||||
|
||||
open var accessibilityValueDisabled: String? { didSet { subject.send() }}
|
||||
open var accessibilityValueDisabled: String? { didSet { didChange() }}
|
||||
|
||||
open var accessibilityLabelEnabled: String? { didSet { subject.send() }}
|
||||
open var accessibilityLabelEnabled: String? { didSet { didChange() }}
|
||||
|
||||
open var accessibilityLabelDisabled: String? { didSet { subject.send() }}
|
||||
open var accessibilityLabelDisabled: String? { didSet { didChange() }}
|
||||
|
||||
//functions
|
||||
//--------------------------------------------------
|
||||
@ -222,8 +222,6 @@ open class RadioBoxBase: Control, BinaryColorable, Accessable {
|
||||
setAccessibilityHint()
|
||||
setAccessibilityValue(isSelected)
|
||||
setAccessibilityLabel(isSelected)
|
||||
setNeedsLayout()
|
||||
layoutIfNeeded()
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -27,6 +27,11 @@ public class RadioBoxGroupBase<ModelHandlerType: RadioBoxBase>: SelectorGroupSel
|
||||
didSet {
|
||||
for selector in selectorViews {
|
||||
if !mainStackView.arrangedSubviews.contains(selector) {
|
||||
selector
|
||||
.publisher(for: .touchUpInside)
|
||||
.sink { [weak self] handler in
|
||||
self?.didSelect(handler)
|
||||
}.store(in: &subscribers)
|
||||
mainStackView.addArrangedSubview(selector)
|
||||
}
|
||||
}
|
||||
|
||||
@ -98,39 +98,39 @@ open class RadioButtonBase: Control, Accessable, BinaryColorable, Errorable {
|
||||
}
|
||||
}()
|
||||
|
||||
open var labelText: String? { didSet { subject.send() }}
|
||||
open var labelText: String? { didSet { didChange() }}
|
||||
|
||||
open var labelTextAttributes: [any LabelAttributeModel]? { didSet { subject.send() }}
|
||||
open var labelTextAttributes: [any LabelAttributeModel]? { didSet { didChange() }}
|
||||
|
||||
open var childText: String? { didSet { subject.send() }}
|
||||
open var childText: String? { didSet { didChange() }}
|
||||
|
||||
open var childTextAttributes: [any LabelAttributeModel]? { didSet { subject.send() }}
|
||||
open var childTextAttributes: [any LabelAttributeModel]? { didSet { didChange() }}
|
||||
|
||||
open var showError: Bool = false { didSet { subject.send() }}
|
||||
open var showError: Bool = false { didSet { didChange() }}
|
||||
|
||||
open var errorText: String? { didSet { subject.send() }}
|
||||
open var errorText: String? { didSet { didChange() }}
|
||||
|
||||
open var inputId: String? { didSet { subject.send() }}
|
||||
open var inputId: String? { didSet { didChange() }}
|
||||
|
||||
open var value: AnyHashable? { didSet { subject.send() }}
|
||||
open var value: AnyHashable? { didSet { didChange() }}
|
||||
|
||||
open var dataAnalyticsTrack: String? { didSet { subject.send() }}
|
||||
open var dataAnalyticsTrack: String? { didSet { didChange() }}
|
||||
|
||||
open var dataClickStream: String? { didSet { subject.send() }}
|
||||
open var dataClickStream: String? { didSet { didChange() }}
|
||||
|
||||
open var dataTrack: String? { didSet { subject.send() }}
|
||||
open var dataTrack: String? { didSet { didChange() }}
|
||||
|
||||
open var accessibilityHintEnabled: String? { didSet { subject.send() }}
|
||||
open var accessibilityHintEnabled: String? { didSet { didChange() }}
|
||||
|
||||
open var accessibilityHintDisabled: String? { didSet { subject.send() }}
|
||||
open var accessibilityHintDisabled: String? { didSet { didChange() }}
|
||||
|
||||
open var accessibilityValueEnabled: String? { didSet { subject.send() }}
|
||||
open var accessibilityValueEnabled: String? { didSet { didChange() }}
|
||||
|
||||
open var accessibilityValueDisabled: String? { didSet { subject.send() }}
|
||||
open var accessibilityValueDisabled: String? { didSet { didChange() }}
|
||||
|
||||
open var accessibilityLabelEnabled: String? { didSet { subject.send() }}
|
||||
open var accessibilityLabelEnabled: String? { didSet { didChange() }}
|
||||
|
||||
open var accessibilityLabelDisabled: String? { didSet { subject.send() }}
|
||||
open var accessibilityLabelDisabled: String? { didSet { didChange() }}
|
||||
|
||||
//--------------------------------------------------
|
||||
// MARK: - Constraints
|
||||
@ -262,8 +262,6 @@ open class RadioButtonBase: Control, Accessable, BinaryColorable, Errorable {
|
||||
setAccessibilityHint()
|
||||
setAccessibilityValue(isSelected)
|
||||
setAccessibilityLabel(isSelected)
|
||||
setNeedsLayout()
|
||||
layoutIfNeeded()
|
||||
}
|
||||
|
||||
//--------------------------------------------------
|
||||
|
||||
@ -11,8 +11,7 @@ import UIKit
|
||||
public class RadioButtonGroup: RadioButtonGroupBase<RadioButton> {
|
||||
|
||||
public override func didSelect(_ selectedControl: RadioButton) {
|
||||
let oldSelectedControl = selectorViews.filter { $0.isSelected == true }.first
|
||||
oldSelectedControl?.toggle()
|
||||
selectedHandler?.toggle()
|
||||
selectedControl.toggle()
|
||||
if showError {
|
||||
showError = false
|
||||
@ -30,6 +29,11 @@ public class RadioButtonGroupBase<ModelHandlerType: RadioButtonBase>: SelectorGr
|
||||
didSet {
|
||||
for selector in selectorViews {
|
||||
if !mainStackView.arrangedSubviews.contains(selector) {
|
||||
selector
|
||||
.publisher(for: .touchUpInside)
|
||||
.sink { [weak self] handler in
|
||||
self?.didSelect(handler)
|
||||
}.store(in: &subscribers)
|
||||
mainStackView.addArrangedSubview(selector)
|
||||
}
|
||||
}
|
||||
@ -41,7 +45,7 @@ public class RadioButtonGroupBase<ModelHandlerType: RadioButtonBase>: SelectorGr
|
||||
get { _showError }
|
||||
set {
|
||||
var newShowError = newValue
|
||||
if selectedModelHandler != nil, newShowError {
|
||||
if selectedHandler != nil, newShowError {
|
||||
newShowError = false
|
||||
}
|
||||
selectorViews.forEach { handler in
|
||||
@ -79,14 +83,4 @@ public class RadioButtonGroupBase<ModelHandlerType: RadioButtonBase>: SelectorGr
|
||||
mainStackView.trailingAnchor.constraint(equalTo: trailingAnchor).isActive = true
|
||||
mainStackView.bottomAnchor.constraint(equalTo: bottomAnchor).isActive = true
|
||||
}
|
||||
|
||||
public var selectedModelHandler: ModelHandlerType? {
|
||||
if let index = selectorViews.firstIndex(where: { element in
|
||||
return element.isSelected == true
|
||||
}) {
|
||||
return selectorViews[index]
|
||||
} else {
|
||||
return nil
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -54,37 +54,37 @@ open class RadioSwatchBase: Control, Accessable, DataTrackable, BinaryColorable
|
||||
}
|
||||
}()
|
||||
|
||||
open var fillImage: UIImage? { didSet { subject.send() }}
|
||||
open var fillImage: UIImage? { didSet { didChange() }}
|
||||
|
||||
open var text: String = "" { didSet { subject.send() }}
|
||||
open var text: String = "" { didSet { didChange() }}
|
||||
|
||||
open var primaryColor: UIColor? { didSet { subject.send() }}
|
||||
open var primaryColor: UIColor? { didSet { didChange() }}
|
||||
|
||||
open var secondaryColor: UIColor? { didSet { subject.send() }}
|
||||
open var secondaryColor: UIColor? { didSet { didChange() }}
|
||||
|
||||
open var strikethrough: Bool = false { didSet { subject.send() }}
|
||||
open var strikethrough: Bool = false { didSet { didChange() }}
|
||||
|
||||
open var inputId: String? { didSet { subject.send() }}
|
||||
open var inputId: String? { didSet { didChange() }}
|
||||
|
||||
open var value: AnyHashable? { didSet { subject.send() }}
|
||||
open var value: AnyHashable? { didSet { didChange() }}
|
||||
|
||||
open var dataAnalyticsTrack: String? { didSet { subject.send() }}
|
||||
open var dataAnalyticsTrack: String? { didSet { didChange() }}
|
||||
|
||||
open var dataClickStream: String? { didSet { subject.send() }}
|
||||
open var dataClickStream: String? { didSet { didChange() }}
|
||||
|
||||
open var dataTrack: String? { didSet { subject.send() }}
|
||||
open var dataTrack: String? { didSet { didChange() }}
|
||||
|
||||
open var accessibilityHintEnabled: String? { didSet { subject.send() }}
|
||||
open var accessibilityHintEnabled: String? { didSet { didChange() }}
|
||||
|
||||
open var accessibilityHintDisabled: String? { didSet { subject.send() }}
|
||||
open var accessibilityHintDisabled: String? { didSet { didChange() }}
|
||||
|
||||
open var accessibilityValueEnabled: String? { didSet { subject.send() }}
|
||||
open var accessibilityValueEnabled: String? { didSet { didChange() }}
|
||||
|
||||
open var accessibilityValueDisabled: String? { didSet { subject.send() }}
|
||||
open var accessibilityValueDisabled: String? { didSet { didChange() }}
|
||||
|
||||
open var accessibilityLabelEnabled: String? { didSet { subject.send() }}
|
||||
open var accessibilityLabelEnabled: String? { didSet { didChange() }}
|
||||
|
||||
open var accessibilityLabelDisabled: String? { didSet { subject.send() }}
|
||||
open var accessibilityLabelDisabled: String? { didSet { didChange() }}
|
||||
|
||||
//functions
|
||||
//--------------------------------------------------
|
||||
@ -143,8 +143,6 @@ open class RadioSwatchBase: Control, Accessable, DataTrackable, BinaryColorable
|
||||
setAccessibilityHint()
|
||||
setAccessibilityValue(isSelected)
|
||||
setAccessibilityLabel(isSelected)
|
||||
setNeedsLayout()
|
||||
layoutIfNeeded()
|
||||
}
|
||||
|
||||
//--------------------------------------------------
|
||||
|
||||
@ -137,7 +137,6 @@ public class RadioSwatchGroupBase<ModelHandlerType: RadioSwatchBase>: SelectorGr
|
||||
label.surface = surface
|
||||
label.disabled = disabled
|
||||
collectionView.reloadData()
|
||||
setNeedsLayout()
|
||||
}
|
||||
|
||||
private func updateSelectors() {
|
||||
|
||||
@ -120,41 +120,41 @@ open class ToggleBase: Control, Accessable, DataTrackable, BinaryColorable {
|
||||
//--------------------------------------------------
|
||||
// MARK: - Public Properties
|
||||
//--------------------------------------------------
|
||||
open var isOn: Bool = false { didSet { subject.send() }}
|
||||
open var isOn: Bool = false { didSet { didChange() }}
|
||||
|
||||
open var showText: Bool = false { didSet { subject.send() }}
|
||||
open var showText: Bool = false { didSet { didChange() }}
|
||||
|
||||
open var onText: String = "On" { didSet { subject.send() }}
|
||||
open var onText: String = "On" { didSet { didChange() }}
|
||||
|
||||
open var offText: String = "Off" { didSet { subject.send() }}
|
||||
open var offText: String = "Off" { didSet { didChange() }}
|
||||
|
||||
open var textSize: ToggleTextSize = .small { didSet { subject.send() }}
|
||||
open var textSize: ToggleTextSize = .small { didSet { didChange() }}
|
||||
|
||||
open var textWeight: ToggleTextWeight = .regular { didSet { subject.send() }}
|
||||
open var textWeight: ToggleTextWeight = .regular { didSet { didChange() }}
|
||||
|
||||
open var textPosition: ToggleTextPosition = .left { didSet { subject.send() }}
|
||||
open var textPosition: ToggleTextPosition = .left { didSet { didChange() }}
|
||||
|
||||
open var inputId: String? { didSet { subject.send() }}
|
||||
open var inputId: String? { didSet { didChange() }}
|
||||
|
||||
open var value: AnyHashable? { didSet { subject.send() }}
|
||||
open var value: AnyHashable? { didSet { didChange() }}
|
||||
|
||||
open var dataAnalyticsTrack: String? { didSet { subject.send() }}
|
||||
open var dataAnalyticsTrack: String? { didSet { didChange() }}
|
||||
|
||||
open var dataClickStream: String? { didSet { subject.send() }}
|
||||
open var dataClickStream: String? { didSet { didChange() }}
|
||||
|
||||
open var dataTrack: String? { didSet { subject.send() }}
|
||||
open var dataTrack: String? { didSet { didChange() }}
|
||||
|
||||
open var accessibilityHintEnabled: String? { didSet { subject.send() }}
|
||||
open var accessibilityHintEnabled: String? { didSet { didChange() }}
|
||||
|
||||
open var accessibilityHintDisabled: String? { didSet { subject.send() }}
|
||||
open var accessibilityHintDisabled: String? { didSet { didChange() }}
|
||||
|
||||
open var accessibilityValueEnabled: String? { didSet { subject.send() }}
|
||||
open var accessibilityValueEnabled: String? { didSet { didChange() }}
|
||||
|
||||
open var accessibilityValueDisabled: String? { didSet { subject.send() }}
|
||||
open var accessibilityValueDisabled: String? { didSet { didChange() }}
|
||||
|
||||
open var accessibilityLabelEnabled: String? { didSet { subject.send() }}
|
||||
open var accessibilityLabelEnabled: String? { didSet { didChange() }}
|
||||
|
||||
open var accessibilityLabelDisabled: String? { didSet { subject.send() }}
|
||||
open var accessibilityLabelDisabled: String? { didSet { didChange() }}
|
||||
|
||||
//--------------------------------------------------
|
||||
// MARK: - Constraints
|
||||
@ -314,7 +314,5 @@ open class ToggleBase: Control, Accessable, DataTrackable, BinaryColorable {
|
||||
setAccessibilityValue(isOn)
|
||||
setAccessibilityLabel(isOn)
|
||||
backgroundColor = surface.color
|
||||
setNeedsLayout()
|
||||
layoutIfNeeded()
|
||||
}
|
||||
}
|
||||
|
||||
@ -16,16 +16,7 @@ public protocol ModelHandlerable: AnyObject, Initable, Disabling, Surfaceable {
|
||||
}
|
||||
|
||||
extension ModelHandlerable {
|
||||
|
||||
public func setupUpdateView() {
|
||||
handlerPublisher()
|
||||
.subscribe(on: RunLoop.main)
|
||||
.sink { [weak self] _ in
|
||||
self?.updateView()
|
||||
}
|
||||
.store(in: &subscribers)
|
||||
}
|
||||
|
||||
|
||||
public func handlerPublisher() -> AnyPublisher<Void, Never> {
|
||||
subject
|
||||
.eraseToAnyPublisher()
|
||||
@ -33,3 +24,10 @@ extension ModelHandlerable {
|
||||
.eraseToAnyPublisher()
|
||||
}
|
||||
}
|
||||
|
||||
extension ModelHandlerable where Self: UIView {
|
||||
public func didChange() {
|
||||
subject.send()
|
||||
setNeedsLayout()
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user