summaryrefslogtreecommitdiffstats
path: root/webapp/components/backstage/installed_incoming_webhooks.jsx
diff options
context:
space:
mode:
Diffstat (limited to 'webapp/components/backstage/installed_incoming_webhooks.jsx')
-rw-r--r--webapp/components/backstage/installed_incoming_webhooks.jsx85
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>
+ );
+ }
+}