import Vue from 'vue' import Vuex from 'vuex' import router from "@/router"; import httpClient from "../plugins/restService"; Vue.use(Vuex) export default new Vuex.Store({ state: { user: { username: null, accessToken: null, group: null }, loggingIn: false, loginError: null }, mutations: { loginStart: state => state.loggingIn = true, loginStop (state, errorMessage){ state.loggingIn = false; state.loginError = errorMessage; }, updateAccessToken (state, data) { if (typeof(data) === typeof("")) { data = JSON.parse(data) } if (data === null || data === undefined) { state.user.username = null; state.user.accessToken = null; state.user.group = null; } else { this.state.user.username = data.username; state.user.accessToken = data.accessToken; state.user.group = data.group; } }, logout (state) { state.user.accessToken = null; state.user.username = null; state.user.group = null; } }, actions: { doLogin({ commit }, loginData) { commit('loginStart'); httpClient.login(loginData) .then(response => { localStorage.setItem('user', JSON.stringify({ username: response.data.username, accessToken: response.data.token, group: response.data.group})); commit('loginStop', null); commit('updateAccessToken', response.data) if (this.state.user.group.includes('moneymaster')) { router.push('/finanzer'); } else if (this.state.user.group.includes('bar')) { router.push('/bar') } }) .catch(error => { commit('loginStop', error.response.data.error) commit('updateAccessToken', {username: null, accessToken: null, group: null}) }) }, fetchAccessToken({ commit }) { commit('updateAccessToken', localStorage.getItem('user')) }, logout({ commit }) { localStorage.removeItem('user'); commit('logout'); router.push('/login'); }, resetLoginError({ commit }) { commit("loginStop") } }, modules: { }, getters: { getGroup: state => { return state.user.group }, getToken: state => { return state.user.accessToken } } })