From 3391cc0d9017065c777c681381b5dcc0c8f9e9fc Mon Sep 17 00:00:00 2001
From: Travis Ralston <travpc@gmail.com>
Date: Wed, 20 Nov 2019 20:05:32 -0700
Subject: [PATCH] Add the toggle switch for provisioning

---
 .../views/settings/_SetIntegrationManager.scss  |  8 ++++++++
 .../views/settings/SetIntegrationManager.js     | 17 +++++++++++++++++
 2 files changed, 25 insertions(+)

diff --git a/res/css/views/settings/_SetIntegrationManager.scss b/res/css/views/settings/_SetIntegrationManager.scss
index 454fb95cf7..3e59ac73ac 100644
--- a/res/css/views/settings/_SetIntegrationManager.scss
+++ b/res/css/views/settings/_SetIntegrationManager.scss
@@ -27,3 +27,11 @@ limitations under the License.
     display: inline-block;
     padding-left: 5px;
 }
+
+.mx_SetIntegrationManager .mx_ToggleSwitch {
+    display: inline-block;
+    float: right;
+    top: 9px;
+
+    @mixin mx_Settings_fullWidthField;
+}
diff --git a/src/components/views/settings/SetIntegrationManager.js b/src/components/views/settings/SetIntegrationManager.js
index 11dadb4918..26c45e3d2a 100644
--- a/src/components/views/settings/SetIntegrationManager.js
+++ b/src/components/views/settings/SetIntegrationManager.js
@@ -17,6 +17,8 @@ limitations under the License.
 import React from 'react';
 import {_t} from "../../../languageHandler";
 import {IntegrationManagers} from "../../../integrations/IntegrationManagers";
+import sdk from '../../../index';
+import SettingsStore, {SettingLevel} from "../../../settings/SettingsStore";
 
 export default class SetIntegrationManager extends React.Component {
     constructor() {
@@ -26,10 +28,24 @@ export default class SetIntegrationManager extends React.Component {
 
         this.state = {
             currentManager,
+            provisioningEnabled: SettingsStore.getValue("integrationProvisioning"),
         };
     }
 
+    onProvisioningToggled = () => {
+        const current = this.state.provisioningEnabled;
+        SettingsStore.setValue("integrationProvisioning", null, SettingLevel.ACCOUNT, !current).catch(err => {
+            console.error("Error changing integration manager provisioning");
+            console.error(err);
+
+            this.setState({provisioningEnabled: current});
+        });
+        this.setState({provisioningEnabled: !current});
+    };
+
     render() {
+        const ToggleSwitch = sdk.getComponent("views.elements.ToggleSwitch");
+
         const currentManager = this.state.currentManager;
         let managerName;
         let bodyText;
@@ -50,6 +66,7 @@ export default class SetIntegrationManager extends React.Component {
                 <div className="mx_SettingsTab_heading">
                     <span>{_t("Integrations")}</span>
                     <span className="mx_SettingsTab_subheading">{managerName}</span>
+                    <ToggleSwitch checked={this.state.provisioningEnabled} onChange={this.onProvisioningToggled} />
                 </div>
                 <span className="mx_SettingsTab_subsectionText">
                     {bodyText}