From bede1d9f099cda5845e65a0879bf4b963170a5a1 Mon Sep 17 00:00:00 2001 From: Mary Kate Date: Thu, 13 Aug 2020 21:46:52 -0500 Subject: [PATCH] try filtering in the reducer but it still sucks --- app/soapbox/reducers/timelines.js | 36 +++++++++++++++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/app/soapbox/reducers/timelines.js b/app/soapbox/reducers/timelines.js index b134742ba..104f335a4 100644 --- a/app/soapbox/reducers/timelines.js +++ b/app/soapbox/reducers/timelines.js @@ -20,6 +20,9 @@ import { import { Map as ImmutableMap, List as ImmutableList, fromJS } from 'immutable'; import compareId from '../compare_id'; import { GROUP_REMOVE_STATUS_SUCCESS } from '../actions/groups'; +import { createSelector } from 'reselect'; +import { getSettings } from 'soapbox/actions/settings'; + const initialState = ImmutableMap(); @@ -86,8 +89,37 @@ const updateTimeline = (state, timeline, status) => { const updateTimelineQueue = (state, timeline, status) => { const queuedStatuses = state.getIn([timeline, 'queuedItems'], ImmutableList()); + + const filteredQueuedStatuses = () => createSelector([ + (state, timeline) => getSettings(state).get(timeline, ImmutableMap()), + (state, timeline) => state.getIn([timeline, 'queuedItems'], ImmutableList()), + (state) => state.get('statuses'), + (state) => state.get('me'), + ], (columnSettings, queuedStatuses, statuses, me) => { + return queuedStatuses.filter(id => { + if (id === null) return true; + + 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(['shows', 'direct']) === false) { + showStatus = showStatus && (statusForId.get('visibility') !== 'direct'); + } + + return showStatus; + }); + }); + const listedStatuses = state.getIn([timeline, 'items'], ImmutableList()); - const totalQueuedItemsCount = state.getIn([timeline, 'totalQueuedItemsCount'], 0); + const totalQueuedItemsCount = filteredQueuedStatuses.length; let alreadyExists = queuedStatuses.find(existingQueuedStatus => existingQueuedStatus.get('id') === status.get('id')); if (!alreadyExists) alreadyExists = listedStatuses.find(existingListedStatusId => existingListedStatusId === status.get('id')); @@ -96,7 +128,7 @@ const updateTimelineQueue = (state, timeline, status) => { return state; } - let newQueuedStatuses = queuedStatuses; + let newQueuedStatuses = filteredQueuedStatuses; return state.update(timeline, initialTimeline, map => map.withMutations(mMap => { if (totalQueuedItemsCount <= MAX_QUEUED_ITEMS) {