// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved. // See License.txt for license information. import * as Client from '../../utils/client.jsx'; import * as Utils from '../../utils/utils.jsx'; import Constants from '../../utils/constants.jsx'; import ChannelStore from '../../stores/channel_store.jsx'; import LoadingScreen from '../loading_screen.jsx'; export default class ManageIncomingHooks extends React.Component { constructor() { super(); this.getHooks = this.getHooks.bind(this); this.addNewHook = this.addNewHook.bind(this); this.updateChannelId = this.updateChannelId.bind(this); this.state = {hooks: [], channelId: ChannelStore.getByName(Constants.DEFAULT_CHANNEL).id, getHooksComplete: false}; } componentDidMount() { this.getHooks(); } addNewHook() { const hook = {}; hook.channel_id = this.state.channelId; Client.addIncomingHook( hook, (data) => { let hooks = this.state.hooks; if (!hooks) { hooks = []; } hooks.push(data); this.setState({hooks}); }, (err) => { this.setState({serverError: err}); } ); } removeHook(id) { const data = {}; data.id = id; Client.deleteIncomingHook( data, () => { const hooks = this.state.hooks; let index = -1; for (let i = 0; i < hooks.length; i++) { if (hooks[i].id === id) { index = i; break; } } if (index !== -1) { hooks.splice(index, 1); } this.setState({hooks}); }, (err) => { this.setState({serverError: err}); } ); } getHooks() { Client.listIncomingHooks( (data) => { const state = this.state; if (data) { state.hooks = data; } state.getHooksComplete = true; this.setState(state); }, (err) => { this.setState({serverError: err}); } ); } updateChannelId(e) { this.setState({channelId: e.target.value}); } render() { let serverError; if (this.state.serverError) { serverError = ; } const channels = ChannelStore.getAll(); const options = []; channels.forEach((channel) => { if (channel.type !== Constants.DM_CHANNEL) { options.push( ); } }); let disableButton = ''; if (this.state.channelId === '') { disableButton = ' disable'; } const hooks = []; this.state.hooks.forEach((hook) => { const c = ChannelStore.get(hook.channel_id); if (c) { hooks.push(
{'URL: '} {Utils.getWindowLocationOrigin() + '/hooks/' + hook.id}
{'Channel: '}{c.display_name}
); } }); let displayHooks; if (!this.state.getHooksComplete) { displayHooks = ; } else if (hooks.length > 0) { displayHooks = hooks; } else { displayHooks =
{'None'}
; } const existingHooks = (
{displayHooks}
); return (
{'Create webhook URLs for use in external integrations. Please see '}{'http://mattermost.org/webhooks'} {' to learn more.'}
{serverError}
{'Add'}
{existingHooks}
); } }