diff --git a/MVMCoreUI/Atoms/Buttons/PillButton.swift b/MVMCoreUI/Atoms/Buttons/PillButton.swift index 8bda4b20..fc752f7a 100644 --- a/MVMCoreUI/Atoms/Buttons/PillButton.swift +++ b/MVMCoreUI/Atoms/Buttons/PillButton.swift @@ -8,12 +8,15 @@ import UIKit -open class PillButton: Button, MVMCoreUIViewConstrainingProtocol { +open class PillButton: Button, MVMCoreUIViewConstrainingProtocol, FormValidationEnableDisableProtocol { + // Used to size the button. var size = MVMCoreUIUtility.getWidth() + var buttonModel: ButtonModel? { get { return model as? ButtonModel } } + // Need to re-style on set. open override var isEnabled: Bool { didSet { style() @@ -25,6 +28,7 @@ open class PillButton: Button, MVMCoreUIViewConstrainingProtocol { case standard = 42 } + /// The primary styling for a button. Should be used for main buttons public func stylePrimary() { setTitleColor(.white, for: .normal) setTitleColor(.white, for: .disabled) @@ -36,6 +40,7 @@ open class PillButton: Button, MVMCoreUIViewConstrainingProtocol { } } + /// The secondary styling for a button. Should be used for secondary buttons public func styleSecondary() { setTitleColor(.black, for: .normal) setTitleColor(.mvmCoolGray6, for: .disabled) @@ -48,6 +53,7 @@ open class PillButton: Button, MVMCoreUIViewConstrainingProtocol { } } + /// Styles the button based on the model style private func style() { switch buttonModel?.style { case .secondary: @@ -97,13 +103,10 @@ open class PillButton: Button, MVMCoreUIViewConstrainingProtocol { guard let model = model as? ButtonModel else { return } setTitle(model.title, for: .normal) - /*self.validationRequired = model.required ?? false - self.requiredGroupsList = model.requiredGroups - - if self.validationRequired, - let selfForm = self as? FormValidationEnableDisableProtocol { - FormValidator.setupValidation(molecule: selfForm, delegate: delegateObject?.formValidationProtocol) - }*/ + if let required = model.required, + required == true { + FormValidator.setupValidation(molecule: self, delegate: delegateObject?.formValidationProtocol) + } } open override class func estimatedHeight(forRow molecule: MoleculeModelProtocol?, delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? { @@ -137,4 +140,17 @@ open class PillButton: Button, MVMCoreUIViewConstrainingProtocol { open func horizontalAlignment() -> UIStackView.Alignment { return .center } + + // MARK: - FormValidationEnableDisableProtocol + public func isValidationRequired() -> Bool { + return buttonModel?.required ?? false + } + + public func requiredGroups() -> [String]? { + return buttonModel?.requiredGroups + } + + public func enableField(_ enable: Bool) { + isEnabled = isValidationRequired() ? enable : true + } }