Add support for entering text to search via drag-and-drop

This commit is contained in:
Jed Fox 2022-10-31 10:01:12 -04:00
parent 869e44737a
commit f6c1f6c443
No known key found for this signature in database
GPG Key ID: 0B61D18EA54B47E1
4 changed files with 12 additions and 6 deletions

View File

@ -157,7 +157,7 @@ extension RootSplitViewController: ContentSplitViewControllerDelegate {
} }
guard let navigationController = searchViewController.navigationController else { return } guard let navigationController = searchViewController.navigationController else { return }
if navigationController.viewControllers.count == 1 { if navigationController.viewControllers.count == 1 {
searchViewController.searchBarTapPublisher.send() searchViewController.searchBarTapPublisher.send("")
} else { } else {
navigationController.popToRootViewController(animated: true) navigationController.popToRootViewController(animated: true)
} }

View File

@ -46,7 +46,8 @@ final class SearchViewController: UIViewController, NeedsDependency {
// return collectionView // return collectionView
// }() // }()
let searchBarTapPublisher = PassthroughSubject<Void, Never>() // value is the initial search text to set
let searchBarTapPublisher = PassthroughSubject<String, Never>()
private(set) lazy var discoveryViewController: DiscoveryViewController = { private(set) lazy var discoveryViewController: DiscoveryViewController = {
let viewController = DiscoveryViewController() let viewController = DiscoveryViewController()
@ -139,10 +140,10 @@ extension SearchViewController {
searchBarTapPublisher searchBarTapPublisher
.throttle(for: 0.5, scheduler: DispatchQueue.main, latest: false) .throttle(for: 0.5, scheduler: DispatchQueue.main, latest: false)
.sink { [weak self] in .sink { [weak self] initialText in
guard let self = self else { return } guard let self = self else { return }
// push to search detail // push to search detail
let searchDetailViewModel = SearchDetailViewModel() let searchDetailViewModel = SearchDetailViewModel(initialSearchText: initialText)
searchDetailViewModel.needsBecomeFirstResponder = true searchDetailViewModel.needsBecomeFirstResponder = true
self.navigationController?.delegate = self.searchTransitionController self.navigationController?.delegate = self.searchTransitionController
// FIXME: // FIXME:
@ -159,9 +160,13 @@ extension SearchViewController {
extension SearchViewController: UISearchBarDelegate { extension SearchViewController: UISearchBarDelegate {
func searchBarShouldBeginEditing(_ searchBar: UISearchBar) -> Bool { func searchBarShouldBeginEditing(_ searchBar: UISearchBar) -> Bool {
os_log("%{public}s[%{public}ld], %{public}s", ((#file as NSString).lastPathComponent), #line, #function) os_log("%{public}s[%{public}ld], %{public}s", ((#file as NSString).lastPathComponent), #line, #function)
searchBarTapPublisher.send() searchBarTapPublisher.send("")
return false return false
} }
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
searchBar.text = ""
searchBarTapPublisher.send(searchText)
}
} }
// MARK: - UISearchControllerDelegate // MARK: - UISearchControllerDelegate

View File

@ -301,6 +301,7 @@ extension SearchDetailViewController {
searchController.searchBar.sizeToFit() searchController.searchBar.sizeToFit()
} }
searchBar.text = viewModel.searchText.value
searchBar.delegate = self searchBar.delegate = self
} }

View File

@ -163,7 +163,7 @@ extension SceneDelegate {
logger.debug("\((#file as NSString).lastPathComponent, privacy: .public)[\(#line, privacy: .public)], \(#function, privacy: .public): select search tab") 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 { 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") logger.debug("\((#file as NSString).lastPathComponent, privacy: .public)[\(#line, privacy: .public)], \(#function, privacy: .public): trigger search")
} }
default: default: