diff --git a/WooCommerce/Classes/ViewRelated/Orders/OrdersViewController.swift b/WooCommerce/Classes/ViewRelated/Orders/OrdersViewController.swift index 51da9e9bf3d..5586205424d 100644 --- a/WooCommerce/Classes/ViewRelated/Orders/OrdersViewController.swift +++ b/WooCommerce/Classes/ViewRelated/Orders/OrdersViewController.swift @@ -218,17 +218,13 @@ extension OrdersViewController: SyncingCoordinatorDelegate { return } - defer { - onCompletion?(error == nil) + if let error = error { + DDLogError("⛔️ Error synchronizing orders: \(error)") + self.displaySyncingErrorNotice(retryPageNumber: pageNumber) } - guard let error = error else { - self.state.transitionToResultsUpdatedState(isEmpty: self.isEmpty, isFiltered: self.isFiltered) - return - } - - DDLogError("⛔️ Error synchronizing orders: \(error)") - self.state.transitionToErrorState() + self.state.transitionToResultsUpdatedState(isEmpty: self.isEmpty, isFiltered: self.isFiltered) + onCompletion?(error == nil) } StoresManager.shared.dispatch(action) @@ -282,18 +278,17 @@ private extension OrdersViewController { resultsController.startForwardingEvents(to: self.tableView) } - /// Displays the Error State Overlay. + /// Displays the Error Notice. /// - func displayErrorOverlay() { - let overlayView: OverlayMessageView = OverlayMessageView.instantiateFromNib() - overlayView.messageImage = .errorStateImage - overlayView.messageText = NSLocalizedString("Unable to load the orders list", comment: "Order List Loading Error") - overlayView.actionText = NSLocalizedString("Retry", comment: "Retry Action") - overlayView.onAction = { [weak self] in - self?.sync() + func displaySyncingErrorNotice(retryPageNumber: Int) { + let title = NSLocalizedString("Orders", comment: "Orders Notice Title") + let message = NSLocalizedString("Unable to refresh list", comment: "Refresh Action Failed") + let actionTitle = NSLocalizedString("Retry", comment: "Retry Action") + let notice = Notice(title: title, message: message, feedbackType: .error, actionTitle: actionTitle) { [weak self] in + self?.sync(pageNumber: retryPageNumber) } - overlayView.attach(to: view) + AppDelegate.shared.noticePresenter.enqueue(notice: notice) } /// Displays the Empty State Overlay. @@ -435,8 +430,6 @@ private extension OrdersViewController { displayEmptyUnfilteredOverlay() case .emptyFiltered: displayEmptyFilteredOverlay() - case .error: - displayErrorOverlay() case .placeholder: displayPlaceholderOrders() case .syncing: @@ -452,8 +445,6 @@ private extension OrdersViewController { removeAllOverlays() case .emptyUnfiltered: removeAllOverlays() - case .error: - removeAllOverlays() case .placeholder: removePlaceholderOrders() case .syncing: @@ -495,7 +486,6 @@ private extension OrdersViewController { case results case emptyUnfiltered case emptyFiltered - case error /// Should be called before Sync'ing. Transitions to either `results` or `placeholder` state, depending on whether if /// we've got cached results, or not. @@ -504,12 +494,6 @@ private extension OrdersViewController { self = isEmpty ? .placeholder : .syncing } - /// Transitions to the Error State. - /// - mutating func transitionToErrorState() { - self = .error - } - /// Should be called whenever the results are updated: after Sync'ing (or after applying a filter). /// Transitions to `.results` / `.emptyFiltered` / `.emptyUnfiltered` accordingly. ///