38 lines
1.0 KiB
JavaScript
38 lines
1.0 KiB
JavaScript
define([
|
|
'lodash',
|
|
'jquery',
|
|
'react'
|
|
], function (_, $, React) {
|
|
'use strict';
|
|
|
|
var InfiniteScroll = React.createClass({
|
|
|
|
displayName: 'InfiniteScroll',
|
|
gettingMore: false,
|
|
|
|
onLoadMoreFinished: function() {
|
|
this.gettingMore = false;
|
|
},
|
|
|
|
onScroll: function(evt) {
|
|
if (!this.props.onLoadMore || this.gettingMore) {
|
|
return;
|
|
}
|
|
var threshold = this.props.threshold || 0;
|
|
var raw = evt.target;
|
|
if (raw.scrollTop + raw.offsetHeight + threshold >= raw.scrollHeight) {
|
|
this.gettingMore = true;
|
|
this.props.onLoadMore(this.onLoadMoreFinished);
|
|
}
|
|
},
|
|
|
|
render: function () {
|
|
var passedProps = _.omit(this.props, ['onLoadMore', 'threshold', 'children', 'onScroll']);
|
|
passedProps.onScroll = this.onScroll;
|
|
return React.DOM.div(passedProps, this.props.children);
|
|
}
|
|
});
|
|
|
|
return InfiniteScroll;
|
|
});
|