Files
DiceCloud/app/imports/client/ui/vuexStore.js
2022-11-29 14:52:22 +02:00

75 lines
2.1 KiB
JavaScript

import Vue from 'vue';
import Vuex from 'vuex';
import dialogStackStore from '/imports/client/ui/dialogStack/dialogStackStore.js';
import Creatures from '/imports/api/creature/creatures/Creatures.js';
const tabs = ['stats', 'actions', 'spells', 'inventory', 'features', 'journal', 'build', 'tree'];
const tabsWithoutSpells = ['stats', 'actions', 'inventory', 'features', 'journal', 'build', 'tree'];
Vue.use(Vuex);
const store = new Vuex.Store({
strict: process.env.NODE_ENV !== 'production',
modules: {
dialogStack: dialogStackStore,
},
state: {
drawer: undefined,
rightDrawer: undefined,
pageTitle: undefined,
characterSheetTabs: {},
showDetailsDialog: false,
},
getters: {
tabById: (state) => (id) => {
return state.characterSheetTabs[id] ?? 0;
},
tabNameById: (state) => (id) => {
const tabNumber = state.characterSheetTabs[id] ?? 0;
const creature = Creatures.findOne(id);
if (creature?.settings?.hideSpellsTab) {
return tabsWithoutSpells[tabNumber];
} else {
return tabs[tabNumber]
}
}
},
mutations: {
toggleDrawer(state) {
state.drawer = !state.drawer;
},
toggleRightDrawer(state) {
state.rightDrawer = !state.rightDrawer;
},
setDrawer(state, value) {
state.drawer = value;
},
setRightDrawer(state, value) {
state.rightDrawer = value;
},
setPageTitle(state, value) {
state.pageTitle = value;
document.title = value;
},
setTabForCharacterSheet(state, { tab, id }) {
// Convert tab names to tab numbers
if (typeof tab === 'string') {
const creature = Creatures.findOne(id);
if (creature?.settings?.hideSpellsTab) {
tab = tabsWithoutSpells.indexOf(tab);
} else {
tab = tabs.indexOf(tab);
}
if (!(tab > -1)) {
throw 'Could not find requested tab';
}
console.log('resolved: ', tab);
}
Vue.set(state.characterSheetTabs, id, tab);
},
setShowDetailsDialog(state, value) {
state.showDetailsDialog = value;
},
},
});
export default store;