flaschengeist-frontend/src/plugins/user/store/user.ts

127 lines
2.9 KiB
TypeScript
Raw Normal View History

2020-10-16 06:45:40 +00:00
import { Module, MutationTree, ActionTree, GetterTree } from 'vuex';
2020-10-15 09:23:41 +00:00
import { StateInterface } from 'src/store';
import { axios } from 'boot/axios';
2020-10-16 06:45:40 +00:00
import { LoginData } from 'src/plugins/user/models';
import { AxiosResponse } from 'axios';
import { LocalStorage } from 'quasar';
import { Router } from 'src/router';
2020-10-15 09:23:41 +00:00
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[];
}
2020-10-16 06:45:40 +00:00
export interface UserStateInterface extends LoginResponse {
loginLoading: boolean;
}
export interface LoginResponse {
2020-10-15 09:23:41 +00:00
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: []
},
2020-10-16 06:45:40 +00:00
userid: '',
loginLoading: false
2020-10-15 09:23:41 +00:00
};
2020-10-16 06:45:40 +00:00
const mutations: MutationTree<UserStateInterface> = {
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);
2020-10-15 09:23:41 +00:00
}
};
const actions: ActionTree<UserStateInterface, StateInterface> = {
2020-10-16 06:45:40 +00:00
login({ commit }, data: LoginData) {
console.log('bla');
commit('setLoginLoading', true);
void axios
.post('http://localhost:5000/auth', data)
.then((response: AxiosResponse<LoginResponse>) => {
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');
2020-10-16 11:07:31 +00:00
LocalStorage.set('permissions', response.data.permissions);
LocalStorage.set('token', response.data.token);
LocalStorage.set('user', response.data.user);
LocalStorage.set('userid', response.data.userid);
2020-10-16 06:45:40 +00:00
void Router.push({ name: 'user' });
})
.catch(error => {
console.exception(error);
})
.finally(() => {
commit('setLoginLoading', false);
});
}
};
const getters: GetterTree<UserStateInterface, StateInterface> = {
permissions({ permissions }) {
return permissions;
},
token({ token }) {
return token;
},
user({ user }) {
return user;
},
userid({ userid }) {
return userid;
},
loginLoading({ loginLoading }) {
return loginLoading;
2020-10-15 09:23:41 +00:00
}
};
2020-10-16 06:45:40 +00:00
const userStore: Module<UserStateInterface, StateInterface> = {
namespaced: true,
actions,
getters,
mutations,
state
};
export default userStore;