From f768c6eab6ae5c67429ca03aae86faf884b4121d Mon Sep 17 00:00:00 2001 From: Matt Bruce Date: Thu, 4 Aug 2022 16:05:27 -0500 Subject: [PATCH] refactored toggle colors and models Signed-off-by: Matt Bruce --- VDS/Components/Checkbox/CheckboxModel.swift | 6 +- VDS/Components/Label/Label.swift | 34 +++------- VDS/Components/Label/LabelModel.swift | 2 +- VDS/Components/Toggle/Toggle.swift | 69 +++++++++------------ VDS/Components/Toggle/ToggleModel.swift | 6 +- 5 files changed, 47 insertions(+), 70 deletions(-) diff --git a/VDS/Components/Checkbox/CheckboxModel.swift b/VDS/Components/Checkbox/CheckboxModel.swift index dab00bfd..dea769fc 100644 --- a/VDS/Components/Checkbox/CheckboxModel.swift +++ b/VDS/Components/Checkbox/CheckboxModel.swift @@ -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 diff --git a/VDS/Components/Label/Label.swift b/VDS/Components/Label/Label.swift index d85c0dd2..75de64de 100644 --- a/VDS/Components/Label/Label.swift +++ b/VDS/Components/Label/Label.swift @@ -12,12 +12,12 @@ import Combine public class Label:LabelBase{} -open class LabelBase: UILabel, ModelHandlerable, Initable, Resettable { +open class LabelBase: 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: 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: 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: 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: UILabel, ModelHandlerabl //-------------------------------------------------- // MARK: - Private Functions //-------------------------------------------------- - private var textColorHelper: ModelSingleColorHelper = { - let helper = ModelSingleColorHelper() + private var textColorHelper: ModelSingleColorHelper = { + let helper = ModelSingleColorHelper() 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 //-------------------------------------------------- diff --git a/VDS/Components/Label/LabelModel.swift b/VDS/Components/Label/LabelModel.swift index adb5d5dc..c992f865 100644 --- a/VDS/Components/Label/LabelModel.swift +++ b/VDS/Components/Label/LabelModel.swift @@ -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 } } diff --git a/VDS/Components/Toggle/Toggle.swift b/VDS/Components/Toggle/Toggle.swift index 0eea40e4..0627b17a 100644 --- a/VDS/Components/Toggle/Toggle.swift +++ b/VDS/Components/Toggle/Toggle.swift @@ -179,41 +179,32 @@ open class ToggleBase: Control, 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 = { + let helper = BinaryModelColorHelper() + 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 = { + let helper = BinaryModelColorHelper() + 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: Control, 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: Control, 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: Control, 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 } diff --git a/VDS/Components/Toggle/ToggleModel.swift b/VDS/Components/Toggle/ToggleModel.swift index aea09a58..402ce3c9 100644 --- a/VDS/Components/Toggle/ToggleModel.swift +++ b/VDS/Components/Toggle/ToggleModel.swift @@ -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