Home column filters
This commit is contained in:
parent
1e9d2c4b1e
commit
312c51b5c8
16 changed files with 455 additions and 143 deletions
|
@ -2,26 +2,55 @@ import { connect } from 'react-redux';
|
|||
import StatusList from '../../../components/status_list';
|
||||
import { expandTimeline, scrollTopTimeline } from '../../../actions/timelines';
|
||||
import Immutable from 'immutable';
|
||||
import { createSelector } from 'reselect';
|
||||
|
||||
const getStatusIds = createSelector([
|
||||
(state, { type }) => state.getIn(['settings', type]),
|
||||
(state, { type }) => state.getIn(['timelines', type, 'items'], Immutable.List()),
|
||||
(state) => state.get('statuses')
|
||||
], (columnSettings, statusIds, statuses) => statusIds.filter(id => {
|
||||
const statusForId = statuses.get(id);
|
||||
let showStatus = true;
|
||||
|
||||
if (columnSettings.getIn(['shows', 'reblog']) === false) {
|
||||
showStatus = showStatus && statusForId.get('reblog') === null;
|
||||
}
|
||||
|
||||
if (columnSettings.getIn(['shows', 'reply']) === false) {
|
||||
showStatus = showStatus && statusForId.get('in_reply_to_id') === null;
|
||||
}
|
||||
|
||||
if (columnSettings.getIn(['regex', 'body'], '').trim().length > 0) {
|
||||
try {
|
||||
const regex = new RegExp(columnSettings.getIn(['regex', 'body']).trim(), 'i');
|
||||
showStatus = showStatus && !regex.test(statusForId.get('reblog') ? statuses.getIn([statusForId.get('reblog'), 'content']) : statusForId.get('content'));
|
||||
} catch(e) {
|
||||
// Bad regex, don't affect filters
|
||||
}
|
||||
}
|
||||
|
||||
return showStatus;
|
||||
}));
|
||||
|
||||
const mapStateToProps = (state, props) => ({
|
||||
statusIds: state.getIn(['timelines', props.type, 'items'], Immutable.List())
|
||||
statusIds: getStatusIds(state, props)
|
||||
});
|
||||
|
||||
const mapDispatchToProps = function (dispatch, props) {
|
||||
return {
|
||||
onScrollToBottom () {
|
||||
dispatch(scrollTopTimeline(props.type, false));
|
||||
dispatch(expandTimeline(props.type, props.id));
|
||||
},
|
||||
const mapDispatchToProps = (dispatch, { type, id }) => ({
|
||||
|
||||
onScrollToTop () {
|
||||
dispatch(scrollTopTimeline(props.type, true));
|
||||
},
|
||||
onScrollToBottom () {
|
||||
dispatch(scrollTopTimeline(type, false));
|
||||
dispatch(expandTimeline(type, id));
|
||||
},
|
||||
|
||||
onScroll () {
|
||||
dispatch(scrollTopTimeline(props.type, false));
|
||||
}
|
||||
};
|
||||
};
|
||||
onScrollToTop () {
|
||||
dispatch(scrollTopTimeline(type, true));
|
||||
},
|
||||
|
||||
onScroll () {
|
||||
dispatch(scrollTopTimeline(type, false));
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
export default connect(mapStateToProps, mapDispatchToProps)(StatusList);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue