c3lf-system-3/src/store/index.js

81 lines
2.3 KiB
JavaScript
Raw Normal View History

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';
//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
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
},
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-11-14 03:14:47 +00:00
mutations: {
replaceEvents(state, events) {
state.events = events;
},
2019-12-12 18:00:58 +00:00
changeView(state, {view, slug}) {
router.push({path: `/${slug}/${view}`});
},
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-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-12 18:00:58 +00:00
changeEvent({ dispatch, getters}, eventName) {
router.push({path: `/${eventName.slug}/${getters.getActiveView}`});
dispatch('loadEventItems', eventName);
},
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-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-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) {
const { data } = await axios.put(`/1/${getters.getEventSlug}/item/${item.iid}`, item);
commit('updateItem', 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
});
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
);