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
|
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 var disabled: Bool = false { didSet { isEnabled = !disabled } }
|
||||||
|
|
||||||
@ -33,7 +33,7 @@ open class CollectionView: UICollectionView, ModelHandlerable, ViewProtocol, Res
|
|||||||
disabled = !newValue
|
disabled = !newValue
|
||||||
}
|
}
|
||||||
isUserInteractionEnabled = isEnabled
|
isUserInteractionEnabled = isEnabled
|
||||||
subject.send()
|
didChange()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -67,18 +67,20 @@ open class CollectionView: UICollectionView, ModelHandlerable, ViewProtocol, Res
|
|||||||
open func initialSetup() {
|
open func initialSetup() {
|
||||||
if !initialSetupPerformed {
|
if !initialSetupPerformed {
|
||||||
initialSetupPerformed = true
|
initialSetupPerformed = true
|
||||||
setupUpdateView()
|
|
||||||
setup()
|
setup()
|
||||||
updateView()
|
updateView()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
open override func layoutSubviews() {
|
||||||
|
super.layoutSubviews()
|
||||||
|
updateView()
|
||||||
|
}
|
||||||
|
|
||||||
//--------------------------------------------------
|
//--------------------------------------------------
|
||||||
// MARK: - Overrides
|
// MARK: - Overrides
|
||||||
//--------------------------------------------------
|
//--------------------------------------------------
|
||||||
open func updateView() {
|
open func updateView() {}
|
||||||
fatalError("Implement updateView")
|
|
||||||
}
|
|
||||||
|
|
||||||
open func reset() {
|
open func reset() {
|
||||||
backgroundColor = .clear
|
backgroundColor = .clear
|
||||||
|
|||||||
@ -8,6 +8,6 @@
|
|||||||
import Foundation
|
import Foundation
|
||||||
|
|
||||||
public struct Constants {
|
public struct Constants {
|
||||||
public static let ModelStateDebounce = 0.02
|
public static let ModelStateDebounce = 0.0 //.001
|
||||||
public static let PaddingOne = 10.0
|
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 subject = PassthroughSubject<Void, Never>()
|
||||||
public var subscribers = Set<AnyCancellable>()
|
public var subscribers = Set<AnyCancellable>()
|
||||||
|
|
||||||
//--------------------------------------------------
|
//--------------------------------------------------
|
||||||
// MARK: - Properties
|
// MARK: - Properties
|
||||||
//--------------------------------------------------
|
//--------------------------------------------------
|
||||||
private var initialSetupPerformed = false
|
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 var disabled: Bool = false { didSet { isEnabled = !disabled } }
|
||||||
|
|
||||||
|
open override var isSelected: Bool { didSet { didChange() } }
|
||||||
|
|
||||||
open override var isEnabled: Bool {
|
open override var isEnabled: Bool {
|
||||||
get { !disabled }
|
get { !disabled }
|
||||||
set {
|
set {
|
||||||
@ -34,7 +36,7 @@ open class Control: UIControl, ModelHandlerable, ViewProtocol, Resettable {
|
|||||||
disabled = !newValue
|
disabled = !newValue
|
||||||
}
|
}
|
||||||
isUserInteractionEnabled = isEnabled
|
isUserInteractionEnabled = isEnabled
|
||||||
subject.send()
|
didChange()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -63,7 +65,6 @@ open class Control: UIControl, ModelHandlerable, ViewProtocol, Resettable {
|
|||||||
open func initialSetup() {
|
open func initialSetup() {
|
||||||
if !initialSetupPerformed {
|
if !initialSetupPerformed {
|
||||||
initialSetupPerformed = true
|
initialSetupPerformed = true
|
||||||
setupUpdateView()
|
|
||||||
setup()
|
setup()
|
||||||
updateView()
|
updateView()
|
||||||
}
|
}
|
||||||
@ -79,10 +80,13 @@ open class Control: UIControl, ModelHandlerable, ViewProtocol, Resettable {
|
|||||||
//--------------------------------------------------
|
//--------------------------------------------------
|
||||||
// MARK: - Overrides
|
// MARK: - Overrides
|
||||||
//--------------------------------------------------
|
//--------------------------------------------------
|
||||||
open func updateView() {
|
open override func layoutSubviews() {
|
||||||
fatalError("Implement updateView")
|
super.layoutSubviews()
|
||||||
|
updateView()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
open func updateView() {}
|
||||||
|
|
||||||
open func reset() {
|
open func reset() {
|
||||||
backgroundColor = .clear
|
backgroundColor = .clear
|
||||||
surface = .light
|
surface = .light
|
||||||
|
|||||||
@ -17,13 +17,13 @@ open class View: UIView, ModelHandlerable, ViewProtocol, Resettable {
|
|||||||
//--------------------------------------------------
|
//--------------------------------------------------
|
||||||
public var subject = PassthroughSubject<Void, Never>()
|
public var subject = PassthroughSubject<Void, Never>()
|
||||||
public var subscribers = Set<AnyCancellable>()
|
public var subscribers = Set<AnyCancellable>()
|
||||||
|
|
||||||
//--------------------------------------------------
|
//--------------------------------------------------
|
||||||
// MARK: - Properties
|
// MARK: - Properties
|
||||||
//--------------------------------------------------
|
//--------------------------------------------------
|
||||||
private var initialSetupPerformed = false
|
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 var disabled: Bool = false { didSet { isEnabled = !disabled } }
|
||||||
|
|
||||||
@ -34,7 +34,7 @@ open class View: UIView, ModelHandlerable, ViewProtocol, Resettable {
|
|||||||
disabled = !newValue
|
disabled = !newValue
|
||||||
}
|
}
|
||||||
isUserInteractionEnabled = isEnabled
|
isUserInteractionEnabled = isEnabled
|
||||||
subject.send()
|
didChange()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -63,18 +63,19 @@ open class View: UIView, ModelHandlerable, ViewProtocol, Resettable {
|
|||||||
open func initialSetup() {
|
open func initialSetup() {
|
||||||
if !initialSetupPerformed {
|
if !initialSetupPerformed {
|
||||||
initialSetupPerformed = true
|
initialSetupPerformed = true
|
||||||
setupUpdateView()
|
|
||||||
setup()
|
setup()
|
||||||
updateView()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
open override func layoutSubviews() {
|
||||||
|
super.layoutSubviews()
|
||||||
|
updateView()
|
||||||
|
}
|
||||||
|
|
||||||
//--------------------------------------------------
|
//--------------------------------------------------
|
||||||
// MARK: - Overrides
|
// MARK: - Overrides
|
||||||
//--------------------------------------------------
|
//--------------------------------------------------
|
||||||
open func updateView() {
|
open func updateView() {}
|
||||||
fatalError("Implement updateView")
|
|
||||||
}
|
|
||||||
|
|
||||||
open func reset() {
|
open func reset() {
|
||||||
backgroundColor = .clear
|
backgroundColor = .clear
|
||||||
|
|||||||
@ -20,25 +20,25 @@ open class BadgeBase: View, Accessable {
|
|||||||
//--------------------------------------------------
|
//--------------------------------------------------
|
||||||
// MARK: - Public Properties
|
// 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
|
// MARK: - Constraints
|
||||||
|
|||||||
@ -29,15 +29,15 @@ open class Button: UIButton, ModelHandlerable, ViewProtocol, Resettable, Useable
|
|||||||
//--------------------------------------------------
|
//--------------------------------------------------
|
||||||
// MARK: - Properties
|
// 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 } }
|
open var disabled: Bool = false { didSet { isEnabled = !disabled } }
|
||||||
|
|
||||||
@ -48,7 +48,7 @@ open class Button: UIButton, ModelHandlerable, ViewProtocol, Resettable, Useable
|
|||||||
disabled = !newValue
|
disabled = !newValue
|
||||||
}
|
}
|
||||||
isUserInteractionEnabled = isEnabled
|
isUserInteractionEnabled = isEnabled
|
||||||
subject.send()
|
didChange()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -118,9 +118,7 @@ open class Button: UIButton, ModelHandlerable, ViewProtocol, Resettable, Useable
|
|||||||
translatesAutoresizingMaskIntoConstraints = false
|
translatesAutoresizingMaskIntoConstraints = false
|
||||||
accessibilityCustomActions = []
|
accessibilityCustomActions = []
|
||||||
accessibilityTraits = .staticText
|
accessibilityTraits = .staticText
|
||||||
setupUpdateView()
|
|
||||||
setup()
|
setup()
|
||||||
updateView()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
open func setup() {
|
open func setup() {
|
||||||
@ -146,6 +144,11 @@ open class Button: UIButton, ModelHandlerable, ViewProtocol, Resettable, Useable
|
|||||||
accessibilityCustomActions = []
|
accessibilityCustomActions = []
|
||||||
accessibilityTraits = .staticText
|
accessibilityTraits = .staticText
|
||||||
}
|
}
|
||||||
|
|
||||||
|
open override func layoutSubviews() {
|
||||||
|
super.layoutSubviews()
|
||||||
|
updateView()
|
||||||
|
}
|
||||||
|
|
||||||
//--------------------------------------------------
|
//--------------------------------------------------
|
||||||
// MARK: - Overrides
|
// 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 font = size == .large ? TypographicalStyle.BoldBodyLarge.font : TypographicalStyle.BoldBodySmall.font
|
||||||
let edgeInsets = size.edgeInsets
|
let edgeInsets = size.edgeInsets
|
||||||
|
|
||||||
if let text = text {
|
setTitle(text ?? "No Text", for: .normal)
|
||||||
setTitle(text, for: .normal)
|
|
||||||
} else {
|
|
||||||
setTitle("No ViewModel Text", for: .normal)
|
|
||||||
}
|
|
||||||
titleLabel?.font = font
|
titleLabel?.font = font
|
||||||
backgroundColor = bgColor
|
backgroundColor = bgColor
|
||||||
setTitleColor(titleColor, for: .normal)
|
setTitleColor(titleColor, for: .normal)
|
||||||
@ -187,7 +186,7 @@ open class Button: UIButton, ModelHandlerable, ViewProtocol, Resettable, Useable
|
|||||||
minWidthConstraint?.isActive = true
|
minWidthConstraint?.isActive = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------
|
//--------------------------------------------------
|
||||||
// MARK: - PRIVATE
|
// MARK: - PRIVATE
|
||||||
//--------------------------------------------------
|
//--------------------------------------------------
|
||||||
|
|||||||
@ -91,41 +91,41 @@ open class CheckboxBase: Control, Accessable, BinaryColorable, Errorable {
|
|||||||
}()
|
}()
|
||||||
|
|
||||||
//can't bind to @Proxy
|
//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? {
|
private var labelModel: DefaultLabelModel? {
|
||||||
guard let labelText = labelText else { return nil }
|
guard let labelText = labelText else { return nil }
|
||||||
@ -289,8 +289,6 @@ open class CheckboxBase: Control, Accessable, BinaryColorable, Errorable {
|
|||||||
setAccessibilityHint()
|
setAccessibilityHint()
|
||||||
setAccessibilityValue(isSelected)
|
setAccessibilityValue(isSelected)
|
||||||
setAccessibilityLabel(isSelected)
|
setAccessibilityLabel(isSelected)
|
||||||
setNeedsLayout()
|
|
||||||
layoutIfNeeded()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -28,6 +28,11 @@ public class CheckboxGroupBase<ModelHandlerType: CheckboxBase>: SelectorGroupHan
|
|||||||
didSet {
|
didSet {
|
||||||
for selector in selectorViews {
|
for selector in selectorViews {
|
||||||
if !mainStackView.arrangedSubviews.contains(selector) {
|
if !mainStackView.arrangedSubviews.contains(selector) {
|
||||||
|
selector
|
||||||
|
.publisher(for: .touchUpInside)
|
||||||
|
.sink { [weak self] handler in
|
||||||
|
self?.didSelect(handler)
|
||||||
|
}.store(in: &subscribers)
|
||||||
mainStackView.addArrangedSubview(selector)
|
mainStackView.addArrangedSubview(selector)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -19,19 +19,20 @@ open class LabelBase: UILabel, ModelHandlerable, ViewProtocol, Resettable {
|
|||||||
//--------------------------------------------------
|
//--------------------------------------------------
|
||||||
public var subject = PassthroughSubject<Void, Never>()
|
public var subject = PassthroughSubject<Void, Never>()
|
||||||
public var subscribers = Set<AnyCancellable>()
|
public var subscribers = Set<AnyCancellable>()
|
||||||
|
public var hasChanged: Bool = false
|
||||||
|
|
||||||
//--------------------------------------------------
|
//--------------------------------------------------
|
||||||
// MARK: - Properties
|
// 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 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 {
|
open override var isEnabled: Bool {
|
||||||
get { !disabled }
|
get { !disabled }
|
||||||
@ -40,13 +41,13 @@ open class LabelBase: UILabel, ModelHandlerable, ViewProtocol, Resettable {
|
|||||||
disabled = !newValue
|
disabled = !newValue
|
||||||
}
|
}
|
||||||
isUserInteractionEnabled = isEnabled
|
isUserInteractionEnabled = isEnabled
|
||||||
subject.send()
|
didChange()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override open var text: String? {
|
override open var text: String? {
|
||||||
didSet {
|
didSet {
|
||||||
subject.send()
|
didChange()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -88,9 +89,7 @@ open class LabelBase: UILabel, ModelHandlerable, ViewProtocol, Resettable {
|
|||||||
translatesAutoresizingMaskIntoConstraints = false
|
translatesAutoresizingMaskIntoConstraints = false
|
||||||
accessibilityCustomActions = []
|
accessibilityCustomActions = []
|
||||||
accessibilityTraits = .staticText
|
accessibilityTraits = .staticText
|
||||||
setupUpdateView()
|
|
||||||
setup()
|
setup()
|
||||||
updateView()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
open func setup() {}
|
open func setup() {}
|
||||||
@ -107,10 +106,15 @@ open class LabelBase: UILabel, ModelHandlerable, ViewProtocol, Resettable {
|
|||||||
accessibilityTraits = .staticText
|
accessibilityTraits = .staticText
|
||||||
numberOfLines = 0
|
numberOfLines = 0
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------
|
//--------------------------------------------------
|
||||||
// MARK: - Overrides
|
// MARK: - Overrides
|
||||||
//--------------------------------------------------
|
//--------------------------------------------------
|
||||||
|
open override func layoutSubviews() {
|
||||||
|
super.layoutSubviews()
|
||||||
|
updateView()
|
||||||
|
}
|
||||||
|
|
||||||
open func updateView() {
|
open func updateView() {
|
||||||
textAlignment = textPosition.textAlignment
|
textAlignment = textPosition.textAlignment
|
||||||
textColor = textColorConfiguration.getColor(self)
|
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
|
//functions
|
||||||
//--------------------------------------------------
|
//--------------------------------------------------
|
||||||
@ -222,8 +222,6 @@ open class RadioBoxBase: Control, BinaryColorable, Accessable {
|
|||||||
setAccessibilityHint()
|
setAccessibilityHint()
|
||||||
setAccessibilityValue(isSelected)
|
setAccessibilityValue(isSelected)
|
||||||
setAccessibilityLabel(isSelected)
|
setAccessibilityLabel(isSelected)
|
||||||
setNeedsLayout()
|
|
||||||
layoutIfNeeded()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -27,6 +27,11 @@ public class RadioBoxGroupBase<ModelHandlerType: RadioBoxBase>: SelectorGroupSel
|
|||||||
didSet {
|
didSet {
|
||||||
for selector in selectorViews {
|
for selector in selectorViews {
|
||||||
if !mainStackView.arrangedSubviews.contains(selector) {
|
if !mainStackView.arrangedSubviews.contains(selector) {
|
||||||
|
selector
|
||||||
|
.publisher(for: .touchUpInside)
|
||||||
|
.sink { [weak self] handler in
|
||||||
|
self?.didSelect(handler)
|
||||||
|
}.store(in: &subscribers)
|
||||||
mainStackView.addArrangedSubview(selector)
|
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
|
// MARK: - Constraints
|
||||||
@ -262,8 +262,6 @@ open class RadioButtonBase: Control, Accessable, BinaryColorable, Errorable {
|
|||||||
setAccessibilityHint()
|
setAccessibilityHint()
|
||||||
setAccessibilityValue(isSelected)
|
setAccessibilityValue(isSelected)
|
||||||
setAccessibilityLabel(isSelected)
|
setAccessibilityLabel(isSelected)
|
||||||
setNeedsLayout()
|
|
||||||
layoutIfNeeded()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------
|
//--------------------------------------------------
|
||||||
|
|||||||
@ -11,8 +11,7 @@ import UIKit
|
|||||||
public class RadioButtonGroup: RadioButtonGroupBase<RadioButton> {
|
public class RadioButtonGroup: RadioButtonGroupBase<RadioButton> {
|
||||||
|
|
||||||
public override func didSelect(_ selectedControl: RadioButton) {
|
public override func didSelect(_ selectedControl: RadioButton) {
|
||||||
let oldSelectedControl = selectorViews.filter { $0.isSelected == true }.first
|
selectedHandler?.toggle()
|
||||||
oldSelectedControl?.toggle()
|
|
||||||
selectedControl.toggle()
|
selectedControl.toggle()
|
||||||
if showError {
|
if showError {
|
||||||
showError = false
|
showError = false
|
||||||
@ -30,6 +29,11 @@ public class RadioButtonGroupBase<ModelHandlerType: RadioButtonBase>: SelectorGr
|
|||||||
didSet {
|
didSet {
|
||||||
for selector in selectorViews {
|
for selector in selectorViews {
|
||||||
if !mainStackView.arrangedSubviews.contains(selector) {
|
if !mainStackView.arrangedSubviews.contains(selector) {
|
||||||
|
selector
|
||||||
|
.publisher(for: .touchUpInside)
|
||||||
|
.sink { [weak self] handler in
|
||||||
|
self?.didSelect(handler)
|
||||||
|
}.store(in: &subscribers)
|
||||||
mainStackView.addArrangedSubview(selector)
|
mainStackView.addArrangedSubview(selector)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -41,7 +45,7 @@ public class RadioButtonGroupBase<ModelHandlerType: RadioButtonBase>: SelectorGr
|
|||||||
get { _showError }
|
get { _showError }
|
||||||
set {
|
set {
|
||||||
var newShowError = newValue
|
var newShowError = newValue
|
||||||
if selectedModelHandler != nil, newShowError {
|
if selectedHandler != nil, newShowError {
|
||||||
newShowError = false
|
newShowError = false
|
||||||
}
|
}
|
||||||
selectorViews.forEach { handler in
|
selectorViews.forEach { handler in
|
||||||
@ -79,14 +83,4 @@ public class RadioButtonGroupBase<ModelHandlerType: RadioButtonBase>: SelectorGr
|
|||||||
mainStackView.trailingAnchor.constraint(equalTo: trailingAnchor).isActive = true
|
mainStackView.trailingAnchor.constraint(equalTo: trailingAnchor).isActive = true
|
||||||
mainStackView.bottomAnchor.constraint(equalTo: bottomAnchor).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
|
//functions
|
||||||
//--------------------------------------------------
|
//--------------------------------------------------
|
||||||
@ -143,8 +143,6 @@ open class RadioSwatchBase: Control, Accessable, DataTrackable, BinaryColorable
|
|||||||
setAccessibilityHint()
|
setAccessibilityHint()
|
||||||
setAccessibilityValue(isSelected)
|
setAccessibilityValue(isSelected)
|
||||||
setAccessibilityLabel(isSelected)
|
setAccessibilityLabel(isSelected)
|
||||||
setNeedsLayout()
|
|
||||||
layoutIfNeeded()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------
|
//--------------------------------------------------
|
||||||
|
|||||||
@ -137,7 +137,6 @@ public class RadioSwatchGroupBase<ModelHandlerType: RadioSwatchBase>: SelectorGr
|
|||||||
label.surface = surface
|
label.surface = surface
|
||||||
label.disabled = disabled
|
label.disabled = disabled
|
||||||
collectionView.reloadData()
|
collectionView.reloadData()
|
||||||
setNeedsLayout()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private func updateSelectors() {
|
private func updateSelectors() {
|
||||||
|
|||||||
@ -120,41 +120,41 @@ open class ToggleBase: Control, Accessable, DataTrackable, BinaryColorable {
|
|||||||
//--------------------------------------------------
|
//--------------------------------------------------
|
||||||
// MARK: - Public Properties
|
// 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
|
// MARK: - Constraints
|
||||||
@ -314,7 +314,5 @@ open class ToggleBase: Control, Accessable, DataTrackable, BinaryColorable {
|
|||||||
setAccessibilityValue(isOn)
|
setAccessibilityValue(isOn)
|
||||||
setAccessibilityLabel(isOn)
|
setAccessibilityLabel(isOn)
|
||||||
backgroundColor = surface.color
|
backgroundColor = surface.color
|
||||||
setNeedsLayout()
|
|
||||||
layoutIfNeeded()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -16,16 +16,7 @@ public protocol ModelHandlerable: AnyObject, Initable, Disabling, Surfaceable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
extension ModelHandlerable {
|
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> {
|
public func handlerPublisher() -> AnyPublisher<Void, Never> {
|
||||||
subject
|
subject
|
||||||
.eraseToAnyPublisher()
|
.eraseToAnyPublisher()
|
||||||
@ -33,3 +24,10 @@ extension ModelHandlerable {
|
|||||||
.eraseToAnyPublisher()
|
.eraseToAnyPublisher()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extension ModelHandlerable where Self: UIView {
|
||||||
|
public func didChange() {
|
||||||
|
subject.send()
|
||||||
|
setNeedsLayout()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user