diff --git a/src/UserSettingsStore.js b/src/UserSettingsStore.js
index 9b7554bda2..ef111c5c62 100644
--- a/src/UserSettingsStore.js
+++ b/src/UserSettingsStore.js
@@ -1,5 +1,6 @@
/*
Copyright 2015, 2016 OpenMarket Ltd
+Copyright 2017 New Vector Ltd
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -17,33 +18,42 @@ limitations under the License.
import Promise from 'bluebird';
import MatrixClientPeg from './MatrixClientPeg';
import Notifier from './Notifier';
-import { _t } from './languageHandler';
+import { _t, _td } from './languageHandler';
+import SdkConfig from './SdkConfig';
/*
* TODO: Make things use this. This is all WIP - see UserSettings.js for usage.
*/
+const FEATURES = [
+ {
+ id: 'feature_groups',
+ name: _td("Groups"),
+ },
+];
+
export default {
- LABS_FEATURES: [
- {
- name: "-",
- id: 'matrix_apps',
- default: true,
+ getLabsFeatures() {
+ const featuresConfig = SdkConfig.get()['features'] || {};
- // XXX: Always use default, ignore localStorage and remove from labs
- override: true,
- },
- {
- name: "-",
- id: 'feature_groups',
- default: false,
- },
- ],
+ return FEATURES.filter((f) => {
+ const sdkConfigValue = featuresConfig[f.id];
+ if (!['enable', 'disable'].includes(sdkConfigValue)) {
+ return true;
+ }
+ }).map((f) => {
+ return f.id;
+ });
+ },
- // horrible but it works. The locality makes this somewhat more palatable.
- doTranslations: function() {
- this.LABS_FEATURES[0].name = _t("Matrix Apps");
- this.LABS_FEATURES[1].name = _t("Groups");
+ translatedNameForFeature(featureId) {
+ const feature = FEATURES.filter((f) => {
+ return f.id === featureId;
+ })[0];
+
+ if (feature === undefined) return null;
+
+ return _t(feature.name);
},
loadProfileInfo: function() {
@@ -180,33 +190,30 @@ export default {
localStorage.setItem('mx_local_settings', JSON.stringify(settings));
},
- getFeatureById(feature: string) {
- for (let i = 0; i < this.LABS_FEATURES.length; i++) {
- const f = this.LABS_FEATURES[i];
- if (f.id === feature) {
- return f;
- }
- }
- return null;
- },
-
isFeatureEnabled: function(featureId: string): boolean {
- // Disable labs for guests.
- if (MatrixClientPeg.get().isGuest()) return false;
+ const featuresConfig = SdkConfig.get()['features'];
- const feature = this.getFeatureById(featureId);
- if (!feature) {
- console.warn(`Unknown feature "${featureId}"`);
+ let sdkConfigValue = 'labs';
+ if (featuresConfig && featuresConfig[featureId] !== undefined) {
+ sdkConfigValue = featuresConfig[featureId];
+ }
+
+ if (sdkConfigValue === 'enable') {
+ return true;
+ } else if (sdkConfigValue === 'enable') {
+ return false;
+ } else if (sdkConfigValue === 'labs') {
+ if (!MatrixClientPeg.get().isGuest()) {
+ const userValue = localStorage.getItem(`mx_labs_feature_${featureId}`);
+ if (userValue !== null) {
+ return userValue === 'true';
+ }
+ }
+ return false;
+ } else {
+ console.warn(`Unknown features config for ${featureId}: ${sdkConfigValue}`);
return false;
}
- // Return the default if this feature has an override to be the default value or
- // if the feature has never been toggled and is therefore not in localStorage
- if (Object.keys(feature).includes('override') ||
- localStorage.getItem(`mx_labs_feature_${featureId}`) === null
- ) {
- return feature.default;
- }
- return localStorage.getItem(`mx_labs_feature_${featureId}`) === 'true';
},
setFeatureEnabled: function(featureId: string, enabled: boolean) {
diff --git a/src/components/structures/LoggedInView.js b/src/components/structures/LoggedInView.js
index 49522747cd..7e6fc05599 100644
--- a/src/components/structures/LoggedInView.js
+++ b/src/components/structures/LoggedInView.js
@@ -1,6 +1,7 @@
/*
Copyright 2015, 2016 OpenMarket Ltd
Copyright 2017 Vector Creations Ltd
+Copyright 2017 New Vector Ltd
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -250,7 +251,6 @@ export default React.createClass({
page_element =