add helper method to initiate a direct channel chat
Этот коммит содержится в:
@@ -1,13 +1,7 @@
|
|||||||
// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
|
// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
|
||||||
// See License.txt for license information.
|
// See License.txt for license information.
|
||||||
|
|
||||||
const AsyncClient = require('../utils/async_client.jsx');
|
|
||||||
const ChannelStore = require('../stores/channel_store.jsx');
|
|
||||||
const Constants = require('../utils/constants.jsx');
|
|
||||||
const Client = require('../utils/client.jsx');
|
|
||||||
const Modal = ReactBootstrap.Modal;
|
const Modal = ReactBootstrap.Modal;
|
||||||
const PreferenceStore = require('../stores/preference_store.jsx');
|
|
||||||
const TeamStore = require('../stores/team_store.jsx');
|
|
||||||
const UserStore = require('../stores/user_store.jsx');
|
const UserStore = require('../stores/user_store.jsx');
|
||||||
const Utils = require('../utils/utils.jsx');
|
const Utils = require('../utils/utils.jsx');
|
||||||
|
|
||||||
@@ -70,52 +64,24 @@ export default class MoreDirectChannels extends React.Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
handleShowDirectChannel(teammate, e) {
|
handleShowDirectChannel(teammate, e) {
|
||||||
|
e.preventDefault();
|
||||||
|
|
||||||
if (this.state.loadingDMChannel !== -1) {
|
if (this.state.loadingDMChannel !== -1) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
e.preventDefault();
|
this.setState({loadingDMChannel: teammate.id});
|
||||||
|
Utils.openDirectChannelToUser(
|
||||||
const channelName = Utils.getDirectChannelName(UserStore.getCurrentId(), teammate.id);
|
teammate,
|
||||||
let channel = ChannelStore.getByName(channelName);
|
(channel) => {
|
||||||
|
Utils.switchChannel(channel);
|
||||||
const preference = PreferenceStore.setPreference(Constants.Preferences.CATEGORY_DIRECT_CHANNEL_SHOW, teammate.id, 'true');
|
this.setState({loadingDMChannel: -1});
|
||||||
AsyncClient.savePreferences([preference]);
|
this.handleHide();
|
||||||
|
},
|
||||||
if (channel) {
|
() => {
|
||||||
Utils.switchChannel(channel);
|
this.setState({loadingDMChannel: -1});
|
||||||
|
}
|
||||||
this.handleHide();
|
);
|
||||||
} else {
|
|
||||||
this.setState({loadingDMChannel: teammate.id});
|
|
||||||
|
|
||||||
channel = {
|
|
||||||
name: channelName,
|
|
||||||
last_post_at: 0,
|
|
||||||
total_msg_count: 0,
|
|
||||||
type: 'D',
|
|
||||||
display_name: teammate.username,
|
|
||||||
teammate_id: teammate.id,
|
|
||||||
status: UserStore.getStatus(teammate.id)
|
|
||||||
};
|
|
||||||
|
|
||||||
Client.createDirectChannel(
|
|
||||||
channel,
|
|
||||||
teammate.id,
|
|
||||||
(data) => {
|
|
||||||
this.setState({loadingDMChannel: -1});
|
|
||||||
|
|
||||||
AsyncClient.getChannel(data.id);
|
|
||||||
Utils.switchChannel(data);
|
|
||||||
|
|
||||||
this.handleHide();
|
|
||||||
},
|
|
||||||
() => {
|
|
||||||
this.setState({loadingDMChannel: -1});
|
|
||||||
window.location.href = TeamStore.getCurrentTeamUrl() + '/channels/' + channelName;
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
handleUserChange() {
|
handleUserChange() {
|
||||||
|
|||||||
@@ -7,12 +7,6 @@ var Overlay = ReactBootstrap.Overlay;
|
|||||||
const Utils = require('../utils/utils.jsx');
|
const Utils = require('../utils/utils.jsx');
|
||||||
|
|
||||||
const ChannelStore = require('../stores/channel_store.jsx');
|
const ChannelStore = require('../stores/channel_store.jsx');
|
||||||
const AsyncClient = require('../utils/async_client.jsx');
|
|
||||||
const PreferenceStore = require('../stores/preference_store.jsx');
|
|
||||||
const Client = require('../utils/client.jsx');
|
|
||||||
const TeamStore = require('../stores/team_store.jsx');
|
|
||||||
|
|
||||||
const Constants = require('../utils/constants.jsx');
|
|
||||||
|
|
||||||
export default class PopoverListMembers extends React.Component {
|
export default class PopoverListMembers extends React.Component {
|
||||||
constructor(props) {
|
constructor(props) {
|
||||||
@@ -51,41 +45,18 @@ export default class PopoverListMembers extends React.Component {
|
|||||||
handleShowDirectChannel(teammate, e) {
|
handleShowDirectChannel(teammate, e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
|
|
||||||
const channelName = Utils.getDirectChannelName(UserStore.getCurrentId(), teammate.id);
|
Utils.openDirectChannelToUser(
|
||||||
let channel = ChannelStore.getByName(channelName);
|
teammate,
|
||||||
|
(channel, channelAlreadyExisted) => {
|
||||||
const preference = PreferenceStore.setPreference(Constants.Preferences.CATEGORY_DIRECT_CHANNEL_SHOW, teammate.id, 'true');
|
Utils.switchChannel(channel);
|
||||||
AsyncClient.savePreferences([preference]);
|
if (channelAlreadyExisted) {
|
||||||
|
|
||||||
if (channel) {
|
|
||||||
Utils.switchChannel(channel);
|
|
||||||
this.closePopover();
|
|
||||||
} else {
|
|
||||||
channel = {
|
|
||||||
name: channelName,
|
|
||||||
last_post_at: 0,
|
|
||||||
total_msg_count: 0,
|
|
||||||
type: 'D',
|
|
||||||
display_name: teammate.username,
|
|
||||||
teammate_id: teammate.id,
|
|
||||||
status: UserStore.getStatus(teammate.id)
|
|
||||||
};
|
|
||||||
|
|
||||||
Client.createDirectChannel(
|
|
||||||
channel,
|
|
||||||
teammate.id,
|
|
||||||
(data) => {
|
|
||||||
AsyncClient.getChannel(data.id);
|
|
||||||
Utils.switchChannel(data);
|
|
||||||
|
|
||||||
this.closePopover();
|
|
||||||
},
|
|
||||||
() => {
|
|
||||||
window.location.href = TeamStore.getCurrentTeamUrl() + '/channels/' + channelName;
|
|
||||||
this.closePopover();
|
this.closePopover();
|
||||||
}
|
}
|
||||||
);
|
},
|
||||||
}
|
() => {
|
||||||
|
this.closePopover();
|
||||||
|
}
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
closePopover() {
|
closePopover() {
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ var PreferenceStore = require('../stores/preference_store.jsx');
|
|||||||
var TeamStore = require('../stores/team_store.jsx');
|
var TeamStore = require('../stores/team_store.jsx');
|
||||||
var Constants = require('../utils/constants.jsx');
|
var Constants = require('../utils/constants.jsx');
|
||||||
var ActionTypes = Constants.ActionTypes;
|
var ActionTypes = Constants.ActionTypes;
|
||||||
|
var Client = require('./client.jsx');
|
||||||
var AsyncClient = require('./async_client.jsx');
|
var AsyncClient = require('./async_client.jsx');
|
||||||
var client = require('./client.jsx');
|
var client = require('./client.jsx');
|
||||||
var Autolinker = require('autolinker');
|
var Autolinker = require('autolinker');
|
||||||
@@ -1009,3 +1010,44 @@ export function windowWidth() {
|
|||||||
export function windowHeight() {
|
export function windowHeight() {
|
||||||
return $(window).height();
|
return $(window).height();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function openDirectChannelToUser(user, successCb, errorCb) {
|
||||||
|
const channelName = this.getDirectChannelName(UserStore.getCurrentId(), user.id);
|
||||||
|
let channel = ChannelStore.getByName(channelName);
|
||||||
|
|
||||||
|
const preference = PreferenceStore.setPreference(Constants.Preferences.CATEGORY_DIRECT_CHANNEL_SHOW, user.id, 'true');
|
||||||
|
AsyncClient.savePreferences([preference]);
|
||||||
|
|
||||||
|
if (channel) {
|
||||||
|
if ($.isFunction(successCb)) {
|
||||||
|
successCb(channel, true);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
channel = {
|
||||||
|
name: channelName,
|
||||||
|
last_post_at: 0,
|
||||||
|
total_msg_count: 0,
|
||||||
|
type: 'D',
|
||||||
|
display_name: user.username,
|
||||||
|
teammate_id: user.id,
|
||||||
|
status: UserStore.getStatus(user.id)
|
||||||
|
};
|
||||||
|
|
||||||
|
Client.createDirectChannel(
|
||||||
|
channel,
|
||||||
|
user.id,
|
||||||
|
(data) => {
|
||||||
|
AsyncClient.getChannel(data.id);
|
||||||
|
if ($.isFunction(successCb)) {
|
||||||
|
successCb(data, false);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
() => {
|
||||||
|
window.location.href = TeamStore.getCurrentTeamUrl() + '/channels/' + channelName;
|
||||||
|
if ($.isFunction(errorCb)) {
|
||||||
|
errorCb();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user