diff --git a/Mastodon/Scene/Search/SearchViewController+Searching.swift b/Mastodon/Scene/Search/SearchViewController+Searching.swift index 34acf443f..540fd20c3 100644 --- a/Mastodon/Scene/Search/SearchViewController+Searching.swift +++ b/Mastodon/Scene/Search/SearchViewController+Searching.swift @@ -86,6 +86,6 @@ extension SearchViewController: UITableViewDelegate { func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { guard let diffableDataSource = viewModel.searchResultDiffableDataSource else { return } guard let item = diffableDataSource.itemIdentifier(for: indexPath) else { return } - viewModel.saveItemToCoreData(item: item) + viewModel.searchResultItemDidSelected(item: item, from: self) } } diff --git a/Mastodon/Scene/Search/SearchViewController.swift b/Mastodon/Scene/Search/SearchViewController.swift index 470c88e0d..d506ab993 100644 --- a/Mastodon/Scene/Search/SearchViewController.swift +++ b/Mastodon/Scene/Search/SearchViewController.swift @@ -15,7 +15,7 @@ final class SearchViewController: UIViewController, NeedsDependency { weak var coordinator: SceneCoordinator! { willSet { precondition(!isViewLoaded) } } var disposeBag = Set() - private(set) lazy var viewModel = SearchViewModel(context: context) + private(set) lazy var viewModel = SearchViewModel(context: context, coordinator: coordinator) let searchBar: UISearchBar = { let searchBar = UISearchBar() diff --git a/Mastodon/Scene/Search/SearchViewModel.swift b/Mastodon/Scene/Search/SearchViewModel.swift index 18954665c..054ac8ce3 100644 --- a/Mastodon/Scene/Search/SearchViewModel.swift +++ b/Mastodon/Scene/Search/SearchViewModel.swift @@ -19,6 +19,7 @@ final class SearchViewModel: NSObject { // input let context: AppContext + weak var coordinator: SceneCoordinator! // output let searchText = CurrentValueSubject("") @@ -51,7 +52,8 @@ final class SearchViewModel: NSObject { lazy var loadOldestStateMachinePublisher = CurrentValueSubject(nil) - init(context: AppContext) { + init(context: AppContext,coordinator: SceneCoordinator) { + self.coordinator = coordinator self.context = context super.init() @@ -233,7 +235,7 @@ final class SearchViewModel: NSObject { } } - func saveItemToCoreData(item: SearchResultItem) { + func searchResultItemDidSelected(item: SearchResultItem,from: UIViewController) { let searchHistories = self.fetchSearchHistory() _ = context.managedObjectContext.performChanges { [weak self] in guard let self = self else { return } @@ -285,6 +287,8 @@ final class SearchViewModel: NSObject { } else { SearchHistory.insert(into: self.context.managedObjectContext, hashtag: tagInCoreData) } + let viewModel = HashtagTimelineViewModel(context: self.context, hashtag: tagInCoreData.name) + self.coordinator.present(scene: .hashtagTimeline(viewModel: viewModel), from: from, transition: .show) case .accountObjectID(let accountObjectID): if let searchHistories = searchHistories { let history = searchHistories.first { history -> Bool in @@ -305,6 +309,9 @@ final class SearchViewModel: NSObject { history.update(updatedAt: Date()) } } + let tagInCoreData = self.context.managedObjectContext.object(with: hashtagObjectID) as! Tag + let viewModel = HashtagTimelineViewModel(context: self.context, hashtag: tagInCoreData.name) + self.coordinator.present(scene: .hashtagTimeline(viewModel: viewModel), from: from, transition: .show) default: break }