index.js 1.2 KB
import Vuex from 'vuex'

const createStore = () => {
  return new Vuex.Store({
    state: {
      user: {},
      snackbar: {
        display: false,
        msg: ''
      }
    },
    mutations: {
      createUserInfo (state, info) {
        state.user = Object.assign({}, info)
      },
      updateUser (state, info) {
        let oldInfo = Object.assign({}, state.user)
        state.user = Object.assign(oldInfo, info)
      },
      displayMessage(state, msg) {
        state.snackbar.msg = msg
        state.snackbar.display = true
      },
      hideMessage(state) {
        state.snackbar.display = false        
      }
    },
    actions: {
      async nuxtServerInit ({ commit }, { req, app, query, redirect, store, params }) {
        if (!store.state.user.id) {
          let {data} = await app.$axios.get(`/user?code=${query.code || ''}`)
          if (!data.success) {
            redirect(301, data.redirect)
          } else {
            store.commit('createUserInfo', data.user)
          }
        }
      },
      displayMessage({ commit }, msg) {
        commit('displayMessage', msg)
      },
      hideMessage({ commit }) {
        commit('hideMessage')
      }
    }
  })
}

export default createStore