From db5bee3f2c254c688e3cd16c3321b6fdffc6ab24 Mon Sep 17 00:00:00 2001 From: daledah Date: Fri, 19 Dec 2025 11:44:50 +0700 Subject: [PATCH] cover submitBehavior prop text input --- .../src/exports/TextInput/index.js | 21 ++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/packages/react-native-web/src/exports/TextInput/index.js b/packages/react-native-web/src/exports/TextInput/index.js index 8f8de0bf0..80dcea10a 100644 --- a/packages/react-native-web/src/exports/TextInput/index.js +++ b/packages/react-native-web/src/exports/TextInput/index.js @@ -101,6 +101,7 @@ const TextInput: React.AbstractComponent< autoCompleteType, autoCorrect = true, blurOnSubmit, + submitBehavior, caretHidden, clearTextOnFocus, dir, @@ -307,10 +308,19 @@ const TextInput: React.AbstractComponent< // Prevent key events bubbling (see #612) e.stopPropagation(); - const blurOnSubmitDefault = !multiline; - const shouldBlurOnSubmit = - blurOnSubmit == null ? blurOnSubmitDefault : blurOnSubmit; - + // Support submitBehavior prop (React Native 0.73+), fallback to blurOnSubmit for backwards compatibility + var shouldBlurOnSubmit; + var shouldSubmit; + if (submitBehavior != null) { + // submitBehavior takes precedence over blurOnSubmit + shouldSubmit = submitBehavior === 'submit' || submitBehavior === 'blurAndSubmit'; + shouldBlurOnSubmit = submitBehavior === 'blurAndSubmit'; + } else { + // Fallback to blurOnSubmit logic for backwards compatibility + var blurOnSubmitDefault = !multiline; + shouldBlurOnSubmit = blurOnSubmit == null ? blurOnSubmitDefault : blurOnSubmit; + shouldSubmit = blurOnSubmit || !multiline; + } const nativeEvent = e.nativeEvent; const isComposing = isEventComposing(nativeEvent); @@ -325,7 +335,8 @@ const TextInput: React.AbstractComponent< !isComposing && !e.isDefaultPrevented() ) { - if ((blurOnSubmit || !multiline) && onSubmitEditing) { + // submitBehavior === 'newline' means don't submit, just insert newline (default behavior) + if (shouldSubmit && onSubmitEditing) { // prevent "Enter" from inserting a newline or submitting a form e.preventDefault(); nativeEvent.text = e.target.value;