diff --git a/lib/ControlledRefreshableListView.js b/lib/ControlledRefreshableListView.js index 8e2ef7c..5407487 100644 --- a/lib/ControlledRefreshableListView.js +++ b/lib/ControlledRefreshableListView.js @@ -38,14 +38,15 @@ var ControlledRefreshableListView = React.createClass({ onScroll: PropTypes.func, onResponderGrant: PropTypes.func, onResponderRelease: PropTypes.func, + waitingForRelease: PropTypes.bool, renderHeaderWrapper: (props, propName, componentName) => { if (props[propName]) { - return new Error("The 'renderHeaderWrapper' prop is no longer used"); + return new Error("The 'renderHeaderWrapper' prop is no longer used") } }, refreshingIndictatorComponent: (props, propName, componentName) => { if (props[propName]) { - return new Error("The 'refreshingIndictatorComponent' prop has been renamed to 'refreshingIndicatorComponent'"); + return new Error("The 'refreshingIndictatorComponent' prop has been renamed to 'refreshingIndicatorComponent'") } }, }, @@ -64,7 +65,6 @@ var ControlledRefreshableListView = React.createClass({ }, componentWillReceiveProps(nextProps) { if (!this.props.isRefreshing && nextProps.isRefreshing && this.isTouching) { - this.waitingForRelease = true this.setState({waitingForRelease: true}) } @@ -101,11 +101,9 @@ var ControlledRefreshableListView = React.createClass({ if (this.isTouching || (!this.isTouching && !this.props.ignoreInertialScroll)) { if (scrollY < -this.props.minPulldownDistance) { - if (!this.props.isRefreshing) { - if (this.props.onRefresh) { - this.props.onRefresh() - } - } + !this.props.isRefreshing && (this.needRefresh = true) + } else if (this.needRefresh) { + this.needRefresh = false } } @@ -123,6 +121,10 @@ var ControlledRefreshableListView = React.createClass({ this.waitingForRelease = false this.setState({waitingForRelease: false}) } + if (this.needRefresh) { + this.needRefresh = false + this.props.onRefresh && this.props.onRefresh() + } if (this.props.onResponderRelease) { this.props.onResponderRelease.apply(null, arguments) } @@ -153,7 +155,7 @@ var ControlledRefreshableListView = React.createClass({ isRefreshing, description: refreshDescription, prompt: refreshPrompt, - pulldownDistance: -(this.lastScrollY || 0) + pulldownDistance: -(this.lastScrollY || 0), } return createElementFrom(this.props.refreshingIndicatorComponent, refreshingIndicatorProps) }, @@ -186,10 +188,10 @@ var stylesheet = StyleSheet.create({ fillParent: { backgroundColor: 'transparent', position: 'absolute', - top: 0, - left: 0, - right: 0, - bottom: 0, + top: 0, + left: 0, + right: 0, + bottom: 0, }, // offsetParent: { // position: 'relative', diff --git a/lib/RefreshingIndicator.js b/lib/RefreshingIndicator.js index c5d7d13..733dedd 100644 --- a/lib/RefreshingIndicator.js +++ b/lib/RefreshingIndicator.js @@ -14,6 +14,8 @@ var RefreshingIndicator = React.createClass({ activityIndicatorComponent: PropTypes.oneOfType([PropTypes.func, PropTypes.element]), stylesheet: PropTypes.object, description: PropTypes.oneOfType([PropTypes.string, PropTypes.element]), + isRefreshing: PropTypes.bool, + prompt: PropTypes.object, }, getDefaultProps() { return { @@ -23,9 +25,9 @@ var RefreshingIndicator = React.createClass({ renderDescription(styles) { return ( - {this.props.isRefreshing ? this.props.description : this.props.prompt} + {this.props.isRefreshing ? this.props.description : this.props.prompt} - ); + ) }, renderActivityIndicator(styles) { if (!this.props.isRefreshing) return null