"whole known network" which is what public timeline used to be Only domain blocks with suspend severity will block PuSH subscriptions Silenced accounts should not appear in conversations unless followed
63 lines
2.1 KiB
JavaScript
63 lines
2.1 KiB
JavaScript
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';
|
|
import { debounce } from 'react-decoration';
|
|
|
|
const getStatusIds = createSelector([
|
|
(state, { type }) => state.getIn(['settings', type], Immutable.Map()),
|
|
(state, { type }) => state.getIn(['timelines', type, 'items'], Immutable.List()),
|
|
(state) => state.get('statuses'),
|
|
(state) => state.getIn(['meta', 'me'])
|
|
], (columnSettings, statusIds, statuses, me) => 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 || statusForId.get('in_reply_to_account_id') === me);
|
|
}
|
|
|
|
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: getStatusIds(state, props),
|
|
isLoading: state.getIn(['timelines', props.type, 'isLoading'], true)
|
|
});
|
|
|
|
const mapDispatchToProps = (dispatch, { type, id }) => ({
|
|
|
|
@debounce(300, true)
|
|
onScrollToBottom () {
|
|
dispatch(scrollTopTimeline(type, false));
|
|
dispatch(expandTimeline(type, id));
|
|
},
|
|
|
|
@debounce(300, true)
|
|
onScrollToTop () {
|
|
dispatch(scrollTopTimeline(type, true));
|
|
},
|
|
|
|
@debounce(500)
|
|
onScroll () {
|
|
dispatch(scrollTopTimeline(type, false));
|
|
}
|
|
|
|
});
|
|
|
|
export default connect(mapStateToProps, mapDispatchToProps)(StatusList);
|