@ -3,7 +3,7 @@ import { connect } from 'react-redux';
import ImmutablePropTypes from 'react-immutable-proptypes' ;
import ImmutablePropTypes from 'react-immutable-proptypes' ;
import PropTypes from 'prop-types' ;
import PropTypes from 'prop-types' ;
import { fetchAccount } from 'flavours/glitch/actions/accounts' ;
import { fetchAccount } from 'flavours/glitch/actions/accounts' ;
import { refreshAccountTimeline , expandAccountTimeline } from 'flavours/glitch/actions/timelines' ;
import { refreshAccountTimeline , refreshAccountFeaturedTimeline, expandAccountTimeline } from 'flavours/glitch/actions/timelines' ;
import StatusList from '../../components/status_list' ;
import StatusList from '../../components/status_list' ;
import LoadingIndicator from '../../components/loading_indicator' ;
import LoadingIndicator from '../../components/loading_indicator' ;
import Column from '../ui/components/column' ;
import Column from '../ui/components/column' ;
@ -12,11 +12,16 @@ import ColumnBackButton from '../../components/column_back_button';
import { List as ImmutableList } from 'immutable' ;
import { List as ImmutableList } from 'immutable' ;
import ImmutablePureComponent from 'react-immutable-pure-component' ;
import ImmutablePureComponent from 'react-immutable-pure-component' ;
const mapStateToProps = ( state , props ) => ( {
const mapStateToProps = ( state , { params : { accountId } , withReplies = false } ) => {
statusIds : state . getIn ( [ 'timelines' , ` account: ${ props . params . accountId } ` , 'items' ] , ImmutableList ( ) ) ,
const path = withReplies ? ` ${ accountId } :with_replies ` : accountId ;
isLoading : state . getIn ( [ 'timelines' , ` account: ${ props . params . accountId } ` , 'isLoading' ] ) ,
hasMore : ! ! state . getIn ( [ 'timelines' , ` account: ${ props . params . accountId } ` , 'next' ] ) ,
return {
} ) ;
statusIds : state . getIn ( [ 'timelines' , ` account: ${ path } ` , 'items' ] , ImmutableList ( ) ) ,
featuredStatusIds : withReplies ? ImmutableList ( ) : state . getIn ( [ 'timelines' , ` account: ${ accountId } :pinned ` , 'items' ] , ImmutableList ( ) ) ,
isLoading : state . getIn ( [ 'timelines' , ` account: ${ path } ` , 'isLoading' ] ) ,
hasMore : ! ! state . getIn ( [ 'timelines' , ` account: ${ path } ` , 'next' ] ) ,
} ;
} ;
@ connect ( mapStateToProps )
@ connect ( mapStateToProps )
export default class AccountTimeline extends ImmutablePureComponent {
export default class AccountTimeline extends ImmutablePureComponent {
@ -25,30 +30,36 @@ export default class AccountTimeline extends ImmutablePureComponent {
params : PropTypes . object . isRequired ,
params : PropTypes . object . isRequired ,
dispatch : PropTypes . func . isRequired ,
dispatch : PropTypes . func . isRequired ,
statusIds : ImmutablePropTypes . list ,
statusIds : ImmutablePropTypes . list ,
featuredStatusIds : ImmutablePropTypes . list ,
isLoading : PropTypes . bool ,
isLoading : PropTypes . bool ,
hasMore : PropTypes . bool ,
hasMore : PropTypes . bool ,
withReplies : PropTypes . bool ,
} ;
} ;
componentWillMount ( ) {
componentWillMount ( ) {
this . props . dispatch ( fetchAccount ( this . props . params . accountId ) ) ;
const { params : { accountId } , withReplies } = this . props ;
this . props . dispatch ( refreshAccountTimeline ( this . props . params . accountId ) ) ;
this . props . dispatch ( fetchAccount ( accountId ) ) ;
this . props . dispatch ( refreshAccountFeaturedTimeline ( accountId ) ) ;
this . props . dispatch ( refreshAccountTimeline ( accountId , withReplies ) ) ;
}
}
componentWillReceiveProps ( nextProps ) {
componentWillReceiveProps ( nextProps ) {
if ( nextProps . params . accountId !== this . props . params . accountId && nextProps . params . accountId ) {
if ( ( nextProps . params . accountId !== this . props . params . accountId && nextProps . params . accountId ) || nextProps . withReplies !== this . props . withReplies ) {
this . props . dispatch ( fetchAccount ( nextProps . params . accountId ) ) ;
this . props . dispatch ( fetchAccount ( nextProps . params . accountId ) ) ;
this . props . dispatch ( refreshAccountTimeline ( nextProps . params . accountId ) ) ;
this . props . dispatch ( refreshAccountFeaturedTimeline ( nextProps . params . accountId ) ) ;
this . props . dispatch ( refreshAccountTimeline ( nextProps . params . accountId , nextProps . params . withReplies ) ) ;
}
}
}
}
handleScrollToBottom = ( ) => {
handleScrollToBottom = ( ) => {
if ( ! this . props . isLoading && this . props . hasMore ) {
if ( ! this . props . isLoading && this . props . hasMore ) {
this . props . dispatch ( expandAccountTimeline ( this . props . params . accountId )) ;
this . props . dispatch ( expandAccountTimeline ( this . props . params . accountId , this . props . withReplies )) ;
}
}
}
}
render ( ) {
render ( ) {
const { statusIds , isLoading, hasMore } = this . props ;
const { statusIds , featuredStatusIds, isLoading, hasMore } = this . props ;
if ( ! statusIds && isLoading ) {
if ( ! statusIds && isLoading ) {
return (
return (
@ -66,6 +77,7 @@ export default class AccountTimeline extends ImmutablePureComponent {
prepend = { < HeaderContainer accountId = { this . props . params . accountId } / > }
prepend = { < HeaderContainer accountId = { this . props . params . accountId } / > }
scrollKey = 'account_timeline'
scrollKey = 'account_timeline'
statusIds = { statusIds }
statusIds = { statusIds }
featuredStatusIds = { featuredStatusIds }
isLoading = { isLoading }
isLoading = { isLoading }
hasMore = { hasMore }
hasMore = { hasMore }
onScrollToBottom = { this . handleScrollToBottom }
onScrollToBottom = { this . handleScrollToBottom }