refacored checkbox to new color states

Signed-off-by: Matt Bruce <matt.bruce@verizon.com>
This commit is contained in:
Matt Bruce 2022-12-08 12:48:35 -06:00
parent 4ac73e3d38
commit 77f957b23f

View File

@ -125,8 +125,25 @@ open class CheckboxBase: Control, Accessable, DataTrackable, BinaryColorable, Er
} }
} }
open var showError: Bool = false { didSet { didChange() }} open var showError: Bool = false {
didSet {
if showError && isSelected {
isSelected.toggle()
}
didChange()
}
}
open override var state: UIControl.State {
get {
var state = super.state
if showError {
state.insert(.error)
}
return state
}
}
open var errorText: String? { didSet { didChange() }} open var errorText: String? { didSet { didChange() }}
open var inputId: String? { didSet { didChange() }} open var inputId: String? { didSet { didChange() }}
@ -162,18 +179,13 @@ open class CheckboxBase: Control, Accessable, DataTrackable, BinaryColorable, Er
//-------------------------------------------------- //--------------------------------------------------
// MARK: - Lifecycle // MARK: - Lifecycle
//-------------------------------------------------- //--------------------------------------------------
open override func setup() { open override func setup() {
super.setup() super.setup()
//add tapGesture to self
publisher(for: UITapGestureRecognizer()).sink { [weak self] _ in
self?.sendActions(for: .touchUpInside)
}.store(in: &subscribers)
isAccessibilityElement = true isAccessibilityElement = true
accessibilityTraits = .button accessibilityTraits = .button
addSubview(mainStackView) addSubview(mainStackView)
mainStackView.isUserInteractionEnabled = false
mainStackView.addArrangedSubview(selectorStackView) mainStackView.addArrangedSubview(selectorStackView)
mainStackView.addArrangedSubview(errorLabel) mainStackView.addArrangedSubview(errorLabel)
@ -313,45 +325,34 @@ open class CheckboxBase: Control, Accessable, DataTrackable, BinaryColorable, Er
//-------------------------------------------------- //--------------------------------------------------
public let checkboxSize = CGSize(width: 20, height: 20) public let checkboxSize = CGSize(width: 20, height: 20)
private var checkboxBackgroundColorConfiguration: ErrorBinaryDisabledSurfaceColorConfiguration = { private var checkboxBackgroundColorConfig: ControlColorConfiguration = {
return ErrorBinaryDisabledSurfaceColorConfiguration().with { var config = ControlColorConfiguration()
$0.forTrue.enabled.lightColor = VDSColor.elementsPrimaryOnlight config.setSurfaceColors(VDSColor.elementsPrimaryOnlight, VDSColor.elementsPrimaryOndark, forState: [.selected])
$0.forTrue.enabled.darkColor = VDSColor.elementsPrimaryOndark config.setSurfaceColors(VDSColor.interactiveDisabledOnlight, VDSColor.interactiveDisabledOndark, forState: [.selected, .disabled])
$0.forTrue.disabled.lightColor = VDSColor.interactiveDisabledOnlight config.setSurfaceColors(VDSColor.feedbackErrorBackgroundOnlight, VDSColor.feedbackErrorBackgroundOndark, forState: [.error])
$0.forTrue.disabled.darkColor = VDSColor.interactiveDisabledOndark return config
//error doesn't care enabled/disable
$0.error.forTrue.lightColor = VDSColor.elementsPrimaryOnlight
$0.error.forTrue.darkColor = VDSColor.elementsPrimaryOndark
$0.error.forFalse.lightColor = VDSColor.feedbackErrorBackgroundOnlight
$0.error.forFalse.darkColor = VDSColor.feedbackErrorBackgroundOndark
}
}()
private var checkboxBorderColorConfiguration: ErrorBinaryDisabledSurfaceColorConfiguration = {
return ErrorBinaryDisabledSurfaceColorConfiguration().with {
$0.forTrue.enabled.lightColor = VDSColor.elementsPrimaryOnlight
$0.forTrue.enabled.darkColor = VDSColor.elementsPrimaryOndark
$0.forFalse.enabled.lightColor = VDSFormControlsColor.borderOnlight
$0.forFalse.enabled.darkColor = VDSFormControlsColor.borderOndark
$0.forTrue.disabled.lightColor = VDSColor.interactiveDisabledOnlight
$0.forTrue.disabled.darkColor = VDSColor.interactiveDisabledOndark
$0.forFalse.disabled.lightColor = VDSColor.interactiveDisabledOnlight
$0.forFalse.disabled.darkColor = VDSColor.interactiveDisabledOndark
//error doesn't care enabled/disable
$0.error.forTrue.lightColor = VDSColor.elementsPrimaryOnlight
$0.error.forTrue.darkColor = VDSColor.elementsPrimaryOndark
$0.error.forFalse.lightColor = VDSColor.feedbackErrorOnlight
$0.error.forFalse.darkColor = VDSColor.feedbackErrorOndark
}
}() }()
private var checkboxCheckColorConfiguration: BinarySurfaceColorConfiguration = { private var checkboxBorderColorConfig: ControlColorConfiguration = {
return BinarySurfaceColorConfiguration().with { var config = ControlColorConfiguration()
$0.forTrue.lightColor = VDSColor.elementsPrimaryOndark config.setSurfaceColors(VDSColor.elementsPrimaryOnlight, VDSColor.elementsPrimaryOndark, forState: [.selected])
$0.forTrue.darkColor = VDSColor.elementsPrimaryOnlight config.setSurfaceColors(VDSColor.elementsPrimaryOnlight, VDSColor.elementsPrimaryOndark, forState: [.highlighted])
} config.setSurfaceColors(VDSColor.elementsPrimaryOnlight, VDSColor.elementsPrimaryOndark, forState: [.error, .highlighted])
config.setSurfaceColors(VDSFormControlsColor.borderOnlight, VDSFormControlsColor.borderOndark, forState: [.normal])
config.setSurfaceColors(VDSColor.interactiveDisabledOnlight, VDSColor.interactiveDisabledOndark, forState: [.selected, .disabled])
config.setSurfaceColors(VDSColor.interactiveDisabledOnlight, VDSColor.interactiveDisabledOndark, forState: [.normal, .disabled])
config.setSurfaceColors(VDSColor.interactiveDisabledOnlight, VDSColor.interactiveDisabledOndark, forState: [.error, .disabled])
config.setSurfaceColors(VDSColor.feedbackErrorOnlight, VDSColor.feedbackErrorOndark, forState: [.error])
return config
}() }()
private var checkboxCheckColorConfig: ControlColorConfiguration = {
var config = ControlColorConfiguration()
config.setSurfaceColors(VDSColor.elementsPrimaryOndark, VDSColor.elementsPrimaryOnlight, forState: .selected)
config.setSurfaceColors(VDSColor.elementsPrimaryOndark, VDSColor.elementsPrimaryOnlight, forState: [.selected, .disabled])
return config
}()
//-------------------------------------------------- //--------------------------------------------------
// MARK: - Checkbox View // MARK: - Checkbox View
//-------------------------------------------------- //--------------------------------------------------
@ -364,9 +365,9 @@ open class CheckboxBase: Control, Accessable, DataTrackable, BinaryColorable, Er
open func updateSelector() { open func updateSelector() {
//get the colors //get the colors
let backgroundColor = checkboxBackgroundColorConfiguration.getColor(self) let backgroundColor = checkboxBackgroundColorConfig.getColor(self)
let borderColor = checkboxBorderColorConfiguration.getColor(self) let borderColor = checkboxBorderColorConfig.getColor(self)
let checkColor = checkboxCheckColorConfiguration.getColor(self) let checkColor = checkboxCheckColorConfig.getColor(self)
if let shapeLayer = shapeLayer, let sublayers = layer.sublayers, sublayers.contains(shapeLayer) { if let shapeLayer = shapeLayer, let sublayers = layer.sublayers, sublayers.contains(shapeLayer) {
shapeLayer.removeFromSuperlayer() shapeLayer.removeFromSuperlayer()
@ -413,27 +414,3 @@ open class CheckboxBase: Control, Accessable, DataTrackable, BinaryColorable, Er
} }
} }
} }
//--------------------------------------------------
// MARK: - Color Class Configurations
//--------------------------------------------------
internal class ErrorBinaryDisabledSurfaceColorConfiguration: BinaryDisabledSurfaceColorable {
typealias ObjectType = Errorable & Disabling & Surfaceable & BinaryColorable
var error = BinarySurfaceColorConfiguration()
var forTrue = DisabledSurfaceColorConfiguration()
var forFalse = DisabledSurfaceColorConfiguration()
required init() {}
func getColor(_ object: ObjectType) -> UIColor {
//only show error is enabled and showError == true
let showErrorColor = !object.disabled && object.showError
if showErrorColor {
return error.getColor(object)
} else {
return getBinaryColor(object)
}
}
}