refactored toggle colors and models

Signed-off-by: Matt Bruce <matt.bruce@verizon.com>
This commit is contained in:
Matt Bruce 2022-08-04 16:05:27 -05:00
parent 20622bef41
commit f768c6eab6
5 changed files with 47 additions and 70 deletions

View File

@ -35,7 +35,7 @@ extension CheckboxModel {
return true return true
} }
public var labelModel: LabelModel? { public var labelModel: DefaultLabelModel? {
guard let labelText = labelText else { return nil } guard let labelText = labelText else { return nil }
let model = DefaultLabelModel() let model = DefaultLabelModel()
model.fontSize = .large model.fontSize = .large
@ -49,7 +49,7 @@ extension CheckboxModel {
return model return model
} }
public var childModel: LabelModel? { public var childModel: DefaultLabelModel? {
guard let childText = childText else { return nil } guard let childText = childText else { return nil }
let model = DefaultLabelModel() let model = DefaultLabelModel()
model.fontSize = .large model.fontSize = .large
@ -63,7 +63,7 @@ extension CheckboxModel {
return model return model
} }
public var errorModel: LabelModel? { public var errorModel: DefaultLabelModel? {
guard let errorText = errorText, showError else { return nil } guard let errorText = errorText, showError else { return nil }
let model = DefaultLabelModel() let model = DefaultLabelModel()
model.fontSize = .medium model.fontSize = .medium

View File

@ -12,12 +12,12 @@ import Combine
public class Label:LabelBase<DefaultLabelModel>{} public class Label:LabelBase<DefaultLabelModel>{}
open class LabelBase<ModelType: LabelModel & Initable>: UILabel, ModelHandlerable, Initable, Resettable { open class LabelBase<ModelType: LabelModel>: UILabel, ModelHandlerable, Initable, Resettable {
//-------------------------------------------------- //--------------------------------------------------
// MARK: - Combine Properties // MARK: - Combine Properties
//-------------------------------------------------- //--------------------------------------------------
@Published public var model: LabelModel = ModelType() @Published public var model = ModelType()
private var cancellable: AnyCancellable? private var cancellable: AnyCancellable?
//-------------------------------------------------- //--------------------------------------------------
@ -60,7 +60,7 @@ open class LabelBase<ModelType: LabelModel & Initable>: UILabel, ModelHandlerabl
self.init(frame: .zero) self.init(frame: .zero)
} }
public required convenience init(with model: LabelModel) { public required convenience init(with model: ModelType) {
self.init() self.init()
self.model = model self.model = model
set(with: model) set(with: model)
@ -103,7 +103,7 @@ open class LabelBase<ModelType: LabelModel & Initable>: UILabel, ModelHandlerabl
} }
//Modelable //Modelable
open func set(with model: LabelModel) { open func set(with model: ModelType) {
self.model = model self.model = model
} }
@ -112,9 +112,9 @@ open class LabelBase<ModelType: LabelModel & Initable>: UILabel, ModelHandlerabl
//-------------------------------------------------- //--------------------------------------------------
/// Follow the SwiftUI View paradigm /// Follow the SwiftUI View paradigm
/// - Parameter viewModel: state /// - Parameter viewModel: state
open func onStateChange(viewModel: LabelModel) { open func onStateChange(viewModel: ModelType) {
textAlignment = viewModel.textPosition.textAlignment textAlignment = viewModel.textPosition.textAlignment
textColor = getTextColor(for: viewModel.disabled, surface: viewModel.surface) textColor = textColorHelper.getColor(viewModel)
if let vdsFont = try? FontStyle.font(for: viewModel.fontCategory, fontWeight: viewModel.fontWeight, fontSize: viewModel.fontSize) { if let vdsFont = try? FontStyle.font(for: viewModel.fontCategory, fontWeight: viewModel.fontWeight, fontSize: viewModel.fontSize) {
font = vdsFont font = vdsFont
@ -140,31 +140,15 @@ open class LabelBase<ModelType: LabelModel & Initable>: UILabel, ModelHandlerabl
//-------------------------------------------------- //--------------------------------------------------
// MARK: - Private Functions // MARK: - Private Functions
//-------------------------------------------------- //--------------------------------------------------
private var textColorHelper: ModelSingleColorHelper<DefaultLabelModel> = { private var textColorHelper: ModelSingleColorHelper<ModelType> = {
let helper = ModelSingleColorHelper<DefaultLabelModel>() let helper = ModelSingleColorHelper<ModelType>()
helper.disabled.lightColor = VDSColor.elementsSecondaryOnlight helper.disabled.lightColor = VDSColor.elementsSecondaryOnlight
helper.disabled.darkColor = VDSColor.elementsSecondaryOndark helper.disabled.darkColor = VDSColor.elementsSecondaryOndark
helper.enabled.lightColor = VDSColor.elementsPrimaryOnlight helper.enabled.lightColor = VDSColor.elementsPrimaryOnlight
helper.enabled.darkColor = VDSColor.elementsPrimaryOndark helper.enabled.darkColor = VDSColor.elementsPrimaryOndark
return helper return helper
} () } ()
private func getTextColor(for disabled: Bool, surface: Surface) -> UIColor {
if disabled {
if surface == .light {
return VDSColor.elementsSecondaryOnlight
} else {
return VDSColor.elementsSecondaryOndark
}
} else {
if surface == .light {
return VDSColor.elementsPrimaryOnlight
} else {
return VDSColor.elementsPrimaryOndark
}
}
}
//-------------------------------------------------- //--------------------------------------------------
// MARK: - Actionable // MARK: - Actionable
//-------------------------------------------------- //--------------------------------------------------

View File

@ -8,7 +8,7 @@
import Foundation import Foundation
import UIKit import UIKit
public protocol LabelModel: Labelable, Surfaceable, Disabling { public protocol LabelModel: Labelable, Surfaceable, Disabling, Initable {
var text: String? { get set } var text: String? { get set }
var attributes: [LabelAttributeModel]? { get set } var attributes: [LabelAttributeModel]? { get set }
} }

View File

@ -179,41 +179,32 @@ open class ToggleBase<ModelType: ToggleModel>: Control<ModelType>, Changable {
//-------------------------------------------------- //--------------------------------------------------
// MARK: - Toggle // MARK: - Toggle
//-------------------------------------------------- //--------------------------------------------------
private func getToggleColor(_ viewModel: ModelType) -> UIColor { private var toggleColor: BinaryModelColorHelper<ModelType> = {
var colors: (on: UIColor, off: UIColor) let helper = BinaryModelColorHelper<ModelType>()
if viewModel.disabled { helper.disabled.light.trueColor = VDSColor.interactiveDisabledOnlight
if viewModel.surface == .light { helper.disabled.light.falseColor = VDSColor.interactiveDisabledOnlight
colors = (on: VDSColor.interactiveDisabledOnlight, off: VDSColor.interactiveDisabledOnlight) helper.disabled.dark.trueColor = VDSColor.interactiveDisabledOndark
} else { helper.disabled.dark.falseColor = VDSColor.interactiveDisabledOndark
colors = (on: VDSColor.interactiveDisabledOndark, off: VDSColor.interactiveDisabledOndark) helper.enabled.light.trueColor = VDSColor.paletteGreen26
} helper.enabled.light.falseColor = VDSColor.elementsSecondaryOnlight
} else { helper.enabled.dark.trueColor = VDSColor.paletteGreen34
if viewModel.surface == .light { helper.enabled.dark.falseColor = VDSColor.paletteGray44
colors = (on: VDSColor.paletteGreen26, off: VDSColor.elementsSecondaryOnlight) return helper
} else { } ()
colors = (on: VDSColor.paletteGreen34, off: VDSColor.paletteGray44)
}
}
return viewModel.on ? colors.on : colors.off
}
private func getKnobColor(_ viewModel: ModelType) -> UIColor { private var knobColor: BinaryModelColorHelper<ModelType> = {
var colors: (on: UIColor, off: UIColor) let helper = BinaryModelColorHelper<ModelType>()
if viewModel.disabled { helper.disabled.light.trueColor = VDSColor.paletteGray95
if viewModel.surface == .light { helper.disabled.light.falseColor = VDSColor.paletteGray95
colors = (on: VDSColor.paletteGray95, off: VDSColor.paletteGray95) helper.disabled.dark.trueColor = VDSColor.paletteGray44
} else { helper.disabled.dark.falseColor = VDSColor.paletteGray44
colors = (on: VDSColor.paletteGray44, off: VDSColor.paletteGray44)
} helper.enabled.light.trueColor = VDSColor.elementsPrimaryOndark
} else { helper.enabled.light.falseColor = VDSColor.elementsPrimaryOndark
if viewModel.surface == .light { helper.enabled.dark.trueColor = VDSColor.elementsPrimaryOndark
colors = (on: VDSColor.elementsPrimaryOndark, off: VDSColor.elementsPrimaryOndark) helper.enabled.dark.falseColor = VDSColor.elementsPrimaryOndark
} else { return helper
colors = (on: VDSColor.elementsPrimaryOndark, off: VDSColor.elementsPrimaryOndark) } ()
}
}
return viewModel.on ? colors.on : colors.off
}
private func updateToggle(_ viewModel: ModelType) { private func updateToggle(_ viewModel: ModelType) {
//private func //private func
@ -233,8 +224,8 @@ open class ToggleBase<ModelType: ToggleModel>: Control<ModelType>, Changable {
self.layoutIfNeeded() self.layoutIfNeeded()
} }
let toggleColor = getToggleColor(viewModel) let toggleColor = toggleColor.getColor(viewModel)
let knobColor = getKnobColor(viewModel) let knobColor = knobColor.getColor(viewModel)
if viewModel.disabled { if viewModel.disabled {
toggleView.backgroundColor = toggleColor toggleView.backgroundColor = toggleColor
@ -287,7 +278,7 @@ open class ToggleBase<ModelType: ToggleModel>: Control<ModelType>, Changable {
toggleView.layer.cornerRadius = toggleSize.height / 2.0 toggleView.layer.cornerRadius = toggleSize.height / 2.0
knobView.layer.cornerRadius = knobSize.height / 2.0 knobView.layer.cornerRadius = knobSize.height / 2.0
toggleView.backgroundColor = getToggleColor(model) toggleView.backgroundColor = toggleColor.getColor(model)
toggleView.addSubview(knobView) toggleView.addSubview(knobView)
@ -310,8 +301,8 @@ open class ToggleBase<ModelType: ToggleModel>: Control<ModelType>, Changable {
public override func reset() { public override func reset() {
super.reset() super.reset()
toggleView.backgroundColor = getToggleColor(model) toggleView.backgroundColor = toggleColor.getColor(model)
knobView.backgroundColor = getKnobColor(model) knobView.backgroundColor = knobColor.getColor(model)
setAccessibilityLabel() setAccessibilityLabel()
onChange = nil onChange = nil
} }

View File

@ -8,7 +8,7 @@
import Foundation import Foundation
import UIKit import UIKit
public protocol ToggleModel: FormFieldable, DataTrackable, Accessable, Initable, Labelable, Surfaceable, Disabling { public protocol ToggleModel: FormFieldable, DataTrackable, Accessable, Initable, Labelable, Surfaceable, Disabling, BinaryColorable {
var id: String? { get set } var id: String? { get set }
var showText: Bool { get set } var showText: Bool { get set }
var on: Bool { get set } var on: Bool { get set }
@ -22,7 +22,9 @@ extension ToggleModel {
set { return } set { return }
} }
public var label: LabelModel { public var userTrueColor: Bool { return on }
public var label: DefaultLabelModel {
let model = DefaultLabelModel() let model = DefaultLabelModel()
model.fontSize = fontSize model.fontSize = fontSize
model.textPosition = textPosition model.textPosition = textPosition