From 3acde8b4c81bf09cb2080ca4c06c79f7598ad5ca Mon Sep 17 00:00:00 2001 From: Matt Bruce Date: Thu, 4 Aug 2022 15:11:02 -0500 Subject: [PATCH] created color helpers Signed-off-by: Matt Bruce --- VDS.xcodeproj/project.pbxproj | 8 +- VDS/Classes/ModelColorHelper.swift | 59 ---------- VDS/Classes/ModelColorHelpers.swift | 50 ++++++++ VDS/Components/Checkbox/Checkbox.swift | 119 +++++++++----------- VDS/Components/Checkbox/CheckboxModel.swift | 4 +- 5 files changed, 113 insertions(+), 127 deletions(-) delete mode 100644 VDS/Classes/ModelColorHelper.swift create mode 100644 VDS/Classes/ModelColorHelpers.swift diff --git a/VDS.xcodeproj/project.pbxproj b/VDS.xcodeproj/project.pbxproj index ac6245c0..2b35121d 100644 --- a/VDS.xcodeproj/project.pbxproj +++ b/VDS.xcodeproj/project.pbxproj @@ -57,7 +57,7 @@ EAF7F0B3289B1ADC00B287F5 /* LabelAttributeAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAF7F0B2289B1ADC00B287F5 /* LabelAttributeAction.swift */; }; EAF7F0B5289C126F00B287F5 /* UILabel.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAF7F0B4289C126F00B287F5 /* UILabel.swift */; }; EAF7F0B7289C12A600B287F5 /* UITapGestureRecognizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAF7F0B6289C12A600B287F5 /* UITapGestureRecognizer.swift */; }; - EAF7F0B9289C139800B287F5 /* ModelColorHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAF7F0B8289C139800B287F5 /* ModelColorHelper.swift */; }; + EAF7F0B9289C139800B287F5 /* ModelColorHelpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAF7F0B8289C139800B287F5 /* ModelColorHelpers.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -122,7 +122,7 @@ EAF7F0B2289B1ADC00B287F5 /* LabelAttributeAction.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LabelAttributeAction.swift; sourceTree = ""; }; EAF7F0B4289C126F00B287F5 /* UILabel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UILabel.swift; sourceTree = ""; }; EAF7F0B6289C12A600B287F5 /* UITapGestureRecognizer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UITapGestureRecognizer.swift; sourceTree = ""; }; - EAF7F0B8289C139800B287F5 /* ModelColorHelper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ModelColorHelper.swift; sourceTree = ""; }; + EAF7F0B8289C139800B287F5 /* ModelColorHelpers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ModelColorHelpers.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -258,8 +258,8 @@ EA3C3B4B2894823E000CA526 /* AnyProxy-PropertyWrapper.swift */, EAF7F09D289AAEC000B287F5 /* Constants.swift */, EA3361B5288B2A410071C351 /* Control.swift */, + EAF7F0B8289C139800B287F5 /* ModelColorHelpers.swift */, EAF7F09F289AB7EC00B287F5 /* View.swift */, - EAF7F0B8289C139800B287F5 /* ModelColorHelper.swift */, ); path = Classes; sourceTree = ""; @@ -464,7 +464,7 @@ EA33624728931B050071C351 /* Initable.swift in Sources */, EAF7F0A4289B017C00B287F5 /* LabelAttributeModel.swift in Sources */, EAF7F0B1289B177F00B287F5 /* LabelAttributeColor.swift in Sources */, - EAF7F0B9289C139800B287F5 /* ModelColorHelper.swift in Sources */, + EAF7F0B9289C139800B287F5 /* ModelColorHelpers.swift in Sources */, EA3361BD288B2C760071C351 /* TypeAlias.swift in Sources */, EAF7F09A2899B17200B287F5 /* CATransaction.swift in Sources */, EAF7F0A2289AFB3900B287F5 /* Errorable.swift in Sources */, diff --git a/VDS/Classes/ModelColorHelper.swift b/VDS/Classes/ModelColorHelper.swift deleted file mode 100644 index e308e6dd..00000000 --- a/VDS/Classes/ModelColorHelper.swift +++ /dev/null @@ -1,59 +0,0 @@ -// -// ModelColorHelper.swift -// VDS -// -// Created by Matt Bruce on 8/4/22. -// - -import Foundation -import UIKit - -public class ModelColor { - public var disabledSurfaceLight: UIColor = .clear - public var disabledSurfaceDark: UIColor = .clear - public var enabledSurfaceLight: UIColor = .clear - public var enabledSurfaceDark: UIColor = .clear - - public func getColor(_ viewModel: ModelType) -> UIColor { - var color: UIColor - if viewModel.disabled { - if viewModel.surface == .light { - color = disabledSurfaceLight - } else { - color = disabledSurfaceDark - } - } else { - if viewModel.surface == .light { - color = enabledSurfaceLight - } else { - color = enabledSurfaceDark - } - } - return color - } -} - -public class ModelColorHelper { - public var onColor = ModelColor() - public var offColor: ModelColor? - public var errorOnColor: ModelColor? - public var errorOffColor: ModelColor? - - public init (){} - - public func getColor(model: ModelType, isOn: Bool = true, isError: Bool = false) -> UIColor { - if isOn { - if isError { - return errorOnColor?.getColor(model) ?? onColor.getColor(model) - } else { - return onColor.getColor(model) - } - } else { - if isError { - return errorOffColor?.getColor(model) ?? (offColor?.getColor(model) ?? onColor.getColor(model)) - } else { - return offColor?.getColor(model) ?? onColor.getColor(model) - } - } - } -} diff --git a/VDS/Classes/ModelColorHelpers.swift b/VDS/Classes/ModelColorHelpers.swift new file mode 100644 index 00000000..da4eaf87 --- /dev/null +++ b/VDS/Classes/ModelColorHelpers.swift @@ -0,0 +1,50 @@ +// +// ModelColorHelper.swift +// VDS +// +// Created by Matt Bruce on 8/4/22. +// + +import Foundation +import UIKit + +public protocol Colorable { + associatedtype ModelType + func getColor(_ viewModel: ModelType) -> UIColor +} + +public protocol BinaryColorable{ + var userTrueColor: Bool { get } +} + +open class BinaryColorHelper { + public var trueColor: UIColor = .clear + public var falseColor: UIColor = .clear + + public func getColor(_ viewModel: ModelType) -> UIColor { + return viewModel.userTrueColor ? trueColor : falseColor + } +} + +open class BinarySurfaceColorHelper: Colorable{ + public var light = BinaryColorHelper() + public var dark = BinaryColorHelper() + + public func getColor(_ viewModel: ModelType) -> UIColor { + if viewModel.surface == .light { + return light.getColor(viewModel) + } else { + return dark.getColor(viewModel) + } + } +} + +open class BinaryModelColorHelper: Colorable { + public var disabled = BinarySurfaceColorHelper() + public var enabled = BinarySurfaceColorHelper() + + public func getColor(_ viewModel: ModelType) -> UIColor { + return viewModel.disabled ? disabled.getColor(viewModel) : enabled.getColor(viewModel) + } +} + diff --git a/VDS/Components/Checkbox/Checkbox.swift b/VDS/Components/Checkbox/Checkbox.swift index 74eaaf76..b7032516 100644 --- a/VDS/Components/Checkbox/Checkbox.swift +++ b/VDS/Components/Checkbox/Checkbox.swift @@ -271,73 +271,48 @@ open class CheckboxBase: Control, Changable /// Manages the appearance of the checkbox. private var shapeLayer: CAShapeLayer? - private func getCheckboxBackgroundColor(_ viewModel: ModelType) -> UIColor { - var colors: (on: UIColor, off: UIColor) - if viewModel.disabled { - if viewModel.surface == .light { - colors = (on: VDSColor.interactiveDisabledOnlight, off: .clear) - } else { - colors = (on: VDSColor.interactiveDisabledOndark, off: .clear) - } - } else { - if viewModel.showError { - if viewModel.surface == .light { - colors = (on: VDSColor.elementsPrimaryOnlight, off: VDSColor.feedbackErrorBackgroundOnlight) - } else { - colors = (on: VDSColor.elementsPrimaryOndark, off: VDSColor.feedbackErrorBackgroundOndark) - } - } else { - if viewModel.surface == .light { - colors = (on: VDSColor.elementsPrimaryOnlight, off: .clear) - } else { - colors = (on: VDSColor.elementsPrimaryOndark, off: .clear) - } - } - } - return viewModel.on ? colors.on : colors.off - } + private var checkboxBackgroundColor: CheckboxErrorColorHelper = { + let helper = CheckboxErrorColorHelper() + helper.disabled.light.trueColor = VDSColor.interactiveDisabledOnlight + helper.disabled.dark.trueColor = VDSColor.interactiveDisabledOndark + helper.error.light.trueColor = VDSColor.elementsPrimaryOnlight + helper.error.light.falseColor = VDSColor.feedbackErrorBackgroundOnlight + helper.error.dark.trueColor = VDSColor.elementsPrimaryOndark + helper.error.dark.falseColor = VDSColor.feedbackErrorBackgroundOndark + helper.enabled.light.trueColor = VDSColor.elementsPrimaryOnlight + helper.enabled.dark.trueColor = VDSColor.elementsPrimaryOndark + return helper + }() - private func getCheckboxBorderColor(_ 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.interactiveDisabledOnlight) - } - } else { - if viewModel.showError { - if viewModel.surface == .light { - colors = (on: VDSColor.elementsPrimaryOnlight, off: VDSColor.feedbackErrorOnlight) - } else { - colors = (on: VDSColor.elementsPrimaryOndark, off: VDSColor.feedbackErrorOndark) - } - } else { - if viewModel.surface == .light { - colors = (on: VDSColor.elementsPrimaryOnlight, off: VDSFormControlsColor.borderOnlight) - } else { - colors = (on: VDSColor.elementsPrimaryOndark, off: VDSFormControlsColor.borderOndark) - } - } - } - return viewModel.on ? colors.on : colors.off - } - - private func getCheckboxCheckColor(_ viewModel: ModelType) -> UIColor { - var color: UIColor - if surface == .light { - color = VDSColor.elementsPrimaryOndark - } else { - color = VDSColor.elementsPrimaryOnlight - } - return viewModel.on ? color : .clear - } + private var checkboxBorderColor: CheckboxErrorColorHelper = { + let helper = CheckboxErrorColorHelper() + 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.error.light.trueColor = VDSColor.elementsPrimaryOnlight + helper.error.light.falseColor = VDSColor.feedbackErrorOnlight + helper.error.dark.trueColor = VDSColor.elementsPrimaryOndark + helper.error.dark.falseColor = VDSColor.feedbackErrorOndark + helper.enabled.light.trueColor = VDSColor.elementsPrimaryOnlight + helper.enabled.light.falseColor = VDSFormControlsColor.borderOnlight + helper.enabled.dark.trueColor = VDSColor.elementsPrimaryOndark + helper.enabled.dark.falseColor = VDSFormControlsColor.borderOndark + return helper + }() + private var checkboxCheckColor: BinarySurfaceColorHelper = { + let helper = BinarySurfaceColorHelper() + helper.light.trueColor = VDSColor.elementsPrimaryOndark + helper.dark.trueColor = VDSColor.elementsPrimaryOnlight + return helper + }() + private func updateCheckbox(_ viewModel: ModelType) { //get the colors - let backgroundColor = getCheckboxBackgroundColor(viewModel) - let borderColor = getCheckboxBorderColor(viewModel) - let checkColor = getCheckboxCheckColor(viewModel) + let backgroundColor = checkboxBackgroundColor.getColor(viewModel) + let borderColor = checkboxBorderColor.getColor(viewModel) + let checkColor = checkboxCheckColor.getColor(viewModel) if let shapeLayer = shapeLayer, let sublayers = layer.sublayers, sublayers.contains(shapeLayer) { shapeLayer.removeFromSuperlayer() @@ -437,4 +412,22 @@ open class CheckboxBase: Control, Changable layoutIfNeeded() } + //-------------------------------------------------- + // MARK: - Color Class Helpers + //-------------------------------------------------- + private class CheckboxErrorColorHelper: BinaryModelColorHelper { + public let error = BinarySurfaceColorHelper() + + override func getColor(_ viewModel: ModelType) -> UIColor { + //only show error is enabled and showError == true + let showErrorColor = !viewModel.disabled && viewModel.showError + + if showErrorColor { + return error.getColor(viewModel) + } else { + return super.getColor(viewModel) + } + } + } } + diff --git a/VDS/Components/Checkbox/CheckboxModel.swift b/VDS/Components/Checkbox/CheckboxModel.swift index 3c8644fa..dab00bfd 100644 --- a/VDS/Components/Checkbox/CheckboxModel.swift +++ b/VDS/Components/Checkbox/CheckboxModel.swift @@ -8,7 +8,7 @@ import Foundation import UIKit -public protocol CheckboxModel: FormFieldable, Errorable, DataTrackable, Accessable, Surfaceable, Disabling, Initable { +public protocol CheckboxModel: FormFieldable, Errorable, DataTrackable, Accessable, Surfaceable, Disabling, Initable, BinaryColorable { var id: String? { get set } var on: Bool { get set } var labelText: String? { get set } @@ -18,6 +18,8 @@ public protocol CheckboxModel: FormFieldable, Errorable, DataTrackable, Accessab } extension CheckboxModel { + public var userTrueColor: Bool { return on } + public var fontCategory: FontCategory { get { return .body } set { return }