[ios] refactor search modes switching

For the expanded iphone mode (in portait) only the searchEverywhere will be used
For the halfscreen everywhere + viewport
For the iPad the everywhere + viewport is always enabled
For the hidden only the viewport

Signed-off-by: Kiryl Kaveryn <kirylkaveryn@gmail.com>
This commit is contained in:
Kiryl Kaveryn
2025-05-28 18:10:57 +04:00
committed by Konstantin Pastbin
parent 6d093a45cf
commit 4cf5ec3c86
5 changed files with 103 additions and 52 deletions

View File

@@ -4,7 +4,6 @@ final class SearchOnMapInteractor: NSObject {
private let searchManager: SearchManager.Type
private let routeManager: MWMRouter.Type
private var isUpdatesDisabled = false
private var showResultsOnMap: Bool = false
var routingTooltipSearch: SearchOnMapRoutingTooltipSearch = .none
@@ -31,30 +30,44 @@ final class SearchOnMapInteractor: NSObject {
switch event {
case .openSearch:
return .showHistoryAndCategory
case .hideSearch:
return .setSearchScreenHidden(true)
case .didStartDraggingSearch:
return .setIsTyping(false)
case .didStartTyping:
return .setIsTyping(true)
case .didType(let searchText):
return processTypedText(searchText)
case .clearButtonDidTap:
return processClearButtonDidTap()
case .didSelect(let searchText):
return processSelectedText(searchText)
case .searchButtonDidTap(let searchText):
return processSearchButtonDidTap(searchText)
case .didSelectResult(let result, let query):
return processSelectedResult(result, query: query)
case .didSelectPlaceOnMap:
return isiPad ? .none : .setSearchScreenHidden(true)
case .didDeselectPlaceOnMap:
return deselectPlaceOnMap()
case .didStartDraggingMap:
return .setSearchScreenCompact
case .didUpdatePresentationStep(let step):
searchManager.setSearchMode(searchModeForPresentationStep(step))
return .updatePresentationStep(step)
case .closeSearch:
return closeSearch()
}
@@ -68,8 +81,6 @@ final class SearchOnMapInteractor: NSObject {
private func processSearchButtonDidTap(_ query: SearchQuery) -> SearchOnMap.Response {
searchManager.save(query)
showResultsOnMap = true
searchManager.showEverywhereSearchResultsOnMap()
return .showOnTheMap
}
@@ -85,7 +96,6 @@ final class SearchOnMapInteractor: NSObject {
searchManager.save(query)
}
searchManager.searchQuery(query)
showResultsOnMap = true
return .selectQuery(query)
}
@@ -127,33 +137,38 @@ final class SearchOnMapInteractor: NSObject {
private func deselectPlaceOnMap() -> SearchOnMap.Response {
routingTooltipSearch = .none
searchManager.showViewportSearchResultsOnMap()
return .setSearchScreenHidden(false)
}
private func closeSearch() -> SearchOnMap.Response {
routingTooltipSearch = .none
isUpdatesDisabled = true
showResultsOnMap = false
searchManager.clear()
return .close
}
private func searchModeForPresentationStep(_ step: ModalPresentationStep) -> SearchMode {
switch step {
case .fullScreen:
return isiPad ? .everywhereAndViewport : .everywhere
case .halfScreen, .compact:
return .everywhereAndViewport
case .hidden:
return .viewport
}
}
}
// MARK: - MWMSearchObserver
extension SearchOnMapInteractor: MWMSearchObserver {
func onSearchCompleted() {
guard !isUpdatesDisabled else { return }
guard !isUpdatesDisabled, searchManager.searchMode() != .viewport else { return }
let results = searchManager.getResults()
if showResultsOnMap && !results.isEmpty {
searchManager.showEverywhereSearchResultsOnMap()
showResultsOnMap = false
}
presenter.process(.showResults(SearchOnMap.SearchResults(results), isSearchCompleted: true))
}
func onSearchResultsUpdated() {
guard !isUpdatesDisabled else { return }
guard !isUpdatesDisabled, searchManager.searchMode() != .viewport else { return }
let results = searchManager.getResults()
guard !results.isEmpty else { return }
presenter.process(.showResults(SearchOnMap.SearchResults(results), isSearchCompleted: false))