Skip to content

Commit 6e7f5e8

Browse files
authored
Merge pull request #5626 from woocommerce/issue/5407-create-order-navigation
Order Creation: Navigate to order details after creation
2 parents 145a582 + 7fed764 commit 6e7f5e8

File tree

3 files changed

+16
-2
lines changed

3 files changed

+16
-2
lines changed

WooCommerce/Classes/ViewRelated/Orders/Order Creation/FlowCoordinator/AddOrderCoordinator.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,8 @@ private extension AddOrderCoordinator {
8686
///
8787
func presentNewOrderController() {
8888
let viewModel = NewOrderViewModel(siteID: siteID)
89+
viewModel.onOrderCreated = onOrderCreated
90+
8991
let viewController = NewOrderHostingController(viewModel: viewModel)
9092
viewController.hidesBottomBarWhenPushed = true
9193
navigationController.pushViewController(viewController, animated: true)

WooCommerce/Classes/ViewRelated/Orders/Order Creation/NewOrderViewModel.swift

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,10 @@ final class NewOrderViewModel: ObservableObject {
4141
///
4242
@Published var shouldShowOrderStatusList: Bool = false
4343

44+
/// Assign this closure to be notified when a new order is created
45+
///
46+
var onOrderCreated: (Order) -> Void = { _ in }
47+
4448
/// Status Results Controller.
4549
///
4650
private lazy var statusResultsController: ResultsController<StorageOrderStatus> = {
@@ -83,9 +87,10 @@ final class NewOrderViewModel: ObservableObject {
8387
self.performingNetworkRequest = false
8488

8589
switch result {
86-
case .success:
90+
case .success(let newOrder):
8791
// TODO: Handle newly created order / remove success logging
8892
DDLogInfo("New order created successfully!")
93+
self.onOrderCreated(newOrder)
8994
case .failure(let error):
9095
self.presentNotice = .error
9196
DDLogError("⛔️ Error creating new order: \(error)")

WooCommerce/Classes/ViewRelated/Orders/OrdersRootViewController.swift

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -366,7 +366,14 @@ private extension OrdersRootViewController {
366366
private func navigateToOrderDetail(_ order: Order) {
367367
guard let orderViewController = OrderDetailsViewController.instantiatedViewControllerFromStoryboard() else { return }
368368
orderViewController.viewModel = OrderDetailsViewModel(order: order)
369-
show(orderViewController, sender: self)
369+
370+
// Cleanup navigation (remove new order flow views) before navigating to order details
371+
if let navigationController = navigationController, let indexOfSelf = navigationController.viewControllers.firstIndex(of: self) {
372+
let viewControllersIncludingSelf = navigationController.viewControllers[0...indexOfSelf]
373+
navigationController.setViewControllers(viewControllersIncludingSelf + [orderViewController], animated: true)
374+
} else {
375+
show(orderViewController, sender: self)
376+
}
370377

371378
ServiceLocator.analytics.track(.orderOpen, withProperties: ["id": order.orderID, "status": order.status.rawValue])
372379
}

0 commit comments

Comments
 (0)