diff options
Diffstat (limited to 'webapp/components/backstage/installed_incoming_webhooks.jsx')
-rw-r--r-- | webapp/components/backstage/installed_incoming_webhooks.jsx | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/webapp/components/backstage/installed_incoming_webhooks.jsx b/webapp/components/backstage/installed_incoming_webhooks.jsx new file mode 100644 index 000000000..de7154afe --- /dev/null +++ b/webapp/components/backstage/installed_incoming_webhooks.jsx @@ -0,0 +1,85 @@ +// Copyright (c) 2016 Mattermost, Inc. All Rights Reserved. +// See License.txt for license information. + +import React from 'react'; + +import * as AsyncClient from 'utils/async_client.jsx'; +import IntegrationStore from 'stores/integration_store.jsx'; + +import {FormattedMessage} from 'react-intl'; +import InstalledIncomingWebhook from './installed_incoming_webhook.jsx'; +import InstalledIntegrations from './installed_integrations.jsx'; + +export default class InstalledIncomingWebhooks extends React.Component { + constructor(props) { + super(props); + + this.handleIntegrationChange = this.handleIntegrationChange.bind(this); + + this.deleteIncomingWebhook = this.deleteIncomingWebhook.bind(this); + + this.state = { + incomingWebhooks: [] + }; + } + + componentWillMount() { + IntegrationStore.addChangeListener(this.handleIntegrationChange); + + if (window.mm_config.EnableIncomingWebhooks === 'true') { + if (IntegrationStore.hasReceivedIncomingWebhooks()) { + this.setState({ + incomingWebhooks: IntegrationStore.getIncomingWebhooks() + }); + } else { + AsyncClient.listIncomingHooks(); + } + } + } + + componentWillUnmount() { + IntegrationStore.removeChangeListener(this.handleIntegrationChange); + } + + handleIntegrationChange() { + this.setState({ + incomingWebhooks: IntegrationStore.getIncomingWebhooks() + }); + } + + deleteIncomingWebhook(incomingWebhook) { + AsyncClient.deleteIncomingHook(incomingWebhook.id); + } + + render() { + const incomingWebhooks = this.state.incomingWebhooks.map((incomingWebhook) => { + return ( + <InstalledIncomingWebhook + key={incomingWebhook.id} + incomingWebhook={incomingWebhook} + onDelete={this.deleteIncomingWebhook} + /> + ); + }); + + return ( + <InstalledIntegrations + header={ + <FormattedMessage + id='installed_incoming_webhooks.header' + defaultMessage='Installed Incoming Webhooks' + /> + } + addText={ + <FormattedMessage + id='installed_incoming_webhooks.add' + defaultMessage='Add Incoming Webhook' + /> + } + addLink='/settings/integrations/incoming_webhooks/add' + > + {incomingWebhooks} + </InstalledIntegrations> + ); + } +} |