* PLT-1598 Slash command works in RHS * fix UserProfile in the reply for Slash Command * fix some problem about the system messages in RHS * system message in RHS isn't displayed as comment for root message * remove status indicator for system message in RHS * system message in RHS is colored to grey * system messages don't count as commented post * fix bug about cleaning draft in RHS * remove unnecessary function * implement new model for executing command
263 строки
7.2 KiB
JavaScript
263 строки
7.2 KiB
JavaScript
// Copyright (c) 2016 Mattermost, Inc. All Rights Reserved.
|
|
// See License.txt for license information.
|
|
|
|
import AppDispatcher from 'dispatcher/app_dispatcher.jsx';
|
|
|
|
import TeamStore from 'stores/team_store.jsx';
|
|
import UserStore from 'stores/user_store.jsx';
|
|
import ChannelStore from 'stores/channel_store.jsx';
|
|
import PreferenceStore from 'stores/preference_store.jsx';
|
|
|
|
import {loadProfilesAndTeamMembersForDMSidebar} from 'actions/user_actions.jsx';
|
|
|
|
import Client from 'client/web_client.jsx';
|
|
import * as AsyncClient from 'utils/async_client.jsx';
|
|
import * as UserAgent from 'utils/user_agent.jsx';
|
|
import * as Utils from 'utils/utils.jsx';
|
|
import {Preferences, ActionTypes} from 'utils/constants.jsx';
|
|
|
|
import {browserHistory} from 'react-router/es6';
|
|
|
|
export function goToChannel(channel) {
|
|
if (channel.fake) {
|
|
openDirectChannelToUser(
|
|
UserStore.getProfileByUsername(channel.display_name),
|
|
() => {
|
|
browserHistory.push(TeamStore.getCurrentTeamRelativeUrl() + '/channels/' + channel.name);
|
|
},
|
|
null
|
|
);
|
|
} else {
|
|
browserHistory.push(TeamStore.getCurrentTeamRelativeUrl() + '/channels/' + channel.name);
|
|
}
|
|
}
|
|
|
|
export function executeCommand(message, args, success, error) {
|
|
let msg = message;
|
|
|
|
msg = msg.substring(0, msg.indexOf(' ')).toLowerCase() + msg.substring(msg.indexOf(' '), msg.length);
|
|
|
|
if (message.indexOf('/shortcuts') !== -1) {
|
|
if (UserAgent.isMobile()) {
|
|
const err = {message: Utils.localizeMessage('create_post.shortcutsNotSupported', 'Keyboard shortcuts are not supported on your device')};
|
|
error(err);
|
|
return;
|
|
} else if (Utils.isMac()) {
|
|
msg += ' mac';
|
|
} else if (message.indexOf('mac') !== -1) {
|
|
msg = '/shortcuts';
|
|
}
|
|
}
|
|
Client.executeCommand(msg, args, success, error);
|
|
}
|
|
|
|
export function setChannelAsRead(channelIdParam) {
|
|
const channelId = channelIdParam || ChannelStore.getCurrentId();
|
|
AsyncClient.updateLastViewedAt();
|
|
ChannelStore.resetCounts(channelId);
|
|
ChannelStore.emitChange();
|
|
if (channelId === ChannelStore.getCurrentId()) {
|
|
ChannelStore.emitLastViewed(Number.MAX_VALUE, false);
|
|
}
|
|
}
|
|
|
|
export function addUserToChannel(channelId, userId, success, error) {
|
|
Client.addChannelMember(
|
|
channelId,
|
|
userId,
|
|
(data) => {
|
|
UserStore.removeProfileNotInChannel(channelId, userId);
|
|
const profile = UserStore.getProfile(userId);
|
|
if (profile) {
|
|
UserStore.saveProfileInChannel(channelId, profile);
|
|
UserStore.emitInChannelChange();
|
|
}
|
|
UserStore.emitNotInChannelChange();
|
|
|
|
if (success) {
|
|
success(data);
|
|
}
|
|
},
|
|
(err) => {
|
|
AsyncClient.dispatchError(err, 'addChannelMember');
|
|
|
|
if (error) {
|
|
error(err);
|
|
}
|
|
}
|
|
);
|
|
}
|
|
|
|
export function removeUserFromChannel(channelId, userId, success, error) {
|
|
Client.removeChannelMember(
|
|
channelId,
|
|
userId,
|
|
(data) => {
|
|
UserStore.removeProfileInChannel(channelId, userId);
|
|
const profile = UserStore.getProfile(userId);
|
|
if (profile) {
|
|
UserStore.saveProfileNotInChannel(channelId, profile);
|
|
UserStore.emitNotInChannelChange();
|
|
}
|
|
UserStore.emitInChannelChange();
|
|
|
|
if (success) {
|
|
success(data);
|
|
}
|
|
},
|
|
(err) => {
|
|
AsyncClient.dispatchError(err, 'removeChannelMember');
|
|
|
|
if (error) {
|
|
error(err);
|
|
}
|
|
}
|
|
);
|
|
}
|
|
|
|
export function openDirectChannelToUser(user, success, error) {
|
|
const channelName = Utils.getDirectChannelName(UserStore.getCurrentId(), user.id);
|
|
const channel = ChannelStore.getByName(channelName);
|
|
|
|
if (channel) {
|
|
PreferenceStore.setPreference(Preferences.CATEGORY_DIRECT_CHANNEL_SHOW, user.id, 'true');
|
|
loadProfilesAndTeamMembersForDMSidebar();
|
|
|
|
AsyncClient.savePreference(
|
|
Preferences.CATEGORY_DIRECT_CHANNEL_SHOW,
|
|
user.id,
|
|
'true'
|
|
);
|
|
|
|
if (success) {
|
|
success(channel, true);
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
Client.createDirectChannel(
|
|
user.id,
|
|
(data) => {
|
|
Client.getChannel(
|
|
data.id,
|
|
(data2) => {
|
|
AppDispatcher.handleServerAction({
|
|
type: ActionTypes.RECEIVED_CHANNEL,
|
|
channel: data2.channel,
|
|
member: data2.member
|
|
});
|
|
|
|
PreferenceStore.setPreference(Preferences.CATEGORY_DIRECT_CHANNEL_SHOW, user.id, 'true');
|
|
loadProfilesAndTeamMembersForDMSidebar();
|
|
|
|
AsyncClient.savePreference(
|
|
Preferences.CATEGORY_DIRECT_CHANNEL_SHOW,
|
|
user.id,
|
|
'true'
|
|
);
|
|
|
|
if (success) {
|
|
success(data2.channel, false);
|
|
}
|
|
}
|
|
);
|
|
},
|
|
() => {
|
|
browserHistory.push(TeamStore.getCurrentTeamUrl() + '/channels/' + channelName);
|
|
if (error) {
|
|
error();
|
|
}
|
|
}
|
|
);
|
|
}
|
|
|
|
export function markFavorite(channelId) {
|
|
AsyncClient.savePreference(Preferences.CATEGORY_FAVORITE_CHANNEL, channelId, 'true');
|
|
}
|
|
|
|
export function unmarkFavorite(channelId) {
|
|
const pref = {
|
|
user_id: UserStore.getCurrentId(),
|
|
category: Preferences.CATEGORY_FAVORITE_CHANNEL,
|
|
name: channelId
|
|
};
|
|
|
|
AsyncClient.deletePreferences([pref]);
|
|
}
|
|
|
|
export function loadChannelsForCurrentUser() {
|
|
AsyncClient.getChannels();
|
|
AsyncClient.getMyChannelMembers();
|
|
}
|
|
|
|
export function joinChannel(channel, success, error) {
|
|
Client.joinChannel(
|
|
channel.id,
|
|
() => {
|
|
ChannelStore.removeMoreChannel(channel.id);
|
|
|
|
if (success) {
|
|
success();
|
|
}
|
|
},
|
|
() => {
|
|
if (error) {
|
|
error();
|
|
}
|
|
}
|
|
);
|
|
}
|
|
|
|
export function updateChannel(channel, success, error) {
|
|
Client.updateChannel(
|
|
channel,
|
|
() => {
|
|
AsyncClient.getChannel(channel.id);
|
|
|
|
if (success) {
|
|
success();
|
|
}
|
|
},
|
|
(err) => {
|
|
if (error) {
|
|
error(err);
|
|
}
|
|
}
|
|
);
|
|
}
|
|
|
|
export function searchMoreChannels(term, success, error) {
|
|
Client.searchMoreChannels(
|
|
term,
|
|
(data) => {
|
|
if (success) {
|
|
success(data);
|
|
}
|
|
},
|
|
(err) => {
|
|
if (error) {
|
|
error(err);
|
|
}
|
|
}
|
|
);
|
|
}
|
|
|
|
export function autocompleteChannels(term, success, error) {
|
|
Client.autocompleteChannels(
|
|
term,
|
|
(data) => {
|
|
if (success) {
|
|
success(data);
|
|
}
|
|
},
|
|
(err) => {
|
|
AsyncClient.dispatchError(err, 'autocompleteChannels');
|
|
|
|
if (error) {
|
|
error(err);
|
|
}
|
|
}
|
|
);
|
|
}
|