// Copyright (c) 2016-present Mattermost, Inc. All Rights Reserved. // See License.txt for license information. import {createSelector} from 'reselect'; import Config from 'assets/config.json'; import Themes from 'assets/themes.json'; import {Preferences} from 'mattermost-redux/constants'; import {getPreferenceKey} from 'mattermost-redux/utils/preference_utils'; import {getMyPreferences} from 'mattermost-redux/selectors/entities/preferences'; import {getCurrentTeamId} from 'mattermost-redux/selectors/entities/teams'; export const getTheme = createSelector( getMyPreferences, getCurrentTeamId, (myPreferences, currentTeamId) => { // Prefer the user's current team-specific theme over the user's current global theme over the default theme let themePreference; if (currentTeamId) { themePreference = myPreferences[getPreferenceKey(Preferences.CATEGORY_THEME, currentTeamId)]; } if (!themePreference) { themePreference = myPreferences[getPreferenceKey(Preferences.CATEGORY_THEME, '')]; } let theme; if (themePreference) { theme = themePreference.value; } else { theme = Config.DefaultTheme; } if (typeof theme === 'string') { try { // A custom theme will be a JSON-serialized object stored in a preference theme = JSON.parse(theme); } catch (e) { // But if it's not a JSON object, it must be the name of a default theme theme = Themes[theme]; } } // At this point, the theme should be a plain object return theme; } );