Skip to content

Commit a0ed11e

Browse files
committed
Fix issue showing selected filters
1 parent 49ead88 commit a0ed11e

File tree

1 file changed

+33
-41
lines changed

1 file changed

+33
-41
lines changed

WooCommerce/Classes/Bookings/BookingFilters/BookingFiltersViewModel.swift

Lines changed: 33 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -35,18 +35,18 @@ final class BookingFiltersViewModel: FilterListViewModel {
3535
}
3636

3737
var criteria: Filters {
38-
let teamMember = teamMemberFilterViewModel.selectedValue as? BookingResource
39-
let product = productFilterViewModel.selectedValue as? BookingProductFilter
38+
let teamMembers = (teamMemberFilterViewModel.selectedValue as? MultipleFilterSelection)?.items as? [BookingResource] ?? []
39+
let products = (productFilterViewModel.selectedValue as? MultipleFilterSelection)?.items as? [BookingProductFilter] ?? []
4040
let customer = customerFilterViewModel.selectedValue as? CustomerFilter
41-
let attendanceStatus = attendanceStatusFilterViewModel.selectedValue as? BookingAttendanceStatus
42-
let paymentStatus = paymentStatusFilterViewModel.selectedValue as? BookingStatus
41+
let attendanceStatuses = (attendanceStatusFilterViewModel.selectedValue as? MultipleFilterSelection)?.items as? [BookingAttendanceStatus] ?? []
42+
let paymentStatuses = (paymentStatusFilterViewModel.selectedValue as? MultipleFilterSelection)?.items as? [BookingStatus] ?? []
4343
let dateRange = dateTimeFilterViewModel.selectedValue as? BookingDateRangeFilter
4444
let numberOfActiveFilters = filterTypeViewModels.numberOfActiveFilters
4545

46-
return Filters(teamMember: teamMember,
47-
product: product,
48-
attendanceStatus: attendanceStatus,
49-
paymentStatus: paymentStatus,
46+
return Filters(teamMembers: teamMembers,
47+
products: products,
48+
attendanceStatuses: attendanceStatuses,
49+
paymentStatuses: paymentStatuses,
5050
customer: customer,
5151
dateRange: dateRange,
5252
numberOfActiveFilters: numberOfActiveFilters)
@@ -86,55 +86,47 @@ final class BookingFiltersViewModel: FilterListViewModel {
8686

8787
struct Filters: Equatable, HumanReadable {
8888

89-
let teamMember: BookingResource?
90-
let product: BookingProductFilter?
91-
let attendanceStatus: BookingAttendanceStatus?
92-
let paymentStatus: BookingStatus?
89+
let teamMembers: [BookingResource]
90+
let products: [BookingProductFilter]
91+
let attendanceStatuses: [BookingAttendanceStatus]
92+
let paymentStatuses: [BookingStatus]
9393
let customer: CustomerFilter?
9494
let dateRange: BookingDateRangeFilter?
9595

9696
let numberOfActiveFilters: Int
9797

9898
init() {
99-
teamMember = nil
100-
product = nil
101-
attendanceStatus = nil
102-
paymentStatus = nil
99+
teamMembers = []
100+
products = []
101+
attendanceStatuses = []
102+
paymentStatuses = []
103103
customer = nil
104104
dateRange = nil
105105
numberOfActiveFilters = 0
106106
}
107107

108-
init(teamMember: BookingResource?,
109-
product: BookingProductFilter?,
110-
attendanceStatus: BookingAttendanceStatus?,
111-
paymentStatus: BookingStatus?,
108+
init(teamMembers: [BookingResource],
109+
products: [BookingProductFilter],
110+
attendanceStatuses: [BookingAttendanceStatus],
111+
paymentStatuses: [BookingStatus],
112112
customer: CustomerFilter?,
113113
dateRange: BookingDateRangeFilter?,
114114
numberOfActiveFilters: Int) {
115-
self.teamMember = teamMember
116-
self.product = product
117-
self.attendanceStatus = attendanceStatus
118-
self.paymentStatus = paymentStatus
115+
self.teamMembers = teamMembers
116+
self.products = products
117+
self.attendanceStatuses = attendanceStatuses
118+
self.paymentStatuses = paymentStatuses
119119
self.customer = customer
120120
self.dateRange = dateRange
121121
self.numberOfActiveFilters = numberOfActiveFilters
122122
}
123123

124124
var readableString: String {
125-
var readable: [String] = []
126-
if let teamMember {
127-
readable.append(teamMember.name)
128-
}
129-
if let product {
130-
readable.append(product.name)
131-
}
132-
if let attendanceStatus {
133-
readable.append(attendanceStatus.localizedTitle)
134-
}
135-
if let paymentStatus {
136-
readable.append(paymentStatus.localizedTitle)
137-
}
125+
var readable: [String] = teamMembers.map { $0.name } +
126+
products.map { $0.name } +
127+
attendanceStatuses.map { $0.localizedTitle } +
128+
paymentStatuses.map { $0.localizedTitle }
129+
138130
if let customer {
139131
readable.append(customer.description)
140132
}
@@ -185,11 +177,11 @@ extension BookingFiltersViewModel.BookingListFilter {
185177
case .teamMember(let siteID):
186178
return FilterTypeViewModel(title: title,
187179
listSelectorConfig: .bookingResource(siteID: siteID),
188-
selectedValue: filters.teamMember)
180+
selectedValue: MultipleFilterSelection(items: filters.teamMembers))
189181
case .product(let siteID):
190182
return FilterTypeViewModel(title: title,
191183
listSelectorConfig: .bookableProduct(siteID: siteID),
192-
selectedValue: filters.product)
184+
selectedValue: MultipleFilterSelection(items: filters.products))
193185
case .customer(let siteID):
194186
return FilterTypeViewModel(title: title,
195187
listSelectorConfig: .customer(siteID: siteID, source: .booking),
@@ -198,12 +190,12 @@ extension BookingFiltersViewModel.BookingListFilter {
198190
let options: [BookingAttendanceStatus?] = [.booked, .checkedIn, .cancelled, .noShow]
199191
return FilterTypeViewModel(title: title,
200192
listSelectorConfig: .multiSelectStaticOptions(options: options),
201-
selectedValue: filters.attendanceStatus)
193+
selectedValue: MultipleFilterSelection(items: filters.attendanceStatuses))
202194
case .paymentStatus:
203195
let options: [BookingStatus?] = [.complete, .paid, .unpaid, .cancelled, .pendingConfirmation, .confirmed]
204196
return FilterTypeViewModel(title: title,
205197
listSelectorConfig: .multiSelectStaticOptions(options: options),
206-
selectedValue: filters.paymentStatus)
198+
selectedValue: MultipleFilterSelection(items: filters.paymentStatuses))
207199
case .dateTime:
208200
return FilterTypeViewModel(title: title,
209201
listSelectorConfig: .bookingDateTime,

0 commit comments

Comments
 (0)