Skip to content

Commit 752a70b

Browse files
committed
Allow view model to be initialized with only required properties
1 parent f611ff5 commit 752a70b

File tree

1 file changed

+31
-7
lines changed

1 file changed

+31
-7
lines changed

WooCommerce/Classes/ViewRelated/Orders/Order Creation/ProductsSection/AddProductVariationToOrderViewModel.swift

Lines changed: 31 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,17 @@ final class AddProductVariationToOrderViewModel: ObservableObject {
1414
///
1515
private let stores: StoresManager
1616

17-
/// The product whose variations are listed
17+
/// The ID of the parent variable product
1818
///
19-
private var product: Product
19+
private let productID: Int64
20+
21+
/// The name of the parent variable product
22+
///
23+
let productName: String
24+
25+
/// All attributes for variations of the parent variable product
26+
///
27+
private let productAttributes: [ProductAttribute]
2028

2129
/// All purchasable product variations for the product.
2230
///
@@ -27,7 +35,7 @@ final class AddProductVariationToOrderViewModel: ObservableObject {
2735
/// View models for each product variation row
2836
///
2937
var productVariationRows: [ProductRowViewModel] {
30-
productVariations.map { .init(productVariation: $0, allAttributes: product.attributesForVariations, canChangeQuantity: false) }
38+
productVariations.map { .init(productVariation: $0, allAttributes: productAttributes, canChangeQuantity: false) }
3139
}
3240

3341
// MARK: Sync & Storage properties
@@ -55,25 +63,41 @@ final class AddProductVariationToOrderViewModel: ObservableObject {
5563
/// Product Variations Results Controller.
5664
///
5765
private lazy var productVariationsResultsController: ResultsController<StorageProductVariation> = {
58-
let predicate = NSPredicate(format: "siteID == %lld AND productID == %lld", siteID, product.productID)
66+
let predicate = NSPredicate(format: "siteID == %lld AND productID == %lld", siteID, productID)
5967
let descriptor = NSSortDescriptor(keyPath: \StorageProductVariation.menuOrder, ascending: true)
6068
let resultsController = ResultsController<StorageProductVariation>(storageManager: storageManager, matching: predicate, sortedBy: [descriptor])
6169
return resultsController
6270
}()
6371

6472
init(siteID: Int64,
65-
product: Product,
73+
productID: Int64,
74+
productName: String,
75+
productAttributes: [ProductAttribute],
6676
storageManager: StorageManagerType = ServiceLocator.storageManager,
6777
stores: StoresManager = ServiceLocator.stores) {
6878
self.siteID = siteID
69-
self.product = product
79+
self.productID = productID
80+
self.productName = productName
81+
self.productAttributes = productAttributes
7082
self.storageManager = storageManager
7183
self.stores = stores
7284

7385
configureSyncingCoordinator()
7486
configureProductVariationsResultsController()
7587
}
7688

89+
convenience init(siteID: Int64,
90+
product: Product,
91+
storageManager: StorageManagerType = ServiceLocator.storageManager,
92+
stores: StoresManager = ServiceLocator.stores) {
93+
self.init(siteID: siteID,
94+
productID: product.productID,
95+
productName: product.name,
96+
productAttributes: product.attributesForVariations,
97+
storageManager: storageManager,
98+
stores: stores)
99+
}
100+
77101
/// Select a product variation to add to the order
78102
///
79103
func selectVariation(_ productID: Int64) {
@@ -88,7 +112,7 @@ extension AddProductVariationToOrderViewModel: SyncingCoordinatorDelegate {
88112
func sync(pageNumber: Int, pageSize: Int, reason: String? = nil, onCompletion: ((Bool) -> Void)?) {
89113
transitionToSyncingState()
90114
let action = ProductVariationAction.synchronizeProductVariations(siteID: siteID,
91-
productID: product.productID,
115+
productID: productID,
92116
pageNumber: pageNumber,
93117
pageSize: pageSize) { [weak self] error in
94118
guard let self = self else { return }

0 commit comments

Comments
 (0)