Skip to content

Commit c2e5c51

Browse files
committed
Implemented UnitInputFormatter in TextFieldTableViewCell
1 parent 2f7d95e commit c2e5c51

File tree

4 files changed

+23
-4
lines changed

4 files changed

+23
-4
lines changed

WooCommerce/Classes/ViewRelated/Products/Edit Product/Product Settings/Menu Order/ProductMenuOrderViewController.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,9 +139,10 @@ private extension ProductMenuOrderViewController {
139139
}
140140
}, onTextDidBeginEditing: {
141141
//TODO: Add analytics track
142-
})
142+
}, inputFormatter: IntegerInputFormatter())
143143
cell.configure(viewModel: viewModel)
144144
cell.textField.applyBodyStyle()
145+
cell.textField.keyboardType = .decimalPad
145146
}
146147
}
147148

WooCommerce/Classes/ViewRelated/Products/Edit Product/Product Settings/Slug/ProductSlugViewController.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ private extension ProductSlugViewController {
148148
}
149149
}, onTextDidBeginEditing: {
150150
//TODO: Add analytics track
151-
})
151+
}, inputFormatter: nil)
152152
cell.configure(viewModel: viewModel)
153153
cell.textField.applyBodyStyle()
154154
}

WooCommerce/Classes/ViewRelated/Products/Edit Product/ProductFormTableViewDataSource.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ private extension ProductFormTableViewDataSource {
128128
self?.onNameChange?(newName)
129129
}, onTextDidBeginEditing: {
130130
ServiceLocator.analytics.track(.productDetailViewProductNameTapped)
131-
})
131+
}, inputFormatter: nil)
132132
cell.configure(viewModel: viewModel)
133133
}
134134

WooCommerce/Classes/ViewRelated/ReusableViews/TextFieldTableViewCell.swift

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,12 @@ final class TextFieldTableViewCell: UITableViewCell {
88
let placeholder: String?
99
let onTextChange: ((_ text: String?) -> Void)?
1010
let onTextDidBeginEditing: (() -> Void)?
11+
let inputFormatter: UnitInputFormatter?
1112
}
1213

1314
@IBOutlet weak var textField: UITextField!
1415

16+
private var viewModel: ViewModel?
1517
private var onTextChange: ((_ text: String?) -> Void)?
1618
private var onTextDidBeginEditing: (() -> Void)?
1719

@@ -24,6 +26,7 @@ final class TextFieldTableViewCell: UITableViewCell {
2426
}
2527

2628
func configure(viewModel: ViewModel) {
29+
self.viewModel = viewModel
2730
onTextChange = viewModel.onTextChange
2831
onTextDidBeginEditing = viewModel.onTextDidBeginEditing
2932

@@ -45,7 +48,9 @@ private extension TextFieldTableViewCell {
4548

4649
private extension TextFieldTableViewCell {
4750
@objc func textFieldDidChange(textField: UITextField) {
48-
onTextChange?(textField.text)
51+
let formattedText = viewModel?.inputFormatter?.format(input: textField.text) ?? textField.text
52+
textField.text = formattedText
53+
onTextChange?(formattedText)
4954
}
5055

5156
@objc func textFieldDidBegin(textField: UITextField) {
@@ -54,6 +59,19 @@ private extension TextFieldTableViewCell {
5459
}
5560

5661
extension TextFieldTableViewCell: UITextFieldDelegate {
62+
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
63+
guard let text = textField.text,
64+
let textRange = Range(range, in: text) else {
65+
return false
66+
}
67+
let updatedText = text.replacingCharacters(in: textRange,
68+
with: string)
69+
guard let isValid = viewModel?.inputFormatter?.isValid(input: updatedText) else {
70+
return true
71+
}
72+
return isValid == true
73+
}
74+
5775
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
5876
textField.resignFirstResponder()
5977
return true

0 commit comments

Comments
 (0)