Skip to content

Commit 2bfca03

Browse files
authored
Add cover submitBehavior prop (#745)
1 parent 08e139e commit 2bfca03

File tree

1 file changed

+19
-7
lines changed

1 file changed

+19
-7
lines changed

src/MarkdownTextInput.web.tsx

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ const MarkdownTextInput = React.forwardRef<MarkdownTextInput, MarkdownTextInputP
8787
autoCapitalize = 'sentences',
8888
autoCorrect = true,
8989
blurOnSubmit = false,
90+
submitBehavior,
9091
caretHidden,
9192
clearTextOnFocus,
9293
dir = 'auto',
@@ -518,9 +519,19 @@ const MarkdownTextInput = React.forwardRef<MarkdownTextInput, MarkdownTextInputP
518519
return;
519520
}
520521

521-
const blurOnSubmitDefault = !multiline;
522-
const shouldBlurOnSubmit = blurOnSubmit === null ? blurOnSubmitDefault : blurOnSubmit;
523-
522+
// Support submitBehavior prop (React Native 0.73+), fallback to blurOnSubmit for backwards compatibility
523+
let shouldBlurOnSubmit;
524+
let shouldSubmit;
525+
if (submitBehavior != null) {
526+
// submitBehavior takes precedence over blurOnSubmit
527+
shouldSubmit = submitBehavior === 'submit' || submitBehavior === 'blurAndSubmit';
528+
shouldBlurOnSubmit = submitBehavior === 'blurAndSubmit';
529+
} else {
530+
// Fallback to blurOnSubmit logic for backwards compatibility
531+
const blurOnSubmitDefault = !multiline;
532+
shouldBlurOnSubmit = blurOnSubmit === null ? blurOnSubmitDefault : blurOnSubmit;
533+
shouldSubmit = blurOnSubmit || !multiline;
534+
}
524535
const nativeEvent = e.nativeEvent;
525536
const isComposing = isEventComposing(nativeEvent);
526537

@@ -538,19 +549,20 @@ const MarkdownTextInput = React.forwardRef<MarkdownTextInput, MarkdownTextInputP
538549
) {
539550
// prevent "Enter" from inserting a newline or submitting a form
540551
e.preventDefault();
541-
if (!e.shiftKey && (blurOnSubmit || !multiline) && onSubmitEditing) {
552+
// submitBehavior === 'newline' means don't submit, just insert newline (default behavior)
553+
if (!e.shiftKey && shouldSubmit && onSubmitEditing) {
542554
onSubmitEditing(event as unknown as NativeSyntheticEvent<TextInputSubmitEditingEventData>);
543-
} else if (multiline) {
555+
} else if (multiline && (!shouldSubmit || e.shiftKey)) {
544556
// We need to change normal behavior of "Enter" key to insert a line breaks, to prevent wrapping contentEditable text in <div> tags.
545557
// Thanks to that in every situation we have proper amount of new lines in our parsed text. Without it pressing enter in empty lines will add 2 more new lines.
546558
insertText(e, '\n');
547559
}
548-
if (!e.shiftKey && ((shouldBlurOnSubmit && hostNode !== null) || !multiline)) {
560+
if (!e.shiftKey && shouldBlurOnSubmit && hostNode !== null) {
549561
setTimeout(() => divRef.current && divRef.current.blur(), 0);
550562
}
551563
}
552564
},
553-
[multiline, blurOnSubmit, setEventProps, onKeyPress, handleOnChangeText, onSubmitEditing, insertText],
565+
[multiline, blurOnSubmit, submitBehavior, setEventProps, onKeyPress, handleOnChangeText, onSubmitEditing, insertText],
554566
);
555567

556568
const handleFocus: FocusEventHandler<HTMLDivElement> = useCallback(

0 commit comments

Comments
 (0)