UNPKG

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
/*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 }