// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved. // See License.txt for license information. var Client = require('../../utils/client.jsx'); var Utils = require('../../utils/utils.jsx'); var Constants = require('../../utils/constants.jsx'); var ChannelStore = require('../../stores/channel_store.jsx'); var LoadingScreen = require('../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); hooks.push(
{'URL: '}{Utils.getWindowLocationOrigin() + '/hooks/' + hook.id}
{'Channel: '}{c.name}
{'Remove'}
); }); let displayHooks; if (!this.state.getHooksComplete) { displayHooks = ; } else if (hooks.length > 0) { displayHooks = hooks; } else { displayHooks = ; } const existingHooks = (
{displayHooks}
); return (
{'Create webhook URLs for channels and private groups. These URLs can be used by outside applications to create posts in any channels or private groups you have access to. The specified channel will be used as the default.'}
{serverError}
{'Add'}
{existingHooks}
); } }