import { Pressable, Text, TextInput, View } from 'react-native' import { MessageSquare, Plus, X } from 'lucide-react-native' import { MobileSyntaxSegments } from '../components/MobileSyntaxSegments' import { colors } from '../theme/mobile-theme' import { styles } from './mobile-session-styles' import type { DiffComment } from '../../../src/shared/diff-comment-types' import type { RenderableDiffLine } from './mobile-session-route-types' export function MobileDiffCommentLineRow({ line, title, index, comments, activeCommentLine, commentDraft, commentsBusy, onStartComment, onCancelComment, onDraftChange, onSubmitComment, onDeleteComment }: { line: RenderableDiffLine title: string index: number comments: DiffComment[] activeCommentLine: number | null commentDraft: string commentsBusy: boolean onStartComment: (lineNumber: number) => void onCancelComment: () => void onDraftChange: (value: string) => void onSubmitComment: (lineNumber: number) => void onDeleteComment: (commentId: string) => void }) { const commentLine = line.newLineNumber const isCommenting = commentLine !== undefined && activeCommentLine === commentLine const canComment = commentLine !== undefined // Why: review notes anchor to the modified side, so show that line number in the single mobile gutter. const gutterLineNumber = line.newLineNumber ?? line.oldLineNumber ?? '' return ( {gutterLineNumber} {line.kind === 'add' ? '+ ' : line.kind === 'delete' ? '- ' : ' '} {canComment ? ( [ styles.diffCommentAddButton, pressed && styles.diffCommentAddButtonPressed, commentsBusy && styles.diffCommentButtonDisabled ]} disabled={commentsBusy} onPress={() => { if (commentLine !== undefined) { onStartComment(commentLine) } }} accessibilityLabel={`Add note on line ${commentLine}`} > ) : null} {comments.length > 0 ? ( {comments.map((comment) => ( Line {comment.lineNumber} onDeleteComment(comment.id)} accessibilityLabel={`Delete note on line ${comment.lineNumber}`} > {comment.body} ))} ) : null} {isCommenting ? ( Cancel { if (commentLine !== undefined) { onSubmitComment(commentLine) } }} > Save note ) : null} ) }