@@ -8,7 +8,7 @@ import Combine
88final 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