redfactored handlers to base

Signed-off-by: Matt Bruce <matt.bruce@verizon.com>
This commit is contained in:
Matt Bruce 2024-05-09 09:27:00 -05:00
parent 14c578edbd
commit a656561073
10 changed files with 99 additions and 45 deletions

View File

@ -75,18 +75,17 @@ extension InputField {
}
}
class CreditCardHandler: NSObject, FieldTypeHandler {
class CreditCardHandler: BaseFieldType {
static let shared = CreditCardHandler()
var keyboardType: UIKeyboardType { .numberPad }
private override init() {
super.init()
self.keyboardType = .numberPad
}
func configure(for inputField: InputField) {}
override func configure(for inputField: InputField) {}
func appendRules(for inputField: InputField) {
override func appendRules(for inputField: InputField) {
if let text = inputField.textField.text, text.count > 0 {
let rule = CharacterCountRule().copyWith {
$0.maxLength = inputField.creditCardType.maxLength

View File

@ -10,18 +10,17 @@ import UIKit
extension InputField {
class DateHandler: NSObject, FieldTypeHandler {
class DateHandler: BaseFieldType {
static let shared = DateHandler()
var keyboardType: UIKeyboardType { .numberPad }
private override init() {
super.init()
self.keyboardType = .numberPad
}
func configure(for inputField: InputField) {}
override func configure(for inputField: InputField) {}
func appendRules(for inputField: InputField) {
override func appendRules(for inputField: InputField) {
if let text = inputField.textField.text, text.count > 0 {
let rule = CharacterCountRule().copyWith {
$0.maxLength = inputField.dateFormat.maxLength

View File

@ -7,14 +7,81 @@
import Foundation
import UIKit
import VDSTokens
extension InputField {
protocol FieldTypeHandler: UITextFieldDelegate {
var keyboardType: UIKeyboardType { get }
var minWidth: CGFloat { get set }
var leftImageName: String? { get set }
var actionModel: InputField.TextLinkModel? { get set }
var toolTipModel: Tooltip.TooltipModel? { get set }
var isSecureTextEntry: Bool { get set }
var placeholderText: String? { get set }
func configure(for inputField: InputField)
func appendRules(for inputField: InputField)
}
class BaseFieldType: NSObject, FieldTypeHandler {
var keyboardType: UIKeyboardType
var minWidth: CGFloat = 40.0
var leftImageName: String?
var actionModel: InputField.TextLinkModel?
var toolTipModel: Tooltip.TooltipModel?
var isSecureTextEntry = false
var placeholderText: String?
internal override init() {
keyboardType = .default
super.init()
}
func configure(for inputField: InputField) {
//textField
inputField.textField.isSecureTextEntry = isSecureTextEntry
//leftIcon
if let leftImageName {
inputField.leftImageView.image = BundleManager.shared.image(for: leftImageName)?.withTintColor(inputField.iconColorConfiguration.getColor(inputField))
}
inputField.leftImageView.isHidden = leftImageName == nil
//actionLink
inputField.actionTextLink.surface = inputField.surface
if let actionModel {
inputField.actionTextLink.text = actionModel.text
inputField.actionTextLink.onClick = actionModel.onClick
inputField.actionTextLink.isHidden = false
inputField.containerStackView.setCustomSpacing(VDSLayout.space2X, after: inputField.statusIcon)
} else {
inputField.actionTextLink.isHidden = true
inputField.containerStackView.setCustomSpacing(0, after: inputField.statusIcon)
}
//set the width constraints
if let width = inputField.width, width > minWidth {
inputField.widthConstraint?.constant = width
inputField.widthConstraint?.isActive = true
inputField.minWidthConstraint?.isActive = false
} else {
inputField.minWidthConstraint?.constant = minWidth
inputField.widthConstraint?.isActive = false
inputField.minWidthConstraint?.isActive = true
}
//placeholder
inputField.textField.placeholder = placeholderText
//tooltip
inputField.tooltipModel = toolTipModel
}
func appendRules(for inputField: InputField) {}
}
public enum FieldType: String, CaseIterable {
case text, number, inlineAction, password, creditCard, telephone, date, securityCode
@ -38,10 +105,5 @@ extension InputField {
return SecurityCodeHandler.shared
}
}
internal var keyboardType: UIKeyboardType {
handler().keyboardType
}
}
}

View File

@ -10,18 +10,16 @@ import UIKit
extension InputField {
class InlineActionHandler: NSObject, FieldTypeHandler {
class InlineActionHandler: BaseFieldType {
static let shared = InlineActionHandler()
var keyboardType: UIKeyboardType { .default }
private override init() {
super.init()
}
func configure(for inputField: InputField) {}
override func configure(for inputField: InputField) {}
func appendRules(for inputField: InputField) {}
override func appendRules(for inputField: InputField) {}
}
}

View File

@ -10,18 +10,18 @@ import UIKit
extension InputField {
class NumberHandler: NSObject, FieldTypeHandler {
class NumberHandler: BaseFieldType {
static let shared = NumberHandler()
var keyboardType: UIKeyboardType { .numberPad }
private override init() {
super.init()
self.keyboardType = .numberPad
}
func configure(for inputField: InputField) {}
override func configure(for inputField: InputField) {}
override func appendRules(for inputField: InputField) {}
func appendRules(for inputField: InputField) {}
}
}

View File

@ -18,18 +18,16 @@ extension InputField {
}
}
class PasswordHandler: NSObject, FieldTypeHandler {
class PasswordHandler: BaseFieldType {
static let shared = PasswordHandler()
var keyboardType: UIKeyboardType { .default }
private override init() {
super.init()
}
func configure(for inputField: InputField) {}
override func configure(for inputField: InputField) {}
func appendRules(for inputField: InputField) {}
override func appendRules(for inputField: InputField) {}
}
}

View File

@ -10,18 +10,17 @@ import UIKit
extension InputField {
class SecurityCodeHandler: NSObject, FieldTypeHandler {
class SecurityCodeHandler: BaseFieldType {
static let shared = SecurityCodeHandler()
var keyboardType: UIKeyboardType { .numberPad }
private override init() {
super.init()
self.keyboardType = .numberPad
}
func configure(for inputField: InputField) {}
override func configure(for inputField: InputField) {}
func appendRules(for inputField: InputField) {}
override func appendRules(for inputField: InputField) {}
}
}

View File

@ -41,18 +41,17 @@ extension InputField {
return formattedNumber
}
class TelephoneHandler: NSObject, FieldTypeHandler {
class TelephoneHandler: BaseFieldType {
static let shared = TelephoneHandler()
var keyboardType: UIKeyboardType { .phonePad }
private override init() {
super.init()
self.keyboardType = .phonePad
}
func configure(for inputField: InputField) {}
override func configure(for inputField: InputField) {}
func appendRules(for inputField: InputField) {
override func appendRules(for inputField: InputField) {
if let text = inputField.textField.text, text.count > 0 {
let rule = CharacterCountRule().copyWith {
$0.maxLength = "XXX-XXX-XXXX".count
@ -65,3 +64,4 @@ extension InputField {
}
}

View File

@ -9,17 +9,15 @@ import Foundation
import UIKit
extension InputField {
class TextHandler: NSObject, FieldTypeHandler {
class TextHandler: BaseFieldType {
static let shared = TextHandler()
var keyboardType: UIKeyboardType { .default }
private override init() {
super.init()
}
func configure(for inputField: InputField) {}
override func configure(for inputField: InputField) {}
func appendRules(for inputField: InputField) {}
override func appendRules(for inputField: InputField) {}
}
}

View File

@ -256,6 +256,7 @@ open class InputField: EntryFieldBase {
}
open func updateFieldType() {
fieldType.handler().configure(for: self)
var minWidth: CGFloat = 40.0
var leftImageName: String?