Browse Source

add rn WebView callbacks; update demo to rn 0.50.1; bump version to 0.4.0

iou90 7 years ago
parent
commit
60c23560e8

+ 14
- 4
README.md View File

@@ -27,7 +27,7 @@ Cause of moving View.propTypes to ViewPropTypes in React Naitve 0.44 (https://gi
27 27
     hasIframe={true}
28 28
     /*
29 29
     if set to false may cause some layout issues (width of container not fit for screen) on android
30
-    if set to true may cause some layout issues (smaller font size) on ios
30
+    if set to true may cause some layout issues (smaller font size) on iOS
31 31
     */
32 32
     scalesPageToFit={Platform.OS === 'android' ? true : false}
33 33
     // baseUrl not work in android 4.3 or below version
@@ -35,8 +35,8 @@ Cause of moving View.propTypes to ViewPropTypes in React Naitve 0.44 (https://gi
35 35
     // offset of rn webview margin 
36 36
     heightOffset={5}
37 37
     // default width is the width of screen
38
-    // to fix that it can not select text when the length of it is not long enough on iOS, the width should be reduced more than 15
39
-    style={{ width: Dimensions.get('window').width - 15 }}
38
+    // if there are some text selection issues on iOS, the width should be reduced more than 15 and the marginTop should be added more than 35
39
+    style={{ width: Dimensions.get('window').width - 15, marginTop: 35 }}
40 40
     // enable animation by default
41 41
     enableAnimation={true},
42 42
     // only works on enable animation
@@ -51,6 +51,16 @@ Cause of moving View.propTypes to ViewPropTypes in React Naitve 0.44 (https://gi
51 51
     }]}
52 52
     // change script (have to change source to reload on android)
53 53
     customScript={`document.body.style.background = 'lightyellow';`}
54
+    // rn WebView callbacks
55
+    onError={() => console.log('on error')}
56
+    onLoad={() => console.log('on load')}
57
+    onLoadStart={() => console.log('on load start')}
58
+    onLoadEnd={() => console.log('on load end')}
59
+    // only on iOS
60
+    onShouldStartLoadWithRequest={result => {
61
+      console.log(result)
62
+      return true;
63
+    }}
54 64
     // add custom CSS to the page's <head>
55 65
     customStyle={`
56 66
       * {
@@ -65,4 +75,4 @@ Cause of moving View.propTypes to ViewPropTypes in React Naitve 0.44 (https://gi
65 75
 
66 76
 # demo
67 77
 
68
-There could have some issues when installing & running the demo, related to https://github.com/facebook/react-native/issues/14209, you should try to delete the demo folder in node_modules/react-native-autoheight-webview of the demo project and npm start -- --reset-cache or restart your machine.
78
+There could have some issues when installing & running the demo, related to https://github.com/facebook/react-native/issues/14423, try: rm -rf ~/.rncache.

+ 38
- 3
autoHeightWebView/index.android.js View File

@@ -23,7 +23,16 @@ import Immutable from "immutable";
23 23
 const RCTAutoHeightWebView = requireNativeComponent(
24 24
   "RCTAutoHeightWebView",
25 25
   AutoHeightWebView,
26
-  { nativeOnly: { messagingEnabled: PropTypes.bool } }
26
+  { nativeOnly: 
27
+    {
28
+      nativeOnly: {
29
+        onLoadingStart: true,
30
+        onLoadingError: true,
31
+        onLoadingFinish: true,
32
+        messagingEnabled: PropTypes.bool
33
+      }
34
+    }
35
+   }
27 36
 );
28 37
 
29 38
 export default class AutoHeightWebView extends PureComponent {
@@ -42,6 +51,11 @@ export default class AutoHeightWebView extends PureComponent {
42 51
     // baseUrl not work in android 4.3 or below version
43 52
     enableBaseUrl: PropTypes.bool,
44 53
     style: ViewPropTypes.style,
54
+    //  rn WebView callback
55
+    onError: PropTypes.func,
56
+    onLoad: PropTypes.func,
57
+    onLoadStart: PropTypes.func,
58
+    onLoadEnd: PropTypes.func,
45 59
     // works if set enableBaseUrl to true; add web/files... to android/app/src/assets/
46 60
     files: PropTypes.arrayOf(
47 61
       PropTypes.shape({
@@ -223,7 +237,7 @@ export default class AutoHeightWebView extends PureComponent {
223 237
       link.href = '${file.href}';
224 238
       document.head.appendChild(link);
225 239
       ${combinedScript}
226
-    `, script)
240
+    `, script);
227 241
   }
228 242
 
229 243
   appendStylesToHead(styles, script) {
@@ -238,9 +252,27 @@ export default class AutoHeightWebView extends PureComponent {
238 252
       styleElement.appendChild(styleText);
239 253
       document.head.appendChild(styleElement);
240 254
       ${script}
241
-    `
255
+    `;
242 256
   }
243 257
 
258
+  onLoadingStart = (event) => {
259
+    var onLoadStart = this.props.onLoadStart;
260
+    onLoadStart && onLoadStart(event);
261
+  };
262
+
263
+  onLoadingError = (event) => {
264
+    var {onError, onLoadEnd} = this.props;
265
+    onError && onError(event);
266
+    onLoadEnd && onLoadEnd(event);
267
+    console.warn('Encountered an error loading page', event.nativeEvent);
268
+  };
269
+
270
+  onLoadingFinish = (event) => {
271
+    var {onLoad, onLoadEnd} = this.props;
272
+    onLoad && onLoad(event);
273
+    onLoadEnd && onLoadEnd(event);
274
+  };
275
+
244 276
   render() {
245 277
     const { height, script, isChangingSource, heightOffset } = this.state;
246 278
     const {
@@ -270,6 +302,9 @@ export default class AutoHeightWebView extends PureComponent {
270 302
       >
271 303
         {isChangingSource ? null : (
272 304
           <RCTAutoHeightWebView
305
+            onLoadingStart={this.onLoadingStart}
306
+            onLoadingFinish={this.onLoadingFinish}
307
+            onLoadingError={this.onLoadingError}
273 308
             ref={webview => (this.webview = webview)}
274 309
             style={Styles.webView}
275 310
             javaScriptEnabled={true}

+ 14
- 3
autoHeightWebView/index.ios.js View File

@@ -28,6 +28,12 @@ export default class AutoHeightWebView extends PureComponent {
28 28
         // offset of rn webview margin
29 29
         heightOffset: PropTypes.number,
30 30
         style: ViewPropTypes.style,
31
+        //  rn WebView callback
32
+        onError: PropTypes.func,
33
+        onLoad: PropTypes.func,
34
+        onLoadStart: PropTypes.func,
35
+        onLoadEnd: PropTypes.func,
36
+        onShouldStartLoadWithRequest: PropTypes.func,
31 37
         // add web/files... to project root
32 38
         files: PropTypes.arrayOf(PropTypes.shape({
33 39
             href: PropTypes.string,
@@ -84,7 +90,7 @@ export default class AutoHeightWebView extends PureComponent {
84 90
           link.href = '${file.href}';
85 91
           document.head.appendChild(link);
86 92
           ${combinedScript}
87
-        `, script)
93
+        `, script);
88 94
     }
89 95
 
90 96
     appendStylesToHead(styles, script) {
@@ -99,7 +105,7 @@ export default class AutoHeightWebView extends PureComponent {
99 105
         styleElement.appendChild(styleText);
100 106
         document.head.appendChild(styleElement);
101 107
         ${script}
102
-      `
108
+      `;
103 109
     }
104 110
 
105 111
     onHeightUpdated(height) {
@@ -130,7 +136,7 @@ export default class AutoHeightWebView extends PureComponent {
130 136
 
131 137
     render() {
132 138
         const { height, script } = this.state;
133
-        const { scalesPageToFit, enableAnimation, source, heightOffset, customScript, style } = this.props;
139
+        const { onError, onLoad, onLoadStart, onLoadEnd, onShouldStartLoadWithRequest, scalesPageToFit, enableAnimation, source, heightOffset, customScript, style } = this.props;
134 140
         const webViewSource = Object.assign({}, source, { baseUrl: 'web/' });
135 141
         return (
136 142
             <Animated.View style={[Styles.container, {
@@ -138,6 +144,11 @@ export default class AutoHeightWebView extends PureComponent {
138 144
                 height: height + heightOffset,
139 145
             }, style]}>
140 146
                 <WebView
147
+                    onError={onError}
148
+                    onLoad={onLoad}
149
+                    onLoadStart={onLoadStart}
150
+                    onLoadEnd={onLoadEnd}
151
+                    onShouldStartLoadWithRequest={onShouldStartLoadWithRequest}
141 152
                     style={Styles.webView}
142 153
                     injectedJavaScript={script + customScript}
143 154
                     scrollEnabled={false}

+ 9
- 6
demo/.flowconfig View File

@@ -12,14 +12,15 @@
12 12
 ; For RN Apps installed via npm, "Libraries" folder is inside
13 13
 ; "node_modules/react-native" but in the source repo it is in the root
14 14
 .*/Libraries/react-native/React.js
15
-.*/Libraries/react-native/ReactNative.js
15
+
16
+; Ignore polyfills
17
+.*/Libraries/polyfills/.*
16 18
 
17 19
 [include]
18 20
 
19 21
 [libs]
20 22
 node_modules/react-native/Libraries/react-native/react-native-interface.js
21
-node_modules/react-native/flow
22
-flow/
23
+node_modules/react-native/flow/
23 24
 
24 25
 [options]
25 26
 emoji=true
@@ -32,14 +33,16 @@ module.name_mapper='^[./a-zA-Z0-9$_-]+\.\(bmp\|gif\|jpg\|jpeg\|png\|psd\|svg\|we
32 33
 
33 34
 suppress_type=$FlowIssue
34 35
 suppress_type=$FlowFixMe
36
+suppress_type=$FlowFixMeProps
37
+suppress_type=$FlowFixMeState
35 38
 suppress_type=$FixMe
36 39
 
37
-suppress_comment=\\(.\\|\n\\)*\\$FlowFixMe\\($\\|[^(]\\|(\\(>=0\\.\\(4[0-9]\\|[1-3][0-9]\\|[0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\)
38
-suppress_comment=\\(.\\|\n\\)*\\$FlowIssue\\((\\(>=0\\.\\(4[0-9]\\|[1-3][0-9]\\|[0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\)?:? #[0-9]+
40
+suppress_comment=\\(.\\|\n\\)*\\$FlowFixMe\\($\\|[^(]\\|(\\(>=0\\.\\(5[0-6]\\|[1-4][0-9]\\|[0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\)
41
+suppress_comment=\\(.\\|\n\\)*\\$FlowIssue\\((\\(>=0\\.\\(5[0-6]\\|[1-4][0-9]\\|[0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\)?:? #[0-9]+
39 42
 suppress_comment=\\(.\\|\n\\)*\\$FlowFixedInNextDeploy
40 43
 suppress_comment=\\(.\\|\n\\)*\\$FlowExpectedError
41 44
 
42 45
 unsafe.enable_getters_and_setters=true
43 46
 
44 47
 [version]
45
-^0.49.1
48
+^0.56.0

+ 4
- 4
demo/.gitignore View File

@@ -46,8 +46,8 @@ buck-out/
46 46
 # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the
47 47
 # screenshots whenever they are needed.
48 48
 # For more information about the recommended setup visit:
49
-# https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Gitignore.md
49
+# https://docs.fastlane.tools/best-practices/source-control/
50 50
 
51
-fastlane/report.xml
52
-fastlane/Preview.html
53
-fastlane/screenshots
51
+*/fastlane/report.xml
52
+*/fastlane/Preview.html
53
+*/fastlane/screenshots

+ 151
- 0
demo/App.js View File

@@ -0,0 +1,151 @@
1
+'use strict'
2
+
3
+import React, {
4
+  Component,
5
+} from 'react';
6
+
7
+import {
8
+  ScrollView,
9
+  StyleSheet,
10
+  Text,
11
+  TouchableOpacity,
12
+  View
13
+} from 'react-native';
14
+
15
+import AutoHeightWebView from 'react-native-autoheight-webview';
16
+
17
+export default class Explorer extends Component {
18
+  constructor(props) {
19
+    super(props);
20
+    this.html0 = `<p style="font-weight: 400;font-style: normal;font-size: 21px;line-height: 1.58;letter-spacing: -.003em;">Tags are great for describing the essence of your story in a single word or phrase, but stories are rarely about a single thing. <span style="background-color: transparent !important;background-image: linear-gradient(to bottom, rgba(146, 249, 190, 1), rgba(146, 249, 190, 1));">If I pen a story about moving across the country to start a new job in a car with my husband, two cats, a dog, and a tarantula, I wouldn’t only tag the piece with “moving”. I’d also use the tags “pets”, “marriage”, “career change”, and “travel tips”.</span></p>`;
21
+    this.html1 = `Tags are great for describing the essence of your story in a single word or phrase, but stories are rarely about a single thing. If I pen a story about moving across the country to start a new job in a car with my husband, two cats, a dog, and a tarantula, I wouldn’t only tag the piece with “moving”. I’d also use the tags “pets”, “marriage”, “career change”, and “travel tips”.`;
22
+    this.script0 = '';
23
+    this.script1 = `document.body.style.background = 'cornflowerblue';`;
24
+    this.changeSource = this.changeSource.bind(this);
25
+    this.changeScript = this.changeScript.bind(this);
26
+    this.state = {
27
+      html: this.html0,
28
+      script: this.script0,
29
+      height: 0
30
+    };
31
+  }
32
+
33
+  changeSource() {
34
+    this.setState(prevState => ({
35
+      html: prevState.html === this.html0 ? this.html1 : this.html0
36
+    }));
37
+  }
38
+
39
+  changeScript() {
40
+    this.changeSource();
41
+    this.setState(prevState => ({
42
+      script: prevState.script === this.script0 ? this.script1 : this.script0
43
+    }));
44
+  }
45
+
46
+  render() {
47
+    return (
48
+      <ScrollView
49
+        style={{
50
+          backgroundColor: 'lightyellow'
51
+        }}
52
+        contentContainerStyle={{
53
+          justifyContent: 'center',
54
+          alignItems: 'center'
55
+        }}>
56
+        <AutoHeightWebView
57
+          onError={() => console.log('on error')}
58
+          onLoad={() => console.log('on load')}
59
+          onLoadStart={() => console.log('on load start')}
60
+          onLoadEnd={() => console.log('on load end')}
61
+          onShouldStartLoadWithRequest={result => {
62
+            console.log(result)
63
+            return true;
64
+          }}
65
+          onHeightUpdated={height => this.setState({ height })}
66
+          source={{ html: this.state.html }}
67
+          customScript={this.state.script} />
68
+        <TouchableOpacity
69
+          onPress={this.changeSource}
70
+          style={Styles.button}>
71
+          <Text>change source</Text>
72
+        </TouchableOpacity>
73
+        <TouchableOpacity
74
+          onPress={this.changeScript}
75
+          style={Styles.button}>
76
+          <Text>change script (have to change source to reload on android)</Text>
77
+        </TouchableOpacity>
78
+        <Text style={{ padding: 5 }}>
79
+          {this.state.height}
80
+        </Text>
81
+      </ScrollView>
82
+    );
83
+  }
84
+}
85
+
86
+const Styles = StyleSheet.create({
87
+  button: {
88
+    marginTop: 15,
89
+    backgroundColor: 'aliceblue',
90
+    borderRadius: 5,
91
+    padding: 5
92
+  }
93
+});
94
+
95
+// /**
96
+//  * Sample React Native App
97
+//  * https://github.com/facebook/react-native
98
+//  * @flow
99
+//  */
100
+
101
+// import React, { Component } from 'react';
102
+// import {
103
+//   Platform,
104
+//   StyleSheet,
105
+//   Text,
106
+//   View
107
+// } from 'react-native';
108
+
109
+// const instructions = Platform.select({
110
+//   ios: 'Press Cmd+R to reload,\n' +
111
+//     'Cmd+D or shake for dev menu',
112
+//   android: 'Double tap R on your keyboard to reload,\n' +
113
+//     'Shake or press menu button for dev menu',
114
+// });
115
+
116
+// export default class App extends Component<{}> {
117
+//   render() {
118
+//     return (
119
+//       <View style={styles.container}>
120
+//         <Text style={styles.welcome}>
121
+//           Welcome to React Native!
122
+//         </Text>
123
+//         <Text style={styles.instructions}>
124
+//           To get started, edit App.js
125
+//         </Text>
126
+//         <Text style={styles.instructions}>
127
+//           {instructions}
128
+//         </Text>
129
+//       </View>
130
+//     );
131
+//   }
132
+// }
133
+
134
+// const styles = StyleSheet.create({
135
+//   container: {
136
+//     flex: 1,
137
+//     justifyContent: 'center',
138
+//     alignItems: 'center',
139
+//     backgroundColor: '#F5FCFF',
140
+//   },
141
+//   welcome: {
142
+//     fontSize: 20,
143
+//     textAlign: 'center',
144
+//     margin: 10,
145
+//   },
146
+//   instructions: {
147
+//     textAlign: 'center',
148
+//     color: '#333333',
149
+//     marginBottom: 5,
150
+//   },
151
+// });

demo/__tests__/index.ios.js → demo/__tests__/App.js View File

@@ -1,12 +1,12 @@
1 1
 import 'react-native';
2 2
 import React from 'react';
3
-import Index from '../index.ios.js';
3
+import App from '../App';
4 4
 
5 5
 // Note: test renderer must be required after react-native.
6 6
 import renderer from 'react-test-renderer';
7 7
 
8 8
 it('renders correctly', () => {
9 9
   const tree = renderer.create(
10
-    <Index />
10
+    <App />
11 11
   );
12 12
 });

+ 0
- 12
demo/__tests__/index.android.js View File

@@ -1,12 +0,0 @@
1
-import 'react-native';
2
-import React from 'react';
3
-import Index from '../index.android.js';
4
-
5
-// Note: test renderer must be required after react-native.
6
-import renderer from 'react-test-renderer';
7
-
8
-it('renders correctly', () => {
9
-  const tree = renderer.create(
10
-    <Index />
11
-  );
12
-});

+ 4
- 0
demo/android/app/build.gradle View File

@@ -72,6 +72,10 @@ import com.android.build.OutputFile
72 72
  * ]
73 73
  */
74 74
 
75
+project.ext.react = [
76
+    entryFile: "index.js"
77
+]
78
+
75 79
 apply from: "../../node_modules/react-native/react.gradle"
76 80
 
77 81
 /**

+ 5
- 0
demo/android/app/src/main/java/com/demo/MainApplication.java View File

@@ -27,6 +27,11 @@ public class MainApplication extends Application implements ReactApplication {
27 27
             new AutoHeightWebViewPackage()
28 28
       );
29 29
     }
30
+
31
+    @Override
32
+    protected String getJSMainModuleName() {
33
+      return "index";
34
+    }
30 35
   };
31 36
 
32 37
   @Override

+ 0
- 85
demo/explorer.js View File

@@ -1,85 +0,0 @@
1
-'use strict'
2
-
3
-import React, {
4
-    Component,
5
-} from 'react';
6
-
7
-import {
8
-    ScrollView,
9
-    StyleSheet,
10
-    Text,
11
-    TouchableOpacity,
12
-    View
13
-} from 'react-native';
14
-
15
-import AutoHeightWebView from 'react-native-autoheight-webview';
16
-
17
-export default class Explorer extends Component {
18
-    constructor(props) {
19
-        super(props);
20
-        this.html0 = `<p style="font-weight: 400;font-style: normal;font-size: 21px;line-height: 1.58;letter-spacing: -.003em;">Tags are great for describing the essence of your story in a single word or phrase, but stories are rarely about a single thing. <span style="background-color: transparent !important;background-image: linear-gradient(to bottom, rgba(146, 249, 190, 1), rgba(146, 249, 190, 1));">If I pen a story about moving across the country to start a new job in a car with my husband, two cats, a dog, and a tarantula, I wouldn’t only tag the piece with “moving”. I’d also use the tags “pets”, “marriage”, “career change”, and “travel tips”.</span></p>`;
21
-        this.html1 = `Tags are great for describing the essence of your story in a single word or phrase, but stories are rarely about a single thing. If I pen a story about moving across the country to start a new job in a car with my husband, two cats, a dog, and a tarantula, I wouldn’t only tag the piece with “moving”. I’d also use the tags “pets”, “marriage”, “career change”, and “travel tips”.`;
22
-        this.script0 = '';
23
-        this.script1 = `document.body.style.background = 'cornflowerblue';`;
24
-        this.changeSource = this.changeSource.bind(this);
25
-        this.changeScript = this.changeScript.bind(this);
26
-        this.state = {
27
-            html: this.html0,
28
-            script: this.script0,
29
-            height: 0
30
-        };
31
-    }
32
-
33
-    changeSource() {
34
-        this.setState(prevState => ({
35
-            html: prevState.html === this.html0 ? this.html1 : this.html0
36
-        }));
37
-    }
38
-
39
-    changeScript() {
40
-        this.changeSource();
41
-        this.setState(prevState => ({
42
-            script: prevState.script === this.script0 ? this.script1 : this.script0
43
-        }));
44
-    }
45
-
46
-    render() {
47
-        return (
48
-            <ScrollView
49
-                style={{
50
-                    backgroundColor: 'lightyellow'
51
-                }}
52
-                contentContainerStyle={{
53
-                    justifyContent: 'center',
54
-                    alignItems: 'center'
55
-                }}>
56
-                <AutoHeightWebView
57
-                    onHeightUpdated={height => this.setState({ height })}
58
-                    source={{ html: this.state.html }}
59
-                    customScript={this.state.script} />
60
-                <TouchableOpacity
61
-                    onPress={this.changeSource}
62
-                    style={Styles.button}>
63
-                    <Text>change source</Text>
64
-                </TouchableOpacity>
65
-                <TouchableOpacity
66
-                    onPress={this.changeScript}
67
-                    style={Styles.button}>
68
-                    <Text>change script (have to change source to reload on android)</Text>
69
-                </TouchableOpacity>
70
-                <Text style={{ padding: 5 }}>
71
-                    {this.state.height}
72
-                </Text>
73
-            </ScrollView>
74
-        );
75
-    }
76
-}
77
-
78
-const Styles = StyleSheet.create({
79
-    button: {
80
-        marginTop: 15,
81
-        backgroundColor: 'aliceblue',
82
-        borderRadius: 5,
83
-        padding: 5
84
-    }
85
-});

+ 0
- 9
demo/index.android.js View File

@@ -1,9 +0,0 @@
1
-'use strict'
2
-
3
-import React from 'react';
4
-
5
-import { AppRegistry } from 'react-native';
6
-
7
-import Explorer from './explorer';
8
-
9
-AppRegistry.registerComponent('demo', () => Explorer);

+ 0
- 9
demo/index.ios.js View File

@@ -1,9 +0,0 @@
1
-'use strict'
2
-
3
-import React from 'react';
4
-
5
-import { AppRegistry } from 'react-native';
6
-
7
-import Explorer from './explorer';
8
-
9
-AppRegistry.registerComponent('demo', () => Explorer);

+ 7
- 0
demo/index.js View File

@@ -0,0 +1,7 @@
1
+'use strict'
2
+
3
+import { AppRegistry } from 'react-native';
4
+
5
+import Explorer from './App';
6
+
7
+AppRegistry.registerComponent('demo', () => Explorer);

+ 89
- 4
demo/ios/demo.xcodeproj/project.pbxproj View File

@@ -5,7 +5,6 @@
5 5
 	};
6 6
 	objectVersion = 46;
7 7
 	objects = {
8
-
9 8
 /* Begin PBXBuildFile section */
10 9
 		00C302E51ABCBA2D00DB3ED1 /* libRCTActionSheet.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */; };
11 10
 		00C302E71ABCBA2D00DB3ED1 /* libRCTGeolocation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */; };
@@ -36,6 +35,8 @@
36 35
 		2DCD954D1E0B4F2C00145EB5 /* demoTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* demoTests.m */; };
37 36
 		5E9157361DD0AC6A00FF2AA8 /* libRCTAnimation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5E9157331DD0AC6500FF2AA8 /* libRCTAnimation.a */; };
38 37
 		832341BD1AAA6AB300B99B32 /* libRCTText.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 832341B51AAA6A8300B99B32 /* libRCTText.a */; };
38
+		ADBDB9381DFEBF1600ED6528 /* libRCTBlob.a in Frameworks */ = {isa = PBXBuildFile; fileRef = ADBDB9271DFEBF0700ED6528 /* libRCTBlob.a */; };
39
+		4015A12E66A247F0B2F6AE09 /* libRCTActionSheet.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F6205ED3CE4F403ABCC50D34 /* libRCTActionSheet.a */; };
39 40
 /* End PBXBuildFile section */
40 41
 
41 42
 /* Begin PBXContainerItemProxy section */
@@ -228,6 +229,13 @@
228 229
 			remoteGlobalIDString = 58B5119B1A9E6C1200147676;
229 230
 			remoteInfo = RCTText;
230 231
 		};
232
+		ADBDB9261DFEBF0700ED6528 /* PBXContainerItemProxy */ = {
233
+			isa = PBXContainerItemProxy;
234
+			containerPortal = ADBDB91F1DFEBF0600ED6528 /* RCTBlob.xcodeproj */;
235
+			proxyType = 2;
236
+			remoteGlobalIDString = 358F4ED71D1E81A9004DF814;
237
+			remoteInfo = RCTBlob;
238
+		};
231 239
 /* End PBXContainerItemProxy section */
232 240
 
233 241
 /* Begin PBXFileReference section */
@@ -255,6 +263,9 @@
255 263
 		5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTAnimation.xcodeproj; path = "../node_modules/react-native/Libraries/NativeAnimation/RCTAnimation.xcodeproj"; sourceTree = "<group>"; };
256 264
 		78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTLinking.xcodeproj; path = "../node_modules/react-native/Libraries/LinkingIOS/RCTLinking.xcodeproj"; sourceTree = "<group>"; };
257 265
 		832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTText.xcodeproj; path = "../node_modules/react-native/Libraries/Text/RCTText.xcodeproj"; sourceTree = "<group>"; };
266
+		ADBDB91F1DFEBF0600ED6528 /* RCTBlob.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTBlob.xcodeproj; path = "../node_modules/react-native/Libraries/Blob/RCTBlob.xcodeproj"; sourceTree = "<group>"; };
267
+		B22DCF12CF304549B28FD63C /* demo.xcodeproj */ = {isa = PBXFileReference; name = "demo.xcodeproj"; path = "../node_modules/react-native-autoheight-webview/demo/ios/demo.xcodeproj"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = wrapper.pb-project; explicitFileType = undefined; includeInIndex = 0; };
268
+		F6205ED3CE4F403ABCC50D34 /* libRCTActionSheet.a */ = {isa = PBXFileReference; name = "libRCTActionSheet.a"; path = "libRCTActionSheet.a"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = archive.ar; explicitFileType = undefined; includeInIndex = 0; };
258 269
 /* End PBXFileReference section */
259 270
 
260 271
 /* Begin PBXFrameworksBuildPhase section */
@@ -270,6 +281,8 @@
270 281
 			isa = PBXFrameworksBuildPhase;
271 282
 			buildActionMask = 2147483647;
272 283
 			files = (
284
+				ADBDB9381DFEBF1600ED6528 /* libRCTBlob.a in Frameworks */,
285
+				5E9157361DD0AC6A00FF2AA8 /* libRCTAnimation.a in Frameworks */,
273 286
 				146834051AC3E58100842450 /* libReact.a in Frameworks */,
274 287
 				5E9157361DD0AC6A00FF2AA8 /* libRCTAnimation.a in Frameworks */,
275 288
 				00C302E51ABCBA2D00DB3ED1 /* libRCTActionSheet.a in Frameworks */,
@@ -281,6 +294,7 @@
281 294
 				832341BD1AAA6AB300B99B32 /* libRCTText.a in Frameworks */,
282 295
 				00C302EA1ABCBA2D00DB3ED1 /* libRCTVibration.a in Frameworks */,
283 296
 				139FDEF61B0652A700C62182 /* libRCTWebSocket.a in Frameworks */,
297
+				4015A12E66A247F0B2F6AE09 /* libRCTActionSheet.a in Frameworks */,
284 298
 			);
285 299
 			runOnlyForDeploymentPostprocessing = 0;
286 300
 		};
@@ -411,6 +425,7 @@
411 425
 				3DAD3EAB1DF850E9000B6D8A /* libcxxreact.a */,
412 426
 				3DAD3EAD1DF850E9000B6D8A /* libjschelpers.a */,
413 427
 				3DAD3EAF1DF850E9000B6D8A /* libjschelpers.a */,
428
+				3DAD3EA31DF850E9000B6D8A /* libReact-tvOS.a */,
414 429
 			);
415 430
 			name = Products;
416 431
 			sourceTree = "<group>";
@@ -439,6 +454,7 @@
439 454
 				5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */,
440 455
 				146833FF1AC3E56700842450 /* React.xcodeproj */,
441 456
 				00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */,
457
+				ADBDB91F1DFEBF0600ED6528 /* RCTBlob.xcodeproj */,
442 458
 				00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */,
443 459
 				00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */,
444 460
 				78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */,
@@ -447,6 +463,7 @@
447 463
 				832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */,
448 464
 				00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */,
449 465
 				139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */,
466
+				B22DCF12CF304549B28FD63C /* demo.xcodeproj */,
450 467
 			);
451 468
 			name = Libraries;
452 469
 			sourceTree = "<group>";
@@ -471,6 +488,7 @@
471 488
 			indentWidth = 2;
472 489
 			sourceTree = "<group>";
473 490
 			tabWidth = 2;
491
+			usesTabs = 0;
474 492
 		};
475 493
 		83CBBA001A601CBA00E9B192 /* Products */ = {
476 494
 			isa = PBXGroup;
@@ -483,6 +501,14 @@
483 501
 			name = Products;
484 502
 			sourceTree = "<group>";
485 503
 		};
504
+		ADBDB9201DFEBF0600ED6528 /* Products */ = {
505
+			isa = PBXGroup;
506
+			children = (
507
+				ADBDB9271DFEBF0700ED6528 /* libRCTBlob.a */,
508
+			);
509
+			name = Products;
510
+			sourceTree = "<group>";
511
+		};
486 512
 /* End PBXGroup section */
487 513
 
488 514
 /* Begin PBXNativeTarget section */
@@ -564,7 +590,7 @@
564 590
 		83CBB9F71A601CBA00E9B192 /* Project object */ = {
565 591
 			isa = PBXProject;
566 592
 			attributes = {
567
-				LastUpgradeCheck = 0610;
593
+				LastUpgradeCheck = 610;
568 594
 				ORGANIZATIONNAME = Facebook;
569 595
 				TargetAttributes = {
570 596
 					00E356ED1AD99517003FC87E = {
@@ -602,6 +628,10 @@
602 628
 					ProductGroup = 5E91572E1DD0AC6500FF2AA8 /* Products */;
603 629
 					ProjectRef = 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */;
604 630
 				},
631
+				{
632
+					ProductGroup = ADBDB9201DFEBF0600ED6528 /* Products */;
633
+					ProjectRef = ADBDB91F1DFEBF0600ED6528 /* RCTBlob.xcodeproj */;
634
+				},
605 635
 				{
606 636
 					ProductGroup = 00C302B61ABCB90400DB3ED1 /* Products */;
607 637
 					ProjectRef = 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */;
@@ -748,10 +778,10 @@
748 778
 			remoteRef = 3DAD3E981DF850E9000B6D8A /* PBXContainerItemProxy */;
749 779
 			sourceTree = BUILT_PRODUCTS_DIR;
750 780
 		};
751
-		3DAD3EA31DF850E9000B6D8A /* libReact.a */ = {
781
+		3DAD3EA31DF850E9000B6D8A /* libReact-tvOS.a */ = {
752 782
 			isa = PBXReferenceProxy;
753 783
 			fileType = archive.ar;
754
-			path = libReact.a;
784
+			path = "libReact-tvOS.a";
755 785
 			remoteRef = 3DAD3EA21DF850E9000B6D8A /* PBXContainerItemProxy */;
756 786
 			sourceTree = BUILT_PRODUCTS_DIR;
757 787
 		};
@@ -825,6 +855,13 @@
825 855
 			remoteRef = 832341B41AAA6A8300B99B32 /* PBXContainerItemProxy */;
826 856
 			sourceTree = BUILT_PRODUCTS_DIR;
827 857
 		};
858
+		ADBDB9271DFEBF0700ED6528 /* libRCTBlob.a */ = {
859
+			isa = PBXReferenceProxy;
860
+			fileType = archive.ar;
861
+			path = libRCTBlob.a;
862
+			remoteRef = ADBDB9261DFEBF0700ED6528 /* PBXContainerItemProxy */;
863
+			sourceTree = BUILT_PRODUCTS_DIR;
864
+		};
828 865
 /* End PBXReferenceProxy section */
829 866
 
830 867
 /* Begin PBXResourcesBuildPhase section */
@@ -972,6 +1009,14 @@
972 1009
 				);
973 1010
 				PRODUCT_NAME = "$(TARGET_NAME)";
974 1011
 				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/demo.app/demo";
1012
+				LIBRARY_SEARCH_PATHS = (
1013
+					"$(inherited)",
1014
+					"\"$(SRCROOT)/$(TARGET_NAME)\"",
1015
+				);
1016
+				HEADER_SEARCH_PATHS = (
1017
+					"$(inherited)",
1018
+					"$(SRCROOT)/../node_modules/react-native-autoheight-webview/demo/ios/demo",
1019
+				);
975 1020
 			};
976 1021
 			name = Debug;
977 1022
 		};
@@ -989,6 +1034,14 @@
989 1034
 				);
990 1035
 				PRODUCT_NAME = "$(TARGET_NAME)";
991 1036
 				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/demo.app/demo";
1037
+				LIBRARY_SEARCH_PATHS = (
1038
+					"$(inherited)",
1039
+					"\"$(SRCROOT)/$(TARGET_NAME)\"",
1040
+				);
1041
+				HEADER_SEARCH_PATHS = (
1042
+					"$(inherited)",
1043
+					"$(SRCROOT)/../node_modules/react-native-autoheight-webview/demo/ios/demo",
1044
+				);
992 1045
 			};
993 1046
 			name = Release;
994 1047
 		};
@@ -1007,6 +1060,10 @@
1007 1060
 				);
1008 1061
 				PRODUCT_NAME = demo;
1009 1062
 				VERSIONING_SYSTEM = "apple-generic";
1063
+				HEADER_SEARCH_PATHS = (
1064
+					"$(inherited)",
1065
+					"$(SRCROOT)/../node_modules/react-native-autoheight-webview/demo/ios/demo",
1066
+				);
1010 1067
 			};
1011 1068
 			name = Debug;
1012 1069
 		};
@@ -1024,6 +1081,10 @@
1024 1081
 				);
1025 1082
 				PRODUCT_NAME = demo;
1026 1083
 				VERSIONING_SYSTEM = "apple-generic";
1084
+				HEADER_SEARCH_PATHS = (
1085
+					"$(inherited)",
1086
+					"$(SRCROOT)/../node_modules/react-native-autoheight-webview/demo/ios/demo",
1087
+				);
1027 1088
 			};
1028 1089
 			name = Release;
1029 1090
 		};
@@ -1050,6 +1111,14 @@
1050 1111
 				SDKROOT = appletvos;
1051 1112
 				TARGETED_DEVICE_FAMILY = 3;
1052 1113
 				TVOS_DEPLOYMENT_TARGET = 9.2;
1114
+				LIBRARY_SEARCH_PATHS = (
1115
+					"$(inherited)",
1116
+					"\"$(SRCROOT)/$(TARGET_NAME)\"",
1117
+				);
1118
+				HEADER_SEARCH_PATHS = (
1119
+					"$(inherited)",
1120
+					"$(SRCROOT)/../node_modules/react-native-autoheight-webview/demo/ios/demo",
1121
+				);
1053 1122
 			};
1054 1123
 			name = Debug;
1055 1124
 		};
@@ -1076,6 +1145,14 @@
1076 1145
 				SDKROOT = appletvos;
1077 1146
 				TARGETED_DEVICE_FAMILY = 3;
1078 1147
 				TVOS_DEPLOYMENT_TARGET = 9.2;
1148
+				LIBRARY_SEARCH_PATHS = (
1149
+					"$(inherited)",
1150
+					"\"$(SRCROOT)/$(TARGET_NAME)\"",
1151
+				);
1152
+				HEADER_SEARCH_PATHS = (
1153
+					"$(inherited)",
1154
+					"$(SRCROOT)/../node_modules/react-native-autoheight-webview/demo/ios/demo",
1155
+				);
1079 1156
 			};
1080 1157
 			name = Release;
1081 1158
 		};
@@ -1097,6 +1174,10 @@
1097 1174
 				SDKROOT = appletvos;
1098 1175
 				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/demo-tvOS.app/demo-tvOS";
1099 1176
 				TVOS_DEPLOYMENT_TARGET = 10.1;
1177
+				LIBRARY_SEARCH_PATHS = (
1178
+					"$(inherited)",
1179
+					"\"$(SRCROOT)/$(TARGET_NAME)\"",
1180
+				);
1100 1181
 			};
1101 1182
 			name = Debug;
1102 1183
 		};
@@ -1118,6 +1199,10 @@
1118 1199
 				SDKROOT = appletvos;
1119 1200
 				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/demo-tvOS.app/demo-tvOS";
1120 1201
 				TVOS_DEPLOYMENT_TARGET = 10.1;
1202
+				LIBRARY_SEARCH_PATHS = (
1203
+					"$(inherited)",
1204
+					"\"$(SRCROOT)/$(TARGET_NAME)\"",
1205
+				);
1121 1206
 			};
1122 1207
 			name = Release;
1123 1208
 		};

+ 1
- 1
demo/ios/demo/AppDelegate.m View File

@@ -18,7 +18,7 @@
18 18
 {
19 19
   NSURL *jsCodeLocation;
20 20
 
21
-  jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index.ios" fallbackResource:nil];
21
+  jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index" fallbackResource:nil];
22 22
 
23 23
   RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation
24 24
                                                       moduleName:@"demo"

+ 6
- 0
demo/ios/demo/Images.xcassets/Contents.json View File

@@ -0,0 +1,6 @@
1
+{
2
+  "info" : {
3
+    "version" : 1,
4
+    "author" : "xcode"
5
+  }
6
+}

+ 131
- 0
demo/package-lock.json View File

@@ -0,0 +1,131 @@
1
+{
2
+	"name": "demo",
3
+	"version": "0.0.1",
4
+	"lockfileVersion": 1,
5
+	"requires": true,
6
+	"dependencies": {
7
+		"asap": {
8
+			"version": "2.0.6",
9
+			"resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
10
+			"integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY="
11
+		},
12
+		"core-js": {
13
+			"version": "1.2.7",
14
+			"resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz",
15
+			"integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY="
16
+		},
17
+		"encoding": {
18
+			"version": "0.1.12",
19
+			"resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz",
20
+			"integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=",
21
+			"requires": {
22
+				"iconv-lite": "0.4.19"
23
+			}
24
+		},
25
+		"fbjs": {
26
+			"version": "0.8.16",
27
+			"resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.16.tgz",
28
+			"integrity": "sha1-XmdDL1UNxBtXK/VYR7ispk5TN9s=",
29
+			"requires": {
30
+				"core-js": "1.2.7",
31
+				"isomorphic-fetch": "2.2.1",
32
+				"loose-envify": "1.3.1",
33
+				"object-assign": "4.1.1",
34
+				"promise": "7.3.1",
35
+				"setimmediate": "1.0.5",
36
+				"ua-parser-js": "0.7.17"
37
+			}
38
+		},
39
+		"iconv-lite": {
40
+			"version": "0.4.19",
41
+			"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz",
42
+			"integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ=="
43
+		},
44
+		"immutable": {
45
+			"version": "3.8.2",
46
+			"resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz",
47
+			"integrity": "sha1-wkOZUUVbs5kT2vKBN28VMOEErfM="
48
+		},
49
+		"is-stream": {
50
+			"version": "1.1.0",
51
+			"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
52
+			"integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ="
53
+		},
54
+		"isomorphic-fetch": {
55
+			"version": "2.2.1",
56
+			"resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz",
57
+			"integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=",
58
+			"requires": {
59
+				"node-fetch": "1.7.3",
60
+				"whatwg-fetch": "2.0.3"
61
+			}
62
+		},
63
+		"js-tokens": {
64
+			"version": "3.0.2",
65
+			"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
66
+			"integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls="
67
+		},
68
+		"loose-envify": {
69
+			"version": "1.3.1",
70
+			"resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz",
71
+			"integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=",
72
+			"requires": {
73
+				"js-tokens": "3.0.2"
74
+			}
75
+		},
76
+		"node-fetch": {
77
+			"version": "1.7.3",
78
+			"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz",
79
+			"integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==",
80
+			"requires": {
81
+				"encoding": "0.1.12",
82
+				"is-stream": "1.1.0"
83
+			}
84
+		},
85
+		"object-assign": {
86
+			"version": "4.1.1",
87
+			"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
88
+			"integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
89
+		},
90
+		"promise": {
91
+			"version": "7.3.1",
92
+			"resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz",
93
+			"integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==",
94
+			"requires": {
95
+				"asap": "2.0.6"
96
+			}
97
+		},
98
+		"prop-types": {
99
+			"version": "15.6.0",
100
+			"resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.0.tgz",
101
+			"integrity": "sha1-zq8IMCL8RrSjX2nhPvda7Q1jmFY=",
102
+			"requires": {
103
+				"fbjs": "0.8.16",
104
+				"loose-envify": "1.3.1",
105
+				"object-assign": "4.1.1"
106
+			}
107
+		},
108
+		"react-native-autoheight-webview": {
109
+			"version": "file:..",
110
+			"requires": {
111
+				"immutable": "3.8.2",
112
+				"prop-types": "15.6.0"
113
+			}
114
+		},
115
+		"setimmediate": {
116
+			"version": "1.0.5",
117
+			"resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
118
+			"integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU="
119
+		},
120
+		"ua-parser-js": {
121
+			"version": "0.7.17",
122
+			"resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.17.tgz",
123
+			"integrity": "sha512-uRdSdu1oA1rncCQL7sCj8vSyZkgtL7faaw9Tc9rZ3mGgraQ7+Pdx7w5mnOSF3gw9ZNG6oc+KXfkon3bKuROm0g=="
124
+		},
125
+		"whatwg-fetch": {
126
+			"version": "2.0.3",
127
+			"resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz",
128
+			"integrity": "sha1-nITsLc9oGH/wC8ZOEnS0QhduHIQ="
129
+		}
130
+	}
131
+}

+ 7
- 7
demo/package.json View File

@@ -7,15 +7,15 @@
7 7
 		"test": "jest"
8 8
 	},
9 9
 	"dependencies": {
10
-		"react": "16.0.0-alpha.12",
11
-		"react-native": "0.47.2",
12
-		"react-native-autoheight-webview": "../"
10
+		"react": "16.0.0",
11
+		"react-native": "0.50.1",
12
+		"react-native-autoheight-webview": "file:.."
13 13
 	},
14 14
 	"devDependencies": {
15
-		"babel-jest": "20.0.3",
16
-		"babel-preset-react-native": "3.0.2",
17
-		"jest": "20.0.4",
18
-		"react-test-renderer": "16.0.0-alpha.12"
15
+		"babel-jest": "21.2.0",
16
+		"babel-preset-react-native": "4.0.0",
17
+		"jest": "21.2.1",
18
+		"react-test-renderer": "16.0.0"
19 19
 	},
20 20
 	"jest": {
21 21
 		"preset": "react-native"

+ 772
- 726
demo/yarn.lock
File diff suppressed because it is too large
View File


+ 1
- 1
package.json View File

@@ -1,6 +1,6 @@
1 1
 {
2 2
   "name": "react-native-autoheight-webview",
3
-  "version": "0.3.4",
3
+  "version": "0.4.0",
4 4
   "description": "An auto height webview for React Native",
5 5
   "main": "autoHeightWebView",
6 6
   "files": [