// // ItemMediaView.swift // Jel // // Created by zerocool on 12/23/23. // import SwiftUI import JellyfinKit import VisibilityTrackingScrollView struct ItemMediaView: View { @EnvironmentObject var jellyfinClient: JellyfinClientController @StateObject var authState: AuthStateController = AuthStateController.shared @State var item: BaseItemDto @ViewBuilder var playButton: () -> Content @State var pageScrolled: Bool = false var body: some View { GeometryReader {geo in ScrollView() { ItemHeaderView(item: item) .padding(.bottom) .background { GeometryReader {geo in EmptyView() .onChange(of: geo.frame(in: .global).minY) { let minY = geo.frame(in: .global).minY pageScrolled = minY < 0 } } } playButton() VStack(alignment: .leading) { Text(item.taglines?.count ?? 0 > 0 ? item.taglines?[0] ?? "" : "") .font(.headline) .frame(maxWidth: .infinity, alignment: .leading) .padding(.bottom) ForEach(item.overview?.components(separatedBy: "
") ?? [], id: \.self) {overview in Text(overview) } ItemGenresView(item: item) } .if(max(geo.safeAreaInsets.leading, geo.safeAreaInsets.trailing) > 0) {view in view .padding(max(geo.safeAreaInsets.leading, geo.safeAreaInsets.trailing)) } .if(max(geo.safeAreaInsets.leading, geo.safeAreaInsets.trailing) <= 0) {view in view .padding() } } .ignoresSafeArea() } .navigationBarTitleDisplayMode(.inline) .navigationTitle(item.name ?? "Untitled") .toolbarRole(.editor) .toolbar { ToolbarItem(placement: .principal) { Text(pageScrolled ? item.name ?? "Untitled" : "") .bold() } } .scrollIndicators(.hidden) } } //#Preview { // ItemMovieView(item: BaseItemDto()) //}