import AuthService from '@/services/AuthService' import User from "@/types/User"; import {ActionContext, Module} from 'vuex'; import {RootState} from './index'; import TokenService from "@/services/TokenService"; import UserService from "@/services/UserService"; import PlayerService from "@/services/PlayerService"; import UserInfo from '@/types/UserInfo'; import Player from '@/types/Player'; export interface AuthState { isAuthenticated: boolean; user: User | null; } const user = JSON.parse(localStorage.getItem('auth') || '""'); const initialState = user ? {isAuthenticated: true, user} : {isAuthenticated: false, user: null}; type AuthActionContext = ActionContext; const auth: Module = { namespaced: true, state: initialState, actions: { login({commit}: AuthActionContext, user) { return AuthService .login(user.email, user.password) .then(auth => { return UserService .fetchById(auth.id) .then((user: User) => { commit('loginSuccess', user); return Promise.resolve(user); }, error => { commit('loginFailure'); return Promise.reject(error); } ); }, error => { commit('loginFailure'); return Promise.reject(error); } ); }, logout({commit}: AuthActionContext) { return AuthService.logout().then(() => { commit('logout'); return Promise.resolve(); }) }, register({commit}: AuthActionContext, user) { return AuthService.register(user.email, user.password).then( response => { commit('registerSuccess'); return Promise.resolve(response.data); }, error => { commit('registerFailure'); return Promise.reject(error); } ); }, refreshToken({commit}: AuthActionContext, accessToken) { commit('refreshToken', accessToken); } }, mutations: { loginSuccess(state, user) { state.isAuthenticated = true; state.user = user; }, loginFailure(state) { state.isAuthenticated = false; state.user = null; }, logout(state) { state.isAuthenticated = false; state.user = null; TokenService.removeUser(); }, registerSuccess(state) { state.isAuthenticated = false; }, registerFailure(state) { state.isAuthenticated = false; }, refreshToken(state, accessToken: string) { state.isAuthenticated = true; TokenService.updateLocalAccessToken(accessToken); } }, getters: { getUser: (state) => state.user } }; export default auth;