refactored more of inputfield
Signed-off-by: Matt Bruce <matt.bruce@verizon.com>
This commit is contained in:
parent
819aa7a44e
commit
2d5f3d7652
@ -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 {
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user