diff --git a/MVMCoreUI/Atoms/Buttons/ButtonModel.swift b/MVMCoreUI/Atoms/Buttons/ButtonModel.swift index ce513a03..9eb284d7 100644 --- a/MVMCoreUI/Atoms/Buttons/ButtonModel.swift +++ b/MVMCoreUI/Atoms/Buttons/ButtonModel.swift @@ -27,6 +27,12 @@ public class ButtonModel: ButtonModelProtocol, MoleculeModelProtocol { public var enabled: Bool = true public var style: ButtonStyle? public var size: ButtonSize? = .standard + public var fillColor: Color? + public var textColor: Color? + public var borderColor: Color? + public var disabledFillColor: Color? + public var disabledTextColor: Color? + public var disabledBorderColor: Color? public var required: Bool? public var requiredGroups: [String]? @@ -43,6 +49,12 @@ public class ButtonModel: ButtonModelProtocol, MoleculeModelProtocol { case enabled case style case size + case fillColor + case textColor + case borderColor + case disabledFillColor + case disabledTextColor + case disabledBorderColor case required case requiredGroups } @@ -65,6 +77,12 @@ public class ButtonModel: ButtonModelProtocol, MoleculeModelProtocol { if let enabled = try typeContainer.decodeIfPresent(Bool.self, forKey: .enabled) { self.enabled = enabled } + fillColor = try typeContainer.decodeIfPresent(Color.self, forKey: .fillColor) + textColor = try typeContainer.decodeIfPresent(Color.self, forKey: .textColor) + borderColor = try typeContainer.decodeIfPresent(Color.self, forKey: .borderColor) + disabledFillColor = try typeContainer.decodeIfPresent(Color.self, forKey: .disabledFillColor) + disabledTextColor = try typeContainer.decodeIfPresent(Color.self, forKey: .disabledTextColor) + disabledBorderColor = try typeContainer.decodeIfPresent(Color.self, forKey: .disabledBorderColor) } public func encode(to encoder: Encoder) throws { @@ -76,6 +94,13 @@ public class ButtonModel: ButtonModelProtocol, MoleculeModelProtocol { try container.encode(enabled, forKey: .enabled) try container.encodeIfPresent(style, forKey: .style) try container.encodeIfPresent(size, forKey: .size) + try container.encodeIfPresent(fillColor, forKey: .fillColor) + try container.encodeIfPresent(textColor, forKey: .textColor) + try container.encodeIfPresent(borderColor, forKey: .borderColor) + try container.encodeIfPresent(disabledFillColor, forKey: .disabledFillColor) + try container.encodeIfPresent(disabledTextColor, forKey: .disabledTextColor) + try container.encodeIfPresent(disabledBorderColor, forKey: .disabledBorderColor) try container.encodeIfPresent(required, forKey: .required) + try container.encodeIfPresent(requiredGroups, forKey: .requiredGroups) } } diff --git a/MVMCoreUI/Atoms/Buttons/PillButton.swift b/MVMCoreUI/Atoms/Buttons/PillButton.swift index 262a780d..403e9bc8 100644 --- a/MVMCoreUI/Atoms/Buttons/PillButton.swift +++ b/MVMCoreUI/Atoms/Buttons/PillButton.swift @@ -45,7 +45,7 @@ open class PillButton: Button, MVMCoreUIViewConstrainingProtocol, FormValidation setTitleColor(.black, for: .normal) setTitleColor(.mvmCoolGray6, for: .disabled) backgroundColor = .clear - layer.borderWidth = 1; + layer.borderWidth = 1 if isEnabled { layer.borderColor = UIColor.black.cgColor } else { @@ -61,6 +61,29 @@ open class PillButton: Button, MVMCoreUIViewConstrainingProtocol, FormValidation default: stylePrimary() } + if let titleColor = buttonModel?.textColor { + setTitleColor(titleColor.uiColor, for: .normal) + } + if let disabledTitleColor = buttonModel?.disabledTextColor { + setTitleColor(disabledTitleColor.uiColor, for: .disabled) + } + if isEnabled { + if let fillColor = buttonModel?.fillColor { + backgroundColor = fillColor.uiColor + } + if let borderColor = buttonModel?.borderColor { + layer.borderWidth = 1 + layer.borderColor = borderColor.cgColor + } + } else { + if let fillColor = buttonModel?.disabledFillColor { + backgroundColor = fillColor.uiColor + } + if let borderColor = buttonModel?.disabledBorderColor { + layer.borderWidth = 1 + layer.borderColor = borderColor.cgColor + } + } } private func getInnerPadding() -> CGFloat {