// // ItemPersonView.swift // Jel // // Created by zerocool on 1/13/24. // import SwiftUI import JellyfinKit import ExpandableText struct ItemPersonViewItemsRow: View { var items: [BaseItemDto] var body: some View { ScrollView(.horizontal) { HStack(alignment: .top) { ForEach(items) {item in NavigationLink { ItemView(item: item) } label: { ItemIconView(item: item, width: 150) .showCaption() .setAspectRatio(item.primaryImageAspectRatio ?? 0.6) } .buttonStyle(PlainButtonStyle()) } } .padding(.horizontal) } } } 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([.horizontal, .top]) if let overview = item.overviewNL { ExpandableText(overview) .lineLimit(8) .padding([.horizontal, .bottom]) } if let items = items { let movies = items.filter({$0.type == .movie}) if movies.count > 0 { Text("Movies") .font(.title2) .padding(.horizontal) ItemPersonViewItemsRow(items: movies) } let shows = items.filter({$0.type == .series}) if shows.count > 0 { Text("Shows") .font(.title2) .padding(.horizontal) ItemPersonViewItemsRow(items: shows) } } } .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() //}