about summary refs log tree commit diff
path: root/app/assets/javascripts/components/features/ui/containers/status_list_container.jsx
blob: 7b893711c1534770b02d611fe3beb706db65c9c2 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
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: getStatusIds(state, props)
});

const mapDispatchToProps = (dispatch, { type, id }) => ({

  onScrollToBottom () {
    dispatch(scrollTopTimeline(type, false));
    dispatch(expandTimeline(type, id));
  },

  onScrollToTop () {
    dispatch(scrollTopTimeline(type, true));
  },

  onScroll () {
    dispatch(scrollTopTimeline(type, false));
  }

});

export default connect(mapStateToProps, mapDispatchToProps)(StatusList);