Fix toggling subgroups and pagination

This commit is contained in:
Alfredo Sumaran 2017-05-30 00:50:29 -05:00
parent 6f85943044
commit b425373541
4 changed files with 24 additions and 7 deletions

View File

@ -14,7 +14,7 @@ export default {
},
methods: {
toggleSubGroups(e) {
if (e.target.tagName === 'A' || !this.hasSubgroups ) {
if (e.target.tagName === 'A' || !this.hasSubgroups) {
return false;
}

View File

@ -34,12 +34,18 @@ $(() => {
fetchGroups(parentGroup) {
let parentId = null;
let getGroups = null;
let page = null;
let pageParam = null;
if (parentGroup) {
parentId = parentGroup.id;
}
const page = gl.utils.getParameterByName('page');
pageParam = gl.utils.getParameterByName('page');
if (pageParam) {
page = pageParam;
}
getGroups = service.getGroups(parentId, page);
getGroups.then((response) => {
@ -53,8 +59,10 @@ $(() => {
},
toggleSubGroups(parentGroup = null) {
if (!parentGroup.isOpen) {
store.resetGroups(parentGroup);
this.fetchGroups(parentGroup);
}
GroupsStore.toggleSubGroups(parentGroup);
},
},

View File

@ -8,7 +8,7 @@ export default class GroupsService {
this.groups = Vue.resource(endpoint);
}
getGroups(parentId, page = 1) {
getGroups(parentId, page) {
const data = {};
if (parentId) {

View File

@ -1,3 +1,4 @@
/* eslint-disable class-methods-use-this */
export default class GroupsStore {
constructor() {
this.state = {};
@ -9,7 +10,7 @@ export default class GroupsStore {
setGroups(rawGroups, parent = null) {
const parentGroup = parent;
const tree = this.buildTree(rawGroups);
const tree = this.buildTree(rawGroups, parentGroup);
if (parentGroup) {
parentGroup.subGroups = tree;
@ -20,6 +21,11 @@ export default class GroupsStore {
return tree;
}
resetGroups(parent) {
const parentGroup = parent;
parentGroup.subGroups = {};
}
storePagination(pagination = {}) {
let paginationInfo;
@ -33,7 +39,7 @@ export default class GroupsStore {
this.state.pageInfo = paginationInfo;
}
buildTree(rawGroups) {
buildTree(rawGroups, parentGroup) {
const groups = this.decorateGroups(rawGroups);
const tree = {};
const mappedGroups = {};
@ -49,11 +55,14 @@ export default class GroupsStore {
Object.keys(mappedGroups).map((key) => {
const currentGroup = mappedGroups[key];
// If the group is not at the root level, add it to its parent array of subGroups.
const parentGroup = mappedGroups[currentGroup.parentId];
const findParentGroup = mappedGroups[currentGroup.parentId];
if (currentGroup.parentId) {
if (parentGroup) {
if (findParentGroup) {
mappedGroups[currentGroup.parentId].subGroups[currentGroup.id] = currentGroup;
mappedGroups[currentGroup.parentId].isOpen = true; // Expand group if it has subgroups
} else if (parentGroup && parentGroup.id === currentGroup.parentId) {
tree[currentGroup.id] = currentGroup;
} else {
// Means the groups hast no direct parent.
// Save for later processing, we will add them to its corresponding base group