Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 3 additions & 7 deletions Modules/Sources/Networking/Remote/WooShippingRemote.swift
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ public protocol WooShippingRemoteProtocol {
func updateDestinationAddress(siteID: Int64,
orderID: Int64,
address: WooShippingDestinationAddress,
isVerified: Bool,
completion: @escaping (Result<WooShippingDestinationAddressUpdate, Error>) -> Void)
func loadConfig(siteID: Int64,
orderID: Int64,
Expand Down Expand Up @@ -465,17 +466,12 @@ public final class WooShippingRemote: Remote, WooShippingRemoteProtocol {
public func updateDestinationAddress(siteID: Int64,
orderID: Int64,
address: WooShippingDestinationAddress,
isVerified: Bool,
completion: @escaping (Result<WooShippingDestinationAddressUpdate, Error>) -> Void) {
do {
let parameters: [String: Any] = [
ParameterKey.address: try address.toDictionary(),
/*
* Always gets saved as true, because this endpoint is called after the address is normalized
* and the normalized address is suggested to the user to confirm and use.
* The user may however choose to not use the normalized address, in which case the isVerified will
* still be true, as they've confirmed the address
*/
ParameterKey.isVerified: true
ParameterKey.isVerified: isVerified
]
let path = Path.updateDestination(orderID: orderID)
let request = JetpackRequest(wooApiVersion: .wooShipping,
Expand Down
1 change: 1 addition & 0 deletions Modules/Sources/Yosemite/Actions/WooShippingAction.swift
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,7 @@ public enum WooShippingAction: Action {
case updateDestinationAddress(siteID: Int64,
orderID: Int64,
address: WooShippingDestinationAddress,
isVerified: Bool,
completion: (Result<WooShippingDestinationAddressUpdate, Error>) -> Void)

/// Loads label config for a given order
Expand Down
7 changes: 4 additions & 3 deletions Modules/Sources/Yosemite/Stores/WooShippingStore.swift
Original file line number Diff line number Diff line change
Expand Up @@ -82,8 +82,8 @@ public final class WooShippingStore: Store {
updateOriginAddress(siteID: siteID, address: address, isVerified: isVerified, completion: completion)
case let .verifyDestinationAddress(siteID, orderID, completion):
verifyDestinationAddress(siteID: siteID, orderID: orderID, completion: completion)
case let .updateDestinationAddress(siteID, orderID, address, completion):
updateDestinationAddress(siteID: siteID, orderID: orderID, address: address, completion: completion)
case let .updateDestinationAddress(siteID, orderID, address, isVerified, completion):
updateDestinationAddress(siteID: siteID, orderID: orderID, address: address, isVerified: isVerified, completion: completion)
case let .loadConfig(siteID, orderID, completion):
loadConfig(siteID: siteID, orderID: orderID, completion: completion)
case let .syncShipments(siteID, orderID, completion):
Expand Down Expand Up @@ -410,8 +410,9 @@ private extension WooShippingStore {
func updateDestinationAddress(siteID: Int64,
orderID: Int64,
address: WooShippingDestinationAddress,
isVerified: Bool,
completion: @escaping (Result<WooShippingDestinationAddressUpdate, Error>) -> Void) {
remote.updateDestinationAddress(siteID: siteID, orderID: orderID, address: address) { [weak self] result in
remote.updateDestinationAddress(siteID: siteID, orderID: orderID, address: address, isVerified: isVerified) { [weak self] result in
completion(result)

guard let self, case .success = result else { return }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -793,7 +793,8 @@ final class WooShippingRemoteTests: XCTestCase {
let result: Result<WooShippingDestinationAddressUpdate, Error> = waitFor { promise in
remote.updateDestinationAddress(siteID: self.sampleSiteID,
orderID: self.sampleOrderID,
address: WooShippingDestinationAddress.fake()) { result in
address: WooShippingDestinationAddress.fake(),
isVerified: true) { result in
promise(result)
}
}
Expand All @@ -813,7 +814,8 @@ final class WooShippingRemoteTests: XCTestCase {
let result: Result<WooShippingDestinationAddressUpdate, Error> = waitFor { promise in
remote.updateDestinationAddress(siteID: self.sampleSiteID,
orderID: self.sampleOrderID,
address: WooShippingDestinationAddress.fake()) { result in
address: WooShippingDestinationAddress.fake(),
isVerified: true) { result in
promise(result)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -443,6 +443,7 @@ extension MockWooShippingRemote: WooShippingRemoteProtocol {
func updateDestinationAddress(siteID: Int64,
orderID: Int64,
address: WooShippingDestinationAddress,
isVerified: Bool,
completion: @escaping (Result<WooShippingDestinationAddressUpdate, any Error>) -> Void) {
DispatchQueue.main.async { [weak self] in
guard let self = self else { return }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1075,7 +1075,8 @@ final class WooShippingStoreTests: XCTestCase {
let result: Result<WooShippingDestinationAddressUpdate, Error> = waitFor { promise in
let action = WooShippingAction.updateDestinationAddress(siteID: self.sampleSiteID,
orderID: self.sampleOrderID,
address: WooShippingDestinationAddress.fake()) { result in
address: WooShippingDestinationAddress.fake(),
isVerified: true) { result in
promise(result)
}
store.onAction(action)
Expand All @@ -1098,7 +1099,8 @@ final class WooShippingStoreTests: XCTestCase {
let result: Result<WooShippingDestinationAddressUpdate, Error> = waitFor { promise in
let action = WooShippingAction.updateDestinationAddress(siteID: self.sampleSiteID,
orderID: self.sampleOrderID,
address: WooShippingDestinationAddress.fake()) { result in
address: WooShippingDestinationAddress.fake(),
isVerified: true) { result in
promise(result)
}
store.onAction(action)
Expand Down
1 change: 1 addition & 0 deletions RELEASE-NOTES.txt
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
- [*] Add "POS" label in Most recent orders in My store dashboard [https://github.com/woocommerce/woocommerce-ios/pull/16006]
- [*] Order details: Always show shipping labels section if order is eligible for label creation. [https://github.com/woocommerce/woocommerce-ios/pull/16010]
- [*] Order details: Remove print buttons from shipment details [https://github.com/woocommerce/woocommerce-ios/pull/16012]
- [*] Shipping labels: Mark manually saved addresses as unverified [https://github.com/woocommerce/woocommerce-ios/pull/16013]
- [*] Shipping Labels: Updated incorrect HS Tariff info page. [https://github.com/woocommerce/woocommerce-ios/pull/16016]

23.0
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -192,7 +192,8 @@ final class WooShippingEditAddressViewModel: ObservableObject, Identifiable {

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

init(type: AddressType,
id: String,
Expand All @@ -215,7 +216,7 @@ final class WooShippingEditAddressViewModel: ObservableObject, Identifiable {
debounceDelayInSeconds: Double = 1,
analytics: Analytics = ServiceLocator.analytics,
onOriginAddressEdited: ((WooShippingOriginAddress) -> Void)? = nil,
onDestinationAddressEdited: ((WooShippingAddress, String?) -> Void)? = nil) {
onDestinationAddressEdited: ((WooShippingDestinationAddressUpdate, String?) -> Void)? = nil) {
self.addressType = type
self.id = id
self.name = WooShippingAddressField(type: .name, value: name, required: company.isEmpty, validate: { _ in return nil })
Expand Down Expand Up @@ -327,7 +328,7 @@ final class WooShippingEditAddressViewModel: ObservableObject, Identifiable {
originStateCode: String?,
stores: StoresManager = ServiceLocator.stores,
storageManager: StorageManagerType = ServiceLocator.storageManager,
onAddressEdited: ((WooShippingAddress, String?) -> Void)? = nil) {
onAddressEdited: ((WooShippingDestinationAddressUpdate, String?) -> Void)? = nil) {
self.init(type: .destination(orderID: orderID),
id: UUID().uuidString,
name: address?.name ?? "",
Expand Down Expand Up @@ -496,9 +497,12 @@ final class WooShippingEditAddressViewModel: ObservableObject, Identifiable {

Task { @MainActor in
do {
let updatedDestinationAddress = try await updateDestinationAddress(for: orderID,
with: destinationAddress)
onDestinationAddressEdited?(updatedDestinationAddress.toWooShippingAddress(), email.value)
let result = try await updateDestinationAddress(
for: orderID,
with: destinationAddress,
isVerified: !withoutVerification
)
onDestinationAddressEdited?(result, email.value)
analytics.track(event: .WooShipping.editingAddressStep(
type: .destination,
state: withoutVerification ? .confirmedWithoutVerification : .confirmed
Expand Down Expand Up @@ -727,16 +731,18 @@ private extension WooShippingEditAddressViewModel {
/// Updates a destination address remotely.
@MainActor
func updateDestinationAddress(for orderID: Int64,
with address: WooShippingDestinationAddress) async throws -> WooShippingDestinationAddress {
with address: WooShippingDestinationAddress,
isVerified: Bool) async throws -> WooShippingDestinationAddressUpdate {
return try await withCheckedThrowingContinuation { continuation in
isLoading = true
let action = WooShippingAction.updateDestinationAddress(siteID: siteID,
orderID: orderID,
address: address) { [weak self] result in
address: address,
isVerified: isVerified) { [weak self] result in
guard let self else { return }
switch result {
case let .success(result):
continuation.resume(returning: result.address)
continuation.resume(returning: result)
case .failure(let error):
continuation.resume(throwing: error)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -419,13 +419,13 @@ final class WooShippingCreateLabelsViewModel: ObservableObject {
isVerified: destinationAddressStatus == .verified,
originCountryCode: selectedOriginAddress?.country,
originStateCode: selectedOriginAddress?.state,
onAddressEdited: { [weak self] editedAddress, editedEmail in
onAddressEdited: { [weak self] result, editedEmail in
guard let self else {
return
}
destinationAddress = editedAddress
destinationAddress = result.address.toWooShippingAddress()
destinationEmail = editedEmail
destinationAddressStatus = .verified
destinationAddressStatus = result.isVerified ? .verified : .unverified
addressToEdit = nil // Dismisses address edit screen
})
}
Expand Down
Loading