diff -r 47f0611cc57d -r 92fc9d077f95 cms/app-client/mirage/serializers/sparse-document.js --- a/cms/app-client/mirage/serializers/sparse-document.js Thu Oct 06 16:45:37 2016 +0200 +++ b/cms/app-client/mirage/serializers/sparse-document.js Fri Oct 07 02:07:34 2016 +0200 @@ -1,17 +1,20 @@ // mirage/serializers/blog-post.js import BaseSerializer from './application'; import _ from 'lodash'; +import utils from './utils'; export default BaseSerializer.extend({ attrs: ['id', 'title', 'language', 'url', 'issued', 'modified', 'publishers', 'mediaArray', 'transcript'], serialize(response, request) { - console.log(request, response); // This is how to call super, as Mirage borrows [Backbone's implementation of extend](http://backbonejs.org/#Model-extend) let json = BaseSerializer.prototype.serialize.apply(this, arguments); - json['documents'] = _.map(json['documents'], function(doc) { + let page = Math.max(parseInt(request.queryParams.page || 1) - 1, 0); + let perPage = parseInt(request.queryParams.perpage || 15); + + json['documents'] = _.map(_.slice(json['documents'], page*perPage, (page+1)*perPage), function(doc) { let res = _.omit(doc, ['publishers', 'mediaArray', 'transcript']); res['publisher'] = doc['publishers'].join(', '); res['duration_ms'] = doc['mediaArray']?doc['mediaArray'][_(Object.keys(doc['mediaArray'])).first()]['extent_ms']:0; @@ -19,7 +22,43 @@ return res; }); + let meta = { + total: response.models.length, + per_page: perPage, + current_page: page+1, + last_page: Math.floor(response.models.length/perPage)+1, + from: page*perPage + 1, + to: Math.min((page+1)*perPage, response.models.length), + prev_page_url: null, + next_page_url: null + }; + + let urlParts = utils.parseUri(request.url); + + if(page>0) { + let prevUrlParts = _.clone(urlParts); + prevUrlParts.queryKey.page = page; + meta.prev_page_url = utils.mergeUri(prevUrlParts); + } + + if(page<(meta.last_page-1)) { + let nextUrlParts = _.clone(urlParts); + nextUrlParts.queryKey.page = page+2; + meta.next_page_url = utils.mergeUri(nextUrlParts); + } + + json['meta'] = meta; + return json; } }); + +// total 3373 +// per_page 15 +// current_page 1 +// last_page 225 +// next_page_url "http://localhost:8000/api/v1/documents?page=2" +// prev_page_url +// from 1 +// to 15