[fix] TextInput multiline value with onSubmitEditing

Prevent a newline from being added when submitting a multiline text
input using the "Enter" key.

Fix #1013
This commit is contained in:
Nicolas Gallagher
2018-07-04 12:32:48 -07:00
parent d2df2c296e
commit 96ec805f59
2 changed files with 10 additions and 3 deletions

View File

@@ -368,6 +368,8 @@ describe('components/TextInput', () => {
test('multi-line input with "blurOnSubmit" triggers "onSubmitEditing"', () => {
const onSubmitEditing = jest.fn();
const preventDefault = jest.fn();
const input = findNativeTextarea(
mount(
<TextInput
@@ -380,10 +382,13 @@ describe('components/TextInput', () => {
);
// shift+enter should enter newline, not submit
input.simulate('keyPress', { which: 13, shiftKey: true });
input.simulate('keyPress', { which: 13 });
expect(onSubmitEditing).toHaveBeenCalledTimes(1);
input.simulate('keyPress', { which: 13, preventDefault, shiftKey: true });
expect(onSubmitEditing).not.toHaveBeenCalledWith(expect.objectContaining({ shiftKey: true }));
expect(preventDefault).not.toHaveBeenCalled();
input.simulate('keyPress', { which: 13, preventDefault });
expect(onSubmitEditing).toHaveBeenCalledTimes(1);
expect(preventDefault).toHaveBeenCalledTimes(1);
});
});

View File

@@ -376,6 +376,8 @@ class TextInput extends Component<*> {
if (!e.isDefaultPrevented() && e.which === 13 && !e.shiftKey) {
if ((blurOnSubmit || !multiline) && onSubmitEditing) {
// prevent "Enter" from inserting a newline
e.preventDefault();
e.nativeEvent = { target: e.target, text: e.target.value };
onSubmitEditing(e);
}