@ -6,7 +6,7 @@ import ImmutablePropTypes from 'react-immutable-proptypes';
import { debounce } from 'lodash' ;
import LoadingIndicator from '../../components/loading_indicator' ;
import {
fetch Account,
lookup Account,
fetchFollowers ,
expandFollowers ,
} from '../../actions/accounts' ;
@ -19,15 +19,26 @@ import ScrollableList from '../../components/scrollable_list';
import MissingIndicator from 'mastodon/components/missing_indicator' ;
import TimelineHint from 'mastodon/components/timeline_hint' ;
const mapStateToProps = ( state , props ) => ( {
remote : ! ! ( state . getIn ( [ 'accounts' , props . params . accountId , 'acct' ] ) !== state . getIn ( [ 'accounts' , props . params . accountId , 'username' ] ) ) ,
remoteUrl : state . getIn ( [ 'accounts' , props . params . accountId , 'url' ] ) ,
isAccount : ! ! state . getIn ( [ 'accounts' , props . params . accountId ] ) ,
accountIds : state . getIn ( [ 'user_lists' , 'followers' , props . params . accountId , 'items' ] ) ,
hasMore : ! ! state . getIn ( [ 'user_lists' , 'followers' , props . params . accountId , 'next' ] ) ,
isLoading : state . getIn ( [ 'user_lists' , 'followers' , props . params . accountId , 'isLoading' ] , true ) ,
blockedBy : state . getIn ( [ 'relationships' , props . params . accountId , 'blocked_by' ] , false ) ,
} ) ;
const mapStateToProps = ( state , { params : { acct } } ) => {
const accountId = state . getIn ( [ 'accounts_map' , acct ] ) ;
if ( ! accountId ) {
return {
isLoading : true ,
} ;
}
return {
accountId ,
remote : ! ! ( state . getIn ( [ 'accounts' , accountId , 'acct' ] ) !== state . getIn ( [ 'accounts' , accountId , 'username' ] ) ) ,
remoteUrl : state . getIn ( [ 'accounts' , accountId , 'url' ] ) ,
isAccount : ! ! state . getIn ( [ 'accounts' , accountId ] ) ,
accountIds : state . getIn ( [ 'user_lists' , 'followers' , accountId , 'items' ] ) ,
hasMore : ! ! state . getIn ( [ 'user_lists' , 'followers' , accountId , 'next' ] ) ,
isLoading : state . getIn ( [ 'user_lists' , 'followers' , accountId , 'isLoading' ] , true ) ,
blockedBy : state . getIn ( [ 'relationships' , accountId , 'blocked_by' ] , false ) ,
} ;
} ;
const RemoteHint = ( { url } ) => (
< TimelineHint url = { url } resource = { < FormattedMessage id = 'timeline_hint.resources.followers' defaultMessage = 'Followers' / > } / >
@ -41,7 +52,10 @@ export default @connect(mapStateToProps)
class Followers extends ImmutablePureComponent {
static propTypes = {
params : PropTypes . object . isRequired ,
params : PropTypes . shape ( {
acct : PropTypes . string . isRequired ,
} ) . isRequired ,
accountId : PropTypes . string ,
dispatch : PropTypes . func . isRequired ,
accountIds : ImmutablePropTypes . list ,
hasMore : PropTypes . bool ,
@ -53,22 +67,34 @@ class Followers extends ImmutablePureComponent {
multiColumn : PropTypes . bool ,
} ;
componentWillMount ( ) {
if ( ! this . props . accountIds ) {
this . props . dispatch ( fetchAccount ( this . props . params . accountId ) ) ;
this . props . dispatch ( fetchFollowers ( this . props . params . accountId ) ) ;
_load ( ) {
const { accountId , dispatch } = this . props ;
dispatch ( fetchFollowers ( accountId ) ) ;
}
componentDidMount ( ) {
const { params : { acct } , accountId , dispatch } = this . props ;
if ( accountId ) {
this . _load ( ) ;
} else {
dispatch ( lookupAccount ( acct ) ) ;
}
}
componentWillReceiveProps ( nextProps ) {
if ( nextProps . params . accountId !== this . props . params . accountId && nextProps . params . accountId ) {
this . props . dispatch ( fetchAccount ( nextProps . params . accountId ) ) ;
this . props . dispatch ( fetchFollowers ( nextProps . params . accountId ) ) ;
componentDidUpdate ( prevProps ) {
const { params : { acct } , accountId , dispatch } = this . props ;
if ( prevProps . accountId !== accountId && accountId ) {
this . _load ( ) ;
} else if ( prevProps . params . acct !== acct ) {
dispatch ( lookupAccount ( acct ) ) ;
}
}
handleLoadMore = debounce ( ( ) => {
this . props . dispatch ( expandFollowers ( this . props . params . accountId ) ) ;
this . props . dispatch ( expandFollowers ( this . props . accountId ) ) ;
} , 300 , { leading : true } ) ;
render ( ) {
@ -111,7 +137,7 @@ class Followers extends ImmutablePureComponent {
hasMore = { hasMore }
isLoading = { isLoading }
onLoadMore = { this . handleLoadMore }
prepend = { < HeaderContainer accountId = { this . props . params . accountId } hideTabs / > }
prepend = { < HeaderContainer accountId = { this . props . accountId } hideTabs / > }
alwaysPrepend
append = { remoteMessage }
emptyMessage = { emptyMessage }