Skip to content

Commit 732cda3

Browse files
authored
Shipping Labels: Mark manually saved addresses as unverified (#16013)
2 parents 97dd8eb + 3e929e5 commit 732cda3

File tree

10 files changed

+91
-34
lines changed

10 files changed

+91
-34
lines changed

Modules/Sources/Networking/Remote/WooShippingRemote.swift

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ public protocol WooShippingRemoteProtocol {
6363
func updateDestinationAddress(siteID: Int64,
6464
orderID: Int64,
6565
address: WooShippingDestinationAddress,
66+
isVerified: Bool,
6667
completion: @escaping (Result<WooShippingDestinationAddressUpdate, Error>) -> Void)
6768
func loadConfig(siteID: Int64,
6869
orderID: Int64,
@@ -465,17 +466,12 @@ public final class WooShippingRemote: Remote, WooShippingRemoteProtocol {
465466
public func updateDestinationAddress(siteID: Int64,
466467
orderID: Int64,
467468
address: WooShippingDestinationAddress,
469+
isVerified: Bool,
468470
completion: @escaping (Result<WooShippingDestinationAddressUpdate, Error>) -> Void) {
469471
do {
470472
let parameters: [String: Any] = [
471473
ParameterKey.address: try address.toDictionary(),
472-
/*
473-
* Always gets saved as true, because this endpoint is called after the address is normalized
474-
* and the normalized address is suggested to the user to confirm and use.
475-
* The user may however choose to not use the normalized address, in which case the isVerified will
476-
* still be true, as they've confirmed the address
477-
*/
478-
ParameterKey.isVerified: true
474+
ParameterKey.isVerified: isVerified
479475
]
480476
let path = Path.updateDestination(orderID: orderID)
481477
let request = JetpackRequest(wooApiVersion: .wooShipping,

Modules/Sources/Yosemite/Actions/WooShippingAction.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ public enum WooShippingAction: Action {
9898
case updateDestinationAddress(siteID: Int64,
9999
orderID: Int64,
100100
address: WooShippingDestinationAddress,
101+
isVerified: Bool,
101102
completion: (Result<WooShippingDestinationAddressUpdate, Error>) -> Void)
102103

103104
/// Loads label config for a given order

Modules/Sources/Yosemite/Stores/WooShippingStore.swift

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -82,8 +82,8 @@ public final class WooShippingStore: Store {
8282
updateOriginAddress(siteID: siteID, address: address, isVerified: isVerified, completion: completion)
8383
case let .verifyDestinationAddress(siteID, orderID, completion):
8484
verifyDestinationAddress(siteID: siteID, orderID: orderID, completion: completion)
85-
case let .updateDestinationAddress(siteID, orderID, address, completion):
86-
updateDestinationAddress(siteID: siteID, orderID: orderID, address: address, completion: completion)
85+
case let .updateDestinationAddress(siteID, orderID, address, isVerified, completion):
86+
updateDestinationAddress(siteID: siteID, orderID: orderID, address: address, isVerified: isVerified, completion: completion)
8787
case let .loadConfig(siteID, orderID, completion):
8888
loadConfig(siteID: siteID, orderID: orderID, completion: completion)
8989
case let .syncShipments(siteID, orderID, completion):
@@ -410,8 +410,9 @@ private extension WooShippingStore {
410410
func updateDestinationAddress(siteID: Int64,
411411
orderID: Int64,
412412
address: WooShippingDestinationAddress,
413+
isVerified: Bool,
413414
completion: @escaping (Result<WooShippingDestinationAddressUpdate, Error>) -> Void) {
414-
remote.updateDestinationAddress(siteID: siteID, orderID: orderID, address: address) { [weak self] result in
415+
remote.updateDestinationAddress(siteID: siteID, orderID: orderID, address: address, isVerified: isVerified) { [weak self] result in
415416
completion(result)
416417

417418
guard let self, case .success = result else { return }

Modules/Tests/NetworkingTests/Remote/WooShippingRemoteTests.swift

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -793,7 +793,8 @@ final class WooShippingRemoteTests: XCTestCase {
793793
let result: Result<WooShippingDestinationAddressUpdate, Error> = waitFor { promise in
794794
remote.updateDestinationAddress(siteID: self.sampleSiteID,
795795
orderID: self.sampleOrderID,
796-
address: WooShippingDestinationAddress.fake()) { result in
796+
address: WooShippingDestinationAddress.fake(),
797+
isVerified: true) { result in
797798
promise(result)
798799
}
799800
}
@@ -813,7 +814,8 @@ final class WooShippingRemoteTests: XCTestCase {
813814
let result: Result<WooShippingDestinationAddressUpdate, Error> = waitFor { promise in
814815
remote.updateDestinationAddress(siteID: self.sampleSiteID,
815816
orderID: self.sampleOrderID,
816-
address: WooShippingDestinationAddress.fake()) { result in
817+
address: WooShippingDestinationAddress.fake(),
818+
isVerified: true) { result in
817819
promise(result)
818820
}
819821
}

Modules/Tests/YosemiteTests/Mocks/Networking/Remote/MockWooShippingRemote.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -443,6 +443,7 @@ extension MockWooShippingRemote: WooShippingRemoteProtocol {
443443
func updateDestinationAddress(siteID: Int64,
444444
orderID: Int64,
445445
address: WooShippingDestinationAddress,
446+
isVerified: Bool,
446447
completion: @escaping (Result<WooShippingDestinationAddressUpdate, any Error>) -> Void) {
447448
DispatchQueue.main.async { [weak self] in
448449
guard let self = self else { return }

Modules/Tests/YosemiteTests/Stores/WooShippingStoreTests.swift

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1075,7 +1075,8 @@ final class WooShippingStoreTests: XCTestCase {
10751075
let result: Result<WooShippingDestinationAddressUpdate, Error> = waitFor { promise in
10761076
let action = WooShippingAction.updateDestinationAddress(siteID: self.sampleSiteID,
10771077
orderID: self.sampleOrderID,
1078-
address: WooShippingDestinationAddress.fake()) { result in
1078+
address: WooShippingDestinationAddress.fake(),
1079+
isVerified: true) { result in
10791080
promise(result)
10801081
}
10811082
store.onAction(action)
@@ -1098,7 +1099,8 @@ final class WooShippingStoreTests: XCTestCase {
10981099
let result: Result<WooShippingDestinationAddressUpdate, Error> = waitFor { promise in
10991100
let action = WooShippingAction.updateDestinationAddress(siteID: self.sampleSiteID,
11001101
orderID: self.sampleOrderID,
1101-
address: WooShippingDestinationAddress.fake()) { result in
1102+
address: WooShippingDestinationAddress.fake(),
1103+
isVerified: true) { result in
11021104
promise(result)
11031105
}
11041106
store.onAction(action)

RELEASE-NOTES.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
- [*] Add "POS" label in Most recent orders in My store dashboard [https://github.com/woocommerce/woocommerce-ios/pull/16006]
1111
- [*] Order details: Always show shipping labels section if order is eligible for label creation. [https://github.com/woocommerce/woocommerce-ios/pull/16010]
1212
- [*] Order details: Remove print buttons from shipment details [https://github.com/woocommerce/woocommerce-ios/pull/16012]
13+
- [*] Shipping labels: Mark manually saved addresses as unverified [https://github.com/woocommerce/woocommerce-ios/pull/16013]
1314
- [*] Shipping Labels: Updated incorrect HS Tariff info page. [https://github.com/woocommerce/woocommerce-ios/pull/16016]
1415

1516
23.0

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

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,8 @@ final class WooShippingEditAddressViewModel: ObservableObject, Identifiable {
192192

193193
/// Closure called when a destination address is done being edited and the changes are confirmed.
194194
/// Returns the updated address and email address.
195-
private(set) var onDestinationAddressEdited: ((WooShippingAddress, String?) -> Void)?
195+
private(set) var onDestinationAddressEdited: ((_ result: WooShippingDestinationAddressUpdate,
196+
_ email: String?) -> Void)?
196197

197198
init(type: AddressType,
198199
id: String,
@@ -215,7 +216,7 @@ final class WooShippingEditAddressViewModel: ObservableObject, Identifiable {
215216
debounceDelayInSeconds: Double = 1,
216217
analytics: Analytics = ServiceLocator.analytics,
217218
onOriginAddressEdited: ((WooShippingOriginAddress) -> Void)? = nil,
218-
onDestinationAddressEdited: ((WooShippingAddress, String?) -> Void)? = nil) {
219+
onDestinationAddressEdited: ((WooShippingDestinationAddressUpdate, String?) -> Void)? = nil) {
219220
self.addressType = type
220221
self.id = id
221222
self.name = WooShippingAddressField(type: .name, value: name, required: company.isEmpty, validate: { _ in return nil })
@@ -327,7 +328,7 @@ final class WooShippingEditAddressViewModel: ObservableObject, Identifiable {
327328
originStateCode: String?,
328329
stores: StoresManager = ServiceLocator.stores,
329330
storageManager: StorageManagerType = ServiceLocator.storageManager,
330-
onAddressEdited: ((WooShippingAddress, String?) -> Void)? = nil) {
331+
onAddressEdited: ((WooShippingDestinationAddressUpdate, String?) -> Void)? = nil) {
331332
self.init(type: .destination(orderID: orderID),
332333
id: UUID().uuidString,
333334
name: address?.name ?? "",
@@ -496,9 +497,12 @@ final class WooShippingEditAddressViewModel: ObservableObject, Identifiable {
496497

497498
Task { @MainActor in
498499
do {
499-
let updatedDestinationAddress = try await updateDestinationAddress(for: orderID,
500-
with: destinationAddress)
501-
onDestinationAddressEdited?(updatedDestinationAddress.toWooShippingAddress(), email.value)
500+
let result = try await updateDestinationAddress(
501+
for: orderID,
502+
with: destinationAddress,
503+
isVerified: !withoutVerification
504+
)
505+
onDestinationAddressEdited?(result, email.value)
502506
analytics.track(event: .WooShipping.editingAddressStep(
503507
type: .destination,
504508
state: withoutVerification ? .confirmedWithoutVerification : .confirmed
@@ -727,16 +731,18 @@ private extension WooShippingEditAddressViewModel {
727731
/// Updates a destination address remotely.
728732
@MainActor
729733
func updateDestinationAddress(for orderID: Int64,
730-
with address: WooShippingDestinationAddress) async throws -> WooShippingDestinationAddress {
734+
with address: WooShippingDestinationAddress,
735+
isVerified: Bool) async throws -> WooShippingDestinationAddressUpdate {
731736
return try await withCheckedThrowingContinuation { continuation in
732737
isLoading = true
733738
let action = WooShippingAction.updateDestinationAddress(siteID: siteID,
734739
orderID: orderID,
735-
address: address) { [weak self] result in
740+
address: address,
741+
isVerified: isVerified) { [weak self] result in
736742
guard let self else { return }
737743
switch result {
738744
case let .success(result):
739-
continuation.resume(returning: result.address)
745+
continuation.resume(returning: result)
740746
case .failure(let error):
741747
continuation.resume(throwing: error)
742748
}

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -419,13 +419,13 @@ final class WooShippingCreateLabelsViewModel: ObservableObject {
419419
isVerified: destinationAddressStatus == .verified,
420420
originCountryCode: selectedOriginAddress?.country,
421421
originStateCode: selectedOriginAddress?.state,
422-
onAddressEdited: { [weak self] editedAddress, editedEmail in
422+
onAddressEdited: { [weak self] result, editedEmail in
423423
guard let self else {
424424
return
425425
}
426-
destinationAddress = editedAddress
426+
destinationAddress = result.address.toWooShippingAddress()
427427
destinationEmail = editedEmail
428-
destinationAddressStatus = .verified
428+
destinationAddressStatus = result.isVerified ? .verified : .unverified
429429
addressToEdit = nil // Dismisses address edit screen
430430
})
431431
}

0 commit comments

Comments
 (0)