/ src / utils / store.js
store.js
  1  import { getCurrentAccountNS } from './store-utils';
  2  
  3  const local = {
  4    get: (key) => {
  5      try {
  6        return localStorage.getItem(key);
  7      } catch (e) {
  8        console.warn(e);
  9        return null;
 10      }
 11    },
 12    getJSON: (key) => {
 13      try {
 14        return JSON.parse(local.get(key));
 15      } catch (e) {
 16        console.warn(e);
 17        return null;
 18      }
 19    },
 20    set: (key, value) => {
 21      try {
 22        return localStorage.setItem(key, value);
 23      } catch (e) {
 24        console.warn(e);
 25        return null;
 26      }
 27    },
 28    setJSON: (key, value) => {
 29      try {
 30        return local.set(key, JSON.stringify(value));
 31      } catch (e) {
 32        console.warn(e);
 33        return null;
 34      }
 35    },
 36    del: (key) => {
 37      try {
 38        return localStorage.removeItem(key);
 39      } catch (e) {
 40        console.warn(e);
 41        return null;
 42      }
 43    },
 44  };
 45  
 46  const session = {
 47    get: (key) => {
 48      try {
 49        return sessionStorage.getItem(key);
 50      } catch (e) {
 51        console.warn(e);
 52        return null;
 53      }
 54    },
 55    getJSON: (key) => {
 56      try {
 57        return JSON.parse(session.get(key));
 58      } catch (e) {
 59        console.warn(e);
 60        return null;
 61      }
 62    },
 63    set: (key, value) => {
 64      try {
 65        return sessionStorage.setItem(key, value);
 66      } catch (e) {
 67        console.warn(e);
 68        return null;
 69      }
 70    },
 71    setJSON: (key, value) => {
 72      try {
 73        return session.set(key, JSON.stringify(value));
 74      } catch (e) {
 75        console.warn(e);
 76        return null;
 77      }
 78    },
 79    del: (key) => {
 80      try {
 81        return sessionStorage.removeItem(key);
 82      } catch (e) {
 83        console.warn(e);
 84        return null;
 85      }
 86    },
 87  };
 88  
 89  // Store with account namespace (id@domain.tld) <- uses id, not username
 90  const account = {
 91    get: (key) => {
 92      try {
 93        return local.getJSON(key)[getCurrentAccountNS()];
 94      } catch (e) {
 95        console.warn(e);
 96        return null;
 97      }
 98    },
 99    set: (key, value) => {
100      try {
101        const data = local.getJSON(key) || {};
102        data[getCurrentAccountNS()] = value;
103        return local.setJSON(key, data);
104      } catch (e) {
105        console.warn(e);
106        return null;
107      }
108    },
109    del: (key) => {
110      try {
111        const data = local.getJSON(key) || {};
112        delete data[getCurrentAccountNS()];
113        return local.setJSON(key, data);
114      } catch (e) {
115        console.warn(e);
116        return null;
117      }
118    },
119  };
120  
121  export default { local, session, account };