added validateOnChange

Signed-off-by: Matt Bruce <matt.bruce@verizon.com>
This commit is contained in:
Matt Bruce 2024-05-09 16:33:09 -05:00
parent 84a03573ab
commit 7ec0192945
4 changed files with 32 additions and 4 deletions

View File

@ -10,7 +10,7 @@ import UIKit
extension InputField {
public enum CreditCardType: CaseIterable {
public enum CreditCardType: String, CaseIterable {
case generic
case visa
case mastercard
@ -45,6 +45,14 @@ extension InputField {
}
}
var securityCodeLength: Int {
if self == .amex {
return 4
} else {
return 3
}
}
var maxLength: Int {
switch self {
case .dinersClub: return 14
@ -86,13 +94,13 @@ extension InputField {
private override init() {
super.init()
self.validateOnChange = false
self.keyboardType = .numberPad
}
override func updateView(_ inputField: InputField) {
minWidth = 288.0
leftImageName = inputField.cardType.imageName(surface: inputField.surface)
super.updateView(inputField)
}

View File

@ -45,6 +45,7 @@ extension InputField {
var isSecureTextEntry = false
var placeholderText: String?
var value: String?
var validateOnChange = false
internal override init() {
keyboardType = .default

View File

@ -18,10 +18,25 @@ extension InputField {
self.keyboardType = .numberPad
}
override func appendRules(_ inputField: InputField) {
if let text = inputField.textField.text, text.count > 0 {
let rule = CharacterCountRule().copyWith {
$0.maxLength = inputField.cardType.securityCodeLength
$0.compareType = .equals
$0.errorMessage = "Enter a valid security code."
}
inputField.rules.append(.init(rule))
}
}
override func updateView(_ inputField: InputField) {
minWidth = 88.0
isSecureTextEntry = true
let title: String = inputField.cardType.rawValue
let content: String = "looking for \(inputField.cardType.securityCodeLength) digits"
toolTipModel = .init(title: title, content: content)
super.updateView(inputField)
}
@ -29,7 +44,7 @@ extension InputField {
// Allow only numbers and limit the length of text.
let allowedCharacters = CharacterSet.decimalDigits
let characterSet = CharacterSet(charactersIn: string)
return allowedCharacters.isSuperset(of: characterSet) && ((textField.text?.count ?? 0) + string.count - range.length) <= 4
return allowedCharacters.isSuperset(of: characterSet) && ((textField.text?.count ?? 0) + string.count - range.length) <= inputField.cardType.securityCodeLength
}
}

View File

@ -196,8 +196,12 @@ open class InputField: EntryFieldBase {
textField
.textPublisher
.sink { [weak self] newText in
guard let self else { return }
print("textPublisher newText: \(newText)")
self?.sendActions(for: .valueChanged)
if self.fieldType.handler().validateOnChange {
self.validate()
}
self.sendActions(for: .valueChanged)
}.store(in: &subscribers)
stackView.addArrangedSubview(successLabel)