wikijs-fork/client/store/index.js

68 lines
1.5 KiB
JavaScript
Raw Normal View History

import _ from 'lodash'
import Vue from 'vue'
import Vuex from 'vuex'
2018-07-22 04:29:39 +00:00
import pathify from 'vuex-pathify' // eslint-disable-line import/no-duplicates
import { make } from 'vuex-pathify' // eslint-disable-line import/no-duplicates
2018-10-29 02:09:58 +00:00
import page from './page'
2018-08-04 21:27:55 +00:00
import site from './site'
2018-12-03 02:42:43 +00:00
import user from './user'
2018-08-04 21:27:55 +00:00
/* global WIKI */
Vue.use(Vuex)
2018-07-22 04:29:39 +00:00
const state = {
loadingStack: [],
notification: {
message: '',
style: 'primary',
icon: 'cached',
isActive: false
}
}
export default new Vuex.Store({
2018-06-10 00:11:00 +00:00
strict: process.env.NODE_ENV !== 'production',
2018-07-15 23:16:19 +00:00
plugins: [
pathify.plugin
],
2018-07-22 04:29:39 +00:00
state,
getters: {
isLoading: state => { return state.loadingStack.length > 0 }
},
mutations: {
2018-07-22 04:29:39 +00:00
...make.mutations(state),
2019-09-08 16:39:05 +00:00
loadingStart (st, stackName) {
st.loadingStack = _.union(st.loadingStack, [stackName])
},
2019-09-08 16:39:05 +00:00
loadingStop (st, stackName) {
st.loadingStack = _.without(st.loadingStack, stackName)
},
2019-09-08 16:39:05 +00:00
showNotification (st, opts) {
st.notification = _.defaults(opts, {
message: '',
style: 'primary',
icon: 'cached',
isActive: true
})
},
2019-09-08 16:39:05 +00:00
updateNotificationState (st, newState) {
st.notification.isActive = newState
2019-01-13 03:33:30 +00:00
},
2019-09-08 16:39:05 +00:00
pushGraphError (st, err) {
2019-01-13 03:33:30 +00:00
WIKI.$store.commit('showNotification', {
style: 'red',
message: _.get(err, 'graphQLErrors[0].message', err.message),
icon: 'alert'
2019-01-13 03:33:30 +00:00
})
}
},
actions: { },
2018-08-04 21:27:55 +00:00
modules: {
2018-10-29 02:09:58 +00:00
page,
2018-12-03 02:42:43 +00:00
site,
user
2018-08-04 21:27:55 +00:00
}
})