diff --git a/src/groups/list.js b/src/groups/list.js index a91f2f15e6b13412631910ac5d18c1609111f46a..bb7fc1bf36bf2a043d3f3a76c0ac2820792b51c1 100644 --- a/src/groups/list.js +++ b/src/groups/list.js @@ -21,8 +21,21 @@ export default class GroupList { this.ctrl = new DatalistController('groups', {}, ['name']); this.data = []; - this.ctrl.getPageData(1).then((data) => { - this.data = data; + this.ctrl.getPageData(1).then((firstPage) => { + const pages = { 1: firstPage }; + // now fetch all the missing pages + console.log(this.ctrl.totalPages); + Array.from(new Array(this.ctrl.totalPages - 1), (x, i) => i + 2).forEach((pageNum) => { + this.ctrl.getPageData(pageNum).then((newPage) => { + pages[pageNum] = newPage; + // collect all the so-far loaded pages in order (sorted keys) + // and flatten them into 1 array + this.data = [].concat(...Object.keys(pages).sort().map(key => pages[key])); + m.redraw(); + }); + }); + // see above + this.data = [].concat(...Object.keys(pages).sort().map(key => pages[key])); m.redraw(); }); } diff --git a/src/listcontroller.js b/src/listcontroller.js index 90cead72257097328bcdef17b9f0a8e17072bf42..36ef1d58f29ac324945a8e94849610745dd9ee0a 100644 --- a/src/listcontroller.js +++ b/src/listcontroller.js @@ -23,6 +23,8 @@ export default class DatalistController { this.refresh(); m.redraw(); }, 100); + // keep track of the total number of pages + this.totalPages = null; } refresh() { @@ -46,6 +48,8 @@ export default class DatalistController { return new Promise((resolve) => { this.handler.get(query).then((data) => { + // update total number of pages + this.totalPages = Math.ceil(data._meta.total / 10); // If onlineSearch is false, we filter the page-results at the client // because the API would not understand the search pattern, e.g. for // embedded keys like user.firstname