From aa684f0b8b81aa576997dd26fb077882651830fc Mon Sep 17 00:00:00 2001 From: Harrison Healey Date: Mon, 28 Mar 2016 15:19:59 -0400 Subject: Added ChannelSelect component --- .../components/backstage/add_incoming_webhook.jsx | 35 +++++----- .../components/backstage/add_outgoing_webhook.jsx | 50 ++++---------- webapp/components/channel_select.jsx | 79 ++++++++++++++++++++++ 3 files changed, 110 insertions(+), 54 deletions(-) create mode 100644 webapp/components/channel_select.jsx (limited to 'webapp/components') diff --git a/webapp/components/backstage/add_incoming_webhook.jsx b/webapp/components/backstage/add_incoming_webhook.jsx index 962792ed0..cb7828698 100644 --- a/webapp/components/backstage/add_incoming_webhook.jsx +++ b/webapp/components/backstage/add_incoming_webhook.jsx @@ -5,9 +5,9 @@ import React from 'react'; import * as AsyncClient from 'utils/async_client.jsx'; import {browserHistory} from 'react-router'; -import ChannelStore from 'stores/channel_store.jsx'; import TeamStore from 'stores/team_store.jsx'; +import ChannelSelect from 'components/channel_select.jsx'; import {FormattedMessage} from 'react-intl'; import FormError from 'components/form_error.jsx'; import {Link} from 'react-router'; @@ -22,13 +22,13 @@ export default class AddIncomingWebhook extends React.Component { this.updateName = this.updateName.bind(this); this.updateDescription = this.updateDescription.bind(this); - this.updateChannelName = this.updateChannelName.bind(this); + this.updateChannelId = this.updateChannelId.bind(this); this.state = { team: TeamStore.getCurrent(), name: '', description: '', - channelName: '', + channelId: '', saving: false, serverError: '', clientError: null @@ -62,15 +62,13 @@ export default class AddIncomingWebhook extends React.Component { clientError: '' }); - const channel = ChannelStore.getByName(this.state.channelName); - - if (!channel) { + if (!this.state.channelId) { this.setState({ saving: false, clientError: ( ) }); @@ -79,7 +77,7 @@ export default class AddIncomingWebhook extends React.Component { } const hook = { - channel_id: channel.id + channel_id: this.state.channelId }; AsyncClient.addIncomingHook( @@ -107,9 +105,9 @@ export default class AddIncomingWebhook extends React.Component { }); } - updateChannelName(e) { + updateChannelId(e) { this.setState({ - channelName: e.target.value + channelId: e.target.value }); } @@ -170,18 +168,17 @@ export default class AddIncomingWebhook extends React.Component {
-
diff --git a/webapp/components/backstage/add_outgoing_webhook.jsx b/webapp/components/backstage/add_outgoing_webhook.jsx index 6e2f749f8..808a7185d 100644 --- a/webapp/components/backstage/add_outgoing_webhook.jsx +++ b/webapp/components/backstage/add_outgoing_webhook.jsx @@ -5,9 +5,9 @@ import React from 'react'; import * as AsyncClient from 'utils/async_client.jsx'; import {browserHistory} from 'react-router'; -import ChannelStore from 'stores/channel_store.jsx'; import TeamStore from 'stores/team_store.jsx'; +import ChannelSelect from 'components/channel_select.jsx'; import {FormattedMessage} from 'react-intl'; import FormError from 'components/form_error.jsx'; import {Link} from 'react-router'; @@ -22,7 +22,7 @@ export default class AddOutgoingWebhook extends React.Component { this.updateName = this.updateName.bind(this); this.updateDescription = this.updateDescription.bind(this); - this.updateChannelName = this.updateChannelName.bind(this); + this.updateChannelId = this.updateChannelId.bind(this); this.updateTriggerWords = this.updateTriggerWords.bind(this); this.updateCallbackUrls = this.updateCallbackUrls.bind(this); @@ -30,7 +30,7 @@ export default class AddOutgoingWebhook extends React.Component { team: TeamStore.getCurrent(), name: '', description: '', - channelName: '', + channelId: '', triggerWords: '', callbackUrls: '', saving: false, @@ -66,32 +66,13 @@ export default class AddOutgoingWebhook extends React.Component { clientError: '' }); - let channelId = ''; - if (this.state.channelName) { - const channel = ChannelStore.getByName(this.state.channelName); - - if (!channel) { - this.setState({ - saving: false, - clientError: ( - - ) - }); - - return; - } - - channelId = channel.id; - } else if (!this.state.triggerWords) { + if (!this.state.channelId || !this.state.triggerWords) { this.setState({ saving: false, clientError: ( ) }); @@ -114,7 +95,7 @@ export default class AddOutgoingWebhook extends React.Component { } const hook = { - channel_id: channelId, + channel_id: this.state.channelId, trigger_words: this.state.triggerWords.split('\n').map((word) => word.trim()), callback_urls: this.state.callbackUrls.split('\n').map((url) => url.trim()) }; @@ -144,9 +125,9 @@ export default class AddOutgoingWebhook extends React.Component { }); } - updateChannelName(e) { + updateChannelId(e) { this.setState({ - channelName: e.target.value + channelId: e.target.value }); } @@ -219,18 +200,17 @@ export default class AddOutgoingWebhook extends React.Component {
-
diff --git a/webapp/components/channel_select.jsx b/webapp/components/channel_select.jsx new file mode 100644 index 000000000..b110b32da --- /dev/null +++ b/webapp/components/channel_select.jsx @@ -0,0 +1,79 @@ +// 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'; + +export default class ChannelSelect extends React.Component { + static get propTypes() { + return { + onChange: React.PropTypes.func, + value: React.PropTypes.string + }; + } + + constructor(props) { + super(props); + + this.handleChannelChange = this.handleChannelChange.bind(this); + + this.state = { + channels: [] + }; + } + + componentWillMount() { + this.setState({ + channels: ChannelStore.getAll() + }); + + ChannelStore.addChangeListener(this.handleChannelChange); + } + + componentWillUnmount() { + ChannelStore.removeChangeListener(this.handleChannelChange); + } + + handleChannelChange() { + this.setState({ + channels: ChannelStore.getAll() + }); + } + + render() { + const options = [ + + ]; + + this.state.channels.forEach((channel) => { + if (channel.type !== Constants.DM_CHANNEL) { + options.push( + + ); + } + }); + + return ( + + ); + } +} -- cgit v1.2.3-1-g7c22