mirror of
https://codeberg.org/comaps/comaps
synced 2026-01-09 13:54:37 +00:00
[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:
committed by
Konstantin Pastbin
parent
6d093a45cf
commit
4cf5ec3c86
@@ -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))
|
||||
|
||||
Reference in New Issue
Block a user