@@ -5,9 +5,9 @@ import Experiments
55import WooFoundation
66import enum Networking. DotcomError
77
8- /// View model for `NewOrder` .
8+ /// View model used in Order Creation and Editing flows .
99///
10- final class NewOrderViewModel : ObservableObject {
10+ final class EditableOrderViewModel : ObservableObject {
1111 let siteID : Int64
1212 private let stores : StoresManager
1313 private let storageManager : StorageManagerType
@@ -188,7 +188,7 @@ final class NewOrderViewModel: ObservableObject {
188188
189189 /// View model for the customer note section.
190190 ///
191- lazy private( set) var noteViewModel = { NewOrderCustomerNoteViewModel ( originalNote: " " ) } ( )
191+ lazy private( set) var noteViewModel = { OrderFormCustomerNoteViewModel ( originalNote: " " ) } ( )
192192
193193 // MARK: Payment properties
194194
@@ -357,6 +357,12 @@ final class NewOrderViewModel: ObservableObject {
357357 trackCreateButtonTapped ( )
358358 }
359359
360+ /// Action triggered on `Done` button tap in order editing flow.
361+ ///
362+ func finishEditing( ) {
363+ self . onFinished ( orderSynchronizer. order)
364+ }
365+
360366 /// Assign this closure to be notified when the flow has finished.
361367 /// For creation it means that the order has been created.
362368 /// For edition it means that the merchant has finished editing the order.
@@ -392,7 +398,7 @@ final class NewOrderViewModel: ObservableObject {
392398}
393399
394400// MARK: - Types
395- extension NewOrderViewModel {
401+ extension EditableOrderViewModel {
396402 /// Representation of possible navigation bar trailing buttons
397403 ///
398404 enum NavigationItem : Equatable {
@@ -528,7 +534,7 @@ extension NewOrderViewModel {
528534}
529535
530536// MARK: - Helpers
531- private extension NewOrderViewModel {
537+ private extension EditableOrderViewModel {
532538
533539 /// Sets the view to be `disabled` when `performingNetworkRequest` or when `statePublisher` is `.syncing(blocking: true)`
534540 ///
@@ -573,9 +579,9 @@ private extension NewOrderViewModel {
573579 guard let self = self else { return nil }
574580 switch state {
575581 case . error( let error) :
576- DDLogError ( " ⛔️ Error syncing new order remotely: \( error) " )
582+ DDLogError ( " ⛔️ Error syncing order remotely: \( error) " )
577583 self . trackSyncOrderFailure ( error: error)
578- return NoticeFactory . syncOrderErrorNotice ( error, with: self . orderSynchronizer)
584+ return NoticeFactory . syncOrderErrorNotice ( error, flow : self . flow , with: self . orderSynchronizer)
579585 default :
580586 return nil
581587 }
@@ -829,15 +835,15 @@ private extension NewOrderViewModel {
829835 }
830836}
831837
832- private extension NewOrderViewModel {
838+ private extension EditableOrderViewModel {
833839 /// Fetches products from storage.
834840 ///
835841 func updateProductsResultsController( ) {
836842 do {
837843 try productsResultsController. performFetch ( )
838844 allProducts = productsResultsController. fetchedObjects
839845 } catch {
840- DDLogError ( " ⛔️ Error fetching products for new order: \( error) " )
846+ DDLogError ( " ⛔️ Error fetching products for order: \( error) " )
841847 }
842848 }
843849
@@ -848,16 +854,15 @@ private extension NewOrderViewModel {
848854 try productVariationsResultsController. performFetch ( )
849855 allProductVariations = productVariationsResultsController. fetchedObjects
850856 } catch {
851- DDLogError ( " ⛔️ Error fetching product variations for new order: \( error) " )
857+ DDLogError ( " ⛔️ Error fetching product variations for order: \( error) " )
852858 }
853859 }
854860}
855861
856862// MARK: Constants
857863
858- extension NewOrderViewModel {
859- /// New Order notices
860- ///
864+ extension EditableOrderViewModel {
865+
861866 enum NoticeFactory {
862867 /// Returns a default order creation error notice.
863868 ///
@@ -870,11 +875,20 @@ extension NewOrderViewModel {
870875
871876 /// Returns an order sync error notice.
872877 ///
873- static func syncOrderErrorNotice( _ error: Error , with orderSynchronizer: OrderSynchronizer ) -> Notice {
878+ static func syncOrderErrorNotice( _ error: Error , flow : Flow , with orderSynchronizer: OrderSynchronizer ) -> Notice {
874879 guard !isEmailError( error, order: orderSynchronizer. order) else {
875880 return Notice ( title: Localization . invalidBillingParameters, message: Localization . invalidBillingSuggestion, feedbackType: . error)
876881 }
877- return Notice ( title: Localization . errorMessageOrderSync, feedbackType: . error, actionTitle: Localization . retryOrderSync) {
882+
883+ let errorMessage : String
884+ switch flow {
885+ case . creation:
886+ errorMessage = Localization . errorMessageNewOrderSync
887+ case . editing:
888+ errorMessage = Localization . errorMessageEditOrderSync
889+ }
890+
891+ return Notice ( title: errorMessage, feedbackType: . error, actionTitle: Localization . retryOrderSync) {
878892 orderSynchronizer. retryTrigger. send ( )
879893 }
880894 }
@@ -893,18 +907,24 @@ extension NewOrderViewModel {
893907 }
894908}
895909
896- private extension NewOrderViewModel {
910+ private extension EditableOrderViewModel {
897911 enum Localization {
898912 static let titleForNewOrder = NSLocalizedString ( " New Order " , comment: " Title for the order creation screen " )
899913 static let titleWithOrderNumber = NSLocalizedString ( " Order #%1$@ " , comment: " Order number title. Parameters: %1$@ - order number " )
900- static let errorMessageOrderCreation = NSLocalizedString ( " Unable to create new order " , comment: " Notice displayed when order creation fails " )
901- static let errorMessageOrderSync = NSLocalizedString ( " Unable to load taxes for order " ,
902- comment: " Notice displayed when taxes cannot be synced for new order " )
914+ static let errorMessageOrderCreation = NSLocalizedString ( " Unable to create new order " ,
915+ comment: " Notice displayed when order creation fails " )
916+ static let errorMessageNewOrderSync = NSLocalizedString ( " Unable to load taxes for order " ,
917+ comment: " Notice displayed when data cannot be synced for new order " )
918+ static let errorMessageEditOrderSync = NSLocalizedString ( " Unable to save changes. Please try again. " ,
919+ comment: " Notice displayed when data cannot be synced for edited order " )
920+
903921 static let retryOrderSync = NSLocalizedString ( " Retry " , comment: " Action button to retry syncing the draft order " )
904922
905- static let invalidBillingParameters = NSLocalizedString ( " Unable to set customer details. " ,
906- comment: " Error notice title when we fail to update an address when creating an order. " )
907- static let invalidBillingSuggestion = NSLocalizedString ( " Please make sure you are running the latest version of WooCommerce and try again later. " ,
908- comment: " Recovery suggestion when we fail to update an address when creating an order " )
923+ static let invalidBillingParameters =
924+ NSLocalizedString ( " Unable to set customer details. " ,
925+ comment: " Error notice title when we fail to update an address when creating or editing an order. " )
926+ static let invalidBillingSuggestion =
927+ NSLocalizedString ( " Please make sure you are running the latest version of WooCommerce and try again later. " ,
928+ comment: " Recovery suggestion when we fail to update an address when creating or editing an order " )
909929 }
910930}
0 commit comments