Skip to content

Commit 26e3d81

Browse files
committed
Fix build failure after merging develop
1 parent fd14234 commit 26e3d81

File tree

9 files changed

+89
-46
lines changed

9 files changed

+89
-46
lines changed

WooCommerce/Classes/ViewRelated/Orders/Order Details/Shipping Labels/Create Shipping Label Form/Package Details/Multi-package/ShippingLabelPackageItem.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,9 @@ struct ShippingLabelPackageItem_Previews: PreviewProvider {
9999
selectedPackageID: "Box 1",
100100
totalWeight: "",
101101
products: [],
102-
productVariations: []) { _ in }
102+
productVariations: [],
103+
onPackageSwitch: { _ in },
104+
onPackagesSync: { _ in })
103105
ShippingLabelPackageItem(packageNumber: 1, isCollapsible: true, safeAreaInsets: .zero, viewModel: viewModel)
104106
}
105107
}

WooCommerce/Classes/ViewRelated/Orders/Order Details/Shipping Labels/Create Shipping Label Form/Package Details/Multi-package/ShippingLabelPackageItemViewModel.swift

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,17 @@ import Yosemite
66
final class ShippingLabelPackageItemViewModel: ObservableObject {
77

88
typealias PackageSwitchHandler = (_ newPackage: ShippingLabelPackageAttributes) -> Void
9+
typealias PackagesSyncHandler = (_ packagesResponse: ShippingLabelPackagesResponse?) -> Void
910

1011
/// The id of the selected package. Defaults to last selected package, if any.
1112
///
1213
let selectedPackageID: String
1314

1415
/// View model for the package list
1516
///
16-
let packageListViewModel: ShippingLabelPackageListViewModel
17+
lazy var packageListViewModel: ShippingLabelPackageListViewModel = {
18+
.init(siteID: order.siteID, packagesResponse: packagesResponse)
19+
}()
1720

1821
@Published var totalWeight: String = ""
1922

@@ -38,6 +41,11 @@ final class ShippingLabelPackageItemViewModel: ObservableObject {
3841
private let currency: String
3942
private let currencyFormatter: CurrencyFormatter
4043
private let onPackageSwitch: PackageSwitchHandler
44+
private let onPackagesSync: PackagesSyncHandler
45+
46+
/// The packages response fetched from API
47+
///
48+
private var packagesResponse: ShippingLabelPackagesResponse?
4149

4250
/// The weight unit used in the Store
4351
///
@@ -55,6 +63,7 @@ final class ShippingLabelPackageItemViewModel: ObservableObject {
5563
products: [Product],
5664
productVariations: [ProductVariation],
5765
onPackageSwitch: @escaping PackageSwitchHandler,
66+
onPackagesSync: @escaping PackagesSyncHandler,
5867
formatter: CurrencyFormatter = CurrencyFormatter(currencySettings: ServiceLocator.currencySettings),
5968
weightUnit: String? = ServiceLocator.shippingSettingsService.weightUnit) {
6069
self.order = order
@@ -64,7 +73,8 @@ final class ShippingLabelPackageItemViewModel: ObservableObject {
6473
self.weightUnit = weightUnit
6574
self.selectedPackageID = selectedPackageID
6675
self.onPackageSwitch = onPackageSwitch
67-
self.packageListViewModel = ShippingLabelPackageListViewModel(packagesResponse: packagesResponse)
76+
self.onPackagesSync = onPackagesSync
77+
self.packagesResponse = packagesResponse
6878
self.packageListViewModel.delegate = self
6979

7080
packageListViewModel.didSelectPackage(selectedPackageID)
@@ -108,6 +118,12 @@ extension ShippingLabelPackageItemViewModel: ShippingLabelPackageSelectionDelega
108118

109119
onPackageSwitch(newPackage)
110120
}
121+
122+
func didSyncPackages(packagesResponse: ShippingLabelPackagesResponse?) {
123+
self.packagesResponse = packagesResponse
124+
packageListViewModel = .init(siteID: order.siteID, packagesResponse: packagesResponse)
125+
onPackagesSync(packagesResponse)
126+
}
111127
}
112128

113129
// MARK: - Helper methods

WooCommerce/Classes/ViewRelated/Orders/Order Details/Shipping Labels/Create Shipping Label Form/Package Details/Multi-package/ShippingLabelPackagesForm.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ struct ShippingLabelPackagesForm_Previews: PreviewProvider {
5151
static var previews: some View {
5252
let viewModel = ShippingLabelPackagesFormViewModel(order: ShippingLabelPackagesFormViewModel.sampleOrder(),
5353
packagesResponse: ShippingLabelPackagesFormViewModel.samplePackageDetails(),
54-
selectedPackages: [])
54+
selectedPackages: []) { _ in }
5555

5656
ShippingLabelPackagesForm(viewModel: viewModel)
5757
.environment(\.colorScheme, .light)

WooCommerce/Classes/ViewRelated/Orders/Order Details/Shipping Labels/Create Shipping Label Form/Package Details/Multi-package/ShippingLabelPackagesFormViewModel.swift

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ final class ShippingLabelPackagesFormViewModel: ObservableObject {
2121
private let stores: StoresManager
2222
private let storageManager: StorageManagerType
2323
private var resultsControllers: ShippingLabelPackageDetailsResultsControllers?
24+
private let onPackageSyncCompletion: (_ packagesResponse: ShippingLabelPackagesResponse?) -> Void
2425

2526
private var cancellables: Set<AnyCancellable> = []
2627

@@ -39,6 +40,7 @@ final class ShippingLabelPackagesFormViewModel: ObservableObject {
3940
init(order: Order,
4041
packagesResponse: ShippingLabelPackagesResponse?,
4142
selectedPackages: [ShippingLabelPackageAttributes],
43+
onPackageSyncCompletion: @escaping (_ packagesResponse: ShippingLabelPackagesResponse?) -> Void,
4244
formatter: CurrencyFormatter = CurrencyFormatter(currencySettings: ServiceLocator.currencySettings),
4345
stores: StoresManager = ServiceLocator.stores,
4446
storageManager: StorageManagerType = ServiceLocator.storageManager,
@@ -47,6 +49,7 @@ final class ShippingLabelPackagesFormViewModel: ObservableObject {
4749
self.stores = stores
4850
self.storageManager = storageManager
4951
self.selectedPackages = selectedPackages
52+
self.onPackageSyncCompletion = onPackageSyncCompletion
5053

5154
configureResultsControllers()
5255
syncProducts()
@@ -80,9 +83,13 @@ final class ShippingLabelPackagesFormViewModel: ObservableObject {
8083
selectedPackageID: details.packageID,
8184
totalWeight: details.totalWeight,
8285
products: products,
83-
productVariations: variations) { [weak self] newPackage in
84-
self?.switchPackage(currentID: details.packageID, newPackage: newPackage)
85-
}
86+
productVariations: variations,
87+
onPackageSwitch: { [weak self] newPackage in
88+
self?.switchPackage(currentID: details.packageID, newPackage: newPackage)
89+
},
90+
onPackagesSync: { [weak self] packagesResponse in
91+
self?.onPackageSyncCompletion(packagesResponse)
92+
})
8693
}
8794
}
8895
.sink { [weak self] viewModels in

WooCommerce/Classes/ViewRelated/Orders/Order Details/Shipping Labels/Create Shipping Label Form/Package Details/Package Selection/ShippingLabelPackageList.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,8 @@ private extension ShippingLabelPackageList {
9595

9696
struct ShippingLabelPackageList_Previews: PreviewProvider {
9797
static var previews: some View {
98-
let viewModel = ShippingLabelPackageListViewModel(packagesResponse: ShippingLabelPackageDetailsViewModel.samplePackageDetails())
98+
let viewModel = ShippingLabelPackageListViewModel(siteID: 123,
99+
packagesResponse: ShippingLabelPackageDetailsViewModel.samplePackageDetails())
99100
ShippingLabelPackageList(viewModel: viewModel)
100101
}
101102
}

WooCommerce/Classes/ViewRelated/Orders/Order Details/Shipping Labels/Create Shipping Label Form/Package Details/Package Selection/ShippingLabelPackageListViewModel.swift

Lines changed: 38 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import Yosemite
33

44
protocol ShippingLabelPackageSelectionDelegate: AnyObject {
55
func didSelectPackage(id: String)
6+
func didSyncPackages(packagesResponse: ShippingLabelPackagesResponse?)
67
}
78

89
/// View model for `ShippingLabelPackageList` and `ShippingLabelPackageSelection`.
@@ -33,15 +34,23 @@ final class ShippingLabelPackageListViewModel: ObservableObject {
3334
return customPackages.isNotEmpty || predefinedOptions.isNotEmpty
3435
}
3536

36-
lazy var addNewPackageViewModel: ShippingLabelAddNewPackageViewModel = ShippingLabelAddNewPackageViewModel(packagesResponse: packagesResponse)
37+
lazy var addNewPackageViewModel = ShippingLabelAddNewPackageViewModel(siteID: siteID,
38+
packagesResponse: packagesResponse,
39+
onCompletion: { [weak self] (customPackage, predefinedOption, packagesResponse) in
40+
guard let self = self else { return }
41+
self.handleNewPackage(customPackage, predefinedOption, packagesResponse)
42+
})
3743

3844
weak var delegate: ShippingLabelPackageSelectionDelegate?
3945

4046
/// The packages response fetched from API
4147
///
42-
private let packagesResponse: ShippingLabelPackagesResponse?
48+
private var packagesResponse: ShippingLabelPackagesResponse?
4349

44-
init(packagesResponse: ShippingLabelPackagesResponse?) {
50+
private let siteID: Int64
51+
52+
init(siteID: Int64, packagesResponse: ShippingLabelPackagesResponse?) {
53+
self.siteID = siteID
4554
self.packagesResponse = packagesResponse
4655
}
4756
}
@@ -97,4 +106,30 @@ extension ShippingLabelPackageListViewModel {
97106
}
98107
}
99108
}
109+
110+
/// Selects a newly created custom package or newly activated service package and adds it to the package list
111+
///
112+
private func handleNewPackage(_ customPackage: ShippingLabelCustomPackage?,
113+
_ servicePackage: ShippingLabelPredefinedPackage?,
114+
_ packagesResponse: ShippingLabelPackagesResponse?) {
115+
guard let packagesResponse = packagesResponse else {
116+
return
117+
}
118+
119+
self.packagesResponse = packagesResponse
120+
addNewPackageViewModel = .init(siteID: siteID,
121+
packagesResponse: packagesResponse,
122+
onCompletion: { [weak self] (customPackage, predefinedOption, packagesResponse) in
123+
guard let self = self else { return }
124+
self.handleNewPackage(customPackage, predefinedOption, packagesResponse)
125+
})
126+
if let customPackage = customPackage {
127+
selectCustomPackage(customPackage.title)
128+
}
129+
else if let servicePackage = servicePackage {
130+
selectPredefinedPackage(servicePackage.id)
131+
}
132+
133+
delegate?.didSyncPackages(packagesResponse: packagesResponse)
134+
}
100135
}

WooCommerce/Classes/ViewRelated/Orders/Order Details/Shipping Labels/Create Shipping Label Form/Package Details/Package Selection/ShippingLabelPackageSelection.swift

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,9 @@ struct ShippingLabelPackageSelection: View {
1616

1717
struct ShippingLabelPackageSelection_Previews: PreviewProvider {
1818
static var previews: some View {
19-
let viewModelWithPackages = ShippingLabelPackageListViewModel(packagesResponse: ShippingLabelPackageDetailsViewModel.samplePackageDetails())
20-
let viewModelWithoutPackages = ShippingLabelPackageListViewModel(packagesResponse: nil)
19+
let viewModelWithPackages = ShippingLabelPackageListViewModel(siteID: 123,
20+
packagesResponse: ShippingLabelPackageDetailsViewModel.samplePackageDetails())
21+
let viewModelWithoutPackages = ShippingLabelPackageListViewModel(siteID: 123, packagesResponse: nil)
2122

2223
ShippingLabelPackageSelection(viewModel: viewModelWithPackages)
2324
ShippingLabelPackageSelection(viewModel: viewModelWithoutPackages)

WooCommerce/Classes/ViewRelated/Orders/Order Details/Shipping Labels/Create Shipping Label Form/Package Details/ShippingLabelPackageDetailsViewModel.swift

Lines changed: 10 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -70,14 +70,6 @@ final class ShippingLabelPackageDetailsViewModel: ObservableObject {
7070
///
7171
@Published private var isPackageWeightEdited: Bool = false
7272

73-
// TODO-4599: check this
74-
lazy var addNewPackageViewModel = ShippingLabelAddNewPackageViewModel(siteID: order.siteID,
75-
packagesResponse: packagesResponse,
76-
onCompletion: { [weak self] (customPackage, predefinedOption, packagesResponse) in
77-
guard let self = self else { return }
78-
self.handleNewPackage(customPackage, predefinedOption, packagesResponse)
79-
})
80-
8173
/// Completion callback after package details are synced from remote
8274
///
8375
private let onPackageSyncCompletion: (_ packagesResponse: ShippingLabelPackagesResponse?) -> Void
@@ -102,8 +94,9 @@ final class ShippingLabelPackageDetailsViewModel: ObservableObject {
10294
self.stores = stores
10395
self.storageManager = storageManager
10496
self.weightUnit = weightUnit
105-
self.packageListViewModel = ShippingLabelPackageListViewModel(packagesResponse: packagesResponse)
106-
self.selectedPackageID = selectedPackages.first?.packageID // TODO-4599: fix this
97+
self.packageListViewModel = ShippingLabelPackageListViewModel(siteID: order.siteID, packagesResponse: packagesResponse)
98+
// This is temporary solution while supporting both single and multiple packages solution.
99+
self.selectedPackageID = selectedPackages.first?.packageID
107100
self.onPackageSyncCompletion = onPackageSyncCompletion
108101
self.onPackageSaveCompletion = onPackageSaveCompletion
109102
self.packageListViewModel.delegate = self
@@ -113,7 +106,9 @@ final class ShippingLabelPackageDetailsViewModel: ObservableObject {
113106
syncProducts()
114107
syncProductVariations()
115108
configureItemRows()
116-
configureTotalWeights(initialTotalWeight: selectedPackages.first?.totalWeight) // TODO-4599: fix this
109+
110+
// This is temporary solution while supporting both single and multiple packages solution.
111+
configureTotalWeights(initialTotalWeight: selectedPackages.first?.totalWeight)
117112
}
118113

119114
/// Observe changes in products and variations to update item rows.
@@ -283,6 +278,10 @@ extension ShippingLabelPackageDetailsViewModel: ShippingLabelPackageSelectionDel
283278
selectedPackageID = id
284279
}
285280

281+
func didSyncPackages(packagesResponse: ShippingLabelPackagesResponse?) {
282+
onPackageSyncCompletion(packagesResponse)
283+
}
284+
286285
/// Sets the package passed through the init method, or set the last selected package, if any, as the default selected package
287286
///
288287
func setDefaultPackage() {
@@ -292,27 +291,6 @@ extension ShippingLabelPackageDetailsViewModel: ShippingLabelPackageSelectionDel
292291
packageListViewModel.didSelectPackage(selectedPackageID)
293292
packageListViewModel.confirmPackageSelection()
294293
}
295-
296-
/// Selects a newly created custom package or newly activated service package and adds it to the package list
297-
///
298-
func handleNewPackage(_ customPackage: ShippingLabelCustomPackage?,
299-
_ servicePackage: ShippingLabelPredefinedPackage?,
300-
_ packagesResponse: ShippingLabelPackagesResponse?) {
301-
guard let packagesResponse = packagesResponse else {
302-
return
303-
}
304-
305-
self.packagesResponse = packagesResponse
306-
307-
if let customPackage = customPackage {
308-
selectCustomPackage(customPackage.title)
309-
}
310-
else if let servicePackage = servicePackage {
311-
selectPredefinedPackage(servicePackage.id)
312-
}
313-
314-
onPackageSyncCompletion(packagesResponse)
315-
}
316294
}
317295

318296
/// API Requests

WooCommerce/Classes/ViewRelated/Orders/Order Details/Shipping Labels/Create Shipping Label Form/ShippingLabelFormViewController.swift

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -420,7 +420,10 @@ private extension ShippingLabelFormViewController {
420420
if ServiceLocator.featureFlagService.isFeatureFlagEnabled(.shippingLabelsMultiPackage) {
421421
let vm = ShippingLabelPackagesFormViewModel(order: viewModel.order,
422422
packagesResponse: viewModel.packagesResponse,
423-
selectedPackages: inputPackages)
423+
selectedPackages: inputPackages,
424+
onPackageSyncCompletion: { [weak self] (packagesResponse) in
425+
self?.viewModel.handleNewPackagesResponse(packagesResponse: packagesResponse)
426+
})
424427
let packagesForm = ShippingLabelPackagesForm(viewModel: vm)
425428
let hostingVC = UIHostingController(rootView: packagesForm)
426429
navigationController?.show(hostingVC, sender: nil)

0 commit comments

Comments
 (0)