64 lines
1.3 KiB
JavaScript
64 lines
1.3 KiB
JavaScript
import Vue from 'vue'
|
|
import Vuex from 'vuex'
|
|
|
|
import api from '../lib/Api';
|
|
|
|
Vue.use(Vuex);
|
|
|
|
export default new Vuex.Store({
|
|
strict: process.env.NODE_ENV !== 'production',
|
|
state: {
|
|
loading: false,
|
|
error: null,
|
|
authChecked: false,
|
|
user: null,
|
|
|
|
// MediaQueryList objects in the root App component maintain this state.
|
|
mediaQueries: {
|
|
mobile: false,
|
|
tablet: false,
|
|
tabletOnly: false,
|
|
touch: false,
|
|
desktop: false,
|
|
desktopOnly: false,
|
|
widescreen: false,
|
|
widescreenOnly: false,
|
|
fullhd: false
|
|
}
|
|
},
|
|
getters: {
|
|
isLoading(state) {
|
|
return state.loading === true;
|
|
},
|
|
isLoggedIn(state) {
|
|
return state.user !== null;
|
|
},
|
|
isAdmin(state) {
|
|
return state.user !== null && state.user.admin === true;
|
|
}
|
|
},
|
|
mutations: {
|
|
setLoading(state, value) {
|
|
state.loading = value;
|
|
},
|
|
|
|
setError(state, value) {
|
|
state.error = value;
|
|
},
|
|
|
|
setUser(state, user) {
|
|
state.authChecked = true;
|
|
state.user = user;
|
|
},
|
|
|
|
setMediaQuery(state, data) {
|
|
state.mediaQueries[data.mediaName] = data.value;
|
|
}
|
|
},
|
|
actions: {
|
|
logout({commit}) {
|
|
return api.getLogout()
|
|
.then(() => commit("setUser", null));
|
|
}
|
|
}
|
|
}); |