Merge pull request #2517 from mattermost/plt-2379

PLT-2379, PLT-2432 Fixing browser store issue.
Этот коммит содержится в:
Joram Wilander
2016-03-23 16:06:53 -04:00
родитель 6ccef5caf5 c3aa84a883
Коммит 826529f048
4 изменённых файлов: 49 добавлений и 67 удалений

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

@@ -6,6 +6,7 @@ import * as AsyncClient from 'utils/async_client.jsx';
import * as GlobalActions from 'action_creators/global_actions.jsx'; import * as GlobalActions from 'action_creators/global_actions.jsx';
import UserStore from 'stores/user_store.jsx'; import UserStore from 'stores/user_store.jsx';
import ChannelStore from 'stores/channel_store.jsx'; import ChannelStore from 'stores/channel_store.jsx';
import BrowserStore from 'stores/browser_store.jsx';
import PreferenceStore from 'stores/preference_store.jsx'; import PreferenceStore from 'stores/preference_store.jsx';
import * as Utils from 'utils/utils.jsx'; import * as Utils from 'utils/utils.jsx';
import Constants from 'utils/constants.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 // 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) { 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) // 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; return;
} }
@@ -94,7 +95,7 @@ export default class LoggedIn extends React.Component {
if (e.originalEvent.key === '__login__' && e.originalEvent.storageArea === localStorage && e.originalEvent.newValue) { 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) // 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; return;
} }

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

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

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

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

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

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