// // ItemPersonIconView.swift // Jel // // Created by zerocool on 1/8/24. // import SwiftUI import JellyfinKit import NukeUI struct ItemPersonIconPlaceholderView: View { var body: some View { VStack { Image(systemName: "person") .resizable() .padding() .scaledToFit() } } } struct ItemPersonIconView: View { @StateObject var authState: AuthStateController = AuthStateController.shared @EnvironmentObject var jellyfinClient: JellyfinClientController var person: BaseItemPerson @State var personImageUrl: URL? @State var loading: Bool = true var body: some View { VStack() { LazyImage(url: personImageUrl) {state in if let image = state.image { image .resizable() .clipShape(RoundedRectangle(cornerRadius: 5)) } else { ItemPersonIconPlaceholderView() } } .aspectRatio(contentMode: .fit) .frame(width: 100, height: 170) VStack { Text(person.name ?? "---") .font(.callout) Text(person.role ?? "---") .font(.caption) .foregroundStyle(.gray) } .frame(width: 100) } // .redacted(reason: loading ? .placeholder : []) .onAppear { Task { let request = Paths.getItemImage(itemID: person.id ?? "", imageType: "Primary") let serverUrl = jellyfinClient.getUrl() personImageUrl = serverUrl?.appending(path: request.url?.absoluteString ?? "") // loading = false } } } } //#Preview { // ItemPersonView() //}