Skip to content

Commit b6ed021

Browse files
committed
Update initial selection logic and remove full product model from BookingProductFilter
1 parent fb76687 commit b6ed021

File tree

3 files changed

+18
-14
lines changed

3 files changed

+18
-14
lines changed

Modules/Sources/Yosemite/Model/Bookings/BookingProductFilter.swift

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,21 +3,17 @@ import Foundation
33
/// Used to filter bookings by product
44
///
55
public struct BookingProductFilter: Codable, Hashable {
6-
/// The underlying product
7-
public let product: Product
8-
96
/// ID of the product
107
/// periphery:ignore - to be used later when applying filter
118
///
12-
public let id: Int64
9+
public let productID: Int64
1310

1411
/// Name of the product
1512
///
1613
public let name: String
1714

18-
public init(product: Product) {
19-
self.id = product.productID
20-
self.name = product.name
21-
self.product = product
15+
public init(productID: Int64, name: String) {
16+
self.productID = productID
17+
self.name = name
2218
}
2319
}

WooCommerce/Classes/Bookings/BookingFilters/SyncableListSelectorView.swift

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,18 @@ struct SyncableListSelectorView<Syncable: ListSyncable>: View {
55
@State var selectedItem: Syncable.ModelType?
66

77
private let syncable: Syncable
8+
private let initialSelection: (Syncable.ModelType?) -> Bool
89
private let onSelection: (Syncable.ModelType?) -> Void
910

1011
private let viewPadding: CGFloat = 16
1112

1213
init(viewModel: SyncableListSelectorViewModel<Syncable>,
1314
syncable: Syncable,
14-
selectedItem: Syncable.ModelType?,
15+
initialSelection: @escaping (Syncable.ModelType?) -> Bool,
1516
onSelection: @escaping (Syncable.ModelType?) -> Void) {
1617
self.viewModel = viewModel
1718
self.syncable = syncable
18-
self.selectedItem = selectedItem
19+
self.initialSelection = initialSelection
1920
self.onSelection = onSelection
2021
}
2122

@@ -68,7 +69,7 @@ private extension SyncableListSelectorView {
6869

6970
ForEach(items, id: \.self) { item in
7071
optionRow(text: syncable.displayName(for: item),
71-
isSelected: item == selectedItem,
72+
isSelected: isItemSelected(item),
7273
onSelection: { selectedItem = item })
7374
}
7475

@@ -82,6 +83,13 @@ private extension SyncableListSelectorView {
8283
.background(Color(.listBackground))
8384
}
8485

86+
func isItemSelected(_ item: Syncable.ModelType?) -> Bool {
87+
if let selectedItem {
88+
return item == selectedItem
89+
}
90+
return initialSelection(item)
91+
}
92+
8593
func optionRow(text: String, isSelected: Bool, onSelection: @escaping () -> Void) -> some View {
8694
HStack {
8795
Text(text)

WooCommerce/Classes/ViewRelated/Filters/FilterListViewController.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -375,7 +375,7 @@ private extension FilterListViewController {
375375
let memberListSelectorView = SyncableListSelectorView(
376376
viewModel: viewModel,
377377
syncable: syncable,
378-
selectedItem: selectedMember,
378+
initialSelection: { $0 == selectedMember },
379379
onSelection: { [weak self] resource in
380380
selected.selectedValue = resource
381381
self?.updateUI(numberOfActiveFilters: self?.viewModel.filterTypeViewModels.numberOfActiveFilters ?? 0)
@@ -392,11 +392,11 @@ private extension FilterListViewController {
392392
let memberListSelectorView = SyncableListSelectorView(
393393
viewModel: viewModel,
394394
syncable: syncable,
395-
selectedItem: selectedProduct?.product,
395+
initialSelection: { $0?.productID == selectedProduct?.productID },
396396
onSelection: { [weak self] product in
397397
selected.selectedValue = {
398398
guard let product else { return BookingProductFilter?.none }
399-
return BookingProductFilter(product: product)
399+
return BookingProductFilter(productID: product.productID, name: product.name)
400400
}()
401401
self?.updateUI(numberOfActiveFilters: self?.viewModel.filterTypeViewModels.numberOfActiveFilters ?? 0)
402402
self?.listSelector.reloadData()

0 commit comments

Comments
 (0)