|  | @@ -6,7 +6,15 @@ import { Animated, StyleSheet, ViewPropTypes, WebView } from 'react-native';
 | 
	
		
			
			| 6 | 6 |  
 | 
	
		
			
			| 7 | 7 |  import PropTypes from 'prop-types';
 | 
	
		
			
			| 8 | 8 |  
 | 
	
		
			
			| 9 |  | -import { getSize, isEqual, setState, getWidth, handleSizeUpdated, domMutationObserveScript, getCurrentSize } from './common.js';
 | 
	
		
			
			|  | 9 | +import {
 | 
	
		
			
			|  | 10 | +  isEqual,
 | 
	
		
			
			|  | 11 | +  setState,
 | 
	
		
			
			|  | 12 | +  getWidth,
 | 
	
		
			
			|  | 13 | +  isSizeChanged,
 | 
	
		
			
			|  | 14 | +  handleSizeUpdated,
 | 
	
		
			
			|  | 15 | +  domMutationObserveScript,
 | 
	
		
			
			|  | 16 | +  getCurrentSize
 | 
	
		
			
			|  | 17 | +} from './common.js';
 | 
	
		
			
			| 10 | 18 |  
 | 
	
		
			
			| 11 | 19 |  import momoize from './momoize';
 | 
	
		
			
			| 12 | 20 |  
 | 
	
	
		
			
			|  | @@ -57,6 +65,7 @@ export default class AutoHeightWebView extends PureComponent {
 | 
	
		
			
			| 57 | 65 |      enableAnimation && (this.opacityAnimatedValue = new Animated.Value(0));
 | 
	
		
			
			| 58 | 66 |      this.webView = React.createRef();
 | 
	
		
			
			| 59 | 67 |      this.state = {
 | 
	
		
			
			|  | 68 | +      isSizeChanged: false,
 | 
	
		
			
			| 60 | 69 |        width: getWidth(style),
 | 
	
		
			
			| 61 | 70 |        height: style && style.height ? style.height : 0
 | 
	
		
			
			| 62 | 71 |      };
 | 
	
	
		
			
			|  | @@ -64,6 +73,38 @@ export default class AutoHeightWebView extends PureComponent {
 | 
	
		
			
			| 64 | 73 |  
 | 
	
		
			
			| 65 | 74 |    getUpdatedState = momoize(setState, isEqual);
 | 
	
		
			
			| 66 | 75 |  
 | 
	
		
			
			|  | 76 | +  static getDerivedStateFromProps(props, state) {
 | 
	
		
			
			|  | 77 | +    const { height: oldHeight, width: oldWidth } = state;
 | 
	
		
			
			|  | 78 | +    const height = props.style ? props.style.height : null;
 | 
	
		
			
			|  | 79 | +    const width = props.style ? props.style.width : null;
 | 
	
		
			
			|  | 80 | +    if (isSizeChanged(height, oldHeight, width, oldWidth)) {
 | 
	
		
			
			|  | 81 | +      return {
 | 
	
		
			
			|  | 82 | +        height,
 | 
	
		
			
			|  | 83 | +        width,
 | 
	
		
			
			|  | 84 | +        isSizeChanged: true
 | 
	
		
			
			|  | 85 | +      };
 | 
	
		
			
			|  | 86 | +    }
 | 
	
		
			
			|  | 87 | +    return null;
 | 
	
		
			
			|  | 88 | +  }
 | 
	
		
			
			|  | 89 | +
 | 
	
		
			
			|  | 90 | +  componentDidUpdate() {
 | 
	
		
			
			|  | 91 | +    const { height, width, isSizeChanged } = this.state;
 | 
	
		
			
			|  | 92 | +    if (isSizeChanged) {
 | 
	
		
			
			|  | 93 | +      const { enableAnimation, animationDuration, onSizeUpdated } = this.props;
 | 
	
		
			
			|  | 94 | +      if (enableAnimation) {
 | 
	
		
			
			|  | 95 | +        Animated.timing(this.opacityAnimatedValue, {
 | 
	
		
			
			|  | 96 | +          toValue: 1,
 | 
	
		
			
			|  | 97 | +          duration: animationDuration
 | 
	
		
			
			|  | 98 | +        }).start(() => {
 | 
	
		
			
			|  | 99 | +          handleSizeUpdated(height, width, onSizeUpdated);
 | 
	
		
			
			|  | 100 | +        });
 | 
	
		
			
			|  | 101 | +      } else {
 | 
	
		
			
			|  | 102 | +        handleSizeUpdated(height, width, onSizeUpdated);
 | 
	
		
			
			|  | 103 | +      }
 | 
	
		
			
			|  | 104 | +      this.setState({ isSizeChanged: false });
 | 
	
		
			
			|  | 105 | +    }
 | 
	
		
			
			|  | 106 | +  }
 | 
	
		
			
			|  | 107 | +
 | 
	
		
			
			| 67 | 108 |    handleNavigationStateChange = navState => {
 | 
	
		
			
			| 68 | 109 |      const { title } = navState;
 | 
	
		
			
			| 69 | 110 |      if (!title) {
 | 
	
	
		
			
			|  | @@ -73,30 +114,13 @@ export default class AutoHeightWebView extends PureComponent {
 | 
	
		
			
			| 73 | 114 |      const width = Number(widthValue);
 | 
	
		
			
			| 74 | 115 |      const height = Number(heightValue);
 | 
	
		
			
			| 75 | 116 |      const { height: oldHeight, width: oldWidth } = this.state;
 | 
	
		
			
			| 76 |  | -    if ((height && height !== oldHeight) || (width && width !== oldWidth)) {
 | 
	
		
			
			| 77 |  | -      const { enableAnimation, animationDuration, onSizeUpdated } = this.props;
 | 
	
		
			
			| 78 |  | -      enableAnimation && this.opacityAnimatedValue.setValue(0);
 | 
	
		
			
			| 79 |  | -      this.updatingSize = true;
 | 
	
		
			
			| 80 |  | -      this.setState(
 | 
	
		
			
			| 81 |  | -        {
 | 
	
		
			
			| 82 |  | -          height,
 | 
	
		
			
			| 83 |  | -          width
 | 
	
		
			
			| 84 |  | -        },
 | 
	
		
			
			| 85 |  | -        () => {
 | 
	
		
			
			| 86 |  | -          if (enableAnimation) {
 | 
	
		
			
			| 87 |  | -            Animated.timing(this.opacityAnimatedValue, {
 | 
	
		
			
			| 88 |  | -              toValue: 1,
 | 
	
		
			
			| 89 |  | -              duration: animationDuration
 | 
	
		
			
			| 90 |  | -            }).start(() => {
 | 
	
		
			
			| 91 |  | -              handleSizeUpdated(height, width, onSizeUpdated);
 | 
	
		
			
			| 92 |  | -              this.updatingSize = false;
 | 
	
		
			
			| 93 |  | -            });
 | 
	
		
			
			| 94 |  | -          } else {
 | 
	
		
			
			| 95 |  | -            handleSizeUpdated(height, width, onSizeUpdated);
 | 
	
		
			
			| 96 |  | -            this.updatingSize = false;
 | 
	
		
			
			| 97 |  | -          }
 | 
	
		
			
			| 98 |  | -        }
 | 
	
		
			
			| 99 |  | -      );
 | 
	
		
			
			|  | 117 | +    if (isSizeChanged(height, oldHeight, width, oldWidth)) {
 | 
	
		
			
			|  | 118 | +      this.props.enableAnimation && this.opacityAnimatedValue.setValue(0);
 | 
	
		
			
			|  | 119 | +      this.setState({
 | 
	
		
			
			|  | 120 | +        isSizeChanged: true,
 | 
	
		
			
			|  | 121 | +        height,
 | 
	
		
			
			|  | 122 | +        width
 | 
	
		
			
			|  | 123 | +      });
 | 
	
		
			
			| 100 | 124 |      }
 | 
	
		
			
			| 101 | 125 |    };
 | 
	
		
			
			| 102 | 126 |  
 | 
	
	
		
			
			|  | @@ -119,21 +143,15 @@ export default class AutoHeightWebView extends PureComponent {
 | 
	
		
			
			| 119 | 143 |        style,
 | 
	
		
			
			| 120 | 144 |        scrollEnabled
 | 
	
		
			
			| 121 | 145 |      } = this.props;
 | 
	
		
			
			| 122 |  | -    const { height: newHeight, width: newWidth, source, script } = this.getUpdatedState(
 | 
	
		
			
			| 123 |  | -      this.props,
 | 
	
		
			
			| 124 |  | -      getBaseScript,
 | 
	
		
			
			| 125 |  | -      getIframeBaseScript
 | 
	
		
			
			| 126 |  | -    );
 | 
	
		
			
			| 127 |  | -    const { w, h } = getSize(newHeight, newWidth, height, width, this.updatingSize, this.calledOnce);
 | 
	
		
			
			| 128 |  | -    this.calledOnce = true;
 | 
	
		
			
			|  | 146 | +    const { source, script } = this.getUpdatedState(this.props, 'web/', getBaseScript, getIframeBaseScript);
 | 
	
		
			
			| 129 | 147 |      return (
 | 
	
		
			
			| 130 | 148 |        <Animated.View
 | 
	
		
			
			| 131 | 149 |          style={[
 | 
	
		
			
			| 132 | 150 |            styles.container,
 | 
	
		
			
			| 133 | 151 |            {
 | 
	
		
			
			| 134 | 152 |              opacity: enableAnimation ? this.opacityAnimatedValue : 1,
 | 
	
		
			
			| 135 |  | -            width: w,
 | 
	
		
			
			| 136 |  | -            height: h + heightOffset
 | 
	
		
			
			|  | 153 | +            width,
 | 
	
		
			
			|  | 154 | +            height: height + heightOffset
 | 
	
		
			
			| 137 | 155 |            },
 | 
	
		
			
			| 138 | 156 |            style
 | 
	
		
			
			| 139 | 157 |          ]}
 | 
	
	
		
			
			|  | @@ -175,7 +193,6 @@ const commonScript = `
 | 
	
		
			
			| 175 | 193 |      window.addEventListener('resize', updateSize);
 | 
	
		
			
			| 176 | 194 |      `;
 | 
	
		
			
			| 177 | 195 |  
 | 
	
		
			
			| 178 |  | -
 | 
	
		
			
			| 179 | 196 |  function getBaseScript(style) {
 | 
	
		
			
			| 180 | 197 |    return `
 | 
	
		
			
			| 181 | 198 |      ;
 |