logo

pleroma-fe

My custom branche(s) on git.pleroma.social/pleroma/pleroma-fe
commit: ebf9fe6a987842966d32f881902f233a67787d2f
parent: 9763009d8616765ce87f1dcf8d22e935c45a22c8
Author: Roger Braun <roger@rogerbraun.net>
Date:   Mon, 20 Feb 2017 18:25:19 +0100

Pull in persistence plugin, don't blow up on full storage.

Diffstat:

Asrc/lib/persisted_state.js65+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Msrc/main.js2+-
2 files changed, 66 insertions(+), 1 deletion(-)

diff --git a/src/lib/persisted_state.js b/src/lib/persisted_state.js @@ -0,0 +1,65 @@ +import merge from 'lodash.merge' +import objectPath from 'object-path' + +const defaultReducer = (state, paths) => ( + paths.length === 0 ? state : paths.reduce((substate, path) => { + objectPath.set(substate, path, objectPath.get(state, path)) + return substate + }, {}) +) + +const defaultStorage = (() => { + const hasLocalStorage = typeof window !== 'undefined' && window.localStorage + if (hasLocalStorage) { + return window.localStorage + } + + class InternalStorage { + setItem (key, item) { + this[key] = item + return item + } + getItem (key) { + return this[key] + } + removeItem (key) { + delete this[key] + } + clear () { + Object.keys(this).forEach(key => delete this[key]) + } + } + + return new InternalStorage() +})() + +export default function createPersistedState ({ + key = 'vuex', + paths = [], + getState = (key, storage) => { + const value = storage.getItem(key) + return value && value !== 'undefined' ? JSON.parse(value) : undefined + }, + setState = (key, state, storage) => storage.setItem(key, JSON.stringify(state)), + reducer = defaultReducer, + storage = defaultStorage, + subscriber = store => handler => store.subscribe(handler) +} = {}) { + return store => { + const savedState = getState(key, storage) + if (typeof savedState === 'object') { + store.replaceState( + merge({}, store.state, savedState) + ) + } + + subscriber(store)((mutation, state) => { + try { + setState(key, reducer(state, paths), storage) + } catch (e) { + console.log("Couldn't persist state:") + console.log(e) + } + }) + } +} diff --git a/src/main.js b/src/main.js @@ -17,7 +17,7 @@ import configModule from './modules/config.js' import VueTimeago from 'vue-timeago' -import createPersistedState from 'vuex-persistedstate' +import createPersistedState from './lib/persisted_state.js' Vue.use(Vuex) Vue.use(VueRouter)