jel/Jel/Views/Library/Item/Person/ItemPersonIconView.swift

71 lines
1.6 KiB
Swift

//
// 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()
//}