Skip to content

Commit 0244c39

Browse files
committed
Revert "Backward compatible support for bookable types"
This reverts commit 0711dc6.
1 parent 0711dc6 commit 0244c39

File tree

14 files changed

+43
-54
lines changed

14 files changed

+43
-54
lines changed

Modules/Sources/Networking/Model/Product/ProductType.swift

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ public enum ProductType: Codable, Hashable, GeneratedFakeable {
1313
case bundle
1414
case composite
1515
case booking
16-
case bookableService
1716
case custom(String) // in case there are extensions modifying product types
1817
}
1918

@@ -44,8 +43,6 @@ extension ProductType: RawRepresentable {
4443
self = .composite
4544
case Keys.booking:
4645
self = .booking
47-
case Keys.bookableService:
48-
self = .bookableService
4946
default:
5047
self = .custom(rawValue)
5148
}
@@ -64,7 +61,6 @@ extension ProductType: RawRepresentable {
6461
case .bundle: return Keys.bundle
6562
case .composite: return Keys.composite
6663
case .booking: return Keys.booking
67-
case .bookableService: return Keys.bookableService
6864
case .custom(let payload): return payload
6965
}
7066
}
@@ -89,17 +85,12 @@ extension ProductType: RawRepresentable {
8985
return NSLocalizedString("Bundle", comment: "Display label for bundle product type.")
9086
case .composite:
9187
return NSLocalizedString("Composite", comment: "Display label for composite product type.")
92-
case .booking, .bookableService:
88+
case .booking:
9389
return NSLocalizedString("Bookable", comment: "Display label for bookable product type.")
9490
case .custom(let payload):
9591
return payload // unable to localize at runtime.
9692
}
9793
}
98-
99-
/// Backward compatible helper to check if a product is bookable
100-
public var isBooking: Bool {
101-
self == .booking || self == .bookableService
102-
}
10394
}
10495

10596

@@ -115,5 +106,4 @@ private enum Keys {
115106
static let bundle = "bundle"
116107
static let composite = "composite"
117108
static let booking = "booking"
118-
static let bookableService = "bookable-service"
119109
}

Modules/Sources/Networking/Remote/ProductsRemote.swift

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ public protocol ProductsRemoteProtocol {
1515
pageSize: Int,
1616
stockStatus: ProductStockStatus?,
1717
productStatus: ProductStatus?,
18-
productTypes: [ProductType],
18+
productType: ProductType?,
1919
productCategory: ProductCategory?,
2020
orderBy: ProductsRemote.OrderKey,
2121
order: ProductsRemote.Order,
@@ -28,7 +28,7 @@ public protocol ProductsRemoteProtocol {
2828
pageSize: Int,
2929
stockStatus: ProductStockStatus?,
3030
productStatus: ProductStatus?,
31-
productTypes: [ProductType],
31+
productType: ProductType?,
3232
productCategory: ProductCategory?,
3333
excludedProductIDs: [Int64]) async throws -> [Product]
3434
func searchProductsBySKU(for siteID: Int64,
@@ -49,7 +49,7 @@ public protocol ProductsRemoteProtocol {
4949
pageNumber: Int,
5050
pageSize: Int,
5151
productStatus: ProductStatus?,
52-
productTypes: [ProductType],
52+
productType: ProductType?,
5353
completion: @escaping (Result<[Int64], Error>) -> Void)
5454
func loadNumberOfProducts(siteID: Int64) async throws -> Int64
5555

@@ -171,7 +171,7 @@ public final class ProductsRemote: Remote, ProductsRemoteProtocol {
171171
pageSize: Int = Default.pageSize,
172172
stockStatus: ProductStockStatus? = nil,
173173
productStatus: ProductStatus? = nil,
174-
productTypes: [ProductType] = [],
174+
productType: ProductType? = nil,
175175
productCategory: ProductCategory? = nil,
176176
orderBy: OrderKey = .name,
177177
order: Order = .ascending,
@@ -191,7 +191,7 @@ public final class ProductsRemote: Remote, ProductsRemoteProtocol {
191191
let filterParameters = [
192192
ParameterKey.stockStatus: stockStatus?.rawValue ?? "",
193193
ParameterKey.productStatus: productStatus?.rawValue ?? "",
194-
ParameterKey.productTypes: productTypes.map { $0.rawValue }.joined(separator: ","),
194+
ParameterKey.productType: productType?.rawValue ?? "",
195195
ParameterKey.category: filterProductCategoryParemeterValue(from: productCategory),
196196
ParameterKey.include: stringOfProductIDs,
197197
ParameterKey.exclude: stringOfExcludedProductIDs
@@ -439,7 +439,7 @@ public final class ProductsRemote: Remote, ProductsRemoteProtocol {
439439
pageSize: Int,
440440
stockStatus: ProductStockStatus? = nil,
441441
productStatus: ProductStatus? = nil,
442-
productTypes: [ProductType] = [],
442+
productType: ProductType? = nil,
443443
productCategory: ProductCategory? = nil,
444444
excludedProductIDs: [Int64] = []) async throws -> [Product] {
445445
let stringOfExcludedProductIDs = excludedProductIDs.map { String($0) }
@@ -448,7 +448,7 @@ public final class ProductsRemote: Remote, ProductsRemoteProtocol {
448448
let filterParameters = [
449449
ParameterKey.stockStatus: stockStatus?.rawValue ?? "",
450450
ParameterKey.productStatus: productStatus?.rawValue ?? "",
451-
ParameterKey.productTypes: productTypes.map { $0.rawValue }.joined(separator: ","),
451+
ParameterKey.productType: productType?.rawValue ?? "",
452452
ParameterKey.category: filterProductCategoryParemeterValue(from: productCategory),
453453
ParameterKey.exclude: stringOfExcludedProductIDs
454454
].filter({ $0.value.isEmpty == false })
@@ -601,14 +601,14 @@ public final class ProductsRemote: Remote, ProductsRemoteProtocol {
601601
pageNumber: Int = Default.pageNumber,
602602
pageSize: Int = Default.pageSize,
603603
productStatus: ProductStatus? = nil,
604-
productTypes: [ProductType] = [],
604+
productType: ProductType? = nil,
605605
completion: @escaping (Result<[Int64], Error>) -> Void) {
606606
let parameters = [
607607
ParameterKey.page: String(pageNumber),
608608
ParameterKey.perPage: String(pageSize),
609609
ParameterKey.fields: ParameterKey.id,
610610
ParameterKey.productStatus: productStatus?.rawValue ?? "",
611-
ParameterKey.productTypes: productTypes.map { $0.rawValue }.joined(separator: ",")
611+
ParameterKey.productType: productType?.rawValue ?? ""
612612
].filter({ $0.value.isEmpty == false })
613613

614614
let path = Path.products

Modules/Sources/Storage/Tools/StorageType+Extensions.swift

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -273,17 +273,13 @@ public extension StorageType {
273273

274274
/// Has stored Products for the provided siteID and optional requirements.
275275
///
276-
func hasProducts(siteID: Int64, status: String?, types: [String]) -> Bool {
276+
func hasProducts(siteID: Int64, status: String?, type: String?) -> Bool {
277277
var predicates: [NSPredicate] = [\Product.siteID == siteID]
278278
if let status {
279279
predicates.append(\Product.statusKey == status)
280280
}
281-
if types.isNotEmpty {
282-
var typePredicates: [NSPredicate] = []
283-
for type in types {
284-
typePredicates.append(\Product.productTypeKey == type)
285-
}
286-
predicates.append(NSCompoundPredicate(type: .or, subpredicates: typePredicates))
281+
if let type {
282+
predicates.append(\Product.productTypeKey == type)
287283
}
288284
let combinedPredicate = NSCompoundPredicate(type: .and, subpredicates: predicates)
289285
return firstObject(ofType: Product.self, matching: combinedPredicate) != nil

Modules/Sources/Yosemite/Actions/ProductAction.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public enum ProductAction: Action {
4040
pageSize: Int,
4141
stockStatus: ProductStockStatus? = nil,
4242
productStatus: ProductStatus? = nil,
43-
productTypes: [ProductType] = [],
43+
productType: ProductType? = nil,
4444
productCategory: ProductCategory? = nil,
4545
excludedProductIDs: [Int64] = [],
4646
onCompletion: (Result<Bool, Error>) -> Void)
@@ -54,7 +54,7 @@ public enum ProductAction: Action {
5454
pageSize: Int = ProductsRemote.Default.pageSize,
5555
stockStatus: ProductStockStatus?,
5656
productStatus: ProductStatus?,
57-
productTypes: [ProductType] = [],
57+
productType: ProductType?,
5858
productCategory: ProductCategory?,
5959
sortOrder: ProductsSortOrder,
6060
productIDs: [Int64] = [],
@@ -124,7 +124,7 @@ public enum ProductAction: Action {
124124
///
125125
case checkIfStoreHasProducts(siteID: Int64,
126126
status: ProductStatus? = nil,
127-
types: [ProductType] = [],
127+
type: ProductType? = nil,
128128
onCompletion: (Result<Bool, Error>) -> Void)
129129

130130
/// Identifies the language from the given string

Modules/Sources/Yosemite/Stores/ProductStore.swift

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ public class ProductStore: Store {
6262
pageSize,
6363
stockStatus,
6464
productStatus,
65-
productTypes,
65+
productType,
6666
productCategory,
6767
excludedProductIDs,
6868
onCompletion):
@@ -74,7 +74,7 @@ public class ProductStore: Store {
7474
pageSize: pageSize,
7575
stockStatus: stockStatus,
7676
productStatus: productStatus,
77-
productTypes: productTypes,
77+
productType: productType,
7878
productCategory: productCategory,
7979
excludedProductIDs: excludedProductIDs,
8080
onCompletion: onCompletion)
@@ -83,7 +83,7 @@ public class ProductStore: Store {
8383
let pageSize,
8484
let stockStatus,
8585
let productStatus,
86-
let productTypes,
86+
let productType,
8787
let productCategory,
8888
let sortOrder,
8989
let productIDs,
@@ -97,7 +97,7 @@ public class ProductStore: Store {
9797
pageSize: pageSize,
9898
stockStatus: stockStatus,
9999
productStatus: productStatus,
100-
productTypes: productTypes,
100+
productType: productType,
101101
productCategory: productCategory,
102102
sortOrder: sortOrder,
103103
productIDs: productIDs,
@@ -120,8 +120,8 @@ public class ProductStore: Store {
120120
validateProductSKU(sku, siteID: siteID, onCompletion: onCompletion)
121121
case let .replaceProductLocally(product, onCompletion):
122122
replaceProductLocally(product: product, onCompletion: onCompletion)
123-
case let .checkIfStoreHasProducts(siteID, status, productTypes, onCompletion):
124-
checkIfStoreHasProducts(siteID: siteID, status: status, productTypes: productTypes, onCompletion: onCompletion)
123+
case let .checkIfStoreHasProducts(siteID, status, productType, onCompletion):
124+
checkIfStoreHasProducts(siteID: siteID, status: status, productType: productType, onCompletion: onCompletion)
125125
case let .identifyLanguage(siteID, string, feature, completion):
126126
identifyLanguage(siteID: siteID,
127127
string: string, feature: feature,
@@ -227,7 +227,7 @@ private extension ProductStore {
227227
pageSize: Int,
228228
stockStatus: ProductStockStatus?,
229229
productStatus: ProductStatus?,
230-
productTypes: [ProductType],
230+
productType: ProductType?,
231231
productCategory: ProductCategory?,
232232
excludedProductIDs: [Int64],
233233
onCompletion: @escaping (Result<Bool, Error>) -> Void) {
@@ -240,7 +240,7 @@ private extension ProductStore {
240240
pageSize: pageSize,
241241
stockStatus: stockStatus,
242242
productStatus: productStatus,
243-
productTypes: productTypes,
243+
productType: productType,
244244
productCategory: productCategory,
245245
excludedProductIDs: excludedProductIDs)
246246
}
@@ -291,7 +291,7 @@ private extension ProductStore {
291291
pageSize: Int = ProductsRemote.Default.pageSize,
292292
stockStatus: ProductStockStatus?,
293293
productStatus: ProductStatus?,
294-
productTypes: [ProductType],
294+
productType: ProductType?,
295295
productCategory: ProductCategory?,
296296
sortOrder: ProductsSortOrder,
297297
productIDs: [Int64],
@@ -304,7 +304,7 @@ private extension ProductStore {
304304
pageSize: pageSize,
305305
stockStatus: stockStatus,
306306
productStatus: productStatus,
307-
productTypes: productTypes,
307+
productType: productType,
308308
productCategory: productCategory,
309309
orderBy: sortOrder.remoteOrderKey,
310310
order: sortOrder.remoteOrder,
@@ -318,7 +318,8 @@ private extension ProductStore {
318318
let hasNextPage = products.count == pageSize
319319
return hasNextPage
320320
} catch let error as DotcomError where error == .unknown(code: "rest_invalid_param", message: "Invalid parameter(s): type") {
321-
if productTypes.allSatisfy({ ProductType.coreTypes.contains($0) }) == false {
321+
if let productType,
322+
ProductType.coreTypes.contains(productType) == false {
322323
return false
323324
}
324325
throw error
@@ -570,16 +571,16 @@ private extension ProductStore {
570571
///
571572
func checkIfStoreHasProducts(siteID: Int64,
572573
status: ProductStatus?,
573-
productTypes: [ProductType],
574+
productType: ProductType?,
574575
onCompletion: @escaping (Result<Bool, Error>) -> Void) {
575576
// Check for locally stored products first.
576577
let storage = storageManager.viewStorage
577-
if storage.hasProducts(siteID: siteID, status: status?.rawValue, types: productTypes.map { $0.rawValue }) {
578+
if storage.hasProducts(siteID: siteID, status: status?.rawValue, type: productType?.rawValue) {
578579
return onCompletion(.success(true))
579580
}
580581

581582
// If there are no locally stored products, then check remote.
582-
remote.loadProductIDs(for: siteID, pageNumber: 1, pageSize: 1, productStatus: status, productTypes: productTypes) { result in
583+
remote.loadProductIDs(for: siteID, pageNumber: 1, pageSize: 1, productStatus: status, productType: productType) { result in
583584
switch result {
584585
case .success(let ids):
585586
onCompletion(.success(ids.isEmpty == false))

WooCommerce/Classes/Bookings/BookingFilters/BookableProductListSyncable.swift

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,7 @@ struct BookableProductListSyncable: ListSyncable {
2525
// MARK: - ResultsController Configuration
2626

2727
func createPredicate() -> NSPredicate {
28-
let supportedTypes: [ProductType] = [.booking, .bookableService]
29-
return NSPredicate(format: "siteID == %lld AND productTypeKey in %@", siteID, supportedTypes.map { $0.rawValue })
28+
NSPredicate(format: "siteID == %lld AND productTypeKey == %@", siteID, ProductType.booking.rawValue)
3029
}
3130

3231
func createSortDescriptors() -> [NSSortDescriptor] {
@@ -46,7 +45,7 @@ struct BookableProductListSyncable: ListSyncable {
4645
pageSize: pageSize,
4746
stockStatus: nil,
4847
productStatus: nil,
49-
productTypes: [.booking, .bookableService],
48+
productType: .booking,
5049
productCategory: nil,
5150
sortOrder: .dateDescending,
5251
productIDs: [],
@@ -64,7 +63,7 @@ struct BookableProductListSyncable: ListSyncable {
6463
filter: .name,
6564
pageNumber: pageNumber,
6665
pageSize: pageSize,
67-
productTypes: [.booking, .bookableService],
66+
productType: .booking,
6867
onCompletion: completion
6968
)
7069
}

WooCommerce/Classes/Bookings/BookingsTabEligibilityChecker.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ private extension BookingsTabEligibilityChecker {
7878
@MainActor
7979
func checkIfStoreHasBookableProducts() async -> Bool {
8080
await withCheckedContinuation { continuation in
81-
stores.dispatch(ProductAction.checkIfStoreHasProducts(siteID: site.siteID, types: [.booking, .bookableService]) { result in
81+
stores.dispatch(ProductAction.checkIfStoreHasProducts(siteID: site.siteID, type: .booking) { result in
8282
let hasBookableProducts = (try? result.get()) ?? false
8383
continuation.resume(returning: hasBookableProducts)
8484
})

WooCommerce/Classes/Routing/ProductDetail/ProductDetailNavigator.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,6 @@ final class ProductDetailNavigator {
6565
}
6666

6767
private func shouldOpenInWeb(product: Product) -> Bool {
68-
return ciabChecker.isCurrentSiteCIAB && product.productType.isBooking
68+
return ciabChecker.isCurrentSiteCIAB && product.productType == .booking
6969
}
7070
}

WooCommerce/Classes/ViewRelated/Dashboard/Blaze/BlazeCampaignDashboardViewModel.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -285,6 +285,7 @@ private extension BlazeCampaignDashboardViewModel {
285285
pageNumber: Store.Default.firstPageNumber,
286286
stockStatus: nil,
287287
productStatus: .published,
288+
productType: nil,
288289
productCategory: nil,
289290
sortOrder: .dateDescending,
290291
shouldDeleteStoredProductsOnFirstPage: false,

WooCommerce/Classes/ViewRelated/Orders/OrderListViewModel.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,7 @@ final class OrderListViewModel {
177177
pageSize: 1,
178178
stockStatus: nil,
179179
productStatus: .published,
180+
productType: nil,
180181
productCategory: nil,
181182
sortOrder: .dateDescending,
182183
shouldDeleteStoredProductsOnFirstPage: false,

0 commit comments

Comments
 (0)