Fixing browser store issue.

This commit is contained in:
Christopher Speller
2016-03-23 12:11:47 -04:00
parent 7af2e6f87a
commit c3aa84a883
4 changed files with 49 additions and 67 deletions

View File

@@ -6,6 +6,7 @@ import * as AsyncClient from 'utils/async_client.jsx';
import * as GlobalActions from 'action_creators/global_actions.jsx';
import UserStore from 'stores/user_store.jsx';
import ChannelStore from 'stores/channel_store.jsx';
import BrowserStore from 'stores/browser_store.jsx';
import PreferenceStore from 'stores/preference_store.jsx';
import * as Utils from 'utils/utils.jsx';
import Constants from 'utils/constants.jsx';
@@ -84,7 +85,7 @@ export default class LoggedIn extends React.Component {
// when one tab on a browser logs out, it sets __logout__ in localStorage to trigger other tabs to log out
if (e.originalEvent.key === '__logout__' && e.originalEvent.storageArea === localStorage && e.originalEvent.newValue) {
// make sure it isn't this tab that is sending the logout signal (only necessary for IE11)
if (window.BrowserStore.isSignallingLogout(e.originalEvent.newValue)) {
if (BrowserStore.isSignallingLogout(e.originalEvent.newValue)) {
return;
}
@@ -94,7 +95,7 @@ export default class LoggedIn extends React.Component {
if (e.originalEvent.key === '__login__' && e.originalEvent.storageArea === localStorage && e.originalEvent.newValue) {
// make sure it isn't this tab that is sending the logout signal (only necessary for IE11)
if (window.BrowserStore.isSignallingLogin(e.originalEvent.newValue)) {
if (BrowserStore.isSignallingLogin(e.originalEvent.newValue)) {
return;
}

View File

@@ -8,6 +8,8 @@ function getPrefix() {
return global.window.mm_current_user_id + '_';
}
console.log('BrowserStore tried to operate without user present'); //eslint-disable-line no-console
return 'unknown_';
}
@@ -34,46 +36,35 @@ class BrowserStoreClass {
}
checkVersion() {
var currentVersion = sessionStorage.getItem('storage_version');
var currentVersion = this.getGlobalItem('storage_version');
if (currentVersion !== global.window.mm_config.Version) {
sessionStorage.clear();
this.clearAll();
try {
sessionStorage.setItem('storage_version', global.window.mm_config.Version);
this.setGlobalItem('storage_version', global.window.mm_config.Version);
} catch (e) {
// Do nothing
}
}
}
getItem(name, defaultValue) {
var result = null;
try {
result = JSON.parse(sessionStorage.getItem(getPrefix() + name));
} catch (err) {
result = null;
}
if (result === null && typeof defaultValue !== 'undefined') {
result = defaultValue;
}
return result;
setItem(name, value) {
this.setGlobalItem(getPrefix() + name, value);
}
setItem(name, value) {
sessionStorage.setItem(getPrefix() + name, JSON.stringify(value));
getItem(name, defaultValue) {
return this.getGlobalItem(getPrefix() + name, defaultValue);
}
removeItem(name) {
sessionStorage.removeItem(getPrefix() + name);
this.removeGlobalItem(getPrefix() + name);
}
setGlobalItem(name, value) {
try {
if (this.isLocalStorageSupported()) {
localStorage.setItem(getPrefix() + name, JSON.stringify(value));
localStorage.setItem(name, JSON.stringify(value));
} else {
sessionStorage.setItem(getPrefix() + name, JSON.stringify(value));
sessionStorage.setItem(name, JSON.stringify(value));
}
} catch (err) {
console.log('An error occurred while setting local storage, clearing all props'); //eslint-disable-line no-console
@@ -87,9 +78,9 @@ class BrowserStoreClass {
var result = null;
try {
if (this.isLocalStorageSupported()) {
result = JSON.parse(localStorage.getItem(getPrefix() + name));
result = JSON.parse(localStorage.getItem(name));
} else {
result = JSON.parse(sessionStorage.getItem(getPrefix() + name));
result = JSON.parse(sessionStorage.getItem(name));
}
} catch (err) {
result = null;
@@ -104,18 +95,18 @@ class BrowserStoreClass {
removeGlobalItem(name) {
if (this.isLocalStorageSupported()) {
localStorage.removeItem(getPrefix() + name);
localStorage.removeItem(name);
} else {
sessionStorage.removeItem(getPrefix() + name);
sessionStorage.removeItem(name);
}
}
getLastServerVersion() {
return sessionStorage.getItem('last_server_version');
return this.getGlobalItem('last_server_version');
}
setLastServerVersion(version) {
sessionStorage.setItem('last_server_version', version);
this.setGlobalItem('last_server_version', version);
}
signalLogout() {
@@ -185,6 +176,7 @@ class BrowserStoreClass {
const logoutId = sessionStorage.getItem('__logout__');
sessionStorage.clear();
localStorage.clear();
if (logoutId) {
sessionStorage.setItem('__logout__', logoutId);
@@ -222,4 +214,3 @@ class BrowserStoreClass {
var BrowserStore = new BrowserStoreClass();
export default BrowserStore;
window.BrowserStore = BrowserStore;

View File

@@ -35,15 +35,15 @@ class ErrorStoreClass extends EventEmitter {
}
getLastError() {
return BrowserStore.getItem('last_error');
return BrowserStore.getGlobalItem('last_error');
}
storeLastError(error) {
BrowserStore.setItem('last_error', error);
BrowserStore.setGlobalItem('last_error', error);
}
getConnectionErrorCount() {
var count = BrowserStore.getItem('last_error_conn');
var count = BrowserStore.getGlobalItem('last_error_conn');
if (count == null) {
return 0;
@@ -53,12 +53,12 @@ class ErrorStoreClass extends EventEmitter {
}
setConnectionErrorCount(count) {
BrowserStore.setItem('last_error_conn', count);
BrowserStore.setGlobalItem('last_error_conn', count);
}
clearLastError() {
BrowserStore.removeItem('last_error');
BrowserStore.removeItem('last_error_conn');
BrowserStore.removeGlobalItem('last_error');
BrowserStore.removeGlobalItem('last_error_conn');
}
}

View File

@@ -16,7 +16,10 @@ const CHANGE_EVENT_STATUSES = 'change_statuses';
class UserStoreClass extends EventEmitter {
constructor() {
super();
this.profileCache = null;
this.profiles = {};
this.statuses = {};
this.sessions = {};
this.audits = {};
this.currentUserId = '';
}
@@ -135,11 +138,7 @@ class UserStoreClass extends EventEmitter {
}
getProfiles() {
if (this.profileCache !== null) {
return this.profileCache;
}
return BrowserStore.getItem('profiles', {});
return this.profiles;
}
getActiveOnlyProfiles(skipCurrent) {
@@ -171,47 +170,38 @@ class UserStoreClass extends EventEmitter {
}
saveProfile(profile) {
var ps = this.getProfiles();
ps[profile.id] = profile;
this.profileCache = ps;
BrowserStore.setItem('profiles', ps);
this.profiles[profile.id] = profile;
}
saveProfiles(profiles) {
const currentId = this.getCurrentId();
if (this.profileCache) {
const currentUser = this.profileCache[currentId];
if (currentUser) {
if (currentId in profiles) {
delete profiles[currentId];
}
this.profileCache = profiles;
this.profileCache[currentId] = currentUser;
} else {
this.profileCache = profiles;
const currentUser = this.profiles[currentId];
if (currentUser) {
if (currentId in this.profiles) {
delete this.profiles[currentId];
}
} else {
this.profileCache = profiles;
}
BrowserStore.setItem('profiles', profiles);
this.profiles = profiles;
this.profiles[currentId] = currentUser;
} else {
this.profiles = profiles;
}
}
setSessions(sessions) {
BrowserStore.setItem('sessions', sessions);
this.sessions = sessions;
}
getSessions() {
return BrowserStore.getItem('sessions', {loading: true});
return this.sessions;
}
setAudits(audits) {
BrowserStore.setItem('audits', audits);
this.audits = audits;
}
getAudits() {
return BrowserStore.getItem('audits', {loading: true});
return this.audits;
}
getCurrentMentionKeys() {
@@ -252,7 +242,7 @@ class UserStoreClass extends EventEmitter {
}
pSetStatuses(statuses) {
BrowserStore.setItem('statuses', statuses);
this.statuses = statuses;
}
setStatus(userId, status) {
@@ -263,7 +253,7 @@ class UserStoreClass extends EventEmitter {
}
getStatuses() {
return BrowserStore.getItem('statuses', {});
return this.statuses;
}
getStatus(id) {