Skip to content

Commit ce29d60

Browse files
committed
Local validation on value changes
1 parent 22b57b6 commit ce29d60

File tree

2 files changed

+17
-10
lines changed

2 files changed

+17
-10
lines changed

WooCommerce/Classes/ViewRelated/Orders/Order Details/Shipping Labels/Create Shipping Label Form/Shipping Address Validation/ShippingLabelAddressFormViewController.swift

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -142,16 +142,20 @@ private extension ShippingLabelAddressFormViewController {
142142
}
143143

144144
func registerTableViewCells() {
145-
tableView.registerNib(for: TitleAndTextFieldTableViewCell.self)
146-
tableView.registerNib(for: BasicTableViewCell.self)
145+
tableView.registerNib(for: TitleAndTextFieldTableViewCell.self)
146+
tableView.registerNib(for: BasicTableViewCell.self)
147147
}
148148

149149
func observeViewModel() {
150-
viewModel.onChange = { [weak self] in
150+
viewModel.onChange = { [weak self] focusedIndex in
151151
guard let self = self else { return }
152152
self.configureNavigationBar()
153153
self.updateTopBannerView()
154154
self.tableView.reloadData()
155+
if let index = focusedIndex,
156+
let cell = self.tableView.cellForRow(at: IndexPath(row: index, section: 0)) as? TitleAndTextFieldTableViewCell {
157+
cell.textFieldBecomeFirstResponder()
158+
}
155159
}
156160
}
157161

@@ -459,8 +463,7 @@ private extension ShippingLabelAddressFormViewController {
459463
placeholder: placeholder,
460464
state: .normal,
461465
keyboardType: .default,
462-
textFieldAlignment: .leading) { _ in
463-
}
466+
textFieldAlignment: .leading) { _ in }
464467
cell.configure(viewModel: cellViewModel)
465468
cell.enableTextField(viewModel.statesOfSelectedCountry.isEmpty)
466469
}
@@ -471,8 +474,7 @@ private extension ShippingLabelAddressFormViewController {
471474
placeholder: Localization.countryFieldPlaceholder,
472475
state: .normal,
473476
keyboardType: .default,
474-
textFieldAlignment: .leading) { _ in
475-
}
477+
textFieldAlignment: .leading) { _ in }
476478
cell.configure(viewModel: cellViewModel)
477479
cell.enableTextField(false)
478480
}

WooCommerce/Classes/ViewRelated/Orders/Order Details/Shipping Labels/Create Shipping Label Form/Shipping Address Validation/ShippingLabelAddressFormViewModel.swift

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,15 +25,16 @@ final class ShippingLabelAddressFormViewModel {
2525
private let stores: StoresManager
2626

2727
/// Closure to notify the `ViewController` when the view model properties change.
28+
/// Accepts optional index for row to be focused after reloading the table view.
2829
///
29-
var onChange: (() -> (Void))?
30+
var onChange: ((_ focusedRowIndex: Int?) -> (Void))?
3031

3132
/// Current `ViewModel` state.
3233
///
3334
private var state: State = State() {
3435
didSet {
3536
updateSections()
36-
onChange?()
37+
onChange?(nil)
3738
}
3839
}
3940

@@ -106,10 +107,14 @@ final class ShippingLabelAddressFormViewModel {
106107
case .state:
107108
address = address?.copy(state: newValue)
108109
case .country:
109-
address = address?.copy(country: newValue)
110+
address = address?.copy(country: newValue, state: "")
110111
default:
111112
return
112113
}
114+
115+
updateSections()
116+
let index: Int? = sections.first?.rows.firstIndex(where: { $0 == row })
117+
onChange?(index)
113118
}
114119

115120
func updateSections() {

0 commit comments

Comments
 (0)