diff --git a/app/javascript/mastodon/selectors/settings.ts b/app/javascript/mastodon/selectors/settings.ts index 93276c669..e722ad091 100644 --- a/app/javascript/mastodon/selectors/settings.ts +++ b/app/javascript/mastodon/selectors/settings.ts @@ -1,17 +1,27 @@ +import { createSelector } from '@reduxjs/toolkit'; + import type { RootState } from 'mastodon/store'; /* eslint-disable @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access */ // state.settings is not yet typed, so we disable some ESLint checks for those selectors -export const selectSettingsNotificationsShows = (state: RootState) => - state.settings.getIn(['notifications', 'shows']).toJS() as Record< - string, - boolean - >; +export const selectSettingsNotificationsShows = createSelector( + [ + (state) => + state.settings.getIn(['notifications', 'shows']) as Immutable.Map< + string, + boolean + >, + ], + (shows) => shows.toJS() as Record, +); -export const selectSettingsNotificationsExcludedTypes = (state: RootState) => - Object.entries(selectSettingsNotificationsShows(state)) - .filter(([_type, enabled]) => !enabled) - .map(([type, _enabled]) => type); +export const selectSettingsNotificationsExcludedTypes = createSelector( + [selectSettingsNotificationsShows], + (shows) => + Object.entries(shows) + .filter(([_type, enabled]) => !enabled) + .map(([type, _enabled]) => type), +); export const selectSettingsNotificationsQuickFilterShow = (state: RootState) => state.settings.getIn(['notifications', 'quickFilter', 'show']) as boolean;