Put "Media Only" option in column settings instead of content area headline (#7801)

* Action/reducer for changing column settings takes a path and a value
instead of a javascript object

* Settings menu version and column headline version working simultaneously

* remove column headline entirely

* remove css for headlines that aren't possible now

* Remove commented out code from unfruitful attempt at this feature

* Give direct timeline its own column settings bc it doesn't have a media only option

* Fix typo in public timeline code that was preventing per-column settings from working properly

* Fix codeclimate issues

* Missing semicolons

* Use redux state to set onlyMedia, let that do the update instead of a callback. Consequently, unpinned setting works without history modification

* Unused import
This commit is contained in:
chr v1.x 2018-06-15 02:15:15 -07:00 committed by Eugen Rochko
parent f972815f1b
commit 4f42238c29
11 changed files with 125 additions and 133 deletions

View file

@ -6,23 +6,33 @@ import StatusListContainer from '../ui/containers/status_list_container';
import Column from '../../components/column';
import ColumnHeader from '../../components/column_header';
import { expandCommunityTimeline } from '../../actions/timelines';
import { addColumn, removeColumn, moveColumn, changeColumnParams } from '../../actions/columns';
import { addColumn, removeColumn, moveColumn } from '../../actions/columns';
import ColumnSettingsContainer from './containers/column_settings_container';
import SectionHeadline from './components/section_headline';
import { connectCommunityStream } from '../../actions/streaming';
const messages = defineMessages({
title: { id: 'column.community', defaultMessage: 'Local timeline' },
});
const mapStateToProps = (state, { onlyMedia }) => ({
hasUnread: state.getIn(['timelines', `community${onlyMedia ? ':media' : ''}`, 'unread']) > 0,
});
const mapStateToProps = (state, { onlyMedia, columnId }) => {
const uuid = columnId;
const columns = state.getIn(['settings', 'columns']);
const index = columns.findIndex(c => c.get('uuid') === uuid);
return {
hasUnread: state.getIn(['timelines', `community${onlyMedia ? ':media' : ''}`, 'unread']) > 0,
onlyMedia: (columnId && index >= 0) ? columns.get(index).getIn(['params', 'other', 'onlyMedia']) : state.getIn(['settings', 'community', 'other', 'onlyMedia']),
};
};
@connect(mapStateToProps)
@injectIntl
export default class CommunityTimeline extends React.PureComponent {
static contextTypes = {
router: PropTypes.object,
};
static defaultProps = {
onlyMedia: false,
};
@ -89,27 +99,10 @@ export default class CommunityTimeline extends React.PureComponent {
dispatch(expandCommunityTimeline({ maxId, onlyMedia }));
}
handleHeadlineLinkClick = e => {
const { columnId, dispatch } = this.props;
const onlyMedia = /\/media$/.test(e.currentTarget.href);
dispatch(changeColumnParams(columnId, { other: { onlyMedia } }));
}
render () {
const { intl, hasUnread, columnId, multiColumn, onlyMedia } = this.props;
const pinned = !!columnId;
const headline = (
<SectionHeadline
timelineId='community'
to='/timelines/public/local'
pinned={pinned}
onlyMedia={onlyMedia}
onClick={this.handleHeadlineLinkClick}
/>
);
return (
<Column ref={this.setRef}>
<ColumnHeader
@ -122,12 +115,10 @@ export default class CommunityTimeline extends React.PureComponent {
pinned={pinned}
multiColumn={multiColumn}
>
<ColumnSettingsContainer />
<ColumnSettingsContainer columnId={columnId} />
</ColumnHeader>
<StatusListContainer
prepend={headline}
alwaysPrepend
trackScroll={!pinned}
scrollKey={`community_timeline-${columnId}`}
timelineId={`community${onlyMedia ? ':media' : ''}`}