Add WebView.dataDetectorTypes prop.
Summary: WebView component detect phone numbers in html as URL links by default. But sometimes we don't want this behavior. This PR add dataDetectorTypes as a prop of WebView, so one can specify value of this prop as one or more of phoneNumber/link/address/calendarEvent/none/all This prop maps to UIWebView.dataDetectorTypes Closes https://github.com/facebook/react-native/pull/8743 Differential Revision: D3556440 fbshipit-source-id: 55f01d2cdd785381f261a9dc931aa9311f0ad1d4
This commit is contained in:
parent
8dd8c41553
commit
8612d7640d
|
@ -59,6 +59,15 @@ type ErrorEvent = {
|
|||
|
||||
type Event = Object;
|
||||
|
||||
const DataDetectorTypes = [
|
||||
'phoneNumber',
|
||||
'link',
|
||||
'address',
|
||||
'calendarEvent',
|
||||
'none',
|
||||
'all',
|
||||
];
|
||||
|
||||
var defaultRenderLoading = () => (
|
||||
<View style={styles.loadingView}>
|
||||
<ActivityIndicator />
|
||||
|
@ -238,6 +247,28 @@ var WebView = React.createClass({
|
|||
*/
|
||||
style: View.propTypes.style,
|
||||
|
||||
/**
|
||||
* Determines the types of data converted to clickable URLs in the web view’s content.
|
||||
* By default only phone numbers are detected.
|
||||
*
|
||||
* You can provide one type or an array of many types.
|
||||
*
|
||||
* Possible values for `dataDetectorTypes` are:
|
||||
*
|
||||
* - `'phoneNumber'`
|
||||
* - `'link'`
|
||||
* - `'address'`
|
||||
* - `'calendarEvent'`
|
||||
* - `'none'`
|
||||
* - `'all'`
|
||||
*
|
||||
* @platform ios
|
||||
*/
|
||||
dataDetectorTypes: PropTypes.oneOfType([
|
||||
PropTypes.oneOf(DataDetectorTypes),
|
||||
PropTypes.arrayOf(PropTypes.oneOf(DataDetectorTypes)),
|
||||
]),
|
||||
|
||||
/**
|
||||
* Boolean value to enable JavaScript in the `WebView`. Used on Android only
|
||||
* as JavaScript is enabled by default on iOS. The default value is `true`.
|
||||
|
@ -374,6 +405,7 @@ var WebView = React.createClass({
|
|||
scalesPageToFit={this.props.scalesPageToFit}
|
||||
allowsInlineMediaPlayback={this.props.allowsInlineMediaPlayback}
|
||||
mediaPlaybackRequiresUserAction={this.props.mediaPlaybackRequiresUserAction}
|
||||
dataDetectorTypes={this.props.dataDetectorTypes}
|
||||
/>;
|
||||
|
||||
return (
|
||||
|
|
|
@ -66,6 +66,7 @@ typedef NSURL RCTFileURL;
|
|||
+ (UIKeyboardType)UIKeyboardType:(id)json;
|
||||
+ (UIKeyboardAppearance)UIKeyboardAppearance:(id)json;
|
||||
+ (UIReturnKeyType)UIReturnKeyType:(id)json;
|
||||
+ (UIDataDetectorTypes)UIDataDetectorTypes:(id)json;
|
||||
|
||||
+ (UIViewContentMode)UIViewContentMode:(id)json;
|
||||
+ (UIBarStyle)UIBarStyle:(id)json;
|
||||
|
|
|
@ -319,6 +319,15 @@ RCT_ENUM_CONVERTER(UIKeyboardType, (@{
|
|||
@"numeric": @(UIKeyboardTypeDecimalPad),
|
||||
}), UIKeyboardTypeDefault, integerValue)
|
||||
|
||||
RCT_MULTI_ENUM_CONVERTER(UIDataDetectorTypes, (@{
|
||||
@"phoneNumber": @(UIDataDetectorTypePhoneNumber),
|
||||
@"link": @(UIDataDetectorTypeLink),
|
||||
@"address": @(UIDataDetectorTypeAddress),
|
||||
@"calendarEvent": @(UIDataDetectorTypeCalendarEvent),
|
||||
@"none": @(UIDataDetectorTypeNone),
|
||||
@"all": @(UIDataDetectorTypeAll),
|
||||
}), UIDataDetectorTypePhoneNumber, unsignedLongLongValue)
|
||||
|
||||
RCT_ENUM_CONVERTER(UIKeyboardAppearance, (@{
|
||||
@"default": @(UIKeyboardAppearanceDefault),
|
||||
@"light": @(UIKeyboardAppearanceLight),
|
||||
|
|
|
@ -47,7 +47,7 @@ RCT_EXPORT_VIEW_PROPERTY(onLoadingError, RCTDirectEventBlock)
|
|||
RCT_EXPORT_VIEW_PROPERTY(onShouldStartLoadWithRequest, RCTDirectEventBlock)
|
||||
RCT_REMAP_VIEW_PROPERTY(allowsInlineMediaPlayback, _webView.allowsInlineMediaPlayback, BOOL)
|
||||
RCT_REMAP_VIEW_PROPERTY(mediaPlaybackRequiresUserAction, _webView.mediaPlaybackRequiresUserAction, BOOL)
|
||||
|
||||
RCT_REMAP_VIEW_PROPERTY(dataDetectorTypes, _webView.dataDetectorTypes, UIDataDetectorTypes)
|
||||
|
||||
RCT_EXPORT_METHOD(goBack:(nonnull NSNumber *)reactTag)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue