electron-react-boilerplate
Version:
Electron application boilerplate based on React, React Router, Webpack, React Hot Loader for rapid application development
76 lines (63 loc) • 1.76 kB
JavaScript
/*eslint-disable no-empty */
import warning from 'warning'
const KeyPrefix = '@@History/'
const QuotaExceededErrors = [
'QuotaExceededError',
'QUOTA_EXCEEDED_ERR'
]
const SecurityError = 'SecurityError'
function createKey(key) {
return KeyPrefix + key
}
export function saveState(key, state) {
try {
if (state == null) {
window.sessionStorage.removeItem(createKey(key))
} else {
window.sessionStorage.setItem(createKey(key), JSON.stringify(state))
}
} catch (error) {
if (error.name === SecurityError) {
// Blocking cookies in Chrome/Firefox/Safari throws SecurityError on any
// attempt to access window.sessionStorage.
warning(
false,
'[history] Unable to save state; sessionStorage is not available due to security settings'
)
return
}
if (QuotaExceededErrors.indexOf(error.name) >= 0 && window.sessionStorage.length === 0) {
// Safari "private mode" throws QuotaExceededError.
warning(
false,
'[history] Unable to save state; sessionStorage is not available in Safari private mode'
)
return
}
throw error
}
}
export function readState(key) {
let json
try {
json = window.sessionStorage.getItem(createKey(key))
} catch (error) {
if (error.name === SecurityError) {
// Blocking cookies in Chrome/Firefox/Safari throws SecurityError on any
// attempt to access window.sessionStorage.
warning(
false,
'[history] Unable to read state; sessionStorage is not available due to security settings'
)
return null
}
}
if (json) {
try {
return JSON.parse(json)
} catch (error) {
// Ignore invalid JSON.
}
}
return null
}