Search improvements for iOS

This commit is contained in:
Arkadiusz Fal
2021-09-25 14:17:58 +02:00
parent a7da3b9468
commit 4e0d7b60f7
12 changed files with 138 additions and 92 deletions

View File

@@ -1,7 +1,7 @@
import Defaults
import Foundation
final class Recents: ObservableObject {
final class RecentsModel: ObservableObject {
@Default(.recentlyOpened) var items
var isEmpty: Bool {
@@ -28,6 +28,10 @@ final class Recents: ObservableObject {
}
}
func addQuery(_ query: String) {
open(.init(from: query))
}
var presentedChannel: Channel? {
if let recent = items.last(where: { $0.type == .channel }) {
return recent.channel

View File

@@ -14,24 +14,7 @@ final class SearchModel: ObservableObject {
private var resource: Resource!
var isLoading: Bool {
resource.isLoading
}
func loadSuggestions(_ query: String) {
let resource = api.searchSuggestions(query: query)
resource.addObserver(querySuggestions)
resource.loadIfNeeded()
if let request = resource.loadIfNeeded() {
request.onSuccess { response in
if let suggestions: [String] = response.typedContent() {
self.querySuggestions = Store<[String]>(suggestions)
}
}
} else {
querySuggestions = Store<[String]>(querySuggestions.collection)
}
resource?.isLoading ?? false
}
func changeQuery(_ changeHandler: @escaping (SearchQuery) -> Void = { _ in }) {
@@ -87,4 +70,27 @@ final class SearchModel: ObservableObject {
store = Store<[Video]>(videos)
}
}
private var suggestionsDebounceTimer: Timer?
func loadSuggestions(_ query: String) {
suggestionsDebounceTimer?.invalidate()
suggestionsDebounceTimer = Timer.scheduledTimer(withTimeInterval: 1, repeats: false) { _ in
let resource = self.api.searchSuggestions(query: query)
resource.addObserver(self.querySuggestions)
resource.loadIfNeeded()
if let request = resource.loadIfNeeded() {
request.onSuccess { response in
if let suggestions: [String] = response.typedContent() {
self.querySuggestions = Store<[String]>(suggestions)
}
}
} else {
self.querySuggestions = Store<[String]>(self.querySuggestions.collection)
}
}
}
}

View File

@@ -36,9 +36,9 @@ final class SearchQuery: ObservableObject {
var name: String {
switch self {
case .uploadDate:
return "Upload Date"
return "Date"
case .viewCount:
return "View Count"
return "Views"
default:
return rawValue.capitalized
}