import Vue from 'vue'; export default { namespaced: true, state() { return {}; }, actions: { fetch(data) { return Vue.auth.fetch(data); }, // refresh(ctx, data) { // console.log('refreshing token') // return Vue.auth.refresh(data); // }, login(ctx, data) { data = data || {}; return new Promise((resolve, reject) => { Vue.auth.login({ url: 'auth/login', data: data.data, // Axios remember: data.remember, staySignedIn: data.staySignedIn, fetchUser: data.fetchUser, }) .then((res) => { // this response is /api/auth/user endpoint, not from /api/auth/login // to access, set fetchUser to false -> not practical here if (data.remember) { Vue.auth.remember(JSON.stringify({ name: ctx.getters.user.name })); } if (ctx.getters.user.role.find(role => role === 'admin')) { Vue.router.push({ name: 'admin-landing' }) } else { Vue.router.push({ name: 'user-landing' }) } resolve(res); }, reject); }); }, register(ctx, data) { data = data || {}; return new Promise((resolve, reject) => { Vue.auth.register({ url: 'auth/register', data: data.data, autoLogin: false, // fixed o.w. register() triggers twice fetchUser: data.fetchUser, staySignedIn: data.staySignedIn, redirect: {name: 'auth-login', params: {'waitingForApproval': true}} // disable if autoLogin == true o.w. not reaching .then() }) .then(() => { if (data.autoLogin) { ctx.dispatch('login', data).then(resolve, reject); } else { resolve() } }, reject); }); }, logout() { return Vue.auth.logout({ makeRequest: true, method: 'POST', redirect: {name: 'auth-login'} }).finally(() => this.dispatch('site/logout', {root:true})); }, impersonate(ctx, team) { Vue.auth.impersonate({ url: 'auth/' + team.id + '/impersonate', redirect: {name: 'user-landing'} }).then(() => { this.dispatch('site/fetchMatrix') this.dispatch('site/fetchProgress') }); }, unimpersonate() { Vue.auth.unimpersonate({ redirect: {name: 'admin-landing'} }); }, }, getters: { user() { return Vue.auth.user(); }, impersonating() { return Vue.auth.impersonating(); } } }