Expanding form sections keeps them expanded when changing property viewed or opening a new prop Disabled auto-focus, because it forces scroll
82 lines
2.3 KiB
JavaScript
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;
|