This repository has been archived by the owner on Mar 13, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 2.7k
/
browser_store.tsx
101 lines (79 loc) · 3.52 KB
/
browser_store.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
import {getHistory} from 'utils/browser_history';
import {ErrorPageTypes, StoragePrefixes, LandingPreferenceTypes} from 'utils/constants';
import * as Utils from 'utils/utils';
class BrowserStoreClass {
private hasCheckedLocalStorage?: boolean;
private localStorageSupported?: boolean;
signalLogout() {
if (this.isLocalStorageSupported()) {
// PLT-1285 store an identifier in session storage so we can catch if the logout came from this tab on IE11
const logoutId = Utils.generateId();
Utils.removePrefixFromLocalStorage(StoragePrefixes.ANNOUNCEMENT);
Utils.removePrefixFromLocalStorage(StoragePrefixes.DELINQUENCY);
sessionStorage.setItem(StoragePrefixes.LOGOUT, logoutId);
localStorage.setItem(StoragePrefixes.LOGOUT, logoutId);
localStorage.removeItem(StoragePrefixes.LOGOUT);
}
}
isSignallingLogout(logoutId: string) {
return logoutId === sessionStorage.getItem(StoragePrefixes.LOGOUT);
}
signalLogin() {
if (this.isLocalStorageSupported()) {
// PLT-1285 store an identifier in session storage so we can catch if the logout came from this tab on IE11
const loginId = Utils.generateId();
sessionStorage.setItem(StoragePrefixes.LOGIN, loginId);
localStorage.setItem(StoragePrefixes.LOGIN, loginId);
localStorage.removeItem(StoragePrefixes.LOGIN);
}
}
isSignallingLogin(loginId: string) {
return loginId === sessionStorage.getItem(StoragePrefixes.LOGIN);
}
isLocalStorageSupported() {
if (this.hasCheckedLocalStorage) {
return this.localStorageSupported;
}
this.localStorageSupported = false;
try {
localStorage.setItem('__testLocal__', '1');
if (localStorage.getItem('__testLocal__') === '1') {
this.localStorageSupported = true;
}
localStorage.removeItem('__testLocal__');
} catch (e) {
this.localStorageSupported = false;
}
try {
sessionStorage.setItem('__testSession__', '1');
sessionStorage.removeItem('__testSession__');
} catch (e) {
// Session storage not usable, website is unusable
getHistory().push('/error?type=' + ErrorPageTypes.LOCAL_STORAGE);
}
this.hasCheckedLocalStorage = true;
return this.localStorageSupported;
}
hasSeenLandingPage() {
return localStorage.getItem(StoragePrefixes.LANDING_PAGE_SEEN);
}
setLandingPageSeen(landingPageSeen: boolean) {
localStorage.setItem(StoragePrefixes.LANDING_PAGE_SEEN, String(landingPageSeen));
}
getLandingPreference(siteUrl?: string) {
return localStorage.getItem(StoragePrefixes.LANDING_PREFERENCE + String(siteUrl));
}
setLandingPreferenceToMattermostApp(siteUrl?: string) {
localStorage.setItem(StoragePrefixes.LANDING_PREFERENCE + String(siteUrl), LandingPreferenceTypes.MATTERMOSTAPP);
}
setLandingPreferenceToBrowser(siteUrl?: string) {
localStorage.setItem(StoragePrefixes.LANDING_PREFERENCE + String(siteUrl), LandingPreferenceTypes.BROWSER);
}
clearLandingPreference(siteUrl?: string) {
localStorage.removeItem(StoragePrefixes.LANDING_PREFERENCE + String(siteUrl));
}
}
const BrowserStore = new BrowserStoreClass();
export default BrowserStore;