Newer
Older
/* Vuex store, for centralized state management */
import Vue from 'vue';
import Vuex from 'vuex';
Vue.use(Vuex);
export default new Vuex.Store({
state: {
// values populated from API calls
Sonia Zorba
committed
model: {
breadcrumbs: [],
groupsPanel: null,
permissionsPanel: null,
membersPanel: null,
permission: null,
user: null,
genericSearchResults: [],
userSearchResults: {
userLabel: null,
groups: {},
permissions: {}
}
Sonia Zorba
committed
},
// values used to perform API calls
input: {
selectedGroupId: 'ROOT',
paginatorPageSize: 20,
paginatorPage: 1,
Sonia Zorba
committed
},
previousPage: null,
},
mutations: {
Sonia Zorba
committed
updateHomePageModel(state, model) {
this.state.model.breadcrumbs = model.breadcrumbs;
this.state.model.groupsPanel = model.groupsPanel;
this.state.model.permission = model.permission;
this.state.model.user = model.user;
},
openGroup(state, groupId) {
let input = this.state.input;
input.selectedGroupId = groupId;
input.searchFilter = '';
this.commit('updateGroups', model);
// If there are no subgroups show the members panel
this.commit('setTabIndex', 1);
} else {
this.commit('setTabIndex', 0);
Sonia Zorba
committed
this.state.model.breadcrumbs = model.breadcrumbs;
this.state.model.groupsPanel = model.groupsPanel;
this.state.model.permission = model.permission;
updateGroupsPanel(state, groupsPanel) {
this.state.model.groupsPanel = groupsPanel;
updatePermissionsPanel(state, permissionsPanel) {
this.state.model.permissionsPanel = permissionsPanel;
this.state.input.paginatorPage = permissionsPanel.currentPage;
},
updateMembersPanel(state, membersPanel) {
this.state.model.membersPanel = membersPanel;
Sonia Zorba
committed
},
setTabIndex(state, tabIndex) {
// this will trigger the tabChanged() method in Main.vue
this.state.input.tabIndex = tabIndex;
},
setLoading(state, loading) {
this.state.loading = loading;
},
showMainPage(state) {
this.state.page = 'main';
},
displaySearchResults(state, results) {
this.state.page = 'search';
if (results) {
this.state.model.genericSearchResults = results;
}
},
updateSearchResults(state, results) {
this.state.model.genericSearchResults = results;
},
backFromUserPage(state) {
state.page = state.previousPage;
}
},
actions: {
openUserPage({ state }, userId) {
state.previousPage = state.page;
client.openUserSearchResult(userId)
.then(model => {
state.page = 'userSearch';
state.model.userSearchResults.user = model.user;
state.model.userSearchResults.groups = model.groups;
state.model.userSearchResults.permissions = model.permissions;
});
}
},
getters: {
selectedGroupId: state => {
return state.model.breadcrumbs[state.model.breadcrumbs.length - 1].groupId;
}
}
});