diff --git a/ios/HackerNews/Comments/CommentRow.swift b/ios/HackerNews/Comments/CommentRow.swift index 73f58835..bf7ba310 100644 --- a/ios/HackerNews/Comments/CommentRow.swift +++ b/ios/HackerNews/Comments/CommentRow.swift @@ -14,6 +14,7 @@ private let maxIndentationLevel: Int = 5 struct CommentRow: View { let state: CommentState let likeComment: (CommentState) -> Void + let flagComment: (CommentState) -> Void let toggleComment: () -> Void @Environment(Theme.self) private var theme @@ -50,15 +51,36 @@ struct CommentRow: View { .padding(.horizontal, 8) .padding(.vertical, 4) } + .frame(height: 20) .background(state.upvoted ? .green.opacity(0.2) : .white.opacity(0.2)) .foregroundStyle(state.upvoted ? .green : .onBackground) .clipShape(Capsule()) + + Menu { + Button("Report Comment") { + flagComment(state) + } + Button(state.hidden ? "Show" : "Collapse") { + toggleComment() + } + } label: { + Image(systemName: "ellipsis") + .font(.system(size: 12)) + .padding(.horizontal, 8) + .padding(.vertical, 4) + .frame(height: 20) + .background(.white.opacity(0.2)) + .foregroundStyle(.onBackground) + .clipShape(Capsule()) + } } } .padding(8) .background(isPressed ? .surface.opacity(0.85) : .surface) .zIndex(1) // Ensure header stays on top - .simultaneousGesture(makeCommentGesture()) + .onTapGesture(count: 1) { + toggleComment() + } // Comment Body if !state.hidden { @@ -90,33 +112,13 @@ struct CommentRow: View { } } -extension CommentRow { - fileprivate func makeCommentGesture() -> some Gesture { - DragGesture(minimumDistance: 0) - .onChanged { value in - // Only show press effect if we haven't moved far - if abs(value.translation.height) < 2 && abs(value.translation.width) < 2 { - isPressed = true - } else { - isPressed = false - } - } - .onEnded { value in - isPressed = false - // Trigger tap if it was a small movement (effectively a tap) - if abs(value.translation.height) < 2 && abs(value.translation.width) < 2 { - toggleComment() - } - } - } -} - struct CommentView_Preview: PreviewProvider { static var previews: some View { PreviewVariants { CommentRow( state: PreviewHelpers.makeFakeComment(), likeComment: { _ in }, + flagComment: { _ in }, toggleComment: {} ) .environment(Theme()) @@ -131,6 +133,7 @@ struct CommentViewIndentation_Preview: PreviewProvider { CommentRow( state: PreviewHelpers.makeFakeComment(level: index), likeComment: { _ in }, + flagComment: { _ in }, toggleComment: {} ) .environment(Theme()) @@ -150,6 +153,7 @@ C# is a hugely underrated language that I feel like often gets overlooked when t CommentRow( state: PreviewHelpers.makeFakeComment(level: 0, text: text), likeComment: { _ in }, + flagComment: { _ in }, toggleComment: {} ) .environment(Theme()) @@ -162,6 +166,7 @@ What do you mean that it's not truly cross-platform?