From a656561073e5dceda24cde3bffda0bcb2dfb044a Mon Sep 17 00:00:00 2001 From: Matt Bruce Date: Thu, 9 May 2024 09:27:00 -0500 Subject: [PATCH] redfactored handlers to base Signed-off-by: Matt Bruce --- .../InputField/FieldTypes/CreditCard.swift | 9 ++- .../InputField/FieldTypes/Date.swift | 9 ++- .../InputField/FieldTypes/FieldType.swift | 72 +++++++++++++++++-- .../InputField/FieldTypes/InlineAction.swift | 8 +-- .../InputField/FieldTypes/Number.swift | 10 +-- .../InputField/FieldTypes/Password.swift | 8 +-- .../InputField/FieldTypes/SecurityCode.swift | 9 ++- .../InputField/FieldTypes/Telephone.swift | 10 +-- .../InputField/FieldTypes/Text.swift | 8 +-- .../TextFields/InputField/InputField.swift | 1 + 10 files changed, 99 insertions(+), 45 deletions(-) diff --git a/VDS/Components/TextFields/InputField/FieldTypes/CreditCard.swift b/VDS/Components/TextFields/InputField/FieldTypes/CreditCard.swift index 10dd99c4..36eeb5f7 100644 --- a/VDS/Components/TextFields/InputField/FieldTypes/CreditCard.swift +++ b/VDS/Components/TextFields/InputField/FieldTypes/CreditCard.swift @@ -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 diff --git a/VDS/Components/TextFields/InputField/FieldTypes/Date.swift b/VDS/Components/TextFields/InputField/FieldTypes/Date.swift index 44dba3ac..f8faf6dc 100644 --- a/VDS/Components/TextFields/InputField/FieldTypes/Date.swift +++ b/VDS/Components/TextFields/InputField/FieldTypes/Date.swift @@ -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 diff --git a/VDS/Components/TextFields/InputField/FieldTypes/FieldType.swift b/VDS/Components/TextFields/InputField/FieldTypes/FieldType.swift index f0a613ad..c936ca72 100644 --- a/VDS/Components/TextFields/InputField/FieldTypes/FieldType.swift +++ b/VDS/Components/TextFields/InputField/FieldTypes/FieldType.swift @@ -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 - } - } } diff --git a/VDS/Components/TextFields/InputField/FieldTypes/InlineAction.swift b/VDS/Components/TextFields/InputField/FieldTypes/InlineAction.swift index 11845e70..8f4beac2 100644 --- a/VDS/Components/TextFields/InputField/FieldTypes/InlineAction.swift +++ b/VDS/Components/TextFields/InputField/FieldTypes/InlineAction.swift @@ -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) {} } } diff --git a/VDS/Components/TextFields/InputField/FieldTypes/Number.swift b/VDS/Components/TextFields/InputField/FieldTypes/Number.swift index 0f274681..5961518e 100644 --- a/VDS/Components/TextFields/InputField/FieldTypes/Number.swift +++ b/VDS/Components/TextFields/InputField/FieldTypes/Number.swift @@ -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) {} } } diff --git a/VDS/Components/TextFields/InputField/FieldTypes/Password.swift b/VDS/Components/TextFields/InputField/FieldTypes/Password.swift index 00f7a2c4..d1e7b112 100644 --- a/VDS/Components/TextFields/InputField/FieldTypes/Password.swift +++ b/VDS/Components/TextFields/InputField/FieldTypes/Password.swift @@ -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) {} } } diff --git a/VDS/Components/TextFields/InputField/FieldTypes/SecurityCode.swift b/VDS/Components/TextFields/InputField/FieldTypes/SecurityCode.swift index 3ad802bd..b7f7ed2a 100644 --- a/VDS/Components/TextFields/InputField/FieldTypes/SecurityCode.swift +++ b/VDS/Components/TextFields/InputField/FieldTypes/SecurityCode.swift @@ -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) {} } } diff --git a/VDS/Components/TextFields/InputField/FieldTypes/Telephone.swift b/VDS/Components/TextFields/InputField/FieldTypes/Telephone.swift index bcbc882c..03dcc603 100644 --- a/VDS/Components/TextFields/InputField/FieldTypes/Telephone.swift +++ b/VDS/Components/TextFields/InputField/FieldTypes/Telephone.swift @@ -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 { } } + diff --git a/VDS/Components/TextFields/InputField/FieldTypes/Text.swift b/VDS/Components/TextFields/InputField/FieldTypes/Text.swift index 25715c9f..34662952 100644 --- a/VDS/Components/TextFields/InputField/FieldTypes/Text.swift +++ b/VDS/Components/TextFields/InputField/FieldTypes/Text.swift @@ -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) {} } } diff --git a/VDS/Components/TextFields/InputField/InputField.swift b/VDS/Components/TextFields/InputField/InputField.swift index 23b2bffa..8e3003f8 100644 --- a/VDS/Components/TextFields/InputField/InputField.swift +++ b/VDS/Components/TextFields/InputField/InputField.swift @@ -256,6 +256,7 @@ open class InputField: EntryFieldBase { } open func updateFieldType() { + fieldType.handler().configure(for: self) var minWidth: CGFloat = 40.0 var leftImageName: String?