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 } from 'quasar'; import { Router } from 'src/router'; export interface Token { browser: string; expires: string; lifetime: number; platform: string; token: string; } export interface User { display_name: string | null; firstname: string; lastname: string; mail: string; roles: string[]; } export interface UserStateInterface extends LoginResponse { loginLoading: boolean; } export interface LoginResponse { permissions: string[]; token: Token; user: User; userid: string; } const state: UserStateInterface = { permissions: [], token: { browser: '', expires: '', lifetime: -1, platform: '', token: '' }, user: { display_name: '', firstname: '', lastname: '', mail: '', roles: [] }, userid: '', loginLoading: false }; const mutations: MutationTree = { setPermissions(state, data: []) { state.permissions = data; }, setToken(state, data: Token) { state.token = data; }, setUser(state, data: User) { state.user = data; }, setUserId(state, data: string) { state.userid = data; }, setLoginLoading(state, data: boolean) { state.loginLoading = data; }, showState(state) { console.log(state); } }; const actions: ActionTree = { login({ commit }, data: LoginData) { console.log('bla'); commit('setLoginLoading', true); void axios .post('http://localhost:5000/auth', data) .then((response: AxiosResponse) => { commit('setPermissions', response.data.permissions); console.log('saved permisisons'); commit('setToken', response.data.token); commit('setUser', response.data.user); commit('setUserId', response.data.userid); commit('showState'); LocalStorage.set('permissions', response.data.permissions); LocalStorage.set('token', response.data.token); LocalStorage.set('user', response.data.user); LocalStorage.set('userid', response.data.userid); void Router.push({ name: 'user' }); }) .catch(error => { console.exception(error); }) .finally(() => { commit('setLoginLoading', false); }); } }; const getters: GetterTree = { permissions({ permissions }) { return permissions; }, token({ token }) { return token; }, user({ user }) { return user; }, userid({ userid }) { return userid; }, loginLoading({ loginLoading }) { return loginLoading; } }; const userStore: Module = { namespaced: true, actions, getters, mutations, state }; export default userStore;