diff options
| author | Henry Jameson <me@hjkos.com> | 2018-09-07 18:17:17 +0300 |
|---|---|---|
| committer | Henry Jameson <me@hjkos.com> | 2018-09-17 17:51:39 +0300 |
| commit | f1c16327b696666f291d5fb2afdf4033cf9ef76d (patch) | |
| tree | c75ec1dd94a35dcbb3ec2af4717f833a45eff702 /src/lib/persisted_state.js | |
| parent | 7887e42fca28f16859d2046c0f9085e6f48d77d5 (diff) | |
Initial version
Diffstat (limited to 'src/lib/persisted_state.js')
| -rw-r--r-- | src/lib/persisted_state.js | 43 |
1 files changed, 32 insertions, 11 deletions
diff --git a/src/lib/persisted_state.js b/src/lib/persisted_state.js index 60811e65..007515cd 100644 --- a/src/lib/persisted_state.js +++ b/src/lib/persisted_state.js @@ -1,7 +1,7 @@ import merge from 'lodash.merge' import objectPath from 'object-path' import localforage from 'localforage' -import { throttle, each } from 'lodash' +import { each } from 'lodash' let loaded = false @@ -12,18 +12,17 @@ const defaultReducer = (state, paths) => ( }, {}) ) +const saveImmedeatelyActions = [ + 'markNotificationsAsSeen', + 'clearCurrentUser', + 'setCurrentUser', + 'setOption' +] + const defaultStorage = (() => { return localforage })() -const defaultSetState = (key, state, storage) => { - if (!loaded) { - console.log('waiting for old state to be loaded...') - } else { - return storage.setItem(key, state) - } -} - export default function createPersistedState ({ key = 'vuex-lz', paths = [], @@ -31,7 +30,14 @@ export default function createPersistedState ({ let value = storage.getItem(key) return value }, - setState = throttle(defaultSetState, 60000), + setState = (key, state, storage) => { + if (!loaded) { + console.log('waiting for old state to be loaded...') + return Promise.resolve() + } else { + return storage.setItem(key, state) + } + }, reducer = defaultReducer, storage = defaultStorage, subscriber = store => handler => store.subscribe(handler) @@ -72,7 +78,22 @@ export default function createPersistedState ({ subscriber(store)((mutation, state) => { try { - setState(key, reducer(state, paths), storage) + if (saveImmedeatelyActions.includes(mutation.type)) { + setState(key, reducer(state, paths), storage) + .then(success => { + if (typeof success !== 'undefined') { + if (mutation.type === 'setOption') { + store.dispatch('settingsSaved', { success }) + } + } + }, error => { + if (mutation.type === 'setOption') { + store.dispatch('settingsSaved', { error }) + } + }) + } else { + console.warn(`Not saving to localStorage for: ${mutation.type}`) + } } catch (e) { console.log("Couldn't persist state:") console.log(e) |
