Skip to content

Commit c8fde36

Browse files
committed
Remove unused code and show notice for unsupported customer
1 parent 31e9bba commit c8fde36

File tree

8 files changed

+37
-40
lines changed

8 files changed

+37
-40
lines changed

WooCommerce/Classes/Bookings/BookingFilters/BookableProductListSyncable.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ struct BookableProductListSyncable: ListSyncable {
1616

1717
let searchConfiguration: ListSearchConfiguration? = nil
1818

19+
let selectionDisabledMessage: String? = nil
20+
1921
// MARK: - ResultsController Configuration
2022

2123
func createPredicate() -> NSPredicate {
@@ -63,6 +65,8 @@ struct BookableProductListSyncable: ListSyncable {
6365
/// Returns the description for an item
6466
func description(for item: Product) -> String? { nil }
6567

68+
func selectionEnabled(for item: Product) -> Bool { true }
69+
6670
func filterItem(for item: Product) -> BookingProductFilter {
6771
BookingProductFilter(productID: item.productID, name: item.name)
6872
}

WooCommerce/Classes/Bookings/BookingFilters/CustomerListSyncable.swift

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ struct CustomerListSyncable: ListSyncable {
2020
emptySearchDescription: Localization.emptySearchDescription
2121
)
2222

23+
let selectionDisabledMessage: String? = Localization.selectionDisabledMessage
24+
2325
// MARK: - ResultsController Configuration
2426

2527
func createPredicate() -> NSPredicate {
@@ -79,6 +81,10 @@ struct CustomerListSyncable: ListSyncable {
7981
item.email
8082
}
8183

84+
func selectionEnabled(for item: Customer) -> Bool {
85+
item.customerID > 0
86+
}
87+
8288
func filterItem(for item: Customer) -> BookingCustomerFilter {
8389
let name: String = {
8490
if let firstName = item.firstName, let lastName = item.lastName {
@@ -122,5 +128,10 @@ private extension CustomerListSyncable {
122128
value: "Try adjusting your search term to see more results",
123129
comment: "Message on the empty search result view of the booking customer selector view"
124130
)
131+
static let selectionDisabledMessage = NSLocalizedString(
132+
"bookingCustomerSelectorView.selectionDisabledMessage",
133+
value: "This user is a guest, and guests can’t be used for filtering bookings.",
134+
comment: "Error message when selecting guest customer in booking filtering"
135+
)
125136
}
126137
}

WooCommerce/Classes/Bookings/BookingFilters/CustomerSelector+BookingFilter.swift

Lines changed: 0 additions & 27 deletions
This file was deleted.

WooCommerce/Classes/Bookings/BookingFilters/ListSyncable.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ protocol ListSyncable {
1212
var emptyStateMessage: String { get }
1313
var emptyItemTitlePlaceholder: String? { get }
1414
var searchConfiguration: ListSearchConfiguration? { get }
15+
var selectionDisabledMessage: String? { get }
1516

1617
// MARK: - ResultsController Configuration
1718

@@ -37,6 +38,9 @@ protocol ListSyncable {
3738
/// Returns the description for an item
3839
func description(for item: ModelType) -> String?
3940

41+
/// Checks whether the specified item can be selected
42+
func selectionEnabled(for item: ModelType) -> Bool
43+
4044
/// Returns the filter type for an item
4145
func filterItem(for item: ModelType) -> ListFilterType
4246
}

WooCommerce/Classes/Bookings/BookingFilters/SyncableListSelectorView.swift

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import SwiftUI
33
struct SyncableListSelectorView<Syncable: ListSyncable>: View {
44
@ObservedObject private var viewModel: SyncableListSelectorViewModel<Syncable>
55
@State private var selectedItems: [Syncable.ListFilterType]
6+
@State private var notice: Notice?
67

78
@ScaledMetric private var scale: CGFloat = 1.0
89

@@ -39,6 +40,7 @@ struct SyncableListSelectorView<Syncable: ListSyncable>: View {
3940
}
4041
.navigationTitle(syncable.title)
4142
.navigationBarTitleDisplayMode(.inline)
43+
.notice($notice)
4244
.if(syncable.searchConfiguration != nil) { view in
4345
view.searchable(text: $viewModel.searchQuery,
4446
placement: .navigationBarDrawer(displayMode: .always),
@@ -79,7 +81,7 @@ private extension SyncableListSelectorView {
7981
optionRow(text: syncable.displayName(for: item),
8082
description: syncable.description(for: item),
8183
isSelected: selectedItems.contains(where: { $0 == syncable.filterItem(for: item) }),
82-
onSelection: { toggleSelection(for: item) })
84+
onSelection: { toggleSelectionIfPossible(for: item) })
8385
}
8486

8587
InfiniteScrollIndicator(showContent: viewModel.shouldShowBottomActivityIndicator)
@@ -92,7 +94,13 @@ private extension SyncableListSelectorView {
9294
.background(Color(.listBackground))
9395
}
9496

95-
func toggleSelection(for item: Syncable.ModelType) {
97+
func toggleSelectionIfPossible(for item: Syncable.ModelType) {
98+
guard syncable.selectionEnabled(for: item) else {
99+
if let message = syncable.selectionDisabledMessage {
100+
notice = Notice(message: message, feedbackType: .error)
101+
}
102+
return
103+
}
96104
let filterItem = syncable.filterItem(for: item)
97105
if let index = selectedItems.firstIndex(of: filterItem) {
98106
selectedItems.remove(at: index)

WooCommerce/Classes/Bookings/BookingFilters/TeamMemberListSyncable.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ struct TeamMemberListSyncable: ListSyncable {
1616

1717
let searchConfiguration: ListSearchConfiguration? = nil
1818

19+
let selectionDisabledMessage: String? = nil
20+
1921
// MARK: - ResultsController Configuration
2022

2123
func createPredicate() -> NSPredicate {
@@ -55,6 +57,8 @@ struct TeamMemberListSyncable: ListSyncable {
5557
/// Returns the description for an item
5658
func description(for item: BookingResource) -> String? { nil }
5759

60+
func selectionEnabled(for item: BookingResource) -> Bool { true }
61+
5862
func filterItem(for item: BookingResource) -> BookingResource {
5963
item
6064
}

WooCommerce/Classes/ViewRelated/Filters/FilterListViewController.swift

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ enum FilterListValueSelectorConfig {
9595
// Filter list selector for products
9696
case products(siteID: Int64)
9797
// Filter list selector for customer
98-
case customer(siteID: Int64, source: FilterSource)
98+
case customer(siteID: Int64)
9999
// Filter list selector for booking team member
100100
case bookingResource(siteID: Int64)
101101
// Filter list selector for bookable product
@@ -364,19 +364,12 @@ private extension FilterListViewController {
364364
}()
365365
self.listSelector.present(controller, animated: true)
366366

367-
case .customer(let siteID, let source):
368-
let configuration: CustomerSelectorViewController.Configuration = {
369-
switch source {
370-
case .booking: .configurationForBookingFilter
371-
case .orders: .configurationForOrderFilter
372-
case .products: fatalError("Customer filter not supported!")
373-
}
374-
}()
367+
case .customer(let siteID):
375368
let selectedCustomerID = (selected.selectedValue as? CustomerFilter)?.id
376369
let controller: CustomerSelectorViewController = {
377370
return CustomerSelectorViewController(
378371
siteID: siteID,
379-
configuration: configuration,
372+
configuration: .configurationForOrderFilter,
380373
addressFormViewModel: nil,
381374
selectedCustomerID: selectedCustomerID,
382375
onCustomerSelected: { customer in

WooCommerce/Classes/ViewRelated/Orders/Order Filters/FilterOrderListViewModel.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -265,7 +265,7 @@ extension FilterOrderListViewModel.OrderListFilter {
265265
selectedValue: filters.product)
266266
case .customer(let siteID):
267267
return FilterTypeViewModel(title: title,
268-
listSelectorConfig: .customer(siteID: siteID, source: .orders),
268+
listSelectorConfig: .customer(siteID: siteID),
269269
selectedValue: filters.customer)
270270
case .salesChannel:
271271
let salesChannelOptions: [SalesChannelFilter] = [.any, .pointOfSale, .webCheckout, .wpAdmin]

0 commit comments

Comments
 (0)