import Vue from 'vue'; import Vuex from 'vuex'; import axios from 'axios'; import log from '../../../assets/Log'; Vue.use(Vuex); export default { namespaced: true, state: { username: 'UniVate2018', password: 'UniVate2018', isLoggedIn: log.isLoggedIn(), flag: false, status: undefined, token: undefined, user: undefined, person: undefined, agency: undefined, }, mutations: { auth_request(state) { state.status = 'loading'; }, auth_success(state, user) { state.status = 'success'; state.token = user.token; state.user = user.user; state.person = user.person; state.agency = user.agency; }, auth_error(state) { state.status = 'error'; }, logout(state) { state.status = undefined; state.token = undefined; state.person = undefined; state.agency = undefined; state.user = undefined; }, runInit(state, item) { state.flag = true; state.user = item.user; state.token = item.token; state.person = item.person; state.agency = item.agency; }, updateFlag(state) { state.flag = true; }, }, getters: { authStatus: state => state.status, }, actions: { init({ commit, }) { if (!log.isLoggedIn() && log.tokenExpired) { log.clearValues(); } else log.updateTokenExpiry(); commit('runInit', { user: log.getJSONObject('user'), token: log.getJSONObject('token'), person: log.getJSONObject('person'), agency: log.getJSONObject('agency'), }); }, login({ commit, state, }) { return new Promise((reject) => { commit('auth_request'); const user = { username: state.username, password: state.password, }; axios({ url: '/api/register/authenticate', data: user, method: 'POST', }) .then((resp) => { log.clearValues(); log.setValues(resp.data); commit('auth_success', resp.data); }) .catch((err) => { commit('auth_error'); log.clearValues(); reject(err); commit('auth_error', err.data); }); }); }, logout({ commit, }) { return new Promise(() => { commit('logout'); log.clearValues(); delete axios.defaults.headers.common.Authorization; }); }, }, };