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

147 lines
3.2 KiB
TypeScript

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<UserStateInterface> = {
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<UserStateInterface, StateInterface> = {
login ({ commit }, data: LoginData) {
commit('setLoginLoading', true);
Loading.show({ message: 'Du wirst eingeloggt' });
void axios
.post('/auth', data)
.then((response: AxiosResponse<LoginResponse>) => {
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<UserStateInterface, StateInterface> = {
user ({ user }) {
return user;
},
displayName ({ user }) {
return user.display_name;
},
session ({ session }) {
return session;
},
loginLoading ({ loginLoading }) {
return loginLoading;
}
};
const userStore: Module<UserStateInterface, StateInterface> = {
namespaced: true,
actions,
getters,
mutations,
state
};
export default userStore;