summaryrefslogtreecommitdiff
path: root/Jel/Views/Library/LibraryDetailView.swift
diff options
context:
space:
mode:
authorShav Kinderlehrer <[email protected]>2023-12-25 00:41:45 -0500
committerShav Kinderlehrer <[email protected]>2023-12-25 00:41:45 -0500
commit8e73b094bafb635c30845b996340bc492e5633e4 (patch)
tree704e95f4641e6d8bf2f2a36558c7b504b6ee447e /Jel/Views/Library/LibraryDetailView.swift
parent69bed7745833add72cfe1b1516a61f62460b1765 (diff)
downloadjel-8e73b094bafb635c30845b996340bc492e5633e4.tar.gz
jel-8e73b094bafb635c30845b996340bc492e5633e4.zip
Implement library searching
Diffstat (limited to 'Jel/Views/Library/LibraryDetailView.swift')
-rw-r--r--Jel/Views/Library/LibraryDetailView.swift53
1 files changed, 46 insertions, 7 deletions
diff --git a/Jel/Views/Library/LibraryDetailView.swift b/Jel/Views/Library/LibraryDetailView.swift
index f4ff93c..9d4e46d 100644
--- a/Jel/Views/Library/LibraryDetailView.swift
+++ b/Jel/Views/Library/LibraryDetailView.swift
@@ -13,10 +13,15 @@ struct LibraryDetailView: View {
@StateObject var authState: AuthStateController = AuthStateController.shared
@State var library: BaseItemDto
+
@State var items: [BaseItemDto]? = []
@State var loading: Bool = true
+
+ @State var searchText: String = ""
+ @State var searchResultHints: SearchHintResult?
+ @State var searchResultItems: [BaseItemDto]?
let columns = [
GridItem(.adaptive(minimum: 150))
]
@@ -24,17 +29,51 @@ struct LibraryDetailView: View {
if loading {
ProgressView()
.progressViewStyle(.circular)
+ } else {
+ EmptyView()
}
ScrollView {
LazyVGrid(columns: columns) {
- ForEach(items ?? []) {item in
- NavigationLink {
- ItemView(item: item)
- } label: {
- LibraryIconView(library: item, imageType: "Primary", width: 170)
- .padding()
+ if !searchText.isEmpty {
+ ForEach(searchResultItems ?? []) {item in
+ NavigationLink {
+ ItemView(item: item)
+ } label: {
+ LibraryIconView(library: item, imageType: "Primary", width: 170)
+ .padding()
+ }
+ .buttonStyle(PlainButtonStyle())
+ }
+ } else {
+ ForEach(items ?? []) {item in
+ NavigationLink {
+ ItemView(item: item)
+ } label: {
+ LibraryIconView(library: item, imageType: "Primary", width: 170)
+ .padding()
+ }
+ .buttonStyle(PlainButtonStyle())
+ }
+ }
+ }
+ }
+ .searchable(text: $searchText)
+ .onChange(of: searchText) {
+ Task {
+ let parameters = Paths.GetParameters(
+ userID: AuthStateController.shared.userId,
+ searchTerm: searchText.lowercased(),
+ parentID: library.id
+ )
+ searchResultHints = await jellyfinClient.search(parameters: parameters)
+
+ searchResultItems = items?.filter { item in
+ for hint in searchResultHints?.searchHints ?? [] {
+ if hint.name == item.name {
+ return true
+ }
}
- .buttonStyle(PlainButtonStyle())
+ return false
}
}
}