|
|
|
@ -12,7 +12,7 @@ import { connectHashtagStream } from '../../actions/streaming'; |
|
|
|
|
import { isEqual } from 'lodash'; |
|
|
|
|
|
|
|
|
|
const mapStateToProps = (state, props) => ({ |
|
|
|
|
hasUnread: state.getIn(['timelines', `hashtag:${props.params.id}`, 'unread']) > 0, |
|
|
|
|
hasUnread: state.getIn(['timelines', `hashtag:${props.params.id}${props.params.local ? ':local' : ''}`, 'unread']) > 0, |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
export default @connect(mapStateToProps) |
|
|
|
@ -76,13 +76,13 @@ class HashtagTimeline extends React.PureComponent { |
|
|
|
|
this.column.scrollTop(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
_subscribe (dispatch, id, tags = {}) { |
|
|
|
|
_subscribe (dispatch, id, tags = {}, local) { |
|
|
|
|
let any = (tags.any || []).map(tag => tag.value); |
|
|
|
|
let all = (tags.all || []).map(tag => tag.value); |
|
|
|
|
let none = (tags.none || []).map(tag => tag.value); |
|
|
|
|
|
|
|
|
|
[id, ...any].map(tag => { |
|
|
|
|
this.disconnects.push(dispatch(connectHashtagStream(id, tag, status => { |
|
|
|
|
this.disconnects.push(dispatch(connectHashtagStream(id, tag, local, status => { |
|
|
|
|
let tags = status.tags.map(tag => tag.name); |
|
|
|
|
|
|
|
|
|
return all.filter(tag => tags.includes(tag)).length === all.length && |
|
|
|
@ -100,7 +100,7 @@ class HashtagTimeline extends React.PureComponent { |
|
|
|
|
const { dispatch } = this.props; |
|
|
|
|
const { id, tags, local } = this.props.params; |
|
|
|
|
|
|
|
|
|
this._subscribe(dispatch, id, tags); |
|
|
|
|
this._subscribe(dispatch, id, tags, local); |
|
|
|
|
dispatch(expandHashtagTimeline(id, { tags, local })); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -110,8 +110,8 @@ class HashtagTimeline extends React.PureComponent { |
|
|
|
|
|
|
|
|
|
if (id !== params.id || !isEqual(tags, params.tags) || !isEqual(local, params.local)) { |
|
|
|
|
this._unsubscribe(); |
|
|
|
|
this._subscribe(dispatch, id, tags); |
|
|
|
|
dispatch(clearTimeline(`hashtag:${id}`)); |
|
|
|
|
this._subscribe(dispatch, id, tags, local); |
|
|
|
|
dispatch(clearTimeline(`hashtag:${id}${local ? ':local' : ''}`)); |
|
|
|
|
dispatch(expandHashtagTimeline(id, { tags, local })); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -131,7 +131,7 @@ class HashtagTimeline extends React.PureComponent { |
|
|
|
|
|
|
|
|
|
render () { |
|
|
|
|
const { shouldUpdateScroll, hasUnread, columnId, multiColumn } = this.props; |
|
|
|
|
const { id } = this.props.params; |
|
|
|
|
const { id, local } = this.props.params; |
|
|
|
|
const pinned = !!columnId; |
|
|
|
|
|
|
|
|
|
return ( |
|
|
|
@ -153,7 +153,7 @@ class HashtagTimeline extends React.PureComponent { |
|
|
|
|
<StatusListContainer |
|
|
|
|
trackScroll={!pinned} |
|
|
|
|
scrollKey={`hashtag_timeline-${columnId}`} |
|
|
|
|
timelineId={`hashtag:${id}`} |
|
|
|
|
timelineId={`hashtag:${id}${local ? ':local' : ''}`} |
|
|
|
|
onLoadMore={this.handleLoadMore} |
|
|
|
|
emptyMessage={<FormattedMessage id='empty_column.hashtag' defaultMessage='There is nothing in this hashtag yet.' />} |
|
|
|
|
shouldUpdateScroll={shouldUpdateScroll} |
|
|
|
|