diff --git a/VDS/Components/TextFields/EntryFieldBase.swift b/VDS/Components/TextFields/EntryFieldBase.swift index 390317f0..7389cf79 100644 --- a/VDS/Components/TextFields/EntryFieldBase.swift +++ b/VDS/Components/TextFields/EntryFieldBase.swift @@ -13,7 +13,7 @@ import Combine /// Base Class used to build out a Input controls. @objc(VDSEntryField) -open class EntryFieldBase: Control, Changeable, FormFieldable { +open class EntryFieldBase: Control, Changeable, FormFieldValidatable { //-------------------------------------------------- // MARK: - Initializers @@ -153,8 +153,11 @@ open class EntryFieldBase: Control, Changeable, FormFieldable { /// Whether not to show the error. open var showError: Bool = false { didSet { setNeedsUpdate() } } + /// FormFieldValidator + open var validator: (any FormFieldValidatorable)? + /// Whether or not to show the internal error - open internal(set) var hasInternalError: Bool = false { didSet { setNeedsUpdate() } } + open var hasInternalError: Bool { !(validator?.isValid ?? true) } /// Override UIControl state to add the .error state if showError is true. open override var state: UIControl.State { @@ -175,7 +178,7 @@ open class EntryFieldBase: Control, Changeable, FormFieldable { } } - internal var internalErrorText: String? { + open var internalErrorText: String? { didSet { updateContainerView() updateErrorLabel() @@ -323,6 +326,8 @@ open class EntryFieldBase: Control, Changeable, FormFieldable { updateHelperLabel() backgroundColor = surface.color + validator?.validate() + internalErrorText = validator?.errorMessage } //-------------------------------------------------- diff --git a/VDS/Components/TextFields/TextArea/TextArea.swift b/VDS/Components/TextFields/TextArea/TextArea.swift index 5db90fff..57222496 100644 --- a/VDS/Components/TextFields/TextArea/TextArea.swift +++ b/VDS/Components/TextFields/TextArea/TextArea.swift @@ -127,6 +127,8 @@ open class TextArea: EntryFieldBase { $0.isScrollEnabled = false } + open override var maxLength: Int? { willSet { countRule.maxLength = newValue }} + /// Color configuration for error icon. internal var iconColorConfiguration = ControlColorConfiguration().with { $0.setSurfaceColors(VDSColor.elementsPrimaryOnlight, VDSColor.elementsPrimaryOndark, forState: .normal) @@ -149,6 +151,7 @@ open class TextArea: EntryFieldBase { open override func setup() { super.setup() accessibilityLabel = "TextArea" + validator = FormFieldValidator