public/lib/settings-service.js (30 lines of code) (raw):
/**
* Module containing a service providing User settings stored locally.
*
* Stores settings on the $rootScope as "globalSettings", which can be used in
* scope reading/watching but should NOT be used for writing. Use this service for
* writing as it ensures persistance to local storage.
*/
import angular from 'angular';
import './local-storage-adapter';
angular.module('wfSettingsService', ['wfLocalStorageAdapter'])
.factory('wfSettingsService', ['$log', '$rootScope', 'wfLocalStorageAdapter', function ($log, $rootScope, localStorageAdapter) {
class Settings {
constructor() {
var settings;
try {
settings = localStorageAdapter.getObject('settings') || {};
} catch (err) {
$log.error('Could not retrieve settings from localStorage: ' + err);
settings = {};
}
$rootScope.globalSettings = settings;
// TODO: add listeners to local storage events
}
get(key) {
return $rootScope.globalSettings[key];
}
/**
* Set a setting. Persists in browser localStorage.
*/
set(key, value) {
$rootScope.globalSettings[key] = value;
try {
localStorageAdapter.set('settings', $rootScope.globalSettings);
} catch (err) {
// Silently fail on local storage error
$log.error('Error setting value in localStorage: ' + err);
}
return this;
}
}
return new Settings();
}]);