jel/Jel/Views/Library/LibraryDetailView.swift

62 lines
1.5 KiB
Swift
Raw Normal View History

2023-12-23 05:53:44 +00:00
//
// LibraryDetailView.swift
// Jel
//
// Created by zerocool on 12/22/23.
//
import SwiftUI
import JellyfinKit
struct LibraryDetailView: View {
@EnvironmentObject var jellyfinClient: JellyfinClientController
@StateObject var authState: AuthStateController = AuthStateController.shared
@State var library: BaseItemDto
@State var items: [BaseItemDto]? = []
2023-12-23 16:14:53 +00:00
@State var loading: Bool = true
let columns = [
GridItem(.adaptive(minimum: 150))
]
2023-12-23 05:53:44 +00:00
var body: some View {
2023-12-23 16:14:53 +00:00
if loading {
ProgressView()
.progressViewStyle(.circular)
}
2023-12-23 05:53:44 +00:00
ScrollView {
2023-12-23 16:14:53 +00:00
LazyVGrid(columns: columns) {
ForEach(items ?? []) {item in
NavigationLink {
ItemView(item: item)
} label: {
LibraryIconView(library: item, imageType: "Primary", width: 170)
.padding()
}
.buttonStyle(PlainButtonStyle())
2023-12-23 16:14:53 +00:00
}
2023-12-23 05:53:44 +00:00
}
}
.navigationTitle(library.name ?? "Unknown")
.onAppear {
Task {
let params = Paths.GetItemsParameters(userID: authState.userId, parentID: library.id)
let request = Paths.getItems(parameters: params)
do {
let res = try await jellyfinClient.send(request)
items = res.value.items
2023-12-25 01:01:52 +00:00
items?.sort(by: {$0.name?.lowercased() ?? "" < $1.name?.lowercased() ?? ""})
2023-12-23 16:14:53 +00:00
loading = false
2023-12-23 05:53:44 +00:00
} catch {
}
}
}
}
}
2023-12-23 16:14:53 +00:00
//#Preview {
// LibraryDetailView(library: BaseItemDto())
//}