import { useEffect, useState } from 'react' import { Text, TextInput, View } from 'react-native' import type { MobileFilePreviewLineColumn } from './mobile-file-preview-line-column' import { textOffsetForLineColumn } from './mobile-file-preview-line-column' import { filePreviewStyles as styles } from './mobile-file-preview-styles' type Props = { title: string draftContent: string lineColumn: MobileFilePreviewLineColumn | null saveError?: string onDraftChange: (content: string) => void } export function MobileFilePreviewEditableSource({ title, draftContent, lineColumn, saveError, onDraftChange }: Props) { const selectionTargetKey = lineColumn ? `${title}:${lineColumn.line}:${lineColumn.column ?? ''}` : '' const [selection, setSelection] = useState<{ start: number; end: number } | null>(null) const [revealedTargetKey, setRevealedTargetKey] = useState('') // Why: line/column opens should reveal once, then user cursor movement owns selection. useEffect(() => { if (!lineColumn || !selectionTargetKey || revealedTargetKey === selectionTargetKey) { return } const offset = textOffsetForLineColumn(draftContent, lineColumn) const initialSelection = { start: offset, end: offset } setSelection(initialSelection) setRevealedTargetKey(selectionTargetKey) }, [draftContent, lineColumn, revealedTargetKey, selectionTargetKey]) return ( {saveError ? {saveError} : null} setSelection(null)} accessibilityLabel={`${title} editor`} /> ) }