diff options
author | Shav Kinderlehrer <[email protected]> | 2023-12-25 00:41:45 -0500 |
---|---|---|
committer | Shav Kinderlehrer <[email protected]> | 2023-12-25 00:41:45 -0500 |
commit | 8e73b094bafb635c30845b996340bc492e5633e4 (patch) | |
tree | 704e95f4641e6d8bf2f2a36558c7b504b6ee447e /Jel/Views/Library/LibraryDetailView.swift | |
parent | 69bed7745833add72cfe1b1516a61f62460b1765 (diff) | |
download | jel-8e73b094bafb635c30845b996340bc492e5633e4.tar.gz jel-8e73b094bafb635c30845b996340bc492e5633e4.zip |
Implement library searching
Diffstat (limited to 'Jel/Views/Library/LibraryDetailView.swift')
-rw-r--r-- | Jel/Views/Library/LibraryDetailView.swift | 53 |
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 } } } |