Merge pull request #2515 from hmhealey/prefs

Changed PreferenceStore to store data in memory
Этот коммит содержится в:
Joram Wilander
2016-03-23 14:22:30 -04:00
родитель aed690c589 1f46cca65c
Коммит 6275ad2ae4
8 изменённых файлов: 118 добавлений и 150 удалений

Просмотреть файл

@@ -4,143 +4,80 @@
import Constants from 'utils/constants.jsx';
const ActionTypes = Constants.ActionTypes;
import AppDispatcher from '../dispatcher/app_dispatcher.jsx';
import BrowserStore from './browser_store.jsx';
import EventEmitter from 'events';
import UserStore from 'stores/user_store.jsx';
const CHANGE_EVENT = 'change';
function getPreferenceKey(category, name) {
return `${category}-${name}`;
}
function getPreferenceKeyForModel(preference) {
return `${preference.category}-${preference.name}`;
}
class PreferenceStoreClass extends EventEmitter {
constructor() {
super();
this.getAllPreferences = this.getAllPreferences.bind(this);
this.get = this.get.bind(this);
this.getBool = this.getBool.bind(this);
this.getInt = this.getInt.bind(this);
this.getPreference = this.getPreference.bind(this);
this.getCategory = this.getCategory.bind(this);
this.getPreferencesWhere = this.getPreferencesWhere.bind(this);
this.setAllPreferences = this.setAllPreferences.bind(this);
this.setPreference = this.setPreference.bind(this);
this.emitChange = this.emitChange.bind(this);
this.addChangeListener = this.addChangeListener.bind(this);
this.removeChangeListener = this.removeChangeListener.bind(this);
this.handleEventPayload = this.handleEventPayload.bind(this);
this.dispatchToken = AppDispatcher.register(this.handleEventPayload);
this.preferences = new Map();
}
getAllPreferences() {
return new Map(BrowserStore.getItem('preferences', []));
getKey(category, name) {
return `${category}--${name}`;
}
get(category, name, defaultValue = '') {
const preference = this.getAllPreferences().get(getPreferenceKey(category, name));
const key = this.getKey(category, name);
if (!preference) {
if (!this.preferences.has(key)) {
return defaultValue;
}
return preference.value || defaultValue;
return this.preferences.get(key);
}
getBool(category, name, defaultValue = false) {
const preference = this.getAllPreferences().get(getPreferenceKey(category, name));
const key = this.getKey(category, name);
if (!preference) {
if (!this.preferences.has(key)) {
return defaultValue;
}
// prevent a non-false default value from being returned instead of an actual false value
if (preference.value === 'false') {
return false;
}
return (preference.value !== 'false') || defaultValue;
return this.preferences.get(key) !== 'false';
}
getInt(category, name, defaultValue = 0) {
const preference = this.getAllPreferences().get(getPreferenceKey(category, name));
const key = this.getKey(category, name);
if (!preference) {
if (!this.preferences.has(key)) {
return defaultValue;
}
// prevent a non-zero default value from being returned instead of an actual 0 value
if (preference.value === '0') {
return 0;
}
return parseInt(preference.value, 10) || defaultValue;
}
getPreference(category, name, defaultValue = {}) {
return this.getAllPreferences().get(getPreferenceKey(category, name)) || defaultValue;
return parseInt(this.preferences.get(key), 10);
}
getCategory(category) {
return this.getPreferencesWhere((preference) => (preference.category === category));
}
const prefix = category + '--';
getPreferencesWhere(pred) {
const all = this.getAllPreferences();
const preferences = [];
const preferences = new Map();
for (const [, preference] of all) {
if (pred(preference)) {
preferences.push(preference);
for (const [key, value] of this.preferences) {
if (key.startsWith(prefix)) {
preferences.set(key.substring(prefix.length), value);
}
}
return preferences;
}
setAllPreferences(preferences) {
// note that we store the preferences as an array of key-value pairs so that we can deserialize
// it as a proper Map instead of an object
BrowserStore.setItem('preferences', [...preferences]);
}
setPreference(category, name, value) {
const preferences = this.getAllPreferences();
const key = getPreferenceKey(category, name);
let preference = preferences.get(key);
if (!preference) {
preference = {
user_id: UserStore.getCurrentId(),
category,
name
};
}
preference.value = value;
preferences.set(key, preference);
this.setAllPreferences(preferences);
return preference;
this.preferences.set(this.getKey(category, name), value);
}
setPreferences(newPreferences) {
const preferences = this.getAllPreferences();
setPreferencesFromServer(newPreferences) {
for (const preference of newPreferences) {
preferences.set(getPreferenceKeyForModel(preference), preference);
this.setPreference(preference.category, preference.name, preference.value);
}
}
this.setAllPreferences(preferences);
clear() {
this.preferences.clear();
}
emitChange() {
@@ -166,7 +103,7 @@ class PreferenceStoreClass extends EventEmitter {
break;
}
case ActionTypes.RECEIVED_PREFERENCES:
this.setPreferences(action.preferences);
this.setPreferencesFromServer(action.preferences);
this.emitChange();
break;
}