Skip to content

Commit 24a9761

Browse files
committed
Use WooShippingAddress for destination address
1 parent b71385b commit 24a9761

File tree

1 file changed

+68
-50
lines changed

1 file changed

+68
-50
lines changed

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

Lines changed: 68 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import Combine
88
final class WooShippingCreateLabelsViewModel: ObservableObject {
99
private let currencyFormatter: CurrencyFormatter
1010
private let itemsDataSource: WooShippingItemsDataSource
11-
private let destinationAddress: ShippingLabelAddress?
11+
private let destinationAddress: WooShippingAddress?
1212
private let stores: StoresManager
1313
private var subscriptions: Set<AnyCancellable> = []
1414
private var debounceDuration: Double = 1
@@ -210,7 +210,7 @@ final class WooShippingCreateLabelsViewModel: ObservableObject {
210210
self.items = WooShippingItemsViewModel(dataSource: itemsDataSource)
211211
self.shippingLines = order.shippingLines.map({ WooShipping_ShippingLineViewModel(shippingLine: $0, currency: order.currency) })
212212
self.originAddress = shippingLabel.originAddress.formattedPostalAddress?.replacingOccurrences(of: "\n", with: ", ") ?? ""
213-
self.destinationAddress = shippingLabel.destinationAddress
213+
self.destinationAddress = shippingLabel.destinationAddress.toWooShippingAddress()
214214
self.destinationAddressStatus = .verified
215215
self.onLabelPurchase = nil
216216
self.stores = stores
@@ -237,7 +237,7 @@ final class WooShippingCreateLabelsViewModel: ObservableObject {
237237
let action = WooShippingAction.purchaseShippingLabel(siteID: order.siteID,
238238
orderID: order.orderID,
239239
originAddress: selectedOriginAddress.toShippingLabelAddress(),
240-
destinationAddress: destinationAddress,
240+
destinationAddress: destinationAddress.toShippingLabelAddress(),
241241
package: packagePurchase) { [weak self] result in
242242
guard let self else { return }
243243
isPurchasingLabel = false
@@ -332,7 +332,7 @@ private extension WooShippingCreateLabelsViewModel {
332332
originAddress = selectedOriginAddress?.formattedPostalAddress ?? ""
333333
shippingService = WooShippingServiceViewModel(order: order,
334334
originAddress: selectedOriginAddress?.toShippingLabelAddress(),
335-
destinationAddress: destinationAddress,
335+
destinationAddress: destinationAddress?.toShippingLabelAddress(),
336336
stores: stores) { [weak self] selectedRate in
337337
self?.selectedRate = selectedRate
338338
}
@@ -388,57 +388,15 @@ private extension WooShippingCreateLabelsViewModel {
388388
return (name, currencyFormatter.formatAmount(Decimal(amount)) ?? amount.description)
389389
}
390390

391-
// We generate the default origin address using the information
392-
// of the logged Account and of the website.
393-
static func getDefaultOriginAddress(accountSettings: AccountSettings?,
394-
company: String?,
395-
siteAddress: SiteAddress,
396-
account: Account?,
397-
userDefaults: UserDefaults) -> ShippingLabelAddress? {
398-
let address = Address(firstName: accountSettings?.firstName ?? "",
399-
lastName: accountSettings?.lastName ?? "",
400-
company: company ?? "",
401-
address1: siteAddress.address,
402-
address2: siteAddress.address2,
403-
city: siteAddress.city,
404-
state: siteAddress.state,
405-
postcode: siteAddress.postalCode,
406-
country: siteAddress.countryCode.rawValue,
407-
phone: userDefaults[.storePhoneNumber] ?? "",
408-
email: account?.email)
409-
return fromAddressToShippingLabelAddress(address: address)
410-
}
411-
412391
/// Gets the destination address as a `ShippingLabelAddress`.
413392
/// The order's billing phone is used as a fallback if there is no shipping phone.
414393
///
415-
static func getDestinationAddress(order: Order, address: Address?) -> ShippingLabelAddress? {
394+
static func getDestinationAddress(order: Order, address: Address?) -> WooShippingAddress? {
416395
guard let phone = address?.phone, phone.isNotEmpty else {
417396
let destinationAddress = address?.copy(phone: order.billingAddress?.phone)
418-
return fromAddressToShippingLabelAddress(address: destinationAddress)
397+
return destinationAddress?.toWooShippingAddress()
419398
}
420-
return fromAddressToShippingLabelAddress(address: address)
421-
}
422-
423-
static func fromAddressToShippingLabelAddress(address: Address?) -> ShippingLabelAddress? {
424-
guard let address = address else { return nil }
425-
426-
// In this way we support localized name correctly,
427-
// because the order is often reversed in a few Asian languages.
428-
var components = PersonNameComponents()
429-
components.givenName = address.firstName
430-
components.familyName = address.lastName
431-
432-
let shippingLabelAddress = ShippingLabelAddress(company: address.company ?? "",
433-
name: PersonNameComponentsFormatter.localizedString(from: components, style: .medium, options: []),
434-
phone: address.phone ?? "",
435-
country: address.country,
436-
state: address.state,
437-
address1: address.address1,
438-
address2: address.address2 ?? "",
439-
city: address.city,
440-
postcode: address.postcode)
441-
return shippingLabelAddress
399+
return address?.toWooShippingAddress()
442400
}
443401

444402
static func getStoredAccountSettings() -> AccountSettings? {
@@ -516,7 +474,25 @@ private extension WooShippingOriginAddress {
516474
///
517475
func toShippingLabelAddress() -> ShippingLabelAddress {
518476
ShippingLabelAddress(company: company,
519-
name: fullName ?? "",
477+
name: fullName,
478+
phone: phone,
479+
country: country,
480+
state: state,
481+
address1: address1,
482+
address2: address2,
483+
city: city,
484+
postcode: postcode)
485+
}
486+
}
487+
488+
private extension WooShippingAddress {
489+
/// Converts the address to a `ShippingLabelAddress`.
490+
///
491+
/// This prepares the address for use in e.g. fetching available shipping rates or purchasing the label.
492+
///
493+
func toShippingLabelAddress() -> ShippingLabelAddress {
494+
ShippingLabelAddress(company: company,
495+
name: name,
520496
phone: phone,
521497
country: country,
522498
state: state,
@@ -526,3 +502,45 @@ private extension WooShippingOriginAddress {
526502
postcode: postcode)
527503
}
528504
}
505+
506+
private extension ShippingLabelAddress {
507+
/// Converts the address to a `WooShippingAddress`.
508+
///
509+
/// This prepares the address for use as a destination address in the shipping label.
510+
///
511+
func toWooShippingAddress() -> WooShippingAddress {
512+
WooShippingAddress(company: company,
513+
name: name,
514+
phone: phone,
515+
country: country,
516+
state: state,
517+
address1: address1,
518+
address2: address2,
519+
city: city,
520+
postcode: postcode)
521+
}
522+
}
523+
524+
private extension Address {
525+
/// Converts the address to a `WooShippingAddress`.
526+
///
527+
/// This prepares the address for use as a destination address in the shipping label.
528+
///
529+
func toWooShippingAddress() -> WooShippingAddress {
530+
// In this way we support localized name correctly,
531+
// because the order is often reversed in a few Asian languages.
532+
var components = PersonNameComponents()
533+
components.givenName = firstName
534+
components.familyName = lastName
535+
536+
return WooShippingAddress(company: company ?? "",
537+
name: PersonNameComponentsFormatter.localizedString(from: components, style: .medium, options: []),
538+
phone: phone ?? "",
539+
country: country,
540+
state: state,
541+
address1: address1,
542+
address2: address2 ?? "",
543+
city: city,
544+
postcode: postcode)
545+
}
546+
}

0 commit comments

Comments
 (0)