diff --git a/src/components/views/settings/tabs/user/PreferencesUserSettingsTab.js b/src/components/views/settings/tabs/user/PreferencesUserSettingsTab.js index 347cfccd56..bba337ee85 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 d78f75b346..16366aaa01 100644 --- a/src/settings/Settings.ts +++ b/src/settings/Settings.ts @@ -332,6 +332,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, @@ -659,6 +661,12 @@ 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, }, [UIFeature.AdvancedSettings]: { supportedLevels: LEVELS_UI_FEATURE, 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 5c579054f0..57aefa3a78 100644 --- a/src/settings/UIFeature.ts +++ b/src/settings/UIFeature.ts @@ -28,5 +28,6 @@ export enum UIFeature { IdentityServer = "UIFeature.identityServer", ThirdPartyID = "UIFeature.thirdPartyId", Flair = "UIFeature.flair", + Communities = "UIFeature.communities", AdvancedSettings = "UIFeature.advancedSettings", } 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); + } }