import SwiftUI struct CommentsView: View { @State private var repliesID: Comment.ID? @State private var availableWidth = 0.0 @ObservedObject private var comments = CommentsModel.shared var body: some View { Group { if comments.disabled { NoCommentsView(text: "Comments are disabled".localized(), systemImage: "xmark.circle.fill") } else if comments.loaded && comments.all.isEmpty { NoCommentsView(text: "No comments".localized(), systemImage: "0.circle.fill") } else if !comments.loaded { PlaceholderProgressView() } else { LazyVStack { ForEach(comments.all) { comment in CommentView(comment: comment, repliesID: $repliesID, availableWidth: availableWidth) .onAppear { comments.loadNextPageIfNeeded(current: comment) } .borderBottom(height: comment != comments.all.last ? 0.5 : 0, color: Color("ControlsBorderColor")) } } .background(GeometryReader { geometry in Color.clear .onAppear { self.availableWidth = Double(geometry.size.width) } }) } } .padding(.horizontal) } } struct CommentsView_Previews: PreviewProvider { static var previews: some View { if #available(iOS 15.0, macOS 12.0, tvOS 15.0, *) { CommentsView() .previewInterfaceOrientation(.landscapeRight) .injectFixtureEnvironmentObjects() } CommentsView() .injectFixtureEnvironmentObjects() } }