chore: Remove deprecated onTextInput callback (#44351)

Summary:
TextInputs' `onTextInput` callback was removed way back in React Native 0.62 with https://github.com/facebook/react-native/commit/3f7e0a2c9601fc186f25bfd794cd0008ac3983ab , but remnants of the implementation exists. Let's just remove it altogether?

## Changelog:

[IOS] [REMOVED] - Remove deprecated onTextInput callback

Pull Request resolved: https://github.com/facebook/react-native/pull/44351

Test Plan: CI should pass

Reviewed By: NickGerleman

Differential Revision: D56804590

Pulled By: javache

fbshipit-source-id: 89101fa53cdc628a97ba176cf3deca691784bfdd
This commit is contained in:
Saad Najmi
2024-05-07 07:08:35 -07:00
committed by Facebook GitHub Bot
parent 06eea61c19
commit 24aece35b4
11 changed files with 1 additions and 151 deletions
@@ -385,15 +385,6 @@ export type NativeProps = $ReadOnly<{|
|}>,
>,
onTextInput?: ?BubblingEventHandler<
$ReadOnly<{|
target: Int32,
text: string,
previousText: string,
range: $ReadOnly<{|start: Double, end: Double|}>,
|}>,
>,
/**
* Callback that is called when text input ends.
*/
@@ -662,12 +653,6 @@ export const __INTERNAL_VIEW_CONFIG: PartialViewConfig = {
captured: 'onSubmitEditingCapture',
},
},
topTextInput: {
phasedRegistrationNames: {
bubbled: 'onTextInput',
captured: 'onTextInputCapture',
},
},
},
directEventTypes: {
topScroll: {
@@ -76,9 +76,6 @@ const RCTTextInputViewConfig = {
},
},
directEventTypes: {
topTextInput: {
registrationName: 'onTextInput',
},
topScroll: {
registrationName: 'onScroll',
},
@@ -153,7 +150,6 @@ const RCTTextInputViewConfig = {
onSelectionChange: true,
onContentSizeChange: true,
onScroll: true,
onTextInput: true,
}),
},
};
@@ -485,15 +485,6 @@ export interface TextInputSubmitEditingEventData {
text: string;
}
/**
* @see TextInputProps.onTextInput
*/
export interface TextInputTextInputEventData {
text: string;
previousText: string;
range: {start: number; end: number};
}
/**
* @see https://reactnative.dev/docs/textinput#props
*/
@@ -787,16 +778,6 @@ export interface TextInputProps
| ((e: NativeSyntheticEvent<TextInputSubmitEditingEventData>) => void)
| undefined;
/**
* Callback that is called on new text input with the argument
* `{ nativeEvent: { text, previousText, range: { start, end } } }`.
*
* This prop requires multiline={true} to be set.
*/
onTextInput?:
| ((e: NativeSyntheticEvent<TextInputTextInputEventData>) => void)
| undefined;
/**
* Invoked on content scroll with
* `{ nativeEvent: { contentOffset: { x, y } } }`.
@@ -36,7 +36,6 @@ NS_ASSUME_NONNULL_BEGIN
@property (nonatomic, copy, nullable) RCTDirectEventBlock onSelectionChange;
@property (nonatomic, copy, nullable) RCTDirectEventBlock onChange;
@property (nonatomic, copy, nullable) RCTDirectEventBlock onChangeSync;
@property (nonatomic, copy, nullable) RCTDirectEventBlock onTextInput;
@property (nonatomic, copy, nullable) RCTDirectEventBlock onScroll;
@property (nonatomic, assign) NSInteger mostRecentEventCount;
@@ -493,8 +493,6 @@ RCT_NOT_IMPLEMENTED(-(instancetype)initWithFrame : (CGRect)frame)
}
}
NSString *previousText = [backedTextInputView.attributedText.string copy] ?: @"";
if (range.location + range.length > backedTextInputView.attributedText.string.length) {
_predictedText = backedTextInputView.attributedText.string;
} else if (text != nil) {
@@ -502,17 +500,6 @@ RCT_NOT_IMPLEMENTED(-(instancetype)initWithFrame : (CGRect)frame)
withString:text];
}
if (_onTextInput) {
_onTextInput(@{
// We copy the string here because if it's a mutable string it may get released before we stop using it on a
// different thread, causing a crash.
@"text" : [text copy],
@"previousText" : previousText,
@"range" : @{@"start" : @(range.location), @"end" : @(range.location + range.length)},
@"eventCount" : @(_nativeEventCount),
});
}
return text; // Accepting the change.
}
@@ -64,7 +64,6 @@ RCT_EXPORT_VIEW_PROPERTY(onChange, RCTBubblingEventBlock)
RCT_EXPORT_VIEW_PROPERTY(onKeyPressSync, RCTDirectEventBlock)
RCT_EXPORT_VIEW_PROPERTY(onChangeSync, RCTDirectEventBlock)
RCT_EXPORT_VIEW_PROPERTY(onSelectionChange, RCTDirectEventBlock)
RCT_EXPORT_VIEW_PROPERTY(onTextInput, RCTDirectEventBlock)
RCT_EXPORT_VIEW_PROPERTY(onScroll, RCTDirectEventBlock)
RCT_EXPORT_VIEW_PROPERTY(mostRecentEventCount, NSInteger)
@@ -2281,14 +2281,6 @@ export type NativeProps = $ReadOnly<{|
contentSize: $ReadOnly<{| width: Double, height: Double |}>,
|}>,
>,
onTextInput?: ?BubblingEventHandler<
$ReadOnly<{|
target: Int32,
text: string,
previousText: string,
range: $ReadOnly<{| start: Double, end: Double |}>,
|}>,
>,
onEndEditing?: ?BubblingEventHandler<
$ReadOnly<{| target: Int32, text: string |}>,
>,
@@ -7662,15 +7662,6 @@ public class com/facebook/react/views/textinput/ReactTextChangedEvent : com/face
public fun getEventName ()Ljava/lang/String;
}
public class com/facebook/react/views/textinput/ReactTextInputEvent : com/facebook/react/uimanager/events/Event {
public static final field EVENT_NAME Ljava/lang/String;
public fun <init> (IILjava/lang/String;Ljava/lang/String;II)V
public fun <init> (ILjava/lang/String;Ljava/lang/String;II)V
public fun canCoalesce ()Z
protected fun getEventData ()Lcom/facebook/react/bridge/WritableMap;
public fun getEventName ()Ljava/lang/String;
}
public final class com/facebook/react/views/textinput/ReactTextInputLocalData {
public fun <init> (Landroid/widget/EditText;)V
public fun apply (Landroid/widget/EditText;)V
@@ -1,70 +0,0 @@
/*
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
package com.facebook.react.views.textinput;
import androidx.annotation.Nullable;
import com.facebook.react.bridge.Arguments;
import com.facebook.react.bridge.WritableMap;
import com.facebook.react.uimanager.common.ViewUtil;
import com.facebook.react.uimanager.events.Event;
/**
* Event emitted by EditText native view when text changes. VisibleForTesting from {@link
* TextInputEventsTestCase}.
*/
public class ReactTextInputEvent extends Event<ReactTextInputEvent> {
public static final String EVENT_NAME = "topTextInput";
private String mText;
private String mPreviousText;
private int mRangeStart;
private int mRangeEnd;
@Deprecated
public ReactTextInputEvent(
int viewId, String text, String previousText, int rangeStart, int rangeEnd) {
this(ViewUtil.NO_SURFACE_ID, viewId, text, previousText, rangeStart, rangeEnd);
}
public ReactTextInputEvent(
int surfaceId, int viewId, String text, String previousText, int rangeStart, int rangeEnd) {
super(surfaceId, viewId);
mText = text;
mPreviousText = previousText;
mRangeStart = rangeStart;
mRangeEnd = rangeEnd;
}
@Override
public String getEventName() {
return EVENT_NAME;
}
@Override
public boolean canCoalesce() {
// We don't want to miss any textinput event, as event data is incremental.
return false;
}
@Nullable
@Override
protected WritableMap getEventData() {
WritableMap eventData = Arguments.createMap();
WritableMap range = Arguments.createMap();
range.putDouble("start", mRangeStart);
range.putDouble("end", mRangeEnd);
eventData.putString("text", mText);
eventData.putString("previousText", mPreviousText);
eventData.putMap("range", range);
eventData.putInt("target", getViewTag());
return eventData;
}
}
@@ -14,7 +14,7 @@ import com.facebook.react.uimanager.common.ViewUtil;
import com.facebook.react.uimanager.events.Event;
/** Event emitted by EditText native view when key pressed */
class ReactTextInputKeyPressEvent extends Event<ReactTextInputEvent> {
/* package */ class ReactTextInputKeyPressEvent extends Event<ReactTextInputKeyPressEvent> {
public static final String EVENT_NAME = "topKeyPress";
@@ -230,11 +230,6 @@ public class ReactTextInputManager extends BaseViewManager<ReactEditText, Layout
MapBuilder.of(
"phasedRegistrationNames",
MapBuilder.of("bubbled", "onEndEditing", "captured", "onEndEditingCapture")))
.put(
"topTextInput",
MapBuilder.of(
"phasedRegistrationNames",
MapBuilder.of("bubbled", "onTextInput", "captured", "onTextInputCapture")))
.put(
"topFocus",
MapBuilder.of(
@@ -1120,17 +1115,12 @@ public class ReactTextInputManager extends BaseViewManager<ReactEditText, Layout
}
// The event that contains the event counter and updates it must be sent first.
// TODO: t7936714 merge these events
mEventDispatcher.dispatchEvent(
new ReactTextChangedEvent(
mSurfaceId,
mEditText.getId(),
s.toString(),
mEditText.incrementAndGetEventCounter()));
mEventDispatcher.dispatchEvent(
new ReactTextInputEvent(
mSurfaceId, mEditText.getId(), newText, oldText, start, start + before));
}
@Override