diff --git a/keyserver/src/responders/website-responders.js b/keyserver/src/responders/website-responders.js --- a/keyserver/src/responders/website-responders.js +++ b/keyserver/src/responders/website-responders.js @@ -177,6 +177,10 @@ 'defaultCalendarFilters', _isEqual(defaultCalendarFilters), ), + communityPickerStore: t.irreducible( + 'default communityPickerStore', + _isEqual({ chat: null, calendar: null }), + ), urlPrefix: tString(''), windowDimensions: t.irreducible( 'default windowDimensions', @@ -496,6 +500,7 @@ updatesCurrentAsOf: currentAsOfPromise, loadingStatuses: {}, calendarFilters: defaultCalendarFilters, + communityPickerStore: { chat: null, calendar: null }, // We can use paths local to the on web urlPrefix: '', windowDimensions: { width: 0, height: 0 }, diff --git a/web/redux/redux-setup.js b/web/redux/redux-setup.js --- a/web/redux/redux-setup.js +++ b/web/redux/redux-setup.js @@ -63,6 +63,11 @@ export type WindowDimensions = { width: number, height: number }; +export type CommunityPickerStore = { + +chat: ?string, + +calendar: ?string, +}; + export type AppState = { navInfo: NavInfo, deviceID: ?string, @@ -76,7 +81,7 @@ updatesCurrentAsOf: number, loadingStatuses: { [key: string]: { [idx: number]: LoadingStatus } }, calendarFilters: $ReadOnlyArray, - calendarPickedCommunityID: ?string, + communityPickerStore: CommunityPickerStore, urlPrefix: string, windowDimensions: WindowDimensions, cookie?: void, @@ -158,14 +163,20 @@ threadIDs, }, ], - calendarPickedCommunityID: action.payload, + communityPickerStore: { + ...state.communityPickerStore, + calendar: action.payload, + }, }; } else if (action.type === clearCalendarCommunityFilter) { const nonThreadFilters = nonThreadCalendarFilters(state.calendarFilters); return { ...state, calendarFilters: nonThreadFilters, - calendarPickedCommunityID: null, + communityPickerStore: { + ...state.communityPickerStore, + calendar: null, + }, }; } else if (action.type === setNewSessionActionType) { if ( diff --git a/web/selectors/calendar-selectors.js b/web/selectors/calendar-selectors.js --- a/web/selectors/calendar-selectors.js +++ b/web/selectors/calendar-selectors.js @@ -44,7 +44,7 @@ const filterThreadIDsBelongingToCommunitySelector: ( state: AppState, ) => ?$ReadOnlySet = createSelector( - (state: AppState) => state.calendarPickedCommunityID, + (state: AppState) => state.communityPickerStore.calendar, threadInfoSelector, ( calendarPickedCommunityID: ?string, @@ -60,9 +60,9 @@ }, ); -function useCommunityIsPicked(communityID: string): boolean { +function useCommunityIsPickedCalendar(communityID: string): boolean { const calendarPickedCommunityID = useSelector( - state => state.calendarPickedCommunityID, + state => state.communityPickerStore.calendar, ); return communityID === calendarPickedCommunityID; } @@ -72,5 +72,5 @@ useFilterThreadSearchIndex, filterThreadIDsBelongingToCommunitySelector, filterThreadIDsBelongingToCommunity, - useCommunityIsPicked, + useCommunityIsPickedCalendar, }; diff --git a/web/selectors/thread-selectors.js b/web/selectors/thread-selectors.js --- a/web/selectors/thread-selectors.js +++ b/web/selectors/thread-selectors.js @@ -113,7 +113,7 @@ state => state.navInfo.activeChatThreadID, ); const pickedCommunityID = useSelector( - state => state.calendarPickedCommunityID, + state => state.communityPickerStore.calendar, ); const inCalendar = useSelector(state => state.navInfo.tab === 'calendar'); diff --git a/web/sidebar/community-drawer-item-handlers.react.js b/web/sidebar/community-drawer-item-handlers.react.js --- a/web/sidebar/community-drawer-item-handlers.react.js +++ b/web/sidebar/community-drawer-item-handlers.react.js @@ -7,7 +7,7 @@ import type { CommunityDrawerItemHandler } from './community-drawer-item-handler.react.js'; import { updateCalendarCommunityFilter } from '../redux/action-types.js'; -import { useCommunityIsPicked } from '../selectors/calendar-selectors.js'; +import { useCommunityIsPickedCalendar } from '../selectors/calendar-selectors.js'; import { useOnClickThread, useThreadIsActive, @@ -45,7 +45,7 @@ payload: threadInfo.id, }); }, [dispatch, threadInfo.id]); - const isActive = useCommunityIsPicked(threadInfo.id); + const isActive = useCommunityIsPickedCalendar(threadInfo.id); const handler = React.useMemo( () => ({ onClick, isActive }),