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
Этот коммит содержится в:
коммит произвёл
Christopher Speller
родитель
8e810bc2eb
Коммит
caabfbcdd5
@@ -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();
|
||||
}
|
||||
Ссылка в новой задаче
Block a user