diff --git a/Mastodon/Scene/Root/RootSplitViewController.swift b/Mastodon/Scene/Root/RootSplitViewController.swift index d138f6006..0b6f4f97a 100644 --- a/Mastodon/Scene/Root/RootSplitViewController.swift +++ b/Mastodon/Scene/Root/RootSplitViewController.swift @@ -166,7 +166,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 32f3dbe3d..b5259dcc4 100644 --- a/Mastodon/Scene/Search/Search/SearchViewController.swift +++ b/Mastodon/Scene/Search/Search/SearchViewController.swift @@ -47,7 +47,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? = { guard let authContext = viewModel.authContext else { return nil } @@ -148,11 +149,11 @@ 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 guard let authContext = self.viewModel.authContext else { return } - let searchDetailViewModel = SearchDetailViewModel(authContext: authContext) + let searchDetailViewModel = SearchDetailViewModel(authContext: authContext, initialSearchText: initialText) searchDetailViewModel.needsBecomeFirstResponder = true self.navigationController?.delegate = self.searchTransitionController // FIXME: @@ -169,9 +170,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 6ffc90182..62dd1a2cc 100644 --- a/Mastodon/Scene/Search/SearchDetail/SearchDetailViewController.swift +++ b/Mastodon/Scene/Search/SearchDetail/SearchDetailViewController.swift @@ -302,6 +302,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 d813f8ffd..1e97fb179 100644 --- a/Mastodon/Supporting Files/SceneDelegate.swift +++ b/Mastodon/Supporting Files/SceneDelegate.swift @@ -196,7 +196,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") }