Files
DiceCloud/app/imports/client/ui/vuexStore.js
Stefan Zermatten 442aea2bbe Forms try to hold your place better
Expanding form sections keeps them expanded when
changing property viewed or opening a new prop
Disabled auto-focus, because it forces scroll
2023-06-13 14:27:32 +02:00

82 lines
2.3 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,
formExpansions: {},
},
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]
}
},
formExpansionByType: (state) => (type) => {
return state.formExpansions[type] || [];
},
},
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;
},
setFormExpansion(state, { type, value }) {
state.formExpansions[type] = value;
},
},
});
export default store;