diff --git a/Tusker/Screens/Explore/ExploreViewController.swift b/Tusker/Screens/Explore/ExploreViewController.swift index 68430421..6a267551 100644 --- a/Tusker/Screens/Explore/ExploreViewController.swift +++ b/Tusker/Screens/Explore/ExploreViewController.swift @@ -12,7 +12,7 @@ import Pachyderm class ExploreViewController: EnhancedTableViewController { - var dataSource: UITableViewDiffableDataSource! + var dataSource: DataSource! var resultsController: SearchResultsViewController! var searchController: UISearchController! @@ -57,6 +57,7 @@ class ExploreViewController: EnhancedTableViewController { return cell }) + dataSource.exploreController = self var snapshot = NSDiffableDataSourceSnapshot() snapshot.appendSections([.bookmarks, .lists]) @@ -137,6 +138,10 @@ class ExploreViewController: EnhancedTableViewController { } } + override func tableView(_ tableView: UITableView, editingStyleForRowAt indexPath: IndexPath) -> UITableViewCell.EditingStyle { + return .delete + } + } extension ExploreViewController { @@ -173,7 +178,11 @@ extension ExploreViewController { } } } + class DataSource: UITableViewDiffableDataSource { + + weak var exploreController: ExploreViewController? + override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? { switch section { case 1: @@ -182,5 +191,40 @@ extension ExploreViewController { return nil } } + + override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { + if case .list(_) = itemIdentifier(for: indexPath) { + return true + } + return false + } + + override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) { + guard editingStyle == .delete, + case let .list(list) = itemIdentifier(for: indexPath) else { + return + } + + let title = String(format: NSLocalizedString("Are you sure want to delete the '%@' list?", comment: "delete list alert title"), list.title) + let alert = UIAlertController(title: title, message: nil, preferredStyle: .alert) + alert.addAction(UIAlertAction(title: NSLocalizedString("Cancel", comment: "delete list alert cancel button"), style: .cancel, handler: nil)) + alert.addAction(UIAlertAction(title: NSLocalizedString("Delete List", comment: "delete list alert confirm button"), style: .destructive, handler: { (_) in + + let request = List.delete(list) + MastodonController.client.run(request) { (response) in + guard case .success(_, _) = response else { + fatalError() + } + + var snapshot = self.snapshot() + snapshot.deleteItems([.list(list)]) + DispatchQueue.main.async { + self.apply(snapshot) + } + } + })) + self.exploreController?.present(alert, animated: true) + } + } }