diff options
author | Shav Kinderlehrer <[email protected]> | 2024-01-13 02:20:20 -0500 |
---|---|---|
committer | Shav Kinderlehrer <[email protected]> | 2024-01-13 02:20:20 -0500 |
commit | 4c98eef1201c42100597d0093988db60b03b0e32 (patch) | |
tree | 137c8d612bbbfa2d79f60276801f94b1f0eb568a /Jel/Views/Item/Types | |
parent | 6b8d3372d21149ed0efb4d43bf0cab44bd24f9a4 (diff) | |
download | jel-4c98eef1201c42100597d0093988db60b03b0e32.tar.gz jel-4c98eef1201c42100597d0093988db60b03b0e32.zip |
Start implementing ItemPersonView
Diffstat (limited to 'Jel/Views/Item/Types')
-rw-r--r-- | Jel/Views/Item/Types/ItemPersonView.swift | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/Jel/Views/Item/Types/ItemPersonView.swift b/Jel/Views/Item/Types/ItemPersonView.swift new file mode 100644 index 0000000..b827480 --- /dev/null +++ b/Jel/Views/Item/Types/ItemPersonView.swift @@ -0,0 +1,81 @@ +// +// ItemPersonView.swift +// Jel +// +// Created by zerocool on 1/13/24. +// + +import SwiftUI +import JellyfinKit + +struct ItemPersonView: View { + @EnvironmentObject var jellyfinClient: JellyfinClientController + + var item: BaseItemDto + + @State var items: [BaseItemDto]? + + var body: some View { + VStack(alignment: .leading) { + Text(item.name ?? "---") + .font(.title) + .padding() + + if let overview = item.overview { + Text(overview) + .padding([.horizontal, .bottom]) + } + + if let items = items { + // TODO: Extract to view to maintain DRY + let movies = items.filter({$0.type == .movie}) + if movies.count > 0 { + Text("Movies") + .font(.title2) + .padding(.horizontal) + ScrollView(.horizontal) { + LazyHStack { + ForEach(movies) {movie in + Text(movie.name ?? "") + } + } + .padding(.horizontal) + } + } + + let shows = items.filter({$0.type == .series}) + if shows.count > 0 { + Text("Shows") + .font(.title2) + .padding(.horizontal) + ScrollView(.horizontal) { + LazyHStack { + ForEach(shows) {show in + Text(show.name ?? "") + } + } + .padding(.horizontal) + } + } + } + } + .onAppear { + Task { + let parameters = Paths.GetItemsParameters( + isRecursive: true, + personIDs: [item.id ?? ""] + ) + let request = Paths.getItems(parameters: parameters) + + do { + let res = try await jellyfinClient.send(request) + items = res.value.items ?? [] + } catch {} + } + } + } +} + +//#Preview { +// ItemPersonView() +//} |