From dbfe1e4be6fb46c7374275a2465f4386798516cd Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Sun, 13 Nov 2016 20:42:54 +0100 Subject: Infinite scroll for followers/following lists --- .../features/compose/components/upload_form.jsx | 1 - .../components/features/followers/index.jsx | 33 +++++++++++++++------- .../components/features/following/index.jsx | 33 +++++++++++++++------- 3 files changed, 46 insertions(+), 21 deletions(-) (limited to 'app/assets/javascripts/components/features') diff --git a/app/assets/javascripts/components/features/compose/components/upload_form.jsx b/app/assets/javascripts/components/features/compose/components/upload_form.jsx index 751f76ab7..eab504b48 100644 --- a/app/assets/javascripts/components/features/compose/components/upload_form.jsx +++ b/app/assets/javascripts/components/features/compose/components/upload_form.jsx @@ -7,7 +7,6 @@ const UploadForm = React.createClass({ propTypes: { media: ImmutablePropTypes.list.isRequired, is_uploading: React.PropTypes.bool, - onSelectFile: React.PropTypes.func.isRequired, onRemoveFile: React.PropTypes.func.isRequired }, diff --git a/app/assets/javascripts/components/features/followers/index.jsx b/app/assets/javascripts/components/features/followers/index.jsx index ff3f97b09..13eed69ca 100644 --- a/app/assets/javascripts/components/features/followers/index.jsx +++ b/app/assets/javascripts/components/features/followers/index.jsx @@ -1,13 +1,16 @@ -import { connect } from 'react-redux'; -import PureRenderMixin from 'react-addons-pure-render-mixin'; -import ImmutablePropTypes from 'react-immutable-proptypes'; -import LoadingIndicator from '../../components/loading_indicator'; -import { fetchFollowers } from '../../actions/accounts'; -import { ScrollContainer } from 'react-router-scroll'; -import AccountContainer from './containers/account_container'; +import { connect } from 'react-redux'; +import PureRenderMixin from 'react-addons-pure-render-mixin'; +import ImmutablePropTypes from 'react-immutable-proptypes'; +import LoadingIndicator from '../../components/loading_indicator'; +import { + fetchFollowers, + expandFollowers +} from '../../actions/accounts'; +import { ScrollContainer } from 'react-router-scroll'; +import AccountContainer from './containers/account_container'; const mapStateToProps = (state, props) => ({ - accountIds: state.getIn(['user_lists', 'followers', Number(props.params.accountId)]) + accountIds: state.getIn(['user_lists', 'followers', Number(props.params.accountId), 'items']) }); const Followers = React.createClass({ @@ -30,6 +33,14 @@ const Followers = React.createClass({ } }, + handleScroll (e) { + const { scrollTop, scrollHeight, clientHeight } = e.target; + + if (scrollTop === scrollHeight - clientHeight) { + this.props.dispatch(expandFollowers(Number(this.props.params.accountId))); + } + }, + render () { const { accountIds } = this.props; @@ -39,8 +50,10 @@ const Followers = React.createClass({ return ( -
- {accountIds.map(id => )} +
+
+ {accountIds.map(id => )} +
); diff --git a/app/assets/javascripts/components/features/following/index.jsx b/app/assets/javascripts/components/features/following/index.jsx index bd3c3bd45..865b39736 100644 --- a/app/assets/javascripts/components/features/following/index.jsx +++ b/app/assets/javascripts/components/features/following/index.jsx @@ -1,13 +1,16 @@ -import { connect } from 'react-redux'; -import PureRenderMixin from 'react-addons-pure-render-mixin'; -import ImmutablePropTypes from 'react-immutable-proptypes'; -import LoadingIndicator from '../../components/loading_indicator'; -import { fetchFollowing } from '../../actions/accounts'; -import { ScrollContainer } from 'react-router-scroll'; -import AccountContainer from '../followers/containers/account_container'; +import { connect } from 'react-redux'; +import PureRenderMixin from 'react-addons-pure-render-mixin'; +import ImmutablePropTypes from 'react-immutable-proptypes'; +import LoadingIndicator from '../../components/loading_indicator'; +import { + fetchFollowing, + expandFollowing +} from '../../actions/accounts'; +import { ScrollContainer } from 'react-router-scroll'; +import AccountContainer from '../followers/containers/account_container'; const mapStateToProps = (state, props) => ({ - accountIds: state.getIn(['user_lists', 'following', Number(props.params.accountId)]) + accountIds: state.getIn(['user_lists', 'following', Number(props.params.accountId), 'items']) }); const Following = React.createClass({ @@ -30,6 +33,14 @@ const Following = React.createClass({ } }, + handleScroll (e) { + const { scrollTop, scrollHeight, clientHeight } = e.target; + + if (scrollTop === scrollHeight - clientHeight) { + this.props.dispatch(expandFollowing(Number(this.props.params.accountId))); + } + }, + render () { const { accountIds } = this.props; @@ -39,8 +50,10 @@ const Following = React.createClass({ return ( -
- {accountIds.map(id => )} +
+
+ {accountIds.map(id => )} +
); -- cgit