diff --git a/lib/selectors/calendar-filter-selectors.js b/lib/selectors/calendar-filter-selectors.js --- a/lib/selectors/calendar-filter-selectors.js +++ b/lib/selectors/calendar-filter-selectors.js @@ -33,6 +33,30 @@ filteredThreadIDs, ); +function filteredCommunityThreadIDs( + calendarFilters: $ReadOnlyArray, +): ?Set { + let threadIDs = []; + let threadListFilterExists = false; + for (const filter of calendarFilters) { + if (filter.type === calendarThreadFilterTypes.COMMUNITY) { + threadListFilterExists = true; + threadIDs = [...threadIDs, ...filter.threadIDs]; + } + } + if (!threadListFilterExists) { + return null; + } + return new Set(threadIDs); +} + +const filteredCommunityThreadIDsSelector: ( + state: BaseAppState<*>, +) => ?$ReadOnlySet = createSelector( + (state: BaseAppState<*>) => state.calendarFilters, + filteredCommunityThreadIDs, +); + function filterFilters( calendarFilters: $ReadOnlyArray, filterTypeToExclude: CalendarThreadFilterType, @@ -108,6 +132,8 @@ export { filteredThreadIDs, filteredThreadIDsSelector, + filteredCommunityThreadIDs, + filteredCommunityThreadIDsSelector, nonThreadCalendarFilters, nonThreadCalendarFiltersSelector, nonExcludeDeletedCalendarFilters, diff --git a/lib/selectors/thread-selectors.js b/lib/selectors/thread-selectors.js --- a/lib/selectors/thread-selectors.js +++ b/lib/selectors/thread-selectors.js @@ -41,6 +41,7 @@ import { dateString, dateFromString } from '../utils/date-utils'; import { values } from '../utils/objects'; import { + filteredCommunityThreadIDsSelector, filteredThreadIDsSelector, includeDeletedSelector, } from './calendar-filter-selectors'; @@ -96,16 +97,22 @@ state: BaseAppState<*>, ) => $ReadOnlyArray = createSelector( filteredThreadIDsSelector, + filteredCommunityThreadIDsSelector, canBeOnScreenThreadInfos, ( inputThreadIDs: ?$ReadOnlySet, + inputCommunityThreadIDs: ?$ReadOnlySet, threadInfos: $ReadOnlyArray, ) => { - const threadIDs = inputThreadIDs; - if (!threadIDs) { + if (!inputThreadIDs && !inputCommunityThreadIDs) { return threadInfos; } - return threadInfos.filter(threadInfo => threadIDs.has(threadInfo.id)); + return threadInfos.filter( + threadInfo => + (!inputThreadIDs || inputThreadIDs.has(threadInfo.id)) && + (!inputCommunityThreadIDs || + inputCommunityThreadIDs.has(threadInfo.id)), + ); }, );