Skip to content

Commit 8327c8e

Browse files
committed
persist sales_channel_filter to order settings
1 parent de893f4 commit 8327c8e

File tree

9 files changed

+58
-36
lines changed

9 files changed

+58
-36
lines changed

Modules/Sources/Yosemite/Actions/AppSettingsAction.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ public enum AppSettingsAction: Action {
4545
dateRangeFilter: OrderDateRangeFilter?,
4646
productFilter: FilterOrdersByProduct?,
4747
customerFilter: CustomerFilter?,
48+
salesChannelFilter: SalesChannelFilter?,
4849
onCompletion: (Error?) -> Void)
4950

5051
/// Clears all the orders settings

Modules/Sources/Yosemite/Model/Mocks/ActionHandlers/MockAppSettingsActionHandler.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,8 @@ struct MockAppSettingsActionHandler: MockActionHandler {
5252
orderStatusesFilter: nil,
5353
dateRangeFilter: nil,
5454
productFilter: nil,
55-
customerFilter: nil)))
55+
customerFilter: nil,
56+
salesChannelFilter: nil)))
5657
case .upsertProductsSettings(_, _, _, _, _, _, _, let onCompletion):
5758
onCompletion(nil)
5859
case .resetEligibilityErrorInfo,
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import Foundation
2+
3+
/// Used to filter orders by sales channel
4+
///
5+
public enum SalesChannelFilter: String, Codable, Hashable {
6+
case pointOfSale = "pos-rest-api"
7+
case any = "any"
8+
}

Modules/Sources/Yosemite/Model/Orders/StoredOrderSettings.swift

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,17 +12,20 @@ public struct StoredOrderSettings: Codable, Equatable {
1212
public let dateRangeFilter: OrderDateRangeFilter?
1313
public let productFilter: FilterOrdersByProduct?
1414
public let customerFilter: CustomerFilter?
15+
public let salesChannelFilter: SalesChannelFilter?
1516

1617
public init(siteID: Int64,
1718
orderStatusesFilter: [OrderStatusEnum]?,
1819
dateRangeFilter: OrderDateRangeFilter?,
1920
productFilter: FilterOrdersByProduct?,
20-
customerFilter: CustomerFilter?) {
21+
customerFilter: CustomerFilter?,
22+
salesChannelFilter: SalesChannelFilter?) {
2123
self.siteID = siteID
2224
self.orderStatusesFilter = orderStatusesFilter
2325
self.dateRangeFilter = dateRangeFilter
2426
self.productFilter = productFilter
2527
self.customerFilter = customerFilter
28+
self.salesChannelFilter = salesChannelFilter
2629
}
2730

2831
public func numberOfActiveFilters() -> Int {
@@ -39,6 +42,9 @@ public struct StoredOrderSettings: Codable, Equatable {
3942
if customerFilter != nil {
4043
total += 1
4144
}
45+
if let salesChannelFilter = salesChannelFilter, case .pointOfSale = salesChannelFilter {
46+
total += 1
47+
}
4248

4349
return total
4450
}
@@ -51,6 +57,7 @@ public struct StoredOrderSettings: Codable, Equatable {
5157
case dateRangeFilter = "date_range_filter"
5258
case productFilter = "product_filter"
5359
case customerFilter = "customer_filter"
60+
case salesChannelFilter = "sales_channel_filter"
5461
}
5562
}
5663

Modules/Sources/Yosemite/Stores/AppSettingsStore.swift

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,12 +132,14 @@ public class AppSettingsStore: Store {
132132
let dateRangeFilter,
133133
let productFilter,
134134
let customerFilter,
135+
let salesChannelFilter,
135136
let onCompletion):
136137
upsertOrdersSettings(siteID: siteID,
137138
orderStatusesFilter: orderStatusesFilter,
138139
dateRangeFilter: dateRangeFilter,
139140
productFilter: productFilter,
140141
customerFilter: customerFilter,
142+
salesChannelFilter: salesChannelFilter,
141143
onCompletion: onCompletion)
142144
case .resetOrdersSettings:
143145
resetOrdersSettings()
@@ -716,6 +718,7 @@ private extension AppSettingsStore {
716718
dateRangeFilter: OrderDateRangeFilter?,
717719
productFilter: FilterOrdersByProduct?,
718720
customerFilter: CustomerFilter?,
721+
salesChannelFilter: SalesChannelFilter?,
719722
onCompletion: (Error?) -> Void) {
720723
var existingSettings: [Int64: StoredOrderSettings.Setting] = [:]
721724
if let storedSettings: StoredOrderSettings = try? fileStorage.data(for: ordersSettingsURL) {
@@ -726,7 +729,8 @@ private extension AppSettingsStore {
726729
orderStatusesFilter: orderStatusesFilter,
727730
dateRangeFilter: dateRangeFilter,
728731
productFilter: productFilter,
729-
customerFilter: customerFilter)
732+
customerFilter: customerFilter,
733+
salesChannelFilter: salesChannelFilter)
730734
existingSettings[siteID] = newSettings
731735

732736
let newStoredOrderSettings = StoredOrderSettings(settings: existingSettings)

Modules/Tests/YosemiteTests/Stores/AppSettingsStoreTests+OrderFilterHistory.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,11 +155,13 @@ private extension AppSettingsStoreTests_OrderFilterHistory {
155155
let dateRange = OrderDateRangeFilter(filter: .custom, startDate: startDate, endDate: endDate)
156156
let productFilter = FilterOrdersByProduct(id: 1, name: "Sample product")
157157
let customerFilter = CustomerFilter(customer: Customer.fake().copy(customerID: 1))
158+
let salesChannelFilter = SalesChannelFilter(filter: .pointOfSale)
158159
return StoredOrderSettings.Setting(siteID: siteID,
159160
orderStatusesFilter: orderStatuses,
160161
dateRangeFilter: dateRange,
161162
productFilter: productFilter,
162-
customerFilter: customerFilter)
163+
customerFilter: customerFilter,
164+
salesChannelFilter: salesChannelFilter)
163165
}
164166

165167
func insertMockFilter(filter: StoredOrderSettings.Setting, using store: AppSettingsStore) async throws {

WooCommerce/Classes/Tools/BackgroundTasks/OrderListSyncBackgroundTask.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,11 +73,12 @@ private struct CurrentOrderListSyncUseCase {
7373
let action = AppSettingsAction.loadOrdersSettings(siteID: siteID) { (result) in
7474
switch result {
7575
case .success(let settings):
76+
// Cannot convert value of type 'SalesChannelFilter?' to expected argument type 'FilterOrderListViewModel.SalesChannelFilter?'
7677
let filters = FilterOrderListViewModel.Filters(orderStatus: settings.orderStatusesFilter,
7778
dateRange: settings.dateRangeFilter,
7879
product: settings.productFilter,
7980
customer: settings.customerFilter,
80-
salesChannel: nil, // TODO: Filter persistence WOOMOB-712
81+
salesChannel: settings.salesChannelFilter,
8182
numberOfActiveFilters: settings.numberOfActiveFilters())
8283
continuation.resume(returning: filters)
8384
case .failure:

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

Lines changed: 26 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ final class FilterOrderListViewModel: FilterListViewModel {
142142
dateRange: item.dateRangeFilter,
143143
product: item.productFilter,
144144
customer: item.customerFilter,
145-
salesChannel: nil, // TODO: Filter persistence WOOMOB-712
145+
salesChannel: item.salesChannelFilter,
146146
numberOfActiveFilters: item.numberOfActiveFilters())
147147
}
148148
continuation.resume(returning: filters)
@@ -168,7 +168,8 @@ final class FilterOrderListViewModel: FilterListViewModel {
168168
orderStatusesFilter: filter.orderStatus,
169169
dateRangeFilter: filter.dateRange,
170170
productFilter: filter.product,
171-
customerFilter: filter.customer)
171+
customerFilter: filter.customer,
172+
salesChannelFilter: filter.salesChannel)
172173
stores.dispatch(AppSettingsAction.upsertOrderFilterHistory(filter: settings, onCompletion: { error in
173174
if let error {
174175
DDLogError("⛔️ Error saving filter history: \(error)")
@@ -182,7 +183,8 @@ final class FilterOrderListViewModel: FilterListViewModel {
182183
orderStatusesFilter: filter.orderStatus,
183184
dateRangeFilter: filter.dateRange,
184185
productFilter: filter.product,
185-
customerFilter: filter.customer)
186+
customerFilter: filter.customer,
187+
salesChannelFilter: filter.salesChannel)
186188
stores.dispatch(AppSettingsAction.removeFromOrderFilterHistory(filter: settings, onCompletion: { error in
187189
if let error {
188190
DDLogError("⛔️ Error removing from filter history: \(error)")
@@ -266,7 +268,7 @@ extension FilterOrderListViewModel.OrderListFilter {
266268
listSelectorConfig: .customer(siteID: siteID),
267269
selectedValue: filters.customer)
268270
case .salesChannel:
269-
let salesChannelOptions: [FilterOrderListViewModel.SalesChannelFilter] = [.any, .pointOfSale]
271+
let salesChannelOptions: [SalesChannelFilter] = [.any, .pointOfSale]
270272
return FilterTypeViewModel(title: title,
271273
listSelectorConfig: .staticOptions(options: salesChannelOptions),
272274
selectedValue: filters.salesChannel)
@@ -377,33 +379,28 @@ extension CustomerFilter: FilterType {
377379
var isActive: Bool { true }
378380
}
379381

380-
extension FilterOrderListViewModel {
381-
enum SalesChannelFilter: FilterType {
382-
case pointOfSale
383-
case any
384-
385-
var description: String {
386-
switch self {
387-
case .pointOfSale:
388-
return NSLocalizedString(
389-
"salesChannelFilter.row.pos.description",
390-
value: "Point of Sale",
391-
comment: "Description for the Sales channel filter option, when selecting 'Point of Sale' orders")
392-
case .any:
393-
return NSLocalizedString(
394-
"salesChannelFilter.row.any.description",
395-
value: "Any",
396-
comment: "Description for the Sales channel filter option, when selecting 'Any' order")
397-
}
382+
extension SalesChannelFilter: FilterType {
383+
var description: String {
384+
switch self {
385+
case .pointOfSale:
386+
return NSLocalizedString(
387+
"salesChannelFilter.row.pos.description",
388+
value: "Point of Sale",
389+
comment: "Description for the Sales channel filter option, when selecting 'Point of Sale' orders")
390+
case .any:
391+
return NSLocalizedString(
392+
"salesChannelFilter.row.any.description",
393+
value: "Any",
394+
comment: "Description for the Sales channel filter option, when selecting 'Any' order")
398395
}
396+
}
399397

400-
var isActive: Bool {
401-
switch self {
402-
case .pointOfSale:
403-
return true
404-
case .any:
405-
return false
406-
}
398+
var isActive: Bool {
399+
switch self {
400+
case .pointOfSale:
401+
return true
402+
case .any:
403+
return false
407404
}
408405
}
409406
}

WooCommerce/Classes/ViewRelated/Orders/OrdersRootViewController.swift

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -447,7 +447,7 @@ private extension OrdersRootViewController {
447447
dateRange: settings.dateRangeFilter,
448448
product: settings.productFilter,
449449
customer: settings.customerFilter,
450-
salesChannel: nil, // TODO: Filter persistence WOOMOB-712
450+
salesChannel: settings.salesChannelFilter,
451451
numberOfActiveFilters: settings.numberOfActiveFilters())
452452
case .failure(let error):
453453
print("It was not possible to sync local orders settings: \(String(describing: error))")
@@ -464,7 +464,8 @@ private extension OrdersRootViewController {
464464
orderStatusesFilter: filters.orderStatus,
465465
dateRangeFilter: filters.dateRange,
466466
productFilter: filters.product,
467-
customerFilter: filters.customer) { error in
467+
customerFilter: filters.customer,
468+
salesChannelFilter: filters.salesChannel) { error in
468469
if error != nil {
469470
assertionFailure("It was not possible to store order settings due to an error: \(String(describing: error))")
470471
}

0 commit comments

Comments
 (0)