Skip to content

Instantly share code, notes, and snippets.

@iezer
Created November 30, 2018 11:59
Show Gist options
  • Save iezer/16b1850904b37200dd60bc89d8997fd1 to your computer and use it in GitHub Desktop.
Save iezer/16b1850904b37200dd60bc89d8997fd1 to your computer and use it in GitHub Desktop.
Ember CLI Mirage Serializer Pagination and Sort
import { JSONAPISerializer } from 'ember-cli-mirage';
import { isArray } from '@ember/array';
export default JSONAPISerializer.extend({
serialize(response, request) {
if (isArray(response)) {
response = sort(response, request);
}
let json = JSONAPISerializer.prototype.serialize.apply(this, [response, request]);
if (isArray(response)) {
paginate(json, request);
}
json.jsonapi = json.jsonapi || { version: '1.0' };
return json;
}
});
function paginate(json, request) {
const pageNumber = request.queryParams['page[number]'];
const pageSize = request.queryParams['page[size]'];
if (!pageNumber || !pageSize) {
return;
}
const minIndex = (pageNumber - 1) * pageSize;
const maxIndex = pageNumber * pageSize;
const totalRecords = json.data.length;
json.data = json.data.slice(minIndex, maxIndex);
json.meta = json.meta || {};
json.meta.total_pages = json.meta.total_pages || totalRecords / pageSize;
}
function sort(response, request) {
let sortKey = request.queryParams['sort'];
if (!sortKey) {
return response;
}
const isDesc = sortKey[0] === '-';
if (isDesc) {
sortKey = sortKey.slice(1);
}
return response.sort((a, b) => {
if (isDesc) {
return b[sortKey].localeCompare(a[sortKey]);
} else {
return a[sortKey].localeCompare(b[sortKey]);
}
});
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment