@@ -216,11 +216,11 @@ final class NewOrderViewModel: ObservableObject {
216216 ///
217217 func createOrderAddressFormViewModel( ) -> CreateOrderAddressFormViewModel {
218218 CreateOrderAddressFormViewModel ( siteID: siteID,
219- addressData: . init( billingAddress: orderDetails . billingAddress,
220- shippingAddress: orderDetails . shippingAddress) ,
219+ addressData: . init( billingAddress: orderSynchronizer . order . billingAddress,
220+ shippingAddress: orderSynchronizer . order . shippingAddress) ,
221221 onAddressUpdate: { [ weak self] updatedAddressData in
222- self ? . orderDetails . billingAddress = updatedAddressData . billingAddress
223- self ? . orderDetails . shippingAddress = updatedAddressData . shippingAddress
222+ let input = Self . createAddressesInput ( from : updatedAddressData )
223+ self ? . orderSynchronizer . setAddresses . send ( input )
224224 self ? . trackCustomerDetailsAdded ( )
225225 } )
226226 }
@@ -275,14 +275,12 @@ extension NewOrderViewModel {
275275 ///
276276 struct OrderDetails {
277277 var items : [ NewOrderItem ] = [ ]
278- var billingAddress : Address ?
279- var shippingAddress : Address ?
280278
281279 func toOrder( ) -> Order {
282280 OrderFactory . emptyNewOrder. copy ( status: . pending,
283281 items: items. map { $0. orderItem } ,
284- billingAddress: billingAddress ,
285- shippingAddress: shippingAddress )
282+ billingAddress: nil ,
283+ shippingAddress: nil )
286284 }
287285 }
288286
@@ -479,7 +477,7 @@ private extension NewOrderViewModel {
479477 /// Updates customer data viewmodel based on order addresses.
480478 ///
481479 func configureCustomerDataViewModel( ) {
482- $orderDetails
480+ orderSynchronizer . orderPublisher
483481 . map {
484482 CustomerDataViewModel ( billingAddress: $0. billingAddress, shippingAddress: $0. shippingAddress)
485483 }
@@ -511,7 +509,7 @@ private extension NewOrderViewModel {
511509 ///
512510 func trackCustomerDetailsAdded( ) {
513511 let areAddressesDifferent : Bool = {
514- guard let billingAddress = orderDetails . billingAddress, let shippingAddress = orderDetails . shippingAddress else {
512+ guard let billingAddress = orderSynchronizer . order . billingAddress, let shippingAddress = orderSynchronizer . order . shippingAddress else {
515513 return false
516514 }
517515 return billingAddress != shippingAddress
@@ -544,6 +542,16 @@ private extension NewOrderViewModel {
544542 analytics. track ( event: WooAnalyticsEvent . Orders. orderCreationFailed ( errorContext: String ( describing: error) ,
545543 errorDescription: error. localizedDescription) )
546544 }
545+
546+ /// Creates an `OrderSyncAddressesInput` type from a `NewOrderAddressData` type.
547+ /// Expects `billing` and `shipping` addresses to exists together,
548+ ///
549+ static func createAddressesInput( from data: CreateOrderAddressFormViewModel . NewOrderAddressData ) -> OrderSyncAddressesInput ? {
550+ guard let billingAddress = data. billingAddress, let shippingAddress = data. shippingAddress else {
551+ return nil
552+ }
553+ return OrderSyncAddressesInput ( billing: billingAddress, shipping: shippingAddress)
554+ }
547555}
548556
549557private extension NewOrderViewModel {
0 commit comments