From 4353e1fb978b70966800049cbf62088a53ab6df4 Mon Sep 17 00:00:00 2001 From: David Lu Date: Thu, 26 May 2016 05:36:51 -0700 Subject: PLT-2989 Incoming webhooks available to all channels user is member of (#3082) * Removed OPEN_CHANNEL check * Added checks for each type of channel * Added all channels display Used onComponentUpdate, made code clearer * Made requested changes --- .../components/backstage/add_incoming_webhook.jsx | 2 + .../components/backstage/add_outgoing_webhook.jsx | 1 + webapp/components/channel_select.jsx | 51 ++++++++++++++++++---- 3 files changed, 45 insertions(+), 9 deletions(-) diff --git a/webapp/components/backstage/add_incoming_webhook.jsx b/webapp/components/backstage/add_incoming_webhook.jsx index 3d86fe7c0..f698f2b13 100644 --- a/webapp/components/backstage/add_incoming_webhook.jsx +++ b/webapp/components/backstage/add_incoming_webhook.jsx @@ -172,6 +172,8 @@ export default class AddIncomingWebhook extends React.Component { id='channelId' value={this.state.channelId} onChange={this.updateChannelId} + selectOpen={true} + selectPrivate={true} /> diff --git a/webapp/components/backstage/add_outgoing_webhook.jsx b/webapp/components/backstage/add_outgoing_webhook.jsx index 5f07217ab..2fefd5965 100644 --- a/webapp/components/backstage/add_outgoing_webhook.jsx +++ b/webapp/components/backstage/add_outgoing_webhook.jsx @@ -224,6 +224,7 @@ export default class AddOutgoingWebhook extends React.Component { id='channelId' value={this.state.channelId} onChange={this.updateChannelId} + selectOpen={true} /> diff --git a/webapp/components/channel_select.jsx b/webapp/components/channel_select.jsx index 238cfa1ae..59bf2f15a 100644 --- a/webapp/components/channel_select.jsx +++ b/webapp/components/channel_select.jsx @@ -6,12 +6,24 @@ 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 * as AsyncClient from 'utils/async_client.jsx'; export default class ChannelSelect extends React.Component { static get propTypes() { return { onChange: React.PropTypes.func, - value: React.PropTypes.string + 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 }; } @@ -19,17 +31,16 @@ export default class ChannelSelect extends React.Component { super(props); this.handleChannelChange = this.handleChannelChange.bind(this); + this.compareByDisplayName = this.compareByDisplayName.bind(this); + + AsyncClient.getMoreChannels(true); this.state = { - channels: [] + channels: ChannelStore.getAll().sort(this.compareByDisplayName) }; } - componentWillMount() { - this.setState({ - channels: ChannelStore.getAll() - }); - + componentDidMount() { ChannelStore.addChangeListener(this.handleChannelChange); } @@ -39,10 +50,14 @@ export default class ChannelSelect extends React.Component { handleChannelChange() { this.setState({ - channels: ChannelStore.getAll() + channels: ChannelStore.getAll().concat(ChannelStore.getMoreAll()).sort(this.compareByDisplayName) }); } + compareByDisplayName(channelA, channelB) { + return channelA.display_name.localeCompare(channelB.display_name); + } + render() { const options = [ + ); + } else if (channel.type === Constants.PRIVATE_CHANNEL && this.props.selectPrivate) { + options.push( + + ); + } else if (channel.type === Constants.DM_CHANNEL && this.props.selectDm) { options.push(