[WIP] Trigger search after tapping search once (#663)

This doesn't _feel_ good from a UX-perspective
This commit is contained in:
Nathan Mattes 2022-11-22 21:28:06 +01:00
parent a25f48bbf7
commit 26f6499bbc
3 changed files with 19 additions and 14 deletions

View File

@ -188,12 +188,13 @@ extension SearchDetailViewController {
.removeDuplicates()
.throttle(for: 0.5, scheduler: DispatchQueue.main, latest: true)
.sink { [weak self] searchText in
guard let self = self else { return }
guard let searchResultViewController = self.currentViewController as? SearchResultViewController else {
guard let self = self,
let searchResultViewController = self.currentViewController as? SearchResultViewController
/* searchText.length >= 3 */ else {
return
}
self.logger.debug("\((#file as NSString).lastPathComponent, privacy: .public)[\(#line, privacy: .public)], \(#function, privacy: .public): trigger search \(searchText)")
searchResultViewController.viewModel.stateMachine.enter(SearchResultViewModel.State.Loading.self)
searchResultViewController.viewModel.stateMachine.enter(SearchResultViewModel.State.Loading.self)
}
.store(in: &disposeBag)
@ -314,7 +315,6 @@ extension SearchDetailViewController: UISearchBarDelegate {
}
func searchBarCancelButtonClicked(_ searchBar: UISearchBar) {
logger.debug("\((#file as NSString).lastPathComponent, privacy: .public)[\(#line, privacy: .public)], \(#function, privacy: .public)")
// dismiss or pop
if isModal {
@ -324,6 +324,14 @@ extension SearchDetailViewController: UISearchBarDelegate {
}
}
func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
guard let searchResultViewController = self.currentViewController as? SearchResultViewController else {
return
}
searchResultViewController.viewModel.forceSearch = true
searchResultViewController.viewModel.stateMachine.enter(SearchResultViewModel.State.Loading.self)
}
}
// MARK: - PageboyViewControllerDataSource

View File

@ -80,11 +80,13 @@ extension SearchResultViewModel.State {
return
}
guard searchText.length > 3 else {
stateMachine.enter(Fail.self)
guard (viewModel.forceSearch || searchText.length > 3) else {
stateMachine.enter(NoMore.self)
return
}
viewModel.forceSearch = false
if searchText != previousSearchText {
previousSearchText = searchText
offset = nil
@ -104,14 +106,8 @@ extension SearchResultViewModel.State {
let query = Mastodon.API.V2.Search.Query(
q: searchText,
type: searchType,
accountID: nil,
maxID: nil,
minID: nil,
excludeUnreviewed: nil,
resolve: true,
limit: nil,
offset: _offset,
following: nil
offset: _offset
)
let id = UUID()

View File

@ -23,6 +23,7 @@ final class SearchResultViewModel {
let authContext: AuthContext
let searchScope: SearchDetailViewModel.SearchScope
let searchText = CurrentValueSubject<String, Never>("")
var forceSearch: Bool = false
@Published var hashtags: [Mastodon.Entity.Tag] = []
let userFetchedResultsController: UserFetchedResultsController
let statusFetchedResultsController: StatusFetchedResultsController