2019-11-13 21:40:14 +00:00
|
|
|
import Vue from 'vue';
|
|
|
|
import Vuex from 'vuex';
|
2019-12-19 23:19:38 +00:00
|
|
|
import AxiosBootstrap from 'axios';
|
|
|
|
import config from '../config';
|
2019-12-05 03:32:33 +00:00
|
|
|
//import * as _ from 'lodash/fp';
|
|
|
|
import router from '../router';
|
2019-11-13 21:40:14 +00:00
|
|
|
|
|
|
|
Vue.use(Vuex);
|
2019-12-19 23:19:38 +00:00
|
|
|
const axios = AxiosBootstrap.create({
|
|
|
|
baseURL: config.service.url,
|
|
|
|
auth: config.service.auth
|
|
|
|
});
|
2019-12-05 21:26:45 +00:00
|
|
|
|
2019-12-19 23:31:28 +00:00
|
|
|
axios.interceptors.response.use(response => response, error => {
|
|
|
|
console.error(error); // todo: toast error
|
|
|
|
return Promise.reject(error);
|
|
|
|
});
|
|
|
|
|
2019-12-05 03:32:33 +00:00
|
|
|
const store = new Vuex.Store({
|
2019-11-14 02:59:17 +00:00
|
|
|
state: {
|
2019-12-12 18:00:58 +00:00
|
|
|
events: [],
|
2019-11-15 19:00:40 +00:00
|
|
|
layout: 'cards',
|
2019-12-12 18:00:58 +00:00
|
|
|
loadedItems: [],
|
|
|
|
loadedBoxes: [],
|
2019-11-14 03:14:47 +00:00
|
|
|
},
|
2019-12-05 03:32:33 +00:00
|
|
|
getters: {
|
2019-12-12 18:25:55 +00:00
|
|
|
getEventSlug: state => state.route && state.route.params.event? state.route.params.event : state.events.length ? state.events[0].slug : '36C3',
|
2019-12-12 18:00:58 +00:00
|
|
|
getActiveView: state => state.route.name || 'items',
|
2019-12-12 23:06:22 +00:00
|
|
|
getFilters: state => state.route.query,
|
2019-12-22 16:26:24 +00:00
|
|
|
getBoxes: state => state.loadedBoxes
|
2019-12-05 03:32:33 +00:00
|
|
|
},
|
2019-11-14 03:14:47 +00:00
|
|
|
mutations: {
|
2019-12-05 03:32:33 +00:00
|
|
|
replaceEvents(state, events) {
|
|
|
|
state.events = events;
|
|
|
|
},
|
2019-12-12 18:00:58 +00:00
|
|
|
changeView(state, {view, slug}) {
|
|
|
|
router.push({path: `/${slug}/${view}`});
|
2019-12-05 03:32:33 +00:00
|
|
|
},
|
|
|
|
replaceLoadedItems(state, newItems) {
|
2019-12-15 19:55:42 +00:00
|
|
|
state.loadedItems = newItems.map(e => ({...e, uid: e.item_uid}));
|
2019-11-15 19:00:40 +00:00
|
|
|
},
|
|
|
|
setLayout(state, layout) {
|
|
|
|
state.layout = layout;
|
2019-12-12 18:25:55 +00:00
|
|
|
},
|
|
|
|
replaceBoxes(state, loadedBoxes) {
|
|
|
|
state.loadedBoxes = loadedBoxes;
|
|
|
|
},
|
2019-12-19 23:19:38 +00:00
|
|
|
updateItem(state, updatedItem) {
|
|
|
|
const item = state.loadedItems.filter(({ item_uid }) => item_uid === updatedItem.item_uid)[0];
|
|
|
|
Object.assign(item, updatedItem);
|
2019-12-20 22:43:10 +00:00
|
|
|
},
|
2019-12-23 17:43:01 +00:00
|
|
|
removeItem(state, item) {
|
|
|
|
state.loadedItems = state.loadedItems.filter(it => it !== item );
|
|
|
|
},
|
2019-12-20 22:43:10 +00:00
|
|
|
appendItem(state, item) {
|
|
|
|
state.loadedItems.push(item);
|
2019-12-19 23:19:38 +00:00
|
|
|
}
|
2019-11-14 03:14:47 +00:00
|
|
|
},
|
|
|
|
actions: {
|
2019-12-19 23:19:38 +00:00
|
|
|
async loadEvents({ commit }) {
|
|
|
|
const { data } = await axios.get('/1/events');
|
|
|
|
commit('replaceEvents', data);
|
2019-12-05 03:32:33 +00:00
|
|
|
},
|
2019-12-12 18:00:58 +00:00
|
|
|
changeEvent({ dispatch, getters}, eventName) {
|
|
|
|
router.push({path: `/${eventName.slug}/${getters.getActiveView}`});
|
2019-12-25 16:50:18 +00:00
|
|
|
dispatch('loadEventItems');
|
2019-12-05 03:32:33 +00:00
|
|
|
},
|
2019-12-12 18:00:58 +00:00
|
|
|
changeView({ getters }, link) {
|
|
|
|
router.push({path: `/${getters.getEventSlug}/${link.path}`});
|
2019-12-05 22:27:24 +00:00
|
|
|
},
|
2019-12-22 21:32:15 +00:00
|
|
|
showBoxContent({ getters }, box) {
|
|
|
|
router.push({path: `/${getters.getEventSlug}/items`, query: {box}});
|
|
|
|
},
|
2019-12-19 23:19:38 +00:00
|
|
|
async loadEventItems({ commit, getters }) {
|
|
|
|
const { data } = await axios.get(`/1/${getters.getEventSlug}/items`);
|
|
|
|
commit('replaceLoadedItems', data);
|
2019-12-12 18:25:55 +00:00
|
|
|
},
|
2019-12-25 16:50:18 +00:00
|
|
|
async searchEventItems({ commit, getters }, query) {
|
|
|
|
const {data} = await axios.get(`/1/${getters.getEventSlug}/items/${btoa(query)}`);
|
|
|
|
commit('replaceLoadedItems', data);
|
|
|
|
},
|
2019-12-19 23:19:38 +00:00
|
|
|
async loadBoxes({ commit }) {
|
|
|
|
const { data } = await axios.get('/1/boxes');
|
|
|
|
commit('replaceBoxes', data);
|
2019-12-12 18:25:55 +00:00
|
|
|
},
|
2019-12-19 23:19:38 +00:00
|
|
|
async updateItem({ commit, getters }, item) {
|
2019-12-22 22:21:23 +00:00
|
|
|
const { data } = await axios.put(`/1/${getters.getEventSlug}/item/${item.uid}`, item);
|
2019-12-19 23:19:38 +00:00
|
|
|
commit('updateItem', data);
|
2019-12-20 22:43:10 +00:00
|
|
|
},
|
2019-12-23 17:43:01 +00:00
|
|
|
async deleteItem({ commit, getters }, item) {
|
|
|
|
await axios.delete(`/1/${getters.getEventSlug}/item/${item.uid}`, item);
|
|
|
|
commit('removeItem',item);
|
|
|
|
},
|
2019-12-20 22:43:10 +00:00
|
|
|
async postItem({ commit, getters }, item) {
|
2019-12-27 00:26:40 +00:00
|
|
|
const { data } = await axios.post(`/1/${getters.getEventSlug}/item`, item);
|
2019-12-20 22:43:10 +00:00
|
|
|
commit('appendItem', data);
|
2019-12-14 22:51:06 +00:00
|
|
|
}
|
2019-11-14 02:59:17 +00:00
|
|
|
}
|
2019-11-13 21:40:14 +00:00
|
|
|
});
|
2019-12-05 03:32:33 +00:00
|
|
|
|
|
|
|
export default store;
|
|
|
|
|
2019-12-12 18:33:58 +00:00
|
|
|
store.dispatch('loadEvents').then(() =>{
|
|
|
|
store.dispatch('loadEventItems');
|
|
|
|
store.dispatch('loadBoxes');
|
|
|
|
}
|
2019-12-12 18:26:58 +00:00
|
|
|
);
|