overleaf/services/web/frontend/js/infrastructure/local-storage.js
Chrystal Maria Griffiths 81ddc5c382 Merge pull request #3205 from overleaf/ta-as-local-storage
New Custom LocalStorage Implementation

GitOrigin-RevId: f80fd5f9f24af02690a51cf3c57f61f95b90e98e
2020-09-19 02:04:43 +00:00

45 lines
1.1 KiB
JavaScript

/**
* localStorage can throw browser exceptions, for example if it is full We don't
* use localStorage for anything critical, so in that case just fail gracefully.
*/
/**
* Catch, log and otherwise ignore errors.
*
* @param {function} fn localStorage function to call
* @param {string?} key Key passed to the localStorage function (if any)
* @param {any?} value Value passed to the localStorage function (if any)
*/
const callSafe = function(fn, key, value) {
try {
return fn(key, value)
} catch (e) {
console.error('localStorage exception', e)
return null
}
}
const getItem = function(key) {
return JSON.parse(localStorage.getItem(key))
}
const setItem = function(key, value) {
localStorage.setItem(key, JSON.stringify(value))
}
const clear = function() {
localStorage.clear()
}
const removeItem = function(key) {
return localStorage.removeItem(key)
}
const customLocalStorage = {
getItem: key => callSafe(getItem, key),
setItem: (key, value) => callSafe(setItem, key, value),
clear: () => callSafe(clear),
removeItem: key => callSafe(removeItem, key)
}
export default customLocalStorage