This commit is contained in:
j3d1 2023-12-13 12:51:36 +01:00
parent b575926d52
commit 6c69948c44
4 changed files with 53 additions and 13 deletions

View file

@ -63,6 +63,7 @@ const store = new Vuex.Store({
events: [],
layout: 'cards',
loadedItems: [],
itemCache: {},
loadedBoxes: [],
toasts: [],
tickets: [],
@ -111,6 +112,9 @@ const store = new Vuex.Store({
replaceLoadedItems(state, newItems) {
state.loadedItems = newItems;
},
setItemCache(state, {slug, items}) {
state.itemCache[slug] = items;
},
setLayout(state, layout) {
state.layout = layout;
},
@ -213,20 +217,24 @@ const store = new Vuex.Store({
router.push('/login');
},
async afterLogin({dispatch}) {
await dispatch('loadBoxes');
await dispatch('loadEventItems');
await dispatch('loadTickets');
const boxes = dispatch('loadBoxes');
const items = dispatch('loadEventItems');
const tickets = dispatch('loadTickets');
const user = dispatch('loadUserInfo');
},
async fetchImage({state}, url) {
return await fetch(url, {headers: {'Authorization': `Token ${state.token}`}});
},
async loadUserInfo({commit}) {
const {data} = await axios.get('/2/self/');
commit('setUser', data.username);
},
async loadEvents({commit}) {
const {data} = await axios.get('/2/events/');
commit('replaceEvents', data);
},
changeEvent({dispatch, getters, commit}, eventName) {
router.push({path: `/${eventName.slug}/${getters.getActiveView}/`});
commit('replaceLoadedItems', []);
dispatch('loadEventItems');
},
changeView({getters}, link) {
@ -235,10 +243,16 @@ const store = new Vuex.Store({
showBoxContent({getters}, box) {
router.push({path: `/${getters.getEventSlug}/items/`, query: {box}});
},
async loadEventItems({commit, getters}) {
async loadEventItems({commit, getters, state}) {
try {
const {data} = await axios.get(`/2/${getters.getEventSlug}/items/`);
commit('replaceLoadedItems', []);
const slug = getters.getEventSlug;
if( slug in state.itemCache ) {
commit('replaceLoadedItems', state.itemCache[slug]);
}
const {data} = await axios.get(`/2/${slug}/items/`);
commit('replaceLoadedItems', data);
commit('setItemCache', {slug, items: data});
} catch (e) {
console.error("Error loading items");
}