PLT-2992 Added the ability to use different themes for each team (#3411)

* Cleaned up user_settings_theme.jsx and import_theme_modal.jsx

* Made ImportThemeModal use a callback to return the theme to the user settings modal instead of saving it directly

* Moved user theme from model to preferences

* Added serverside API to delete preferences TODO update package with client stuff

* Changed constants.jsx so that Preferences and ActionTypes can be imported on their own

* Updated ThemeProps migration code to properly rename solarized code themes

* Fixed warnings thrown by AppDispatcher

* Added clientside UI to support team-specific themes

* Removed debugging code from test

* Fixed setting a user's theme when they haven't set their theme before
Этот коммит содержится в:
Harrison Healey
2016-07-14 10:08:36 -04:00
коммит произвёл Christopher Speller
родитель 8e810bc2eb
Коммит caabfbcdd5
23 изменённых файлов: 671 добавлений и 273 удалений

Просмотреть файл

@@ -1,10 +1,15 @@
// Copyright (c) 2016 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
import Client from 'utils/web_client.jsx';
import AppDispatcher from 'dispatcher/app_dispatcher.jsx';
import * as AsyncClient from 'utils/async_client.jsx';
import Client from 'utils/web_client.jsx';
import PreferenceStore from 'stores/preference_store.jsx';
import TeamStore from 'stores/team_store.jsx';
import UserStore from 'stores/user_store.jsx';
import {ActionTypes, Preferences} from 'utils/constants.jsx';
export function switchFromLdapToEmail(email, password, ldapPassword, onSuccess, onError) {
Client.ldapToEmail(
@@ -28,3 +33,52 @@ export function getMoreDmList() {
AsyncClient.getProfilesForDirectMessageList();
AsyncClient.getTeamMembers(TeamStore.getCurrentId());
}
export function saveTheme(teamId, theme, onSuccess, onError) {
AsyncClient.savePreference(
Preferences.CATEGORY_THEME,
teamId,
JSON.stringify(theme),
() => {
onThemeSaved(teamId, theme, onSuccess);
},
(err) => {
onError(err);
}
);
}
function onThemeSaved(teamId, theme, onSuccess) {
const themePreferences = PreferenceStore.getCategory(Preferences.CATEGORY_THEME);
if (teamId !== '' && themePreferences.size > 1) {
// no extra handling to be done to delete team-specific themes
onSuccess();
return;
}
const toDelete = [];
for (const [name] of themePreferences) {
if (name === '') {
continue;
}
toDelete.push({
user_id: UserStore.getCurrentId(),
category: Preferences.CATEGORY_THEME,
name
});
}
// we're saving a new global theme so delete any team-specific ones
AsyncClient.deletePreferences(toDelete);
// delete them locally before we hear from the server so that the UI flow is smoother
AppDispatcher.handleServerAction({
type: ActionTypes.DELETED_PREFERENCES,
preferences: toDelete
});
onSuccess();
}