Paginate group results

[ci skip]
This commit is contained in:
Alfredo Sumaran 2017-05-22 12:47:05 -05:00
parent a87d447c35
commit a5a7b574df
5 changed files with 46 additions and 7 deletions

View file

@ -1,10 +1,27 @@
<script>
import TablePaginationComponent from '~/vue_shared/components/table_pagination';
export default {
components: {
'gl-pagination': TablePaginationComponent,
},
props: {
groups: {
type: Array,
required: true,
},
pageInfo: {
type: Object,
required: true,
},
},
methods: {
change(pageNumber) {
const param = gl.utils.setParamInURL('page', pageNumber);
gl.utils.visitUrl(param);
return param;
},
},
};
</script>
@ -12,5 +29,8 @@ export default {
<template>
<div>
<group-folder :groups="groups" />
<gl-pagination
:change="change"
:pageInfo="pageInfo" />
</div>
</template>

View file

@ -38,9 +38,12 @@ $(() => {
parentId = parentGroup.id;
}
service.getGroups(parentId)
const page = gl.utils.getParameterByName('page');
service.getGroups(parentId, page)
.then((response) => {
store.setGroups(response.json(), parentGroup);
store.storePagination(response.headers);
})
.catch(() => {
// TODO: Handler error

View file

@ -8,13 +8,15 @@ export default class GroupsService {
this.groups = Vue.resource(endpoint);
}
getGroups(parentId) {
let data = {};
getGroups(parentId, page = 1) {
const data = {};
if (parentId) {
data = {
parent_id: parentId,
};
data.parent_id = parentId;
}
if (page) {
data.page = page;
}
return this.groups.get(data);

View file

@ -2,6 +2,7 @@ export default class GroupsStore {
constructor() {
this.state = {};
this.state.groups = [];
this.state.pageInfo = {};
return this;
}
@ -18,6 +19,19 @@ export default class GroupsStore {
return rawGroups;
}
storePagination(pagination = {}) {
let paginationInfo;
if (Object.keys(pagination).length) {
const normalizedHeaders = gl.utils.normalizeHeaders(pagination);
paginationInfo = gl.utils.parseIntPagination(normalizedHeaders);
} else {
paginationInfo = pagination;
}
this.state.pageInfo = paginationInfo;
}
decorateGroups(rawGroups) {
this.groups = rawGroups.map(GroupsStore.decorateGroup);
return this.groups;

View file

@ -1,3 +1,3 @@
.js-groups-list-holder
#dashboard-group-app{ data: { endpoint: dashboard_groups_path(format: :json) } }
%groups-component{ ':groups' => 'state.groups' }
%groups-component{ ':groups' => 'state.groups', ':page-info' => 'state.pageInfo' }