From 2bea8457e9050782da88fffed0bf3b45b943976c Mon Sep 17 00:00:00 2001
From: Michael Telatynski <7t3chguy@gmail.com>
Date: Wed, 16 Sep 2020 12:55:04 +0100
Subject: [PATCH] UI Feature Flag: Communities
---
.../settings/tabs/user/PreferencesUserSettingsTab.js | 9 +++------
src/settings/Settings.ts | 8 ++++++++
src/settings/SettingsStore.ts | 5 +++++
src/settings/UIFeature.ts | 1 +
src/settings/controllers/SettingController.ts | 7 +++++++
src/settings/controllers/UIFeatureController.ts | 10 +++++++---
6 files changed, 31 insertions(+), 9 deletions(-)
diff --git a/src/components/views/settings/tabs/user/PreferencesUserSettingsTab.js b/src/components/views/settings/tabs/user/PreferencesUserSettingsTab.js
index d5dafe146a..b3a5d06707 100644
--- a/src/components/views/settings/tabs/user/PreferencesUserSettingsTab.js
+++ b/src/components/views/settings/tabs/user/PreferencesUserSettingsTab.js
@@ -23,7 +23,6 @@ import Field from "../../../elements/Field";
import * as sdk from "../../../../..";
import PlatformPeg from "../../../../../PlatformPeg";
import {SettingLevel} from "../../../../../settings/SettingLevel";
-import {UIFeature} from "../../../../../settings/UIFeature";
export default class PreferencesUserSettingsTab extends React.Component {
static ROOM_LIST_SETTINGS = [
@@ -138,12 +137,10 @@ export default class PreferencesUserSettingsTab extends React.Component {
};
_renderGroup(settingIds) {
- if (!SettingsStore.getValue(UIFeature.URLPreviews)) {
- settingIds = settingIds.filter(i => i !== 'urlPreviewsEnabled');
- }
-
const SettingsFlag = sdk.getComponent("views.elements.SettingsFlag");
- return settingIds.map(i => );
+ return settingIds.filter(SettingsStore.isEnabled).map(i => {
+ return ;
+ });
}
render() {
diff --git a/src/settings/Settings.ts b/src/settings/Settings.ts
index c57394d970..5c4dc2e4d0 100644
--- a/src/settings/Settings.ts
+++ b/src/settings/Settings.ts
@@ -337,6 +337,8 @@ export const SETTINGS: {[setting: string]: ISetting} = {
displayName: _td('Enable Community Filter Panel'),
default: true,
invertedSettingName: 'TagPanel.disableTagPanel',
+ // We force the value to true because the invertedSettingName causes it to flip
+ controller: new UIFeatureController(UIFeature.Communities, true),
},
"theme": {
supportedLevels: LEVELS_ACCOUNT_SETTINGS,
@@ -621,5 +623,11 @@ export const SETTINGS: {[setting: string]: ISetting} = {
[UIFeature.Flair]: {
supportedLevels: LEVELS_UI_FEATURE,
default: true,
+ // Disable Flair when Communities are disabled
+ controller: new UIFeatureController(UIFeature.Communities),
+ },
+ [UIFeature.Communities]: {
+ supportedLevels: LEVELS_UI_FEATURE,
+ default: true,
},
};
diff --git a/src/settings/SettingsStore.ts b/src/settings/SettingsStore.ts
index 9e146ad799..498a2d269d 100644
--- a/src/settings/SettingsStore.ts
+++ b/src/settings/SettingsStore.ts
@@ -257,6 +257,11 @@ export default class SettingsStore {
return SETTINGS[settingName].isFeature;
}
+ public static isEnabled(settingName: string) {
+ if (!SETTINGS[settingName]) return false;
+ return SETTINGS[settingName].controller ? !SETTINGS[settingName].controller.settingDisabled : true;
+ }
+
/**
* Gets the value of a setting. The room ID is optional if the setting is not to
* be applied to any particular room, otherwise it should be supplied.
diff --git a/src/settings/UIFeature.ts b/src/settings/UIFeature.ts
index 8cbf7c207b..3bd7e0f25b 100644
--- a/src/settings/UIFeature.ts
+++ b/src/settings/UIFeature.ts
@@ -18,4 +18,5 @@ limitations under the License.
export enum UIFeature {
URLPreviews = "UIFeature.urlPreviews",
Flair = "UIFeature.flair",
+ Communities = "UIFeature.communities",
}
diff --git a/src/settings/controllers/SettingController.ts b/src/settings/controllers/SettingController.ts
index d90eba1e9e..ba78597da7 100644
--- a/src/settings/controllers/SettingController.ts
+++ b/src/settings/controllers/SettingController.ts
@@ -55,4 +55,11 @@ export default abstract class SettingController {
public onChange(level: SettingLevel, roomId: string, newValue: any) {
// do nothing by default
}
+
+ /**
+ * Gets whether the setting has been disabled due to this controller.
+ */
+ public get settingDisabled() {
+ return false;
+ }
}
diff --git a/src/settings/controllers/UIFeatureController.ts b/src/settings/controllers/UIFeatureController.ts
index ed6598a6e8..2748eec16a 100644
--- a/src/settings/controllers/UIFeatureController.ts
+++ b/src/settings/controllers/UIFeatureController.ts
@@ -26,7 +26,7 @@ import SettingsStore from "../SettingsStore";
* Settings using this controller are assumed to return `false` when disabled.
*/
export default class UIFeatureController extends SettingController {
- public constructor(private uiFeatureName: string) {
+ public constructor(private uiFeatureName: string, private forcedValue = false) {
super();
}
@@ -36,10 +36,14 @@ export default class UIFeatureController extends SettingController {
calculatedValue: any,
calculatedAtLevel: SettingLevel,
): any {
- if (!SettingsStore.getValue(this.uiFeatureName)) {
+ if (this.settingDisabled) {
// per the docs: we force a disabled state when the feature isn't active
- return false;
+ return this.forcedValue;
}
return null; // no override
}
+
+ public get settingDisabled(): boolean {
+ return !SettingsStore.getValue(this.uiFeatureName);
+ }
}