refactored toggle colors and models
Signed-off-by: Matt Bruce <matt.bruce@verizon.com>
This commit is contained in:
parent
20622bef41
commit
f768c6eab6
@ -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
|
||||
|
||||
@ -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
|
||||
//--------------------------------------------------
|
||||
|
||||
@ -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 }
|
||||
}
|
||||
|
||||
@ -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
|
||||
}
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
Reference in New Issue
Block a user