diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextChangedEvent.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextChangedEvent.kt index b4e4a7caad87..f4c0daabb000 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextChangedEvent.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextChangedEvent.kt @@ -17,6 +17,8 @@ internal class ReactTextChangedEvent( viewId: Int, private val text: String, private val eventCount: Int, + private val selectionStart: Int, + private val selectionEnd: Int, ) : Event(surfaceId, viewId) { override fun getEventName(): String = EVENT_NAME @@ -25,6 +27,12 @@ internal class ReactTextChangedEvent( putString("text", text) putInt("eventCount", eventCount) putInt("target", viewTag) + val selectionData = + Arguments.createMap().apply { + putInt("start", selectionStart) + putInt("end", selectionEnd) + } + putMap("selection", selectionData) } } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputTextWatcher.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputTextWatcher.kt index 887251ccbbce..e6e13a00955a 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputTextWatcher.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputTextWatcher.kt @@ -63,6 +63,8 @@ internal class ReactTextInputTextWatcher( editText.id, s.toString(), editText.incrementAndGetEventCounter(), + editText.selectionStart, + editText.selectionEnd, ) ) } diff --git a/packages/react-native/ReactCommon/react/renderer/components/textinput/TextInputEventEmitter.cpp b/packages/react-native/ReactCommon/react/renderer/components/textinput/TextInputEventEmitter.cpp index a9bc219f8bf7..2982b12fe014 100644 --- a/packages/react-native/ReactCommon/react/renderer/components/textinput/TextInputEventEmitter.cpp +++ b/packages/react-native/ReactCommon/react/renderer/components/textinput/TextInputEventEmitter.cpp @@ -140,7 +140,8 @@ void TextInputEventEmitter::onBlur(const Metrics& textInputMetrics) const { } void TextInputEventEmitter::onChange(const Metrics& textInputMetrics) const { - dispatchTextInputEvent("change", textInputMetrics); + dispatchTextInputEvent( + "change", textInputMetrics, /* includeSelectionState */ true); } void TextInputEventEmitter::onContentSizeChange(