|
@@ -2,10 +2,12 @@
|
2
|
2
|
|
3
|
3
|
import React, { PureComponent } from 'react';
|
4
|
4
|
|
5
|
|
-import { Animated, StyleSheet, ViewPropTypes, WebView } from 'react-native';
|
|
5
|
+import { Animated, StyleSheet, WebView } from 'react-native';
|
6
|
6
|
|
7
|
7
|
import PropTypes from 'prop-types';
|
8
|
8
|
|
|
9
|
+import { commonPropTypes } from './propTypes.js';
|
|
10
|
+
|
9
|
11
|
import {
|
10
|
12
|
isEqual,
|
11
|
13
|
setState,
|
|
@@ -20,40 +22,19 @@ import momoize from './momoize';
|
20
|
22
|
|
21
|
23
|
export default class AutoHeightWebView extends PureComponent {
|
22
|
24
|
static propTypes = {
|
|
25
|
+ ...commonPropTypes,
|
23
|
26
|
hasIframe: PropTypes.bool,
|
24
|
|
- onNavigationStateChange: PropTypes.func,
|
25
|
|
- onMessage: PropTypes.func,
|
26
|
|
- source: WebView.propTypes.source,
|
27
|
|
- customScript: PropTypes.string,
|
28
|
|
- customStyle: PropTypes.string,
|
29
|
|
- enableAnimation: PropTypes.bool,
|
30
|
|
- style: ViewPropTypes.style,
|
31
|
|
- scrollEnabled: PropTypes.bool,
|
32
|
|
- // either height or width updated will trigger this
|
33
|
|
- onSizeUpdated: PropTypes.func,
|
34
|
|
- // if set to true may cause some layout issues (smaller font size)
|
35
|
|
- scalesPageToFit: PropTypes.bool,
|
36
|
27
|
// only works on enable animation
|
37
|
28
|
animationDuration: PropTypes.number,
|
38
|
29
|
// offset of rn webview margin
|
39
|
30
|
heightOffset: PropTypes.number,
|
40
|
|
- // rn WebView callback
|
41
|
|
- onError: PropTypes.func,
|
42
|
|
- onLoad: PropTypes.func,
|
43
|
|
- onLoadStart: PropTypes.func,
|
44
|
|
- onLoadEnd: PropTypes.func,
|
|
31
|
+ // webview props
|
|
32
|
+ scrollEnabled: PropTypes.bool,
|
45
|
33
|
onShouldStartLoadWithRequest: PropTypes.func,
|
|
34
|
+ decelerationRate: PropTypes.number,
|
46
|
35
|
allowsInlineMediaPlayback: PropTypes.bool,
|
47
|
|
- // 'web/' by default
|
48
|
|
- baseUrl: PropTypes.string,
|
49
|
|
- // add baseUrl/files... to project root
|
50
|
|
- files: PropTypes.arrayOf(
|
51
|
|
- PropTypes.shape({
|
52
|
|
- href: PropTypes.string,
|
53
|
|
- type: PropTypes.string,
|
54
|
|
- rel: PropTypes.string
|
55
|
|
- })
|
56
|
|
- )
|
|
36
|
+ bounces: PropTypes.bool,
|
|
37
|
+ dataDetectorTypes: PropTypes.oneOfType([PropTypes.string, PropTypes.array])
|
57
|
38
|
};
|
58
|
39
|
|
59
|
40
|
static defaultProps = {
|
|
@@ -139,6 +120,13 @@ export default class AutoHeightWebView extends PureComponent {
|
139
|
120
|
render() {
|
140
|
121
|
const { height, width } = this.state;
|
141
|
122
|
const {
|
|
123
|
+ renderError,
|
|
124
|
+ originWhitelist,
|
|
125
|
+ mediaPlaybackRequiresUserAction,
|
|
126
|
+ bounces,
|
|
127
|
+ decelerationRate,
|
|
128
|
+ allowsInlineMediaPlayback,
|
|
129
|
+ dataDetectorTypes,
|
142
|
130
|
onMessage,
|
143
|
131
|
onError,
|
144
|
132
|
onLoad,
|
|
@@ -149,8 +137,7 @@ export default class AutoHeightWebView extends PureComponent {
|
149
|
137
|
enableAnimation,
|
150
|
138
|
heightOffset,
|
151
|
139
|
style,
|
152
|
|
- scrollEnabled,
|
153
|
|
- allowsInlineMediaPlayback
|
|
140
|
+ scrollEnabled
|
154
|
141
|
} = this.props;
|
155
|
142
|
const { source, script } = this.getUpdatedState(this.props, getBaseScript, getIframeBaseScript);
|
156
|
143
|
return (
|
|
@@ -166,7 +153,13 @@ export default class AutoHeightWebView extends PureComponent {
|
166
|
153
|
]}
|
167
|
154
|
>
|
168
|
155
|
<WebView
|
169
|
|
- originWhitelist={['*']}
|
|
156
|
+ renderError={renderError}
|
|
157
|
+ mediaPlaybackRequiresUserAction={mediaPlaybackRequiresUserAction}
|
|
158
|
+ bounces={bounces}
|
|
159
|
+ decelerationRate={decelerationRate}
|
|
160
|
+ allowsInlineMediaPlayback={allowsInlineMediaPlayback}
|
|
161
|
+ dataDetectorTypes={dataDetectorTypes}
|
|
162
|
+ originWhitelist={originWhitelist || ['*']}
|
170
|
163
|
ref={this.webView}
|
171
|
164
|
onMessage={onMessage}
|
172
|
165
|
onError={onError}
|
|
@@ -180,7 +173,6 @@ export default class AutoHeightWebView extends PureComponent {
|
180
|
173
|
injectedJavaScript={script}
|
181
|
174
|
source={source}
|
182
|
175
|
onNavigationStateChange={this.handleNavigationStateChange}
|
183
|
|
- allowsInlineMediaPlayback={allowsInlineMediaPlayback}
|
184
|
176
|
/>
|
185
|
177
|
</Animated.View>
|
186
|
178
|
);
|