-
Notifications
You must be signed in to change notification settings - Fork 25k
feat: Add inputMode prop to TextInput component #34460
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: Add inputMode prop to TextInput component #34460
Conversation
Base commit: 8c882b4 |
Base commit: 8c882b4 |
|
@cipolleschi has imported this pull request. If you are a Meta employee, you can view this diff on Phabricator. |
|
'none' => 'default' (or noop) sounds right. |
| | 'tel' | ||
| | 'search' | ||
| | 'email' | ||
| | 'url'; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
'none' should be added to the allowed values even if we do nothing with it
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Sounds good, I've just added none there and mapped it to default
11fb0b7 to
e5f7e1a
Compare
Doing the same thing as Chrome seems reasonable. So |
|
@cipolleschi has imported this pull request. If you are a Meta employee, you can view this diff on Phabricator. |
e5f7e1a to
69f4b33
Compare
|
@cipolleschi I've just rebased this now that CI has been fixed |
|
@cipolleschi has imported this pull request. If you are a Meta employee, you can view this diff on Phabricator. |
69f4b33 to
20fe307
Compare
|
@cipolleschi has imported this pull request. If you are a Meta employee, you can view this diff on Phabricator. |
|
@necolas @cipolleschi any thoughts on why this didn't get labeled as |
|
Apparently inputMode=none could be mapped to |
Sounds good to me, gonna open a follow-up PR updating this |
|
#35228) Summary: This PR updates `inputMode` prop from the `TextInput` component to map the `none` option to `showSoftInputOnFocus={false}` as suggested by necolas here -> #34460 (comment). This change makes the inputMode API behaves a bit more similarly across platforms. Related to necolas/react-native-web#2421 ## Changelog [General] [Changed] - Update TextInput inputMode to map "none" to showSoftInputOnFocus ## Test Plan 1. Open the RNTester app and navigate to the TextInput page 2. Test the `TextInput` component through the `Input modes` section https://user-images.githubusercontent.com/11707729/200218435-6a33b319-e989-4086-aac3-506546982b38.mov Pull Request resolved: #35228 Reviewed By: lunaleaps, necolas Differential Revision: D41081876 Pulled By: jacdebug fbshipit-source-id: cc634c3723647d8950bf2cfe67be70d0fbd488a6
facebook#35228) Summary: This PR updates `inputMode` prop from the `TextInput` component to map the `none` option to `showSoftInputOnFocus={false}` as suggested by necolas here -> facebook#34460 (comment). This change makes the inputMode API behaves a bit more similarly across platforms. Related to necolas/react-native-web#2421 ## Changelog [General] [Changed] - Update TextInput inputMode to map "none" to showSoftInputOnFocus ## Test Plan 1. Open the RNTester app and navigate to the TextInput page 2. Test the `TextInput` component through the `Input modes` section https://user-images.githubusercontent.com/11707729/200218435-6a33b319-e989-4086-aac3-506546982b38.mov Pull Request resolved: facebook#35228 Reviewed By: lunaleaps, necolas Differential Revision: D41081876 Pulled By: jacdebug fbshipit-source-id: cc634c3723647d8950bf2cfe67be70d0fbd488a6
Summary
This adds the
inputModeprop to the TextInput component as requested on #34424, mapping web inputMode types to equivalent keyboardType values. This PR also updates RNTester TextInputExample in order to facilitate the manual QA.Caveats
This only adds support totext,decimal,numeric,tel,search,email, andurltypes.inputMode="none"Currently mapped to
defaultkeyboard type.The main problem with this input mode is that it's not supported natively neither on Android or iOS. Android
TextViewdoes acceptnoneasandroid:inputTypebut that makes the text not editable, which wouldn't really solve our problem.UITextInputon iOS on the other hand doesn't even have something similar to avoid displaying the virtual keyboard.If we really want to add the support for
inputMode="none"one interesting approach we could take is to do something similar to what WebKit has done (WebKit/WebKit@3b5f0c8). In order to achieve this behavior, they had to return aUIViewwith a bounds ofCGRectZeroas the inputView of theWKContentViewwhen inputmode=none is present.I guess the real question here should be, do we really want to add this? Or perhaps should we just mapinputMode="none"tokeyboardType="default"Android docs: https://developer.android.com/reference/android/widget/TextView#attr_android:inputType
iOS docs: https://developer.apple.com/documentation/uikit/uikeyboardtype?language=objc
inputMode="search"on AndroidCurrently mapped to
defaultkeyboard type.Android
TextViewdoes not offers any options likeUIKeyboardTypeWebSearchon iOS to be used assearchwithandroid:inputTypeand that's probably the reason whykeyboardType="web-search"is iOS only. I checked how this is handled on the browser on my Android device and it seems that Chrome just uses the default keyboard, maybe we should do the same?Open questions
What should be done aboutAdd it and map it toinputMode="none"?defaultkeyboard type.Which keyboard should we show on Android whenUse theinputMode="search"?defaultkeyboard the same way Chrome doesChangelog
[General] [Added] - Add inputMode prop to TextInput component
Test Plan
TextInputcomponent through theInput modessectionScreen.Recording.2022-08-19.at.16.16.10.mov