in public/components/feature-switches/feature-switches.js [41:89]
function wfFeatureSwitchesController ($scope, wfPreferencesService) {
const featureSwitchKeys = [
// e.g. 'multiByline'
];
$scope.readableNames = {
// e.g. 'multiByline': 'Multi-byline',
}
const getDefaultFeatureSwitchValues = () => {
const switches = {};
featureSwitchKeys.forEach(key => switches[key] = false);
return switches;
}
// Feature switches are provided to the directive as an array of entries because it's simpler to iterate through in ng-repeat
$scope.featureSwitchEntries = Object.entries(getDefaultFeatureSwitchValues()).filter(featureSwitch => featureSwitchKeys.includes(featureSwitch[0]))
const featureSwitches = new FeatureSwitches(getDefaultFeatureSwitchValues(), $scope.featureSwitchEntries)
const updateLocalFeatureSwitchValues = (featureSwitchResult) => {
const filteredIncomingFeatureSwitchResult = Object.keys(featureSwitchResult)
.filter(key => featureSwitchKeys.includes(key))
.reduce((filteredResult, key) => {
filteredResult[key] = featureSwitchResult[key];
return filteredResult;
}, {});
if (_.isObject(filteredIncomingFeatureSwitchResult)){
featureSwitches.update(filteredIncomingFeatureSwitchResult);
$scope.$apply()
} else {
// It is useful to discard invalid values in the feature switch record
console.error(`Feature switch values were unexpectedly not an object. Resetting feature switches.`);
featureSwitches.update(getDefaultFeatureSwitchValues())
}
}
wfPreferencesService.getPreference('featureSwitches').then((gotPreferences) => {
if (gotPreferences){
updateLocalFeatureSwitchValues(gotPreferences)
}
})
$scope.updateFeatureSwitchPreference = (key, value) => {
featureSwitches.update({[key]: value});
wfPreferencesService.setPreference('featureSwitches', featureSwitches.switches)
.then(setTimeout(() => {window.location.reload()}, 500));
}
}