Skip to content

Commit c73252e

Browse files
committed
Add support for editing the destination email
1 parent cf1a767 commit c73252e

File tree

3 files changed

+15
-7
lines changed

3 files changed

+15
-7
lines changed

WooCommerce/Classes/ViewRelated/Orders/Order Details/Shipping Labels/WooShipping Create Shipping Labels/WooShippingAddresses/WooShippingEditAddressViewModel.swift

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,8 @@ final class WooShippingEditAddressViewModel: ObservableObject, Identifiable {
159159
private(set) var onOriginAddressEdited: ((WooShippingOriginAddress) -> Void)?
160160

161161
/// Closure called when a destination address is done being edited and the changes are confirmed.
162-
private(set) var onDestinationAddressEdited: ((WooShippingAddress) -> Void)?
162+
/// Returns the updated address and email address.
163+
private(set) var onDestinationAddressEdited: ((WooShippingAddress, String?) -> Void)?
163164

164165
init(type: AddressType,
165166
id: String,
@@ -180,7 +181,7 @@ final class WooShippingEditAddressViewModel: ObservableObject, Identifiable {
180181
storageManager: StorageManagerType = ServiceLocator.storageManager,
181182
debounceDelayInSeconds: Double = 1,
182183
onOriginAddressEdited: ((WooShippingOriginAddress) -> Void)? = nil,
183-
onDestinationAddressEdited: ((WooShippingAddress) -> Void)? = nil) {
184+
onDestinationAddressEdited: ((WooShippingAddress, String?) -> Void)? = nil) {
184185
self.addressType = type
185186
self.id = id
186187
self.name = WooShippingAddressField(type: .name, value: name, required: company.isEmpty, validate: { _ in return nil })
@@ -271,10 +272,11 @@ final class WooShippingEditAddressViewModel: ObservableObject, Identifiable {
271272
}
272273

273274
convenience init(address: WooShippingAddress?,
275+
email: String?,
274276
isVerified: Bool,
275277
stores: StoresManager = ServiceLocator.stores,
276278
storageManager: StorageManagerType = ServiceLocator.storageManager,
277-
onAddressEdited: ((WooShippingAddress) -> Void)? = nil) {
279+
onAddressEdited: ((WooShippingAddress, String?) -> Void)? = nil) {
278280
self.init(type: .destination,
279281
id: UUID().uuidString,
280282
name: address?.name ?? "",
@@ -284,7 +286,7 @@ final class WooShippingEditAddressViewModel: ObservableObject, Identifiable {
284286
city: address?.city ?? "",
285287
state: address?.state ?? "",
286288
postalCode: address?.postcode ?? "",
287-
email: "",
289+
email: email ?? "",
288290
phone: address?.phone ?? "",
289291
isDefaultAddress: false,
290292
showCompanyField: address?.company.isNotEmpty == true,

WooCommerce/Classes/ViewRelated/Orders/Order Details/Shipping Labels/WooShipping Create Shipping Labels/WooShippingCreateLabelsViewModel.swift

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ final class WooShippingCreateLabelsViewModel: ObservableObject {
99
private let currencyFormatter: CurrencyFormatter
1010
private let itemsDataSource: WooShippingItemsDataSource
1111
private var destinationAddress: WooShippingAddress?
12+
private var destinationEmail: String?
1213
private let stores: StoresManager
1314
private var subscriptions: Set<AnyCancellable> = []
1415
private var debounceDuration: Double = 1
@@ -182,6 +183,7 @@ final class WooShippingCreateLabelsViewModel: ObservableObject {
182183
self.currencyFormatter = CurrencyFormatter(currencySettings: currencySettings)
183184
self.onLabelPurchase = onLabelPurchase
184185
self.destinationAddress = Self.getDestinationAddress(order: order, address: order.shippingAddress)
186+
self.destinationEmail = order.shippingAddress?.email ?? order.billingAddress?.email
185187
self.shippingLines = order.shippingLines.map({ WooShipping_ShippingLineViewModel(shippingLine: $0, currency: order.currency) })
186188
self.selectedOriginAddress = selectedOriginAddress
187189
self.selectedPackage = selectedPackage
@@ -282,12 +284,14 @@ final class WooShippingCreateLabelsViewModel: ObservableObject {
282284
/// After the address is edited, the destination address is replaced with the updated address.
283285
func editDestinationAddress() {
284286
addressToEdit = WooShippingEditAddressViewModel(address: destinationAddress,
287+
email: destinationEmail,
285288
isVerified: destinationAddressStatus == .verified,
286-
onAddressEdited: { [weak self] editedAddress in
289+
onAddressEdited: { [weak self] editedAddress, editedEmail in
287290
guard let self else {
288291
return
289292
}
290293
destinationAddress = editedAddress
294+
destinationEmail = editedEmail
291295
addressToEdit = nil // Dismisses address edit screen
292296
})
293297
}

WooCommerce/WooCommerceTests/ViewRelated/Shipping Label/WooShipping Create Shipping Labels/WooShippingEditAddressViewModelTests.swift

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,9 +117,11 @@ final class WooShippingEditAddressViewModelTests: XCTestCase {
117117
address2: "STE 100",
118118
city: "TICONDEROGA",
119119
postcode: "12883-1487")
120+
let email = "[email protected]"
120121

121122
// When
122123
let viewModel = WooShippingEditAddressViewModel(address: address,
124+
email: email,
123125
isVerified: false,
124126
storageManager: storageManager)
125127

@@ -132,9 +134,9 @@ final class WooShippingEditAddressViewModelTests: XCTestCase {
132134
XCTAssertEqual(viewModel.state.value, address.state)
133135
XCTAssertEqual(viewModel.postalCode.value, address.postcode)
134136
XCTAssertEqual(viewModel.phone.value, address.phone)
135-
XCTAssertEqual(viewModel.email.value, "")
137+
XCTAssertEqual(viewModel.email.value, email)
136138
XCTAssertTrue(viewModel.showCompanyField)
137-
XCTAssertEqual(viewModel.status, .missingInformation)
139+
XCTAssertEqual(viewModel.status, .unverified)
138140
XCTAssertFalse(viewModel.showSaveAsDefault)
139141
XCTAssertEqual(viewModel.countries.count, 2, "Should include all countries for destination addresses")
140142
}

0 commit comments

Comments
 (0)