// 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 ChannelStore = require('../stores/channel_store.jsx'); var LoadingScreen = require('./loading_screen.jsx'); var NewChannelFlow = require('./new_channel_flow.jsx'); 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); var initState = getStateFromStores(); initState.channelType = ''; initState.joiningChannel = -1; initState.showNewChannelModal = false; this.state = initState; } componentDidMount() { ChannelStore.addMoreChangeListener(this.onListenerChange); $(React.findDOMNode(this.refs.modal)).on('shown.bs.modal', function shown() { asyncClient.getMoreChannels(true); }); var self = this; $(React.findDOMNode(this.refs.modal)).on('show.bs.modal', function show(e) { var button = e.relatedTarget; self.setState({channelType: $(button).attr('data-channeltype')}); }); } componentWillUnmount() { ChannelStore.removeMoreChangeListener(this.onListenerChange); } onListenerChange() { var newState = getStateFromStores(); if (!utils.areStatesEqual(newState.channels, this.state.channels)) { this.setState(newState); } } handleJoin(channel, channelIndex) { this.setState({joiningChannel: channelIndex}); client.joinChannel(channel.id, function joinSuccess() { $(React.findDOMNode(this.refs.modal)).modal('hide'); asyncClient.getChannel(channel.id); utils.switchChannel(channel); this.setState({joiningChannel: -1}); }.bind(this), function joinFail(err) { this.setState({joiningChannel: -1}); this.state.serverError = err.message; this.setState(this.state); }.bind(this) ); } handleNewChannel() { $(React.findDOMNode(this.refs.modal)).modal('hide'); this.setState({showNewChannelModal: true}); } render() { var serverError; if (this.state.serverError) { serverError =
; } var self = this; var moreChannels; if (this.state.channels != null) { var channels = this.state.channels; if (!channels.loading) { if (channels.length) { moreChannels = (
{channel.display_name} {channel.description} |
{joinButton} |
No more channels to join
Click 'Create New Channel' to make a new one