diff --git a/Shared/Commands/DeleteCommand.swift b/Shared/Commands/DeleteCommand.swift index 6a8a15a5d..cb7f6f3cc 100644 --- a/Shared/Commands/DeleteCommand.swift +++ b/Shared/Commands/DeleteCommand.swift @@ -46,12 +46,30 @@ final class DeleteCommand: UndoableCommand { func perform() { BatchUpdate.shared.perform { - itemSpecifiers.forEach { $0.delete() } + itemSpecifiers.forEach { $0.delete() {} } treeController.rebuild() } registerUndo() } + func perform(completion: @escaping () -> Void) { + + let group = DispatchGroup() + group.enter() + itemSpecifiers.forEach { + $0.delete() { + group.leave() + } + } + treeController.rebuild() + + group.notify(queue: DispatchQueue.main) { + self.registerUndo() + completion() + } + + } + func undo() { BatchUpdate.shared.perform { @@ -132,18 +150,20 @@ private struct SidebarItemSpecifier { self.path = ContainerPath(account: account!, folders: node.containingFolders()) } - func delete() { + func delete(completion: @escaping () -> Void) { if let feed = feed { BatchUpdate.shared.start() account?.removeFeed(feed, from: path.resolveContainer()) { result in BatchUpdate.shared.end() + completion() self.checkResult(result) } } else if let folder = folder { BatchUpdate.shared.start() account?.removeFolder(folder) { result in BatchUpdate.shared.end() + completion() self.checkResult(result) } } diff --git a/iOS/MasterFeed/MasterFeedViewController.swift b/iOS/MasterFeed/MasterFeedViewController.swift index 4f01ed04d..809666f11 100644 --- a/iOS/MasterFeed/MasterFeedViewController.swift +++ b/iOS/MasterFeed/MasterFeedViewController.swift @@ -526,14 +526,23 @@ class MasterFeedViewController: ProgressTableViewController, UndoableCommandRunn else { return } - - navState.beginUpdates() - runCommand(deleteCommand) - navState.rebuildShadowTable() - tableView.deleteRows(at: [indexPath], with: .automatic) + var deleteIndexPaths = [indexPath] + if navState.isExpanded(deleteNode) { + for i in 0..