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 | |
| parent | 7887e42fca28f16859d2046c0f9085e6f48d77d5 (diff) | |
Initial version
Diffstat (limited to 'src')
| -rw-r--r-- | src/components/settings/settings.js | 4 | ||||
| -rw-r--r-- | src/components/settings/settings.vue | 14 | ||||
| -rw-r--r-- | src/lib/persisted_state.js | 43 | ||||
| -rw-r--r-- | src/modules/config.js | 21 |
4 files changed, 69 insertions, 13 deletions
diff --git a/src/components/settings/settings.js b/src/components/settings/settings.js index 8ef84b2a..5e28c1af 100644 --- a/src/components/settings/settings.js +++ b/src/components/settings/settings.js @@ -42,6 +42,10 @@ const settings = { computed: { user () { return this.$store.state.users.currentUser + }, + currentSaveStateNotice () { + console.log(this.$store.state.config._internal.currentSaveStateNotice && this.$store.state.config._internal.currentSaveStateNotice.error) + return this.$store.state.config._internal.currentSaveStateNotice } }, watch: { diff --git a/src/components/settings/settings.vue b/src/components/settings/settings.vue index c106b79c..be7c64a7 100644 --- a/src/components/settings/settings.vue +++ b/src/components/settings/settings.vue @@ -1,7 +1,19 @@ <template> <div class="settings panel panel-default"> <div class="panel-heading"> - {{$t('settings.settings')}} + <div class="title"> + {{$t('settings.settings')}} + </div> + + <template v-if="currentSaveStateNotice"> + <div @click.prevent class="alert error" v-if="currentSaveStateNotice.error"> + Errr + </div> + + <div @click.prevent class="alert success" v-if="!currentSaveStateNotice.error"> + Succ + </div> + </template> </div> <div class="panel-body"> <tab-switcher> 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) diff --git a/src/modules/config.js b/src/modules/config.js index 60a34bc1..cb59acaa 100644 --- a/src/modules/config.js +++ b/src/modules/config.js @@ -26,7 +26,11 @@ const defaultState = { }, muteWords: [], highlight: {}, - interfaceLanguage: browserLocale + interfaceLanguage: browserLocale, + _internal: { + currentSaveStateNotice: {}, + noticeClearTimeout: null + } } const config = { @@ -42,6 +46,18 @@ const config = { } else { del(state.highlight, user) } + }, + settingsSaved (state, { success, error }) { + if (success) { + if (state.noticeClearTimeout) { + clearTimeout(state.noticeClearTimeout) + } + set(state._internal, 'currentSaveStateNotice', { error: false, data: success }) + set(state._internal, 'noticeClearTimeout', + setTimeout(() => del(state._internal, 'currentSaveStateNotice'), 2000)) + } else { + set(state._internal, 'currentSaveStateNotice', { error: true, errorData: error }) + } } }, actions: { @@ -51,6 +67,9 @@ const config = { setHighlight ({ commit, dispatch }, { user, color, type }) { commit('setHighlight', {user, color, type}) }, + settingsSaved ({ commit, dispatch }, { success, error }) { + commit('settingsSaved', { success, error }) + }, setOption ({ commit, dispatch }, { name, value }) { commit('setOption', {name, value}) switch (name) { |
