2020-03-27 13:59:38 -07:00
import React from 'react' ;
import { connect } from 'react-redux' ;
import ImmutablePureComponent from 'react-immutable-pure-component' ;
import PropTypes from 'prop-types' ;
import ImmutablePropTypes from 'react-immutable-proptypes' ;
import LoadingIndicator from '../../components/loading_indicator' ;
import MissingIndicator from '../../components/missing_indicator' ;
import { fetchReblogs } from '../../actions/interactions' ;
import { fetchStatus } from '../../actions/statuses' ;
2021-10-07 12:52:50 -07:00
import { injectIntl , defineMessages , FormattedMessage } from 'react-intl' ;
2020-03-27 13:59:38 -07:00
import AccountContainer from '../../containers/account_container' ;
import Column from '../ui/components/column' ;
import ScrollableList from '../../components/scrollable_list' ;
import { makeGetStatus } from '../../selectors' ;
2021-10-07 12:52:50 -07:00
const messages = defineMessages ( {
heading : { id : 'column.reblogs' , defaultMessage : 'Reposts' } ,
} ) ;
2020-03-27 13:59:38 -07:00
const mapStateToProps = ( state , props ) => {
const getStatus = makeGetStatus ( ) ;
const status = getStatus ( state , {
id : props . params . statusId ,
2020-04-14 11:44:40 -07:00
username : props . params . username ,
2020-03-27 13:59:38 -07:00
} ) ;
return {
status ,
accountIds : state . getIn ( [ 'user_lists' , 'reblogged_by' , props . params . statusId ] ) ,
2020-04-14 11:44:40 -07:00
} ;
2020-03-27 13:59:38 -07:00
} ;
export default @ connect ( mapStateToProps )
2021-10-07 12:52:50 -07:00
@ injectIntl
2020-03-27 13:59:38 -07:00
class Reblogs extends ImmutablePureComponent {
static propTypes = {
2021-10-07 12:52:50 -07:00
intl : PropTypes . object . isRequired ,
2020-03-27 13:59:38 -07:00
params : PropTypes . object . isRequired ,
dispatch : PropTypes . func . isRequired ,
2020-09-09 16:02:26 -07:00
accountIds : ImmutablePropTypes . orderedSet ,
2020-03-27 13:59:38 -07:00
status : ImmutablePropTypes . map ,
} ;
2021-11-04 11:16:28 -07:00
fetchData = ( ) => {
const { dispatch , params } = this . props ;
const { statusId } = params ;
dispatch ( fetchReblogs ( statusId ) ) ;
dispatch ( fetchStatus ( statusId ) ) ;
}
2020-06-17 18:42:30 -07:00
componentDidMount ( ) {
2021-11-04 11:16:28 -07:00
this . fetchData ( ) ;
2020-03-27 13:59:38 -07:00
}
2020-07-04 16:41:41 -07:00
componentDidUpdate ( prevProps ) {
const { params } = this . props ;
2021-11-04 11:16:28 -07:00
if ( params . statusId !== prevProps . params . statusId ) {
this . fetchData ( ) ;
2020-03-27 13:59:38 -07:00
}
}
2020-04-14 14:47:35 -07:00
render ( ) {
2021-10-07 12:52:50 -07:00
const { intl , accountIds , status } = this . props ;
2020-03-27 13:59:38 -07:00
if ( ! accountIds ) {
return (
< Column >
< LoadingIndicator / >
< / C o l u m n >
) ;
}
if ( ! status ) {
return (
< Column >
< MissingIndicator / >
< / C o l u m n >
) ;
}
const emptyMessage = < FormattedMessage id = 'status.reblogs.empty' defaultMessage = 'No one has reposted this post yet. When someone does, they will show up here.' / > ;
return (
2021-10-07 12:52:50 -07:00
< Column heading = { intl . formatMessage ( messages . heading ) } >
2020-03-27 13:59:38 -07:00
< ScrollableList
scrollKey = 'reblogs'
emptyMessage = { emptyMessage }
>
{ accountIds . map ( id =>
2020-10-07 11:08:36 -07:00
< AccountContainer key = { id } id = { id } withNote = { false } / > ,
2020-03-27 13:59:38 -07:00
) }
< / S c r o l l a b l e L i s t >
< / C o l u m n >
) ;
}
}