import { Module, MutationTree, ActionTree, GetterTree } from 'vuex'; import { StateInterface } from 'src/store'; import { axios } from 'boot/axios'; import { LoginData } from 'src/plugins/user/models'; import { AxiosResponse } from 'axios'; import { LocalStorage, Loading } from 'quasar'; import { Router } from 'src/router'; export interface UserStateInterface extends LoginResponse { loginLoading: boolean; } export interface LoginResponse { user: User; session: Session; } const state: UserStateInterface = { user: { display_name: '', firstname: '', lastname: '', mail: '', roles: [], userid: '' }, session: { browser: '', expires: new Date(), lifetime: -1, platform: '', token: '' }, loginLoading: false }; const mutations: MutationTree = { setUser (state, data: User) { state.user = data; }, setSession (state, data: Session) { state.session = data; }, setLoginLoading (state, data: boolean) { state.loginLoading = data; }, showState (state) { console.log(state); } }; const actions: ActionTree = { login ({ commit }, data: LoginData) { commit('setLoginLoading', true); Loading.show({ message: 'Du wirst eingeloggt' }); void axios .post('/auth', data) .then((response: AxiosResponse) => { commit('setUser', response.data.user); console.log('saved permisisons'); commit('setSession', response.data.session); commit('showState'); LocalStorage.set('user', response.data.user); LocalStorage.set('session', response.data.session); void Router.push({ name: 'user' }); }) .catch(error => { console.exception(error); }) .finally(() => { commit('setLoginLoading', false); Loading.hide(); }); }, logout ({ commit }, token) { void axios.delete(`/auth/${token}`).then(() => { commit('setUser', { display_name: '', firstname: '', lastname: '', mail: '', roles: [], userid: '' }); commit('setSession', { browser: '', expires: '', lifetime: '', platform: '', token: '' }); }); }, loadFromLocalStorage ({ commit }) { console.log('load from store'); let data = LocalStorage.getItem('user'); commit('setUser', data ? data : { display_name: '', firstname: '', lastname: '', mail: '', roles: [], userid: '' }); data = LocalStorage.getItem('session'); commit( 'setSession', data ? data : { browser: '', expires: new Date(), lifetime: -1, platform: '', token: '' } ); commit('showState'); } }; const getters: GetterTree = { user ({ user }) { return user; }, session ({ session }) { return session; }, loginLoading ({ loginLoading }) { return loginLoading; } }; const userStore: Module = { namespaced: true, actions, getters, mutations, state }; export default userStore;