refactored more of inputfield

Signed-off-by: Matt Bruce <matt.bruce@verizon.com>
This commit is contained in:
Matt Bruce 2024-05-08 17:18:50 -05:00
parent 819aa7a44e
commit 2d5f3d7652

View File

@ -177,28 +177,6 @@ open class InputField: EntryFieldBase {
self?.sendActions(for: .valueChanged)
}.store(in: &subscribers)
textField
.publisher(for: .editingDidBegin)
.sink { [weak self] _ in
guard let self else { return }
if self.fieldType == .creditCard {
self.isCreditCardMasked = false
self.textField.text = self.formatCreditCardNumber(self.creditCardRawNumber)
}
self.setNeedsUpdate()
}.store(in: &subscribers)
textField
.publisher(for: .editingDidEnd)
.sink { [weak self] _ in
guard let self else { return }
if self.fieldType == .creditCard {
self.isCreditCardMasked = true
self.textField.text = self.maskCreditCardNumber(self.creditCardRawNumber)
}
self.validate()
}.store(in: &subscribers)
stackView.addArrangedSubview(successLabel)
stackView.setCustomSpacing(8, after: successLabel)
@ -332,12 +310,6 @@ open class InputField: EntryFieldBase {
case .date:
minWidth = 114.0
placeholderText = dateFormat.placeholderText
let rule = CharacterCountRule().copyWith {
$0.maxLength = dateFormat.maxLength
$0.compareType = .equals
$0.errorMessage = "Enter a valid date"
}
rules.append(.init(rule))
case .securityCode:
minWidth = 88.0
isSecureTextEntry = true
@ -390,7 +362,7 @@ open class InputField: EntryFieldBase {
case .creditCard:
if let text = textField.text, text.count > 0 {
let rule = CharacterCountRule().copyWith {
$0.maxLength = "XXXX XXXX XXXX XXXX".count
$0.maxLength = creditCardMaxLength
$0.compareType = .equals
$0.errorMessage = "Enter a valid credit card."
}
@ -498,7 +470,6 @@ open class InputField: EntryFieldBase {
//---------------------------------------------------
// MARK: - Credit Card
//---------------------------------------------------
private var isCreditCardMasked: Bool = false
private var creditCardRawNumber: String = ""
private var creditCardMaxLength = 16
@ -527,7 +498,7 @@ open class InputField: EntryFieldBase {
private func maskCreditCardNumber(_ number: String) -> String {
// Mask the first 12 characters if the length is 16
let rawNumber = number.filter { $0.isNumber }
guard rawNumber.count == creditCardMaxLength else { return number }
guard rawNumber.count == creditCardMaxLength else { return formatCreditCardNumber(number) }
let lastFourDigits = rawNumber.suffix(4)
let maskedSection = String(repeating: "", count: 12)
let formattedMaskSection = formatCreditCardNumber(maskedSection)
@ -592,6 +563,18 @@ open class InputField: EntryFieldBase {
}
extension InputField: UITextFieldDelegate {
public func textFieldDidBeginEditing(_ textField: UITextField) {
if fieldType == .creditCard {
textField.text = formatCreditCardNumber(creditCardRawNumber)
}
}
public func textFieldDidEndEditing(_ textField: UITextField) {
if self.fieldType == .creditCard {
textField.text = maskCreditCardNumber(creditCardRawNumber)
}
validate()
}
public func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {