mirror of
https://github.com/yattee/yattee.git
synced 2025-10-16 04:18:13 +00:00
Search improvements for iOS
This commit is contained in:
@@ -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
|
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -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
|
||||
}
|
||||
|
Reference in New Issue
Block a user