// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved. // See License.txt for license information. import React from 'react'; import Constants from 'utils/constants.jsx'; import ChannelStore from 'stores/channel_store.jsx'; import * as Utils from 'utils/utils.jsx'; import {sortChannelsByDisplayName} from 'utils/channel_utils.jsx'; export default class ChannelSelect extends React.Component { static get propTypes() { return { onChange: React.PropTypes.func, value: React.PropTypes.string, selectOpen: React.PropTypes.bool.isRequired, selectPrivate: React.PropTypes.bool.isRequired, selectDm: React.PropTypes.bool.isRequired }; } static get defaultProps() { return { selectOpen: false, selectPrivate: false, selectDm: false }; } constructor(props) { super(props); this.handleChannelChange = this.handleChannelChange.bind(this); this.filterChannels = this.filterChannels.bind(this); this.state = { channels: ChannelStore.getAll().filter(this.filterChannels).sort(sortChannelsByDisplayName) }; } componentDidMount() { ChannelStore.addChangeListener(this.handleChannelChange); } componentWillUnmount() { ChannelStore.removeChangeListener(this.handleChannelChange); } handleChannelChange() { this.setState({ channels: ChannelStore.getAll(). filter(this.filterChannels).sort(sortChannelsByDisplayName) }); } filterChannels(channel) { if (channel.display_name) { return true; } return false; } render() { const options = [ ]; this.state.channels.forEach((channel) => { if (channel.type === Constants.OPEN_CHANNEL && this.props.selectOpen) { options.push( ); } else if (channel.type === Constants.PRIVATE_CHANNEL && this.props.selectPrivate) { options.push( ); } else if (channel.type === Constants.DM_CHANNEL && this.props.selectDm) { options.push( ); } }); return ( ); } }