diff --git a/Mastodon/Scene/Root/RootSplitViewController.swift b/Mastodon/Scene/Root/RootSplitViewController.swift index f19282936..83eb6375a 100644 --- a/Mastodon/Scene/Root/RootSplitViewController.swift +++ b/Mastodon/Scene/Root/RootSplitViewController.swift @@ -157,7 +157,7 @@ extension RootSplitViewController: ContentSplitViewControllerDelegate { } guard let navigationController = searchViewController.navigationController else { return } if navigationController.viewControllers.count == 1 { - searchViewController.searchBarTapPublisher.send() + searchViewController.searchBarTapPublisher.send("") } else { navigationController.popToRootViewController(animated: true) } diff --git a/Mastodon/Scene/Search/Search/SearchViewController.swift b/Mastodon/Scene/Search/Search/SearchViewController.swift index 982844f51..28ec11996 100644 --- a/Mastodon/Scene/Search/Search/SearchViewController.swift +++ b/Mastodon/Scene/Search/Search/SearchViewController.swift @@ -46,7 +46,8 @@ final class SearchViewController: UIViewController, NeedsDependency { // return collectionView // }() - let searchBarTapPublisher = PassthroughSubject() + // value is the initial search text to set + let searchBarTapPublisher = PassthroughSubject() private(set) lazy var discoveryViewController: DiscoveryViewController = { let viewController = DiscoveryViewController() @@ -139,10 +140,10 @@ extension SearchViewController { searchBarTapPublisher .throttle(for: 0.5, scheduler: DispatchQueue.main, latest: false) - .sink { [weak self] in + .sink { [weak self] initialText in guard let self = self else { return } // push to search detail - let searchDetailViewModel = SearchDetailViewModel() + let searchDetailViewModel = SearchDetailViewModel(initialSearchText: initialText) searchDetailViewModel.needsBecomeFirstResponder = true self.navigationController?.delegate = self.searchTransitionController // FIXME: @@ -159,9 +160,13 @@ extension SearchViewController { extension SearchViewController: UISearchBarDelegate { func searchBarShouldBeginEditing(_ searchBar: UISearchBar) -> Bool { os_log("%{public}s[%{public}ld], %{public}s", ((#file as NSString).lastPathComponent), #line, #function) - searchBarTapPublisher.send() + searchBarTapPublisher.send("") return false } + func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) { + searchBar.text = "" + searchBarTapPublisher.send(searchText) + } } // MARK: - UISearchControllerDelegate diff --git a/Mastodon/Scene/Search/SearchDetail/SearchDetailViewController.swift b/Mastodon/Scene/Search/SearchDetail/SearchDetailViewController.swift index 701dc4fa6..3ebc7f179 100644 --- a/Mastodon/Scene/Search/SearchDetail/SearchDetailViewController.swift +++ b/Mastodon/Scene/Search/SearchDetail/SearchDetailViewController.swift @@ -301,6 +301,7 @@ extension SearchDetailViewController { searchController.searchBar.sizeToFit() } + searchBar.text = viewModel.searchText.value searchBar.delegate = self } diff --git a/Mastodon/Supporting Files/SceneDelegate.swift b/Mastodon/Supporting Files/SceneDelegate.swift index 54b1fd57e..a24f43266 100644 --- a/Mastodon/Supporting Files/SceneDelegate.swift +++ b/Mastodon/Supporting Files/SceneDelegate.swift @@ -163,7 +163,7 @@ extension SceneDelegate { logger.debug("\((#file as NSString).lastPathComponent, privacy: .public)[\(#line, privacy: .public)], \(#function, privacy: .public): select search tab") if let searchViewController = coordinator?.tabBarController.topMost as? SearchViewController { - searchViewController.searchBarTapPublisher.send() + searchViewController.searchBarTapPublisher.send("") logger.debug("\((#file as NSString).lastPathComponent, privacy: .public)[\(#line, privacy: .public)], \(#function, privacy: .public): trigger search") } default: