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

View File

@ -12,12 +12,12 @@ import Combine
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
//--------------------------------------------------
@Published public var model: LabelModel = ModelType()
@Published public var model = ModelType()
private var cancellable: AnyCancellable?
//--------------------------------------------------
@ -60,7 +60,7 @@ open class LabelBase<ModelType: LabelModel & Initable>: UILabel, ModelHandlerabl
self.init(frame: .zero)
}
public required convenience init(with model: LabelModel) {
public required convenience init(with model: ModelType) {
self.init()
self.model = model
set(with: model)
@ -103,7 +103,7 @@ open class LabelBase<ModelType: LabelModel & Initable>: UILabel, ModelHandlerabl
}
//Modelable
open func set(with model: LabelModel) {
open func set(with model: ModelType) {
self.model = model
}
@ -112,9 +112,9 @@ open class LabelBase<ModelType: LabelModel & Initable>: UILabel, ModelHandlerabl
//--------------------------------------------------
/// Follow the SwiftUI View paradigm
/// - Parameter viewModel: state
open func onStateChange(viewModel: LabelModel) {
open func onStateChange(viewModel: ModelType) {
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) {
font = vdsFont
@ -140,31 +140,15 @@ open class LabelBase<ModelType: LabelModel & Initable>: UILabel, ModelHandlerabl
//--------------------------------------------------
// MARK: - Private Functions
//--------------------------------------------------
private var textColorHelper: ModelSingleColorHelper<DefaultLabelModel> = {
let helper = ModelSingleColorHelper<DefaultLabelModel>()
private var textColorHelper: ModelSingleColorHelper<ModelType> = {
let helper = ModelSingleColorHelper<ModelType>()
helper.disabled.lightColor = VDSColor.elementsSecondaryOnlight
helper.disabled.darkColor = VDSColor.elementsSecondaryOndark
helper.enabled.lightColor = VDSColor.elementsPrimaryOnlight
helper.enabled.darkColor = VDSColor.elementsPrimaryOndark
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
//--------------------------------------------------

View File

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

View File

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

View File

@ -8,7 +8,7 @@
import Foundation
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 showText: Bool { get set }
var on: Bool { get set }
@ -22,7 +22,9 @@ extension ToggleModel {
set { return }
}
public var label: LabelModel {
public var userTrueColor: Bool { return on }
public var label: DefaultLabelModel {
let model = DefaultLabelModel()
model.fontSize = fontSize
model.textPosition = textPosition