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)
|
self?.sendActions(for: .valueChanged)
|
||||||
}.store(in: &subscribers)
|
}.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.addArrangedSubview(successLabel)
|
||||||
stackView.setCustomSpacing(8, after: successLabel)
|
stackView.setCustomSpacing(8, after: successLabel)
|
||||||
|
|
||||||
@ -332,12 +310,6 @@ open class InputField: EntryFieldBase {
|
|||||||
case .date:
|
case .date:
|
||||||
minWidth = 114.0
|
minWidth = 114.0
|
||||||
placeholderText = dateFormat.placeholderText
|
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:
|
case .securityCode:
|
||||||
minWidth = 88.0
|
minWidth = 88.0
|
||||||
isSecureTextEntry = true
|
isSecureTextEntry = true
|
||||||
@ -390,7 +362,7 @@ open class InputField: EntryFieldBase {
|
|||||||
case .creditCard:
|
case .creditCard:
|
||||||
if let text = textField.text, text.count > 0 {
|
if let text = textField.text, text.count > 0 {
|
||||||
let rule = CharacterCountRule().copyWith {
|
let rule = CharacterCountRule().copyWith {
|
||||||
$0.maxLength = "XXXX XXXX XXXX XXXX".count
|
$0.maxLength = creditCardMaxLength
|
||||||
$0.compareType = .equals
|
$0.compareType = .equals
|
||||||
$0.errorMessage = "Enter a valid credit card."
|
$0.errorMessage = "Enter a valid credit card."
|
||||||
}
|
}
|
||||||
@ -498,7 +470,6 @@ open class InputField: EntryFieldBase {
|
|||||||
//---------------------------------------------------
|
//---------------------------------------------------
|
||||||
// MARK: - Credit Card
|
// MARK: - Credit Card
|
||||||
//---------------------------------------------------
|
//---------------------------------------------------
|
||||||
private var isCreditCardMasked: Bool = false
|
|
||||||
private var creditCardRawNumber: String = ""
|
private var creditCardRawNumber: String = ""
|
||||||
private var creditCardMaxLength = 16
|
private var creditCardMaxLength = 16
|
||||||
|
|
||||||
@ -527,7 +498,7 @@ open class InputField: EntryFieldBase {
|
|||||||
private func maskCreditCardNumber(_ number: String) -> String {
|
private func maskCreditCardNumber(_ number: String) -> String {
|
||||||
// Mask the first 12 characters if the length is 16
|
// Mask the first 12 characters if the length is 16
|
||||||
let rawNumber = number.filter { $0.isNumber }
|
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 lastFourDigits = rawNumber.suffix(4)
|
||||||
let maskedSection = String(repeating: "•", count: 12)
|
let maskedSection = String(repeating: "•", count: 12)
|
||||||
let formattedMaskSection = formatCreditCardNumber(maskedSection)
|
let formattedMaskSection = formatCreditCardNumber(maskedSection)
|
||||||
@ -592,6 +563,18 @@ open class InputField: EntryFieldBase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
extension InputField: UITextFieldDelegate {
|
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 {
|
public func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user