@ -1,12 +1,13 @@
import React from 'react' ;
import { connect } from 'react-redux' ;
import { defineMessages , injectIntl , FormattedMessage } from 'react-intl' ;
import { NavLink } from 'react-router-dom' ;
import PropTypes from 'prop-types' ;
import StatusListContainer from 'flavours/glitch/features/ui/containers/status_list_container' ;
import Column from 'flavours/glitch/components/column' ;
import ColumnHeader from 'flavours/glitch/components/column_header' ;
import { expandCommunityTimeline } from 'flavours/glitch/actions/timelines' ;
import { addColumn , removeColumn , moveColumn } from 'flavours/glitch/actions/columns' ;
import { defineMessages , injectIntl , FormattedMessage } from 'react-intl' ;
import ColumnSettingsContainer from './containers/column_settings_container' ;
import { connectCommunityStream } from 'flavours/glitch/actions/streaming' ;
@ -14,20 +15,25 @@ const messages = defineMessages({
title : { id : 'column.community' , defaultMessage : 'Local timeline' } ,
} ) ;
const mapStateToProps = state => ( {
hasUnread : state . getIn ( [ 'timelines' , 'community' , 'unread' ] ) > 0 ,
const mapStateToProps = ( state , { onlyMedia } ) => ( {
hasUnread : state . getIn ( [ 'timelines' , ` community ${ onlyMedia ? ':media' : '' } ` , 'unread' ] ) > 0 ,
} ) ;
@ connect ( mapStateToProps )
@ injectIntl
export default class CommunityTimeline extends React . PureComponent {
static defaultProps = {
onlyMedia : false ,
} ;
static propTypes = {
dispatch : PropTypes . func . isRequired ,
columnId : PropTypes . string ,
intl : PropTypes . object . isRequired ,
hasUnread : PropTypes . bool ,
multiColumn : PropTypes . bool ,
onlyMedia : PropTypes . bool ,
} ;
handlePin = ( ) => {
@ -50,10 +56,10 @@ export default class CommunityTimeline extends React.PureComponent {
}
componentDidMount ( ) {
const { dispatch } = this . props ;
const { dispatch , onlyMedia } = this . props ;
dispatch ( expandCommunityTimeline ( ) ) ;
this . disconnect = dispatch ( connectCommunityStream ( ) ) ;
dispatch ( expandCommunityTimeline ( { onlyMedia } )) ;
this . disconnect = dispatch ( connectCommunityStream ( { onlyMedia } )) ;
}
componentWillUnmount ( ) {
@ -68,13 +74,22 @@ export default class CommunityTimeline extends React.PureComponent {
}
handleLoadMore = maxId => {
this . props . dispatch ( expandCommunityTimeline ( { maxId } ) ) ;
const { dispatch , onlyMedia } = this . props ;
dispatch ( expandCommunityTimeline ( { maxId , onlyMedia } ) ) ;
}
render ( ) {
const { intl , hasUnread , columnId , multiColumn } = this . props ;
const { intl , hasUnread , columnId , multiColumn , onlyMedia } = this . props ;
const pinned = ! ! columnId ;
const headline = (
< div className = 'community-timeline__section-headline' >
< NavLink exact to = '/timelines/public/local' replace > < FormattedMessage id = 'timeline.posts' defaultMessage = 'Toots' / > < / N a v L i n k >
< NavLink exact to = '/timelines/public/local/media' replace > < FormattedMessage id = 'timeline.media' defaultMessage = 'Media' / > < / N a v L i n k >
< / d i v >
) ;
return (
< Column ref = { this . setRef } name = 'local' label = { intl . formatMessage ( messages . title ) } >
< ColumnHeader
@ -91,9 +106,11 @@ export default class CommunityTimeline extends React.PureComponent {
< / C o l u m n H e a d e r >
< StatusListContainer
prepend = { headline }
trackScroll = { ! pinned }
scrollKey = { ` community_timeline- ${ columnId } ` }
timelineId = 'community'
shouldUpdateScroll = { this . shouldUpdateScroll }
timelineId = { ` community ${ onlyMedia ? ':media' : '' } ` }
onLoadMore = { this . handleLoadMore }
emptyMessage = { < FormattedMessage id = 'empty_column.community' defaultMessage = 'The local timeline is empty. Write something publicly to get the ball rolling!' / > }
/ >