Stackedit/src/store/index.js

81 lines
1.9 KiB
JavaScript
Raw Normal View History

2017-07-23 18:42:08 +00:00
import createLogger from 'vuex/dist/logger';
import Vue from 'vue';
import Vuex from 'vuex';
2017-08-17 23:10:35 +00:00
import utils from '../services/utils';
import contentState from './modules/contentState';
2017-08-25 10:37:46 +00:00
import syncedContent from './modules/syncedContent';
2017-08-17 23:10:35 +00:00
import content from './modules/content';
import file from './modules/file';
import folder from './modules/folder';
2017-09-23 19:01:50 +00:00
import publishLocation from './modules/publishLocation';
2017-08-25 10:37:46 +00:00
import syncLocation from './modules/syncLocation';
import data from './modules/data';
2017-07-23 18:42:08 +00:00
import layout from './modules/layout';
2017-07-31 09:04:01 +00:00
import explorer from './modules/explorer';
import modal from './modules/modal';
2017-09-23 19:01:50 +00:00
import notification from './modules/notification';
2017-08-15 10:43:26 +00:00
import queue from './modules/queue';
2017-10-02 00:34:48 +00:00
import userInfo from './modules/userInfo';
2017-07-23 18:42:08 +00:00
Vue.use(Vuex);
2017-10-02 00:34:48 +00:00
const debug = NODE_ENV !== 'production';
2017-07-23 18:42:08 +00:00
2017-08-25 10:37:46 +00:00
const store = new Vuex.Store({
state: {
ready: false,
2017-08-25 10:37:46 +00:00
offline: false,
2017-10-02 00:34:48 +00:00
lastOfflineCheck: 0,
},
2017-08-17 23:10:35 +00:00
getters: {
allItemMap: (state) => {
const result = {};
utils.types.forEach(type => Object.assign(result, state[type].itemMap));
return result;
},
},
mutations: {
setReady: (state) => {
state.ready = true;
},
2017-08-25 10:37:46 +00:00
setOffline: (state, value) => {
state.offline = value;
},
2017-10-02 00:34:48 +00:00
updateLastOfflineCheck: (state) => {
state.lastOfflineCheck = Date.now();
},
},
actions: {
setOffline: ({ state, commit }, value) => {
if (state.offline !== value) {
commit('setOffline', value);
if (state.offline) {
return Promise.reject('You are offline.');
}
store.dispatch('notification/info', 'You are back online!');
}
return Promise.resolve();
},
},
2017-07-23 18:42:08 +00:00
modules: {
2017-08-17 23:10:35 +00:00
contentState,
2017-08-25 10:37:46 +00:00
syncedContent,
2017-08-17 23:10:35 +00:00
content,
file,
folder,
2017-09-23 19:01:50 +00:00
publishLocation,
2017-08-25 10:37:46 +00:00
syncLocation,
data,
2017-07-23 18:42:08 +00:00
layout,
2017-07-31 09:04:01 +00:00
explorer,
modal,
2017-09-23 19:01:50 +00:00
notification,
2017-08-15 10:43:26 +00:00
queue,
2017-10-02 00:34:48 +00:00
userInfo,
2017-07-23 18:42:08 +00:00
},
strict: debug,
2017-07-27 20:19:52 +00:00
plugins: debug ? [createLogger()] : [],
2017-07-23 18:42:08 +00:00
});
2017-08-25 10:37:46 +00:00
export default store;