// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved. // See License.txt for license information. import * as Utils from '../utils/utils.jsx'; import * as client from '../utils/client.jsx'; import * as AsyncClient from '../utils/async_client.jsx'; import ChannelStore from '../stores/channel_store.jsx'; import LoadingScreen from './loading_screen.jsx'; import NewChannelFlow from './new_channel_flow.jsx'; import {FormattedMessage} from 'mm-intl'; function getStateFromStores() { return { channels: ChannelStore.getMoreAll(), serverError: null }; } export default class MoreChannels extends React.Component { constructor(props) { super(props); this.onListenerChange = this.onListenerChange.bind(this); this.handleJoin = this.handleJoin.bind(this); this.handleNewChannel = this.handleNewChannel.bind(this); this.createChannelRow = this.createChannelRow.bind(this); var initState = getStateFromStores(); initState.channelType = ''; initState.joiningChannel = -1; initState.showNewChannelModal = false; this.state = initState; } componentDidMount() { ChannelStore.addMoreChangeListener(this.onListenerChange); $(ReactDOM.findDOMNode(this.refs.modal)).on('shown.bs.modal', () => { AsyncClient.getMoreChannels(true); }); var self = this; $(ReactDOM.findDOMNode(this.refs.modal)).on('show.bs.modal', (e) => { var button = e.relatedTarget; self.setState({channelType: $(button).attr('data-channeltype')}); }); } componentWillUnmount() { ChannelStore.removeMoreChangeListener(this.onListenerChange); } onListenerChange() { var newState = getStateFromStores(); if (!Utils.areObjectsEqual(newState.channels, this.state.channels)) { this.setState(newState); } } handleJoin(channel, channelIndex) { this.setState({joiningChannel: channelIndex}); client.joinChannel(channel.id, () => { $(ReactDOM.findDOMNode(this.refs.modal)).modal('hide'); AsyncClient.getChannel(channel.id); Utils.switchChannel(channel); this.setState({joiningChannel: -1}); }, (err) => { this.setState({joiningChannel: -1, serverError: err.message}); } ); } handleNewChannel() { $(ReactDOM.findDOMNode(this.refs.modal)).modal('hide'); this.setState({showNewChannelModal: true}); } createChannelRow(channel, index) { let joinButton; if (this.state.joiningChannel === index) { joinButton = ( ); } else { joinButton = ( ); } return (
{channel.display_name}
{channel.purpose}