@@ -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