// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
import {Modal} from 'react-bootstrap';
import FilteredUserList from './filtered_user_list.jsx';
import UserStore from 'stores/user_store.jsx';
import TeamStore from 'stores/team_store.jsx';
import * as Utils from 'utils/utils.jsx';
import * as GlobalActions from 'action_creators/global_actions.jsx';
import {FormattedMessage} from 'react-intl';
import {browserHistory} from 'react-router';
import SpinnerButton from 'components/spinner_button.jsx';
import LoadingScreen from 'components/loading_screen.jsx';
import React from 'react';
export default class MoreDirectChannels extends React.Component {
constructor(props) {
super(props);
this.handleHide = this.handleHide.bind(this);
this.handleOnEnter = this.handleOnEnter.bind(this);
this.handleShowDirectChannel = this.handleShowDirectChannel.bind(this);
this.handleUserChange = this.handleUserChange.bind(this);
this.onTeamChange = this.onTeamChange.bind(this);
this.createJoinDirectChannelButton = this.createJoinDirectChannelButton.bind(this);
this.state = {
users: null,
teamMembers: null,
loadingDMChannel: -1
};
}
componentDidMount() {
UserStore.addDmListChangeListener(this.handleUserChange);
TeamStore.addChangeListener(this.onTeamChange);
}
componentWillUnmount() {
UserStore.removeDmListChangeListener(this.handleUserChange);
TeamStore.removeChangeListener(this.onTeamChange);
}
shouldComponentUpdate(nextProps, nextState) {
if (nextProps.show !== this.props.show) {
return true;
}
if (nextProps.onModalDismissed.toString() !== this.props.onModalDismissed.toString()) {
return true;
}
if (nextState.loadingDMChannel !== this.state.loadingDMChannel) {
return true;
}
if (!Utils.areObjectsEqual(nextState.users, this.state.users)) {
return true;
}
if (!Utils.areObjectsEqual(nextState.teamMembers, this.state.teamMembers)) {
return true;
}
return false;
}
handleHide() {
if (this.props.onModalDismissed) {
this.props.onModalDismissed();
}
}
handleOnEnter() {
this.setState({
users: null,
teamMembers: null
});
}
handleOnEntered() {
GlobalActions.emitProfilesForDmList();
}
handleShowDirectChannel(teammate, e) {
e.preventDefault();
if (this.state.loadingDMChannel !== -1) {
return;
}
this.setState({loadingDMChannel: teammate.id});
Utils.openDirectChannelToUser(
teammate,
(channel) => {
browserHistory.push(Utils.getTeamURLNoOriginFromAddressBar() + '/channels/' + channel.name);
this.setState({loadingDMChannel: -1});
this.handleHide();
},
() => {
this.setState({loadingDMChannel: -1});
}
);
}
handleUserChange() {
this.setState({
users: UserStore.getProfilesForDmList()
});
}
onTeamChange() {
this.setState({
teamMembers: TeamStore.getMembersForTeam()
});
}
createJoinDirectChannelButton({user}) {
return (
);
}
render() {
let maxHeight = 1000;
if (Utils.windowHeight() <= 1200) {
maxHeight = Utils.windowHeight() - 300;
}
var body = null;
if (this.state.users == null || this.state.teamMembers == null) {
body = ();
} else {
var showTeamToggle = false;
if (global.window.mm_config.RestrictDirectMessage === 'any') {
showTeamToggle = true;
}
body = (
);
}
return (
{body}
);
}
}
MoreDirectChannels.propTypes = {
show: React.PropTypes.bool.isRequired,
onModalDismissed: React.PropTypes.func
};