Merge pull request #2517 from mattermost/plt-2379
PLT-2379, PLT-2432 Fixing browser store issue.
Этот коммит содержится в:
@@ -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) {
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user