UI Feature Flag: Communities
This commit is contained in:
parent
9cc789756b
commit
2bea8457e9
6 changed files with 31 additions and 9 deletions
|
@ -23,7 +23,6 @@ import Field from "../../../elements/Field";
|
||||||
import * as sdk from "../../../../..";
|
import * as sdk from "../../../../..";
|
||||||
import PlatformPeg from "../../../../../PlatformPeg";
|
import PlatformPeg from "../../../../../PlatformPeg";
|
||||||
import {SettingLevel} from "../../../../../settings/SettingLevel";
|
import {SettingLevel} from "../../../../../settings/SettingLevel";
|
||||||
import {UIFeature} from "../../../../../settings/UIFeature";
|
|
||||||
|
|
||||||
export default class PreferencesUserSettingsTab extends React.Component {
|
export default class PreferencesUserSettingsTab extends React.Component {
|
||||||
static ROOM_LIST_SETTINGS = [
|
static ROOM_LIST_SETTINGS = [
|
||||||
|
@ -138,12 +137,10 @@ export default class PreferencesUserSettingsTab extends React.Component {
|
||||||
};
|
};
|
||||||
|
|
||||||
_renderGroup(settingIds) {
|
_renderGroup(settingIds) {
|
||||||
if (!SettingsStore.getValue(UIFeature.URLPreviews)) {
|
|
||||||
settingIds = settingIds.filter(i => i !== 'urlPreviewsEnabled');
|
|
||||||
}
|
|
||||||
|
|
||||||
const SettingsFlag = sdk.getComponent("views.elements.SettingsFlag");
|
const SettingsFlag = sdk.getComponent("views.elements.SettingsFlag");
|
||||||
return settingIds.map(i => <SettingsFlag key={i} name={i} level={SettingLevel.ACCOUNT} />);
|
return settingIds.filter(SettingsStore.isEnabled).map(i => {
|
||||||
|
return <SettingsFlag key={i} name={i} level={SettingLevel.ACCOUNT} />;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
|
|
|
@ -337,6 +337,8 @@ export const SETTINGS: {[setting: string]: ISetting} = {
|
||||||
displayName: _td('Enable Community Filter Panel'),
|
displayName: _td('Enable Community Filter Panel'),
|
||||||
default: true,
|
default: true,
|
||||||
invertedSettingName: 'TagPanel.disableTagPanel',
|
invertedSettingName: 'TagPanel.disableTagPanel',
|
||||||
|
// We force the value to true because the invertedSettingName causes it to flip
|
||||||
|
controller: new UIFeatureController(UIFeature.Communities, true),
|
||||||
},
|
},
|
||||||
"theme": {
|
"theme": {
|
||||||
supportedLevels: LEVELS_ACCOUNT_SETTINGS,
|
supportedLevels: LEVELS_ACCOUNT_SETTINGS,
|
||||||
|
@ -621,5 +623,11 @@ export const SETTINGS: {[setting: string]: ISetting} = {
|
||||||
[UIFeature.Flair]: {
|
[UIFeature.Flair]: {
|
||||||
supportedLevels: LEVELS_UI_FEATURE,
|
supportedLevels: LEVELS_UI_FEATURE,
|
||||||
default: true,
|
default: true,
|
||||||
|
// Disable Flair when Communities are disabled
|
||||||
|
controller: new UIFeatureController(UIFeature.Communities),
|
||||||
|
},
|
||||||
|
[UIFeature.Communities]: {
|
||||||
|
supportedLevels: LEVELS_UI_FEATURE,
|
||||||
|
default: true,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
|
@ -257,6 +257,11 @@ export default class SettingsStore {
|
||||||
return SETTINGS[settingName].isFeature;
|
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
|
* 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.
|
* be applied to any particular room, otherwise it should be supplied.
|
||||||
|
|
|
@ -18,4 +18,5 @@ limitations under the License.
|
||||||
export enum UIFeature {
|
export enum UIFeature {
|
||||||
URLPreviews = "UIFeature.urlPreviews",
|
URLPreviews = "UIFeature.urlPreviews",
|
||||||
Flair = "UIFeature.flair",
|
Flair = "UIFeature.flair",
|
||||||
|
Communities = "UIFeature.communities",
|
||||||
}
|
}
|
||||||
|
|
|
@ -55,4 +55,11 @@ export default abstract class SettingController {
|
||||||
public onChange(level: SettingLevel, roomId: string, newValue: any) {
|
public onChange(level: SettingLevel, roomId: string, newValue: any) {
|
||||||
// do nothing by default
|
// do nothing by default
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets whether the setting has been disabled due to this controller.
|
||||||
|
*/
|
||||||
|
public get settingDisabled() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,7 +26,7 @@ import SettingsStore from "../SettingsStore";
|
||||||
* Settings using this controller are assumed to return `false` when disabled.
|
* Settings using this controller are assumed to return `false` when disabled.
|
||||||
*/
|
*/
|
||||||
export default class UIFeatureController extends SettingController {
|
export default class UIFeatureController extends SettingController {
|
||||||
public constructor(private uiFeatureName: string) {
|
public constructor(private uiFeatureName: string, private forcedValue = false) {
|
||||||
super();
|
super();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -36,10 +36,14 @@ export default class UIFeatureController extends SettingController {
|
||||||
calculatedValue: any,
|
calculatedValue: any,
|
||||||
calculatedAtLevel: SettingLevel,
|
calculatedAtLevel: SettingLevel,
|
||||||
): any {
|
): any {
|
||||||
if (!SettingsStore.getValue(this.uiFeatureName)) {
|
if (this.settingDisabled) {
|
||||||
// per the docs: we force a disabled state when the feature isn't active
|
// per the docs: we force a disabled state when the feature isn't active
|
||||||
return false;
|
return this.forcedValue;
|
||||||
}
|
}
|
||||||
return null; // no override
|
return null; // no override
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public get settingDisabled(): boolean {
|
||||||
|
return !SettingsStore.getValue(this.uiFeatureName);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue