Skip to content

Commit 7962628

Browse files
committed
Revert changes made to PaginatedListSelectorViewController
1 parent 58de948 commit 7962628

File tree

10 files changed

+43
-43
lines changed

10 files changed

+43
-43
lines changed

WooCommerce/Classes/ViewRelated/ListSelector/PaginatedListSelectorViewController.swift

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,26 +8,26 @@ import class AutomatticTracks.CrashLogging
88
/// A generic data source for the paginated list selector UI `PaginatedListSelectorViewController`.
99
///
1010
protocol PaginatedListSelectorDataSource {
11-
associatedtype StorageModel: ResultsControllerMutableType & ListItemConvertible
11+
associatedtype StorageModel: ResultsControllerMutableType & ReadOnlyConvertible
1212
associatedtype Cell: UITableViewCell
1313

1414
/// Optional custom sorting strategy for storage models in the paginated list. Default is `nil`.
15-
var customResultsSortOrder: ((StorageModel.ListItemType, StorageModel.ListItemType) -> Bool)? { get }
15+
var customResultsSortOrder: ((StorageModel.ReadOnlyType, StorageModel.ReadOnlyType) -> Bool)? { get }
1616

1717
/// The model that is currently selected in the list.
18-
var selected: StorageModel.ListItemType? { get }
18+
var selected: StorageModel.ReadOnlyType? { get }
1919

2020
/// Creates a results controller that defines the data to fetch.
2121
func createResultsController() -> ResultsController<StorageModel>
2222

2323
/// Called when a different model is selected.
24-
mutating func handleSelectedChange(selected: StorageModel.ListItemType)
24+
mutating func handleSelectedChange(selected: StorageModel.ReadOnlyType)
2525

2626
/// Configures the selected UI.
27-
func isSelected(model: StorageModel.ListItemType) -> Bool
27+
func isSelected(model: StorageModel.ReadOnlyType) -> Bool
2828

2929
/// Configures the cell with the given model.
30-
func configureCell(cell: Cell, model: StorageModel.ListItemType)
30+
func configureCell(cell: Cell, model: StorageModel.ReadOnlyType)
3131

3232
/// Called when the UI is requesting to sync another page of data.
3333
/// - Parameters:
@@ -56,7 +56,7 @@ extension PaginatedListSelectorDataSource {
5656
final class PaginatedListSelectorViewController<DataSource: PaginatedListSelectorDataSource, Model, StorageModel, Cell>: UIViewController,
5757
UITableViewDataSource, UITableViewDelegate, UITableViewDragDelegate, PaginationTrackerDelegate, GhostableViewController
5858
where DataSource.StorageModel == StorageModel,
59-
Model == DataSource.StorageModel.ListItemType,
59+
Model == DataSource.StorageModel.ReadOnlyType,
6060
Model: Equatable,
6161
DataSource.Cell == Cell {
6262
private let viewProperties: PaginatedListSelectorViewProperties
@@ -199,9 +199,9 @@ where DataSource.StorageModel == StorageModel,
199199

200200
private func object(at indexPath: IndexPath) -> Model {
201201
guard let customResultsSortOrder = dataSource.customResultsSortOrder else {
202-
return resultsController.listItem(at: indexPath)
202+
return resultsController.object(at: indexPath)
203203
}
204-
let objects = resultsController.listItemObjects(in: indexPath.section)
204+
let objects = resultsController.sections[indexPath.section].objects
205205
.sorted(by: { (lhs, rhs) -> Bool in
206206
return customResultsSortOrder(lhs, rhs)
207207
})
@@ -218,7 +218,7 @@ where DataSource.StorageModel == StorageModel,
218218
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
219219
tableView.deselectRow(at: indexPath, animated: true)
220220

221-
let selected = resultsController.listItem(at: indexPath)
221+
let selected = resultsController.object(at: indexPath)
222222
dataSource.handleSelectedChange(selected: selected)
223223
tableView.reloadData()
224224
}

WooCommerce/Classes/ViewRelated/Products/Edit Product/Linked Products List Selector/LinkedProductListSelectorDataSource.swift

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import Yosemite
77
final class LinkedProductListSelectorDataSource: PaginatedListSelectorDataSource {
88
typealias StorageModel = StorageProduct
99

10-
lazy var customResultsSortOrder: ((ProductListItem, ProductListItem) -> Bool)? = { [weak self] (lhs, rhs) in
10+
lazy var customResultsSortOrder: ((Product, Product) -> Bool)? = { [weak self] (lhs, rhs) in
1111
guard let self = self else {
1212
return true
1313
}
@@ -36,14 +36,14 @@ final class LinkedProductListSelectorDataSource: PaginatedListSelectorDataSource
3636
}
3737

3838
// Not used: a product's linked product list is not selectable in this use case.
39-
var selected: ProductListItem?
39+
var selected: Product?
4040

4141
private let siteID: Int64
42-
private let product: ProductListItem
42+
private let product: Product
4343
private let imageService: ImageService
4444
private let trackingContext: String
4545

46-
init(product: ProductListItem,
46+
init(product: Product,
4747
linkedProductIDs: [Int64],
4848
imageService: ImageService = ServiceLocator.imageService,
4949
trackingContext: String) {
@@ -63,18 +63,18 @@ final class LinkedProductListSelectorDataSource: PaginatedListSelectorDataSource
6363
sortOrder: .nameAscending)
6464
}
6565

66-
func handleSelectedChange(selected: ProductListItem) {
66+
func handleSelectedChange(selected: Product) {
6767
// no-op: a product's linked product list is not selectable in this use case.
6868
}
6969

70-
func isSelected(model: ProductListItem) -> Bool {
70+
func isSelected(model: Product) -> Bool {
7171
return model == selected
7272
}
7373

74-
func configureCell(cell: ProductsTabProductTableViewCell, model: ProductListItem) {
74+
func configureCell(cell: ProductsTabProductTableViewCell, model: Product) {
7575
cell.selectionStyle = .none
7676

77-
let viewModel = ProductsTabProductViewModel(product: model, isDraggable: true)
77+
let viewModel = ProductsTabProductViewModel(product: model.toListItem(), isDraggable: true)
7878
cell.update(viewModel: viewModel, imageService: imageService)
7979

8080
cell.configureAccessoryDeleteButton { [weak self] in
@@ -105,7 +105,7 @@ final class LinkedProductListSelectorDataSource: PaginatedListSelectorDataSource
105105
//
106106
extension LinkedProductListSelectorDataSource {
107107
/// Called when the user deletes a product from the product list.
108-
func deleteProduct(_ product: ProductListItem) {
108+
func deleteProduct(_ product: Product) {
109109
guard let index = linkedProductIDs.firstIndex(where: { $0 == product.productID }) else {
110110
return
111111
}

WooCommerce/Classes/ViewRelated/Products/Edit Product/Linked Products List Selector/LinkedProductsListSelectorViewController.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ final class LinkedProductsListSelectorViewController: UIViewController {
1919
private let dataSource: LinkedProductListSelectorDataSource
2020

2121
private lazy var paginatedListSelector: PaginatedListSelectorViewController
22-
<LinkedProductListSelectorDataSource, ProductListItem, StorageProduct, ProductsTabProductTableViewCell> = {
22+
<LinkedProductListSelectorDataSource, Product, StorageProduct, ProductsTabProductTableViewCell> = {
2323
let viewProperties = PaginatedListSelectorViewProperties(navigationBarTitle: nil,
2424
noResultsPlaceholderText: Localization.noResultsPlaceholder,
2525
noResultsPlaceholderImage: .groupedProductsImage,
@@ -36,7 +36,7 @@ final class LinkedProductsListSelectorViewController: UIViewController {
3636
typealias Completion = (_ linkedProductIDs: [Int64]) -> Void
3737
private let onCompletion: Completion
3838

39-
init(product: ProductListItem,
39+
init(product: Product,
4040
linkedProductIDs: [Int64],
4141
imageService: ImageService = ServiceLocator.imageService,
4242
viewConfiguration: ViewConfiguration,

WooCommerce/Classes/ViewRelated/Products/Edit Product/Linked Products List Selector/ProductListSelector/ProductListMultiSelectorDataSource.swift

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import Yosemite
44

55
/// Enables the user to select multiple products from a paginated list.
66
final class ProductListMultiSelectorDataSource: PaginatedListSelectorDataSource {
7-
var customResultsSortOrder: ((ProductListItem, ProductListItem) -> Bool)?
7+
var customResultsSortOrder: ((Product, Product) -> Bool)?
88

99
typealias StorageModel = StorageProduct
1010

@@ -15,7 +15,7 @@ final class ProductListMultiSelectorDataSource: PaginatedListSelectorDataSource
1515
private let productIDsSubject: PassthroughSubject<[Int64], Never> = PassthroughSubject<[Int64], Never>()
1616

1717
// Not used: since multiple products can be selected in this use case, the single selected product is not used.
18-
var selected: ProductListItem?
18+
var selected: Product?
1919

2020
private let siteID: Int64
2121
private let excludedProductIDs: [Int64]
@@ -42,22 +42,22 @@ final class ProductListMultiSelectorDataSource: PaginatedListSelectorDataSource
4242
sortOrder: .nameAscending)
4343
}
4444

45-
func handleSelectedChange(selected: ProductListItem) {
45+
func handleSelectedChange(selected: Product) {
4646
if isProductSelected(selected) {
4747
selectedProductIDs.removeAll { $0 == selected.productID }
4848
} else {
4949
selectedProductIDs.append(selected.productID)
5050
}
5151
}
5252

53-
func isSelected(model: ProductListItem) -> Bool {
53+
func isSelected(model: Product) -> Bool {
5454
return isProductSelected(model)
5555
}
5656

57-
func configureCell(cell: ProductsTabProductTableViewCell, model: ProductListItem) {
57+
func configureCell(cell: ProductsTabProductTableViewCell, model: Product) {
5858
cell.selectionStyle = .default
5959

60-
let viewModel = ProductsTabProductViewModel(product: model, isSelected: isSelected(model: model))
60+
let viewModel = ProductsTabProductViewModel(product: model.toListItem(), isSelected: isSelected(model: model))
6161
cell.update(viewModel: viewModel, imageService: imageService)
6262
}
6363

@@ -93,7 +93,7 @@ extension ProductListMultiSelectorDataSource {
9393
}
9494

9595
private extension ProductListMultiSelectorDataSource {
96-
func isProductSelected(_ product: ProductListItem) -> Bool {
96+
func isProductSelected(_ product: Product) -> Bool {
9797
return selectedProductIDs.contains(product.productID)
9898
}
9999
}

WooCommerce/Classes/ViewRelated/Products/Edit Product/Linked Products List Selector/ProductListSelector/ProductListSelectorViewController.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ final class ProductListSelectorViewController: UIViewController {
2020
private lazy var dataSource = ProductListMultiSelectorDataSource(siteID: siteID, excludedProductIDs: excludedProductIDs)
2121

2222
private lazy var paginatedListSelector: PaginatedListSelectorViewController
23-
<ProductListMultiSelectorDataSource, ProductListItem, StorageProduct, ProductsTabProductTableViewCell> = {
23+
<ProductListMultiSelectorDataSource, Product, StorageProduct, ProductsTabProductTableViewCell> = {
2424
let viewProperties = PaginatedListSelectorViewProperties(navigationBarTitle: nil,
2525
noResultsPlaceholderText: Localization.noResultsPlaceholder,
2626
noResultsPlaceholderImage: .emptyProductsImage,

WooCommerce/Classes/ViewRelated/Products/Edit Product/Linked Products/LinkedProductsViewController.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ private extension LinkedProductsViewController {
155155
let viewConfiguration = LinkedProductsListSelectorViewController.ViewConfiguration(title: Localization.titleScreenAddUpsellProducts,
156156
trackingContext: "upsells")
157157

158-
let viewController = LinkedProductsListSelectorViewController(product: product.product.toListItem(),
158+
let viewController = LinkedProductsListSelectorViewController(product: product.product,
159159
linkedProductIDs: viewModel.upsellIDs,
160160
viewConfiguration: viewConfiguration) { [weak self] upsellIDs in
161161
self?.viewModel.handleUpsellIDsChange(upsellIDs)
@@ -178,7 +178,7 @@ private extension LinkedProductsViewController {
178178
let viewConfiguration = LinkedProductsListSelectorViewController.ViewConfiguration(title: Localization.titleScreenAddCrossSellProducts,
179179
trackingContext: "cross_sells")
180180

181-
let viewController = LinkedProductsListSelectorViewController(product: product.product.toListItem(),
181+
let viewController = LinkedProductsListSelectorViewController(product: product.product,
182182
linkedProductIDs: viewModel.crossSellIDs,
183183
viewConfiguration: viewConfiguration) { [weak self] crossSellIDs in
184184
self?.viewModel.handleCrossSellIDsChange(crossSellIDs)

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1875,7 +1875,7 @@ private extension ProductFormViewController {
18751875
let viewConfiguration = LinkedProductsListSelectorViewController.ViewConfiguration(title: Localization.groupedProductsViewTitle,
18761876
trackingContext: "grouped_products")
18771877

1878-
let viewController = LinkedProductsListSelectorViewController(product: product.product.toListItem(),
1878+
let viewController = LinkedProductsListSelectorViewController(product: product.product,
18791879
linkedProductIDs: product.product.groupedProducts,
18801880
viewConfiguration: viewConfiguration) { [weak self] groupedProductIDs in
18811881
self?.onEditGroupedProductsCompletion(groupedProductIDs: groupedProductIDs)

WooCommerce/Classes/ViewRelated/Products/View Models/String+ProductStock.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ extension String {
99
stockStatus: ProductStockStatus,
1010
stockQuantity: Decimal?,
1111
bundleStockStatus: ProductStockStatus?,
12-
bundleStockQuantity: Int64?,) -> String {
12+
bundleStockQuantity: Int64?) -> String {
1313
if productType == .bundle {
1414
return createProductBundleStockText(manageStock: manageStock,
1515
productStockStatus: stockStatus,

WooCommerce/WooCommerceTests/ViewRelated/ListSelector/ProductListMultiSelectorDataSourceTests.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ final class ProductListMultiSelectorDataSourceTests: XCTestCase {
5656
}
5757

5858
// Action
59-
let product = ProductListItem.fake().copy(productID: 17)
59+
let product = Product.fake().copy(productID: 17)
6060
dataSource.handleSelectedChange(selected: product)
6161
dataSource.handleSelectedChange(selected: product)
6262

@@ -71,7 +71,7 @@ final class ProductListMultiSelectorDataSourceTests: XCTestCase {
7171
// Arrange
7272
let siteID: Int64 = 1
7373
let dataSource = ProductListMultiSelectorDataSource(siteID: siteID, excludedProductIDs: [])
74-
let product = ProductListItem.fake().copy(productID: 17)
74+
let product = Product.fake().copy(productID: 17)
7575
XCTAssertFalse(dataSource.isSelected(model: product))
7676

7777
// Action - step 1: select product

WooCommerce/WooCommerceTests/ViewRelated/Products/Edit Product/Linked Products List Selector/LinkedProductListSelectorDataSourceTests.swift

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ final class LinkedProductListSelectorDataSourceTests: XCTestCase {
1818
func test_adding_preselected_products_should_result_in_no_changes() {
1919
// Arrange
2020
let preselectedProductIDs: [Int64] = [17, 671]
21-
let product = ProductListItem.fake()
21+
let product = Product.fake()
2222
let dataSource = LinkedProductListSelectorDataSource(product: product,
2323
linkedProductIDs: preselectedProductIDs,
2424
trackingContext: "test_context")
@@ -39,7 +39,7 @@ final class LinkedProductListSelectorDataSourceTests: XCTestCase {
3939
func test_adding_a_mix_of_preselected_and_new_products_should_append_new_products_to_linked_products() {
4040
// Arrange
4141
let preselectedProductIDs: [Int64] = [17, 671]
42-
let product = ProductListItem.fake()
42+
let product = Product.fake()
4343
let dataSource = LinkedProductListSelectorDataSource(product: product,
4444
linkedProductIDs: preselectedProductIDs,
4545
trackingContext: "test_context")
@@ -64,7 +64,7 @@ final class LinkedProductListSelectorDataSourceTests: XCTestCase {
6464
func test_deleting_a_preselected_product_removes_it_from_linked_products() {
6565
// Arrange
6666
let preselectedProductIDs: [Int64] = [17, 671]
67-
let product = ProductListItem.fake()
67+
let product = Product.fake()
6868
let dataSource = LinkedProductListSelectorDataSource(product: product,
6969
linkedProductIDs: preselectedProductIDs,
7070
trackingContext: "test_context")
@@ -74,7 +74,7 @@ final class LinkedProductListSelectorDataSourceTests: XCTestCase {
7474
}
7575

7676
// Action
77-
let linkedProducts = preselectedProductIDs.map { ProductListItem.fake().copy(productID: $0) }
77+
let linkedProducts = preselectedProductIDs.map { Product.fake().copy(productID: $0) }
7878
dataSource.deleteProduct(linkedProducts[1])
7979

8080
// Assert
@@ -87,7 +87,7 @@ final class LinkedProductListSelectorDataSourceTests: XCTestCase {
8787
func test_deleting_a_non_preselected_product_results_in_an_error() {
8888
// Arrange
8989
let preselectedProductIDs: [Int64] = [17, 671]
90-
let product = ProductListItem.fake()
90+
let product = Product.fake()
9191
let dataSource = LinkedProductListSelectorDataSource(product: product,
9292
linkedProductIDs: preselectedProductIDs,
9393
trackingContext: "test_context")
@@ -97,7 +97,7 @@ final class LinkedProductListSelectorDataSourceTests: XCTestCase {
9797
}
9898

9999
// Action
100-
let newProduct = ProductListItem.fake().copy(productID: 62)
100+
let newProduct = Product.fake().copy(productID: 62)
101101
dataSource.deleteProduct(newProduct)
102102

103103
// Assert
@@ -111,7 +111,7 @@ final class LinkedProductListSelectorDataSourceTests: XCTestCase {
111111
func test_sorting_products_should_save_updated_order() {
112112
// Arrange
113113
let preselectedProductIDs: [Int64] = [17, 671, 750]
114-
let product = ProductListItem.fake()
114+
let product = Product.fake()
115115
let dataSource = LinkedProductListSelectorDataSource(product: product,
116116
linkedProductIDs: preselectedProductIDs,
117117
trackingContext: "test_context")
@@ -133,7 +133,7 @@ final class LinkedProductListSelectorDataSourceTests: XCTestCase {
133133
func test_sorting_products_should_ignore_missing_index() {
134134
// Arrange
135135
let preselectedProductIDs: [Int64] = [17, 671, 750]
136-
let product = ProductListItem.fake()
136+
let product = Product.fake()
137137
let dataSource = LinkedProductListSelectorDataSource(product: product,
138138
linkedProductIDs: preselectedProductIDs,
139139
trackingContext: "test_context")

0 commit comments

Comments
 (0)