Merge pull request #365 from mattermost/mm-1700
MM-1700 don't pull all channel data all the time
Этот коммит содержится в:
@@ -14,7 +14,7 @@ module.exports = React.createClass({
|
||||
Client.updateChannelDesc(data,
|
||||
function(data) {
|
||||
this.setState({ server_error: "" });
|
||||
AsyncClient.getChannels(true);
|
||||
AsyncClient.getChannel(this.state.channel_id);
|
||||
$(this.refs.modal.getDOMNode()).modal('hide');
|
||||
}.bind(this),
|
||||
function(err) {
|
||||
|
||||
@@ -1,34 +1,32 @@
|
||||
// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
|
||||
// See License.txt for license information.
|
||||
|
||||
|
||||
var utils = require('../utils/utils.jsx');
|
||||
var client = require('../utils/client.jsx');
|
||||
var asyncClient = require('../utils/async_client.jsx');
|
||||
var UserStore = require('../stores/user_store.jsx');
|
||||
var ChannelStore = require('../stores/channel_store.jsx');
|
||||
var LoadingScreen = require('./loading_screen.jsx');
|
||||
|
||||
function getStateFromStores() {
|
||||
return {
|
||||
channels: ChannelStore.getMoreAll(),
|
||||
server_error: null
|
||||
};
|
||||
return {
|
||||
channels: ChannelStore.getMoreAll(),
|
||||
serverError: null
|
||||
};
|
||||
}
|
||||
|
||||
module.exports = React.createClass({
|
||||
displayName: "MoreChannelsModal",
|
||||
displayName: 'MoreChannelsModal',
|
||||
|
||||
componentDidMount: function() {
|
||||
ChannelStore.addMoreChangeListener(this._onChange);
|
||||
$(this.refs.modal.getDOMNode()).on('shown.bs.modal', function (e) {
|
||||
$(this.refs.modal.getDOMNode()).on('shown.bs.modal', function shown() {
|
||||
asyncClient.getMoreChannels(true);
|
||||
});
|
||||
|
||||
var self = this;
|
||||
$(this.refs.modal.getDOMNode()).on('show.bs.modal', function(e) {
|
||||
$(this.refs.modal.getDOMNode()).on('show.bs.modal', function show(e) {
|
||||
var button = e.relatedTarget;
|
||||
self.setState({ channel_type: $(button).attr('data-channeltype') });
|
||||
self.setState({channelType: $(button).attr('data-channeltype')});
|
||||
});
|
||||
},
|
||||
componentWillUnmount: function() {
|
||||
@@ -42,18 +40,17 @@ module.exports = React.createClass({
|
||||
},
|
||||
getInitialState: function() {
|
||||
var initState = getStateFromStores();
|
||||
initState.channel_type = "";
|
||||
initState.channelType = '';
|
||||
return initState;
|
||||
},
|
||||
handleJoin: function(e) {
|
||||
var self = this;
|
||||
client.joinChannel(e,
|
||||
function(data) {
|
||||
$(self.refs.modal.getDOMNode()).modal('hide');
|
||||
asyncClient.getChannels(true);
|
||||
handleJoin: function(id) {
|
||||
client.joinChannel(id,
|
||||
function() {
|
||||
$(this.refs.modal.getDOMNode()).modal('hide');
|
||||
asyncClient.getChannel(id);
|
||||
}.bind(this),
|
||||
function(err) {
|
||||
this.state.server_error = err.message;
|
||||
this.state.serverError = err.message;
|
||||
this.setState(this.state);
|
||||
}.bind(this)
|
||||
);
|
||||
@@ -62,52 +59,66 @@ module.exports = React.createClass({
|
||||
$(this.refs.modal.getDOMNode()).modal('hide');
|
||||
},
|
||||
render: function() {
|
||||
var server_error = this.state.server_error ? <div className='form-group has-error'><label className='control-label'>{ this.state.server_error }</label></div> : null;
|
||||
var serverError;
|
||||
if (this.state.serverError) {
|
||||
serverError = <div className='form-group has-error'><label className='control-label'>{this.state.serverError}</label></div>;
|
||||
}
|
||||
|
||||
var outter = this;
|
||||
var moreChannels;
|
||||
|
||||
if (this.state.channels != null)
|
||||
moreChannels = this.state.channels;
|
||||
if (this.state.channels != null) {
|
||||
var channels = this.state.channels;
|
||||
if (!channels.loading) {
|
||||
if (channels.length) {
|
||||
moreChannels = (
|
||||
<table className='more-channel-table table'>
|
||||
<tbody>
|
||||
{channels.map(function cMap(channel) {
|
||||
return (
|
||||
<tr key={channel.id}>
|
||||
<td>
|
||||
<p className='more-channel-name'>{channel.display_name}</p>
|
||||
<p className='more-channel-description'>{channel.description}</p>
|
||||
</td>
|
||||
<td className='td--action'><button onClick={outter.handleJoin.bind(outter, channel.id)} className='btn btn-primary'>Join</button></td>
|
||||
</tr>
|
||||
);
|
||||
})}
|
||||
</tbody>
|
||||
</table>
|
||||
);
|
||||
} else {
|
||||
moreChannels = (
|
||||
<div className='no-channel-message'>
|
||||
<p className='primary-message'>No more channels to join</p>
|
||||
<p className='secondary-message'>Click 'Create New Channel' to make a new one</p>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
} else {
|
||||
moreChannels = <LoadingScreen />;
|
||||
}
|
||||
}
|
||||
|
||||
return (
|
||||
<div className="modal fade" id="more_channels" ref="modal" tabIndex="-1" role="dialog" aria-hidden="true">
|
||||
<div className="modal-dialog">
|
||||
<div className="modal-content">
|
||||
<div className="modal-header">
|
||||
<button type="button" className="close" data-dismiss="modal">
|
||||
<span aria-hidden="true">×</span>
|
||||
<span className="sr-only">Close</span>
|
||||
<div className='modal fade' id='more_channels' ref='modal' tabIndex='-1' role='dialog' aria-hidden='true'>
|
||||
<div className='modal-dialog'>
|
||||
<div className='modal-content'>
|
||||
<div className='modal-header'>
|
||||
<button type='button' className='close' data-dismiss='modal'>
|
||||
<span aria-hidden='true'>×</span>
|
||||
<span className='sr-only'>Close</span>
|
||||
</button>
|
||||
<h4 className="modal-title">More Channels</h4>
|
||||
<button data-toggle="modal" data-target="#new_channel" data-channeltype={this.state.channel_type} type="button" className="btn btn-primary channel-create-btn" onClick={this.handleNewChannel}>Create New Channel</button>
|
||||
<h4 className='modal-title'>More Channels</h4>
|
||||
<button data-toggle='modal' data-target='#new_channel' data-channeltype={this.state.channelType} type='button' className='btn btn-primary channel-create-btn' onClick={this.handleNewChannel}>Create New Channel</button>
|
||||
</div>
|
||||
<div className="modal-body">
|
||||
{!moreChannels.loading ?
|
||||
(moreChannels.length ?
|
||||
<table className="more-channel-table table">
|
||||
<tbody>
|
||||
{moreChannels.map(function(channel) {
|
||||
return (
|
||||
<tr key={channel.id}>
|
||||
<td>
|
||||
<p className="more-channel-name">{channel.display_name}</p>
|
||||
<p className="more-channel-description">{channel.description}</p>
|
||||
</td>
|
||||
<td className="td--action"><button onClick={outter.handleJoin.bind(outter, channel.id)} className="btn btn-primary">Join</button></td>
|
||||
</tr>
|
||||
)
|
||||
})}
|
||||
</tbody>
|
||||
</table>
|
||||
: <div className="no-channel-message">
|
||||
<p className="primary-message">No more channels to join</p>
|
||||
<p className="secondary-message">Click 'Create New Channel' to make a new one</p>
|
||||
</div>)
|
||||
: <LoadingScreen /> }
|
||||
{ server_error }
|
||||
<div className='modal-body'>
|
||||
{moreChannels}
|
||||
{serverError}
|
||||
</div>
|
||||
<div className="modal-footer">
|
||||
<button type="button" className="btn btn-default" data-dismiss="modal">Close</button>
|
||||
<div className='modal-footer'>
|
||||
<button type='button' className='btn btn-default' data-dismiss='modal'>Close</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -55,16 +55,16 @@ module.exports = React.createClass({
|
||||
channel.description = this.refs.channel_desc.getDOMNode().value.trim();
|
||||
channel.type = this.state.channelType;
|
||||
|
||||
var self = this;
|
||||
client.createChannel(channel,
|
||||
function() {
|
||||
function(data) {
|
||||
$(this.refs.modal.getDOMNode()).modal('hide');
|
||||
|
||||
asyncClient.getChannel(data.id);
|
||||
utils.switchChannel(data);
|
||||
|
||||
this.refs.display_name.getDOMNode().value = '';
|
||||
this.refs.channel_name.getDOMNode().value = '';
|
||||
this.refs.channel_desc.getDOMNode().value = '';
|
||||
|
||||
$(self.refs.modal.getDOMNode()).modal('hide');
|
||||
window.location = TeamStore.getCurrentTeamUrl() + '/channels/' + channel.name;
|
||||
asyncClient.getChannels(true);
|
||||
}.bind(this),
|
||||
function(err) {
|
||||
state.serverError = err.message;
|
||||
|
||||
@@ -63,12 +63,14 @@ module.exports = React.createClass({
|
||||
|
||||
Client.updateChannel(channel,
|
||||
function(data, text, req) {
|
||||
$(this.refs.modal.getDOMNode()).modal('hide');
|
||||
|
||||
AsyncClient.getChannel(channel.id);
|
||||
utils.updateTabTitle(channel.display_name);
|
||||
utils.updateAddressBar(channel.name);
|
||||
|
||||
this.refs.display_name.getDOMNode().value = "";
|
||||
this.refs.channel_name.getDOMNode().value = "";
|
||||
|
||||
$('#' + this.props.modalId).modal('hide');
|
||||
window.location.href = TeamStore.getCurrentTeamUrl() + '/channels/' + this.state.channel_name;
|
||||
AsyncClient.getChannels(true);
|
||||
}.bind(this),
|
||||
function(err) {
|
||||
state.server_error = err.message;
|
||||
|
||||
@@ -102,7 +102,7 @@ function getStateFromStores() {
|
||||
}
|
||||
readDirectChannels = readDirectChannels.slice(index);
|
||||
|
||||
showDirectChannels.sort(function(a, b) {
|
||||
showDirectChannels.sort(function directSort(a, b) {
|
||||
if (a.display_name < b.display_name) {
|
||||
return -1;
|
||||
}
|
||||
@@ -114,7 +114,7 @@ function getStateFromStores() {
|
||||
}
|
||||
|
||||
return {
|
||||
active_id: currentId,
|
||||
activeId: currentId,
|
||||
channels: ChannelStore.getAll(),
|
||||
members: members,
|
||||
showDirectChannels: showDirectChannels,
|
||||
@@ -157,9 +157,11 @@ module.exports = React.createClass({
|
||||
onSocketChange: function(msg) {
|
||||
if (msg.action === 'posted') {
|
||||
if (ChannelStore.getCurrentId() === msg.channel_id) {
|
||||
AsyncClient.getChannels(true, window.isActive);
|
||||
if (window.isActive) {
|
||||
AsyncClient.updateLastViewedAt();
|
||||
}
|
||||
} else {
|
||||
AsyncClient.getChannels(true);
|
||||
AsyncClient.getChannels();
|
||||
}
|
||||
|
||||
if (UserStore.getCurrentId() !== msg.user_id) {
|
||||
@@ -214,12 +216,12 @@ module.exports = React.createClass({
|
||||
}
|
||||
}
|
||||
} else if (msg.action === 'viewed') {
|
||||
if (ChannelStore.getCurrentId() != msg.channel_id) {
|
||||
AsyncClient.getChannels(true);
|
||||
if (ChannelStore.getCurrentId() !== msg.channel_id && UserStore.getCurrentId() === msg.user_id) {
|
||||
AsyncClient.getChannel(msg.channel_id);
|
||||
}
|
||||
} else if (msg.action === 'user_added') {
|
||||
if (UserStore.getCurrentId() === msg.user_id) {
|
||||
AsyncClient.getChannels(true);
|
||||
AsyncClient.getChannel(msg.channel_id);
|
||||
}
|
||||
} else if (msg.action === 'user_removed') {
|
||||
if (msg.user_id === UserStore.getCurrentId()) {
|
||||
@@ -282,7 +284,7 @@ module.exports = React.createClass({
|
||||
},
|
||||
render: function() {
|
||||
var members = this.state.members;
|
||||
var activeId = this.state.active_id;
|
||||
var activeId = this.state.activeId;
|
||||
var badgesActive = false;
|
||||
|
||||
// keep track of the first and last unread channels so we can use them to set the unread indicators
|
||||
@@ -294,7 +296,7 @@ module.exports = React.createClass({
|
||||
var channelMember = members[channel.id];
|
||||
|
||||
var linkClass = '';
|
||||
if (channel.id === self.state.active_id) {
|
||||
if (channel.id === activeId) {
|
||||
linkClass = 'active';
|
||||
}
|
||||
|
||||
|
||||
Ссылка в новой задаче
Block a user