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 = createSelector( [ (state) => state.settings.getIn(['notifications', 'shows']) as Immutable.Map< string, boolean >, ], (shows) => shows.toJS() as Record, ); export const selectSettingsNotificationsExcludedTypes = createSelector( [selectSettingsNotificationsShows], (shows) => { const excludedTypes: string[] = []; for (const key in shows) { if (!shows[key]) { if (key === 'collections') { excludedTypes.push('collection_update', 'added_to_collection'); } else { excludedTypes.push(key); } } } return excludedTypes; }, ); export const selectSettingsNotificationsQuickFilterShow = (state: RootState) => state.settings.getIn(['notifications', 'quickFilter', 'show']) as boolean; export const selectSettingsNotificationsQuickFilterActive = ( state: RootState, ) => state.settings.getIn(['notifications', 'quickFilter', 'active']) as string; export const selectSettingsNotificationsQuickFilterAdvanced = ( state: RootState, ) => state.settings.getIn(['notifications', 'quickFilter', 'advanced']) as boolean; export const selectSettingsNotificationsShowUnread = (state: RootState) => state.settings.getIn(['notifications', 'showUnread']) as boolean; export const selectNeedsNotificationPermission = (state: RootState) => (state.settings.getIn(['notifications', 'alerts']).includes(true) && state.notifications.get('browserSupport') && state.notifications.get('browserPermission') === 'default' && !state.settings.getIn([ 'notifications', 'dismissPermissionBanner', ])) as boolean; export const selectSettingsNotificationsMinimizeFilteredBanner = ( state: RootState, ) => state.settings.getIn(['notifications', 'minimizeFilteredBanner']) as boolean; export const selectSettingsNotificationsGroupFollows = (state: RootState) => state.settings.getIn(['notifications', 'group', 'follow']) as boolean; /* eslint-enable @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access */