Skip to content

Commit 4caaa7c

Browse files
committed
Rename function for reusability
1 parent 82c88ee commit 4caaa7c

File tree

7 files changed

+79
-79
lines changed

7 files changed

+79
-79
lines changed

WooCommerce/Classes/ViewRelated/Orders/Order Details/Address Edit/AddressFormViewModelProtocol.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -345,7 +345,7 @@ open class AddressFormViewModel: ObservableObject {
345345
/// Creates a view model to be used when selecting a country for primary fields
346346
///
347347
func createCountryViewModel() -> CountrySelectorViewModel {
348-
let selectedCountryBinding = Binding<AddressSelectorCommandProtocol?>(
348+
let selectedCountryBinding = Binding<AreaSelectorCommandProtocol?>(
349349
get: { self.fields.selectedCountry },
350350
set: { self.fields.selectedCountry = $0 as? Country}
351351
)
@@ -355,7 +355,7 @@ open class AddressFormViewModel: ObservableObject {
355355
/// Creates a view model to be used when selecting a state for primary fields
356356
///
357357
func createStateViewModel() -> StateSelectorViewModel {
358-
let selectedStateBinding = Binding<AddressSelectorCommandProtocol?>(
358+
let selectedStateBinding = Binding<AreaSelectorCommandProtocol?>(
359359
get: { self.fields.selectedState },
360360
set: { self.fields.selectedState = $0 as? StateOfACountry}
361361
)
@@ -368,7 +368,7 @@ open class AddressFormViewModel: ObservableObject {
368368
/// Creates a view model to be used when selecting a country for secondary fields
369369
///
370370
func createSecondaryCountryViewModel() -> CountrySelectorViewModel {
371-
let selectedCountryBinding = Binding<AddressSelectorCommandProtocol?>(
371+
let selectedCountryBinding = Binding<AreaSelectorCommandProtocol?>(
372372
get: { self.secondaryFields.selectedCountry },
373373
set: { self.secondaryFields.selectedCountry = $0 as? Country}
374374
)
@@ -378,7 +378,7 @@ open class AddressFormViewModel: ObservableObject {
378378
/// Creates a view model to be used when selecting a state for secondary fields
379379
///
380380
func createSecondaryStateViewModel() -> StateSelectorViewModel {
381-
let selectedStateBinding = Binding<AddressSelectorCommandProtocol?>(
381+
let selectedStateBinding = Binding<AreaSelectorCommandProtocol?>(
382382
get: { self.secondaryFields.selectedState },
383383
set: { self.secondaryFields.selectedState = $0 as? StateOfACountry}
384384
)

WooCommerce/Classes/ViewRelated/Orders/Order Details/Address Edit/AddressSelectorCommand.swift

Lines changed: 0 additions & 59 deletions
This file was deleted.
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
import Foundation
2+
import Yosemite
3+
import SwiftUI
4+
5+
protocol AreaSelectorCommandProtocol {
6+
var name: String { get }
7+
var code: String { get }
8+
}
9+
10+
extension Country: AreaSelectorCommandProtocol {}
11+
extension StateOfACountry: AreaSelectorCommandProtocol {}
12+
13+
final class AreaSelectorCommand: ObservableListSelectorCommand {
14+
/// Original array of areas
15+
///
16+
private let areas: [AreaSelectorCommandProtocol]
17+
18+
/// Data to display
19+
///
20+
@Published private(set) var data: [AreaSelectorCommandProtocol]
21+
22+
/// Current selected area
23+
///
24+
@Binding private(set) var selected: AreaSelectorCommandProtocol?
25+
26+
/// Navigation bar title
27+
///
28+
var navigationBarTitle: String? = ""
29+
30+
init(areas: [AreaSelectorCommandProtocol], selected: Binding<AreaSelectorCommandProtocol?>) {
31+
self.areas = areas
32+
self.data = areas
33+
self._selected = selected
34+
}
35+
36+
func handleSelectedChange(selected: AreaSelectorCommandProtocol, viewController: ViewController) {
37+
self.selected = selected
38+
viewController.navigationController?.popViewController(animated: true)
39+
}
40+
41+
func isSelected(model: AreaSelectorCommandProtocol) -> Bool {
42+
(model.code == selected?.code) && (model.name == selected?.name)
43+
}
44+
45+
func configureCell(cell: BasicTableViewCell, model: AreaSelectorCommandProtocol) {
46+
cell.textLabel?.text = model.name
47+
}
48+
49+
/// Filter available areas that contains a given search term.
50+
///
51+
func filterAreas(term: String) {
52+
guard term.isNotEmpty else {
53+
return data = areas
54+
}
55+
56+
// Trim the search term to remove newlines or whitespaces (e.g added from the keyboard predictive text) from both ends
57+
data = areas.filter { $0.name.localizedCaseInsensitiveContains(term.trim()) }
58+
}
59+
}

WooCommerce/Classes/ViewRelated/Orders/Order Details/Address Edit/CountrySelectorViewModel.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,13 @@ final class CountrySelectorViewModel: FilterListSelectorViewModelable, Observabl
99
/// Each update will trigger an update to the `command` that contains the country data.
1010
var searchTerm: String = "" {
1111
didSet {
12-
command.filterCountriesOrStates(term: searchTerm)
12+
command.filterAreas(term: searchTerm)
1313
}
1414
}
1515

1616
/// Command that powers the `ListSelector` view.
1717
///
18-
let command: AddressSelectorCommand
18+
let command: AreaSelectorCommand
1919

2020
/// Navigation title
2121
///
@@ -25,8 +25,8 @@ final class CountrySelectorViewModel: FilterListSelectorViewModelable, Observabl
2525
///
2626
let filterPlaceholder = Localization.placeholder
2727

28-
init(countries: [Country], selected: Binding<AddressSelectorCommandProtocol?>) {
29-
self.command = AddressSelectorCommand( countriesOrStates: countries, selected: selected)
28+
init(countries: [Country], selected: Binding<AreaSelectorCommandProtocol?>) {
29+
self.command = AreaSelectorCommand( areas: countries, selected: selected)
3030
}
3131
}
3232

WooCommerce/Classes/ViewRelated/Orders/Order Details/Address Edit/StateSelectorViewModel.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,13 @@ final class StateSelectorViewModel: FilterListSelectorViewModelable, ObservableO
1010
/// Each update will trigger an update to the `command` that contains the state data.
1111
var searchTerm: String = "" {
1212
didSet {
13-
command.filterCountriesOrStates(term: searchTerm)
13+
command.filterAreas(term: searchTerm)
1414
}
1515
}
1616

1717
/// Command that powers the `ListSelector` view.
1818
///
19-
let command: AddressSelectorCommand
19+
let command: AreaSelectorCommand
2020

2121
/// Navigation title
2222
///
@@ -26,8 +26,8 @@ final class StateSelectorViewModel: FilterListSelectorViewModelable, ObservableO
2626
///
2727
let filterPlaceholder = Localization.placeholder
2828

29-
init(states: [StateOfACountry], selected: Binding<AddressSelectorCommandProtocol?>) {
30-
self.command = AddressSelectorCommand(countriesOrStates: states, selected: selected)
29+
init(states: [StateOfACountry], selected: Binding<AreaSelectorCommandProtocol?>) {
30+
self.command = AreaSelectorCommand(areas: states, selected: selected)
3131
}
3232
}
3333

WooCommerce/WooCommerce.xcodeproj/project.pbxproj

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -594,7 +594,7 @@
594594
265C99E628B9CB8E005E6117 /* StoreInfoViewModifiers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 265C99E528B9CB8E005E6117 /* StoreInfoViewModifiers.swift */; };
595595
265D909D2446688C00D66F0F /* ProductCategoryViewModelBuilderTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 267CFE1824435A5500AF3A13 /* ProductCategoryViewModelBuilderTests.swift */; };
596596
2662D90626E1571900E25611 /* ListSelector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2662D90526E1571900E25611 /* ListSelector.swift */; };
597-
2662D90826E15D6E00E25611 /* AddressSelectorCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2662D90726E15D6E00E25611 /* AddressSelectorCommand.swift */; };
597+
2662D90826E15D6E00E25611 /* AreaSelectorCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2662D90726E15D6E00E25611 /* AreaSelectorCommand.swift */; };
598598
2662D90A26E16B3600E25611 /* FilterListSelector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2662D90926E16B3600E25611 /* FilterListSelector.swift */; };
599599
2664210126F3E1BB001FC5B4 /* ModalHostingPresentationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2664210026F3E1BB001FC5B4 /* ModalHostingPresentationController.swift */; };
600600
2664210326F40FB1001FC5B4 /* View+ScrollModifiers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2664210226F40FB1001FC5B4 /* View+ScrollModifiers.swift */; };
@@ -2614,7 +2614,7 @@
26142614
265C99E328B9C834005E6117 /* StoreInfoProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StoreInfoProvider.swift; sourceTree = "<group>"; };
26152615
265C99E528B9CB8E005E6117 /* StoreInfoViewModifiers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StoreInfoViewModifiers.swift; sourceTree = "<group>"; };
26162616
2662D90526E1571900E25611 /* ListSelector.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ListSelector.swift; sourceTree = "<group>"; };
2617-
2662D90726E15D6E00E25611 /* AddressSelectorCommand.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddressSelectorCommand.swift; sourceTree = "<group>"; };
2617+
2662D90726E15D6E00E25611 /* AreaSelectorCommand.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AreaSelectorCommand.swift; sourceTree = "<group>"; };
26182618
2662D90926E16B3600E25611 /* FilterListSelector.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FilterListSelector.swift; sourceTree = "<group>"; };
26192619
2664210026F3E1BB001FC5B4 /* ModalHostingPresentationController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ModalHostingPresentationController.swift; sourceTree = "<group>"; };
26202620
2664210226F40FB1001FC5B4 /* View+ScrollModifiers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "View+ScrollModifiers.swift"; sourceTree = "<group>"; };
@@ -6879,7 +6879,7 @@
68796879
AEC95D402774C5AE001571F5 /* AddressFormViewModelProtocol.swift */,
68806880
AEE2610E26E664CE00B142A0 /* EditOrderAddressFormViewModel.swift */,
68816881
2662D90926E16B3600E25611 /* FilterListSelector.swift */,
6882-
2662D90726E15D6E00E25611 /* AddressSelectorCommand.swift */,
6882+
2662D90726E15D6E00E25611 /* AreaSelectorCommand.swift */,
68836883
26C6E8DF26E2B7BD00C7BB0F /* CountrySelectorViewModel.swift */,
68846884
26C6E8E526E6B5F500C7BB0F /* StateSelectorViewModel.swift */,
68856885
);
@@ -10308,7 +10308,7 @@
1030810308
D831E2DC230E0558000037D0 /* Authentication.swift in Sources */,
1030910309
26DB7E3528636D2200506173 /* NonEditableOrderBanner.swift in Sources */,
1031010310
314DC4BF268D183600444C9E /* CardReaderSettingsKnownReaderStorage.swift in Sources */,
10311-
2662D90826E15D6E00E25611 /* CountrySelectorCommand.swift in Sources */,
10311+
2662D90826E15D6E00E25611 /* AreaSelectorCommand.swift in Sources */,
1031210312
02393069291A065000B2632F /* DomainRowView.swift in Sources */,
1031310313
024A543422BA6F8F00F4F38E /* DeveloperEmailChecker.swift in Sources */,
1031410314
02AB407C27827C9100929CF3 /* ChartPlaceholderView.swift in Sources */,

WooCommerce/WooCommerceTests/ViewRelated/Orders/Order Details/Addresses/CountrySelector/CountrySelectorViewModelTests.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,13 @@ import Combine
77
final class CountrySelectorViewModelTests: XCTestCase {
88

99
var subscriptions = Set<AnyCancellable>()
10-
var binding: Binding<AddressSelectorCommandProtocol?>!
10+
var binding: Binding<AreaSelectorCommandProtocol?>!
1111
var viewModel: CountrySelectorViewModel!
1212

1313
override func setUp () {
1414
super.setUp()
1515

16-
binding = Binding<AddressSelectorCommandProtocol?>(get: { nil }, set: { _ in })
16+
binding = Binding<AreaSelectorCommandProtocol?>(get: { nil }, set: { _ in })
1717
viewModel = CountrySelectorViewModel(countries: Self.sampleCountries, selected: binding)
1818
}
1919

@@ -105,7 +105,7 @@ final class CountrySelectorViewModelTests: XCTestCase {
105105

106106
func test_providing_a_selected_country_is_reflected_on_command() {
107107
// Given
108-
let binding = Binding<AddressSelectorCommandProtocol?>(get: { Self.sampleCountries[0]}, set: { _ in })
108+
let binding = Binding<AreaSelectorCommandProtocol?>(get: { Self.sampleCountries[0]}, set: { _ in })
109109

110110
// When
111111
let viewModel = CountrySelectorViewModel(countries: Self.sampleCountries, selected: binding)
@@ -118,7 +118,7 @@ final class CountrySelectorViewModelTests: XCTestCase {
118118
// Given
119119
let expectedCountry = Self.sampleCountries[0]
120120
var selectedCountry: Country? = nil
121-
let binding = Binding<AddressSelectorCommandProtocol?>(get: { selectedCountry }, set: { selectedCountry = $0 as? Country})
121+
let binding = Binding<AreaSelectorCommandProtocol?>(get: { selectedCountry }, set: { selectedCountry = $0 as? Country})
122122
let viewModel = CountrySelectorViewModel(countries: Self.sampleCountries, selected: binding)
123123

124124
// When

0 commit comments

Comments
 (0)