Stackedit/src/store/index.js
2017-08-25 11:37:46 +01:00

71 lines
1.7 KiB
JavaScript

import createLogger from 'vuex/dist/logger';
import Vue from 'vue';
import Vuex from 'vuex';
import utils from '../services/utils';
import contentState from './modules/contentState';
import syncedContent from './modules/syncedContent';
import content from './modules/content';
import file from './modules/file';
import folder from './modules/folder';
import syncLocation from './modules/syncLocation';
import data from './modules/data';
import layout from './modules/layout';
import editor from './modules/editor';
import explorer from './modules/explorer';
import modal from './modules/modal';
import queue from './modules/queue';
Vue.use(Vuex);
const debug = process.env.NODE_ENV !== 'production';
const store = new Vuex.Store({
state: {
ready: false,
offline: false,
},
getters: {
allItemMap: (state) => {
const result = {};
utils.types.forEach(type => Object.assign(result, state[type].itemMap));
return result;
},
},
mutations: {
setReady: (state) => {
state.ready = true;
},
setOffline: (state, value) => {
state.offline = value;
},
},
modules: {
contentState,
syncedContent,
content,
file,
folder,
syncLocation,
data,
layout,
editor,
explorer,
modal,
queue,
},
strict: debug,
plugins: debug ? [createLogger()] : [],
});
function checkOffline() {
const isOffline = window.navigator.onLine === false;
if (isOffline !== store.state.offline) {
store.commit('setOffline', isOffline);
}
}
utils.setInterval(checkOffline, 1000);
window.addEventListener('online', checkOffline);
window.addEventListener('offline', checkOffline);
export default store;