initial commit
This commit is contained in:
62
app/serializers/application.js
Normal file
62
app/serializers/application.js
Normal file
@@ -0,0 +1,62 @@
|
||||
import { JSONAPISerializer } from '@warp-drive/legacy/serializer/json-api';
|
||||
|
||||
export default class ApplicationSerializer extends JSONAPISerializer {
|
||||
/**
|
||||
Parse the links in the JSONAPI response and convert to a meta-object.
|
||||
Inlined from the ember-data-table package.
|
||||
*/
|
||||
normalizeQueryResponse(store, clazz, payload) {
|
||||
const result = super.normalizeQueryResponse(...arguments);
|
||||
result.meta = result.meta || {};
|
||||
|
||||
if (payload.links) {
|
||||
result.meta.pagination = createPageMeta(payload.links);
|
||||
}
|
||||
if (payload.meta) {
|
||||
result.meta.count = payload.meta.count;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
Transforms link URLs to objects containing metadata
|
||||
E.g.
|
||||
{
|
||||
previous: '/streets?page[number]=1&page[size]=10&sort=name
|
||||
next: '/streets?page[number]=3&page[size]=10&sort=name
|
||||
}
|
||||
|
||||
will be converted to
|
||||
|
||||
{
|
||||
previous: { number: 1, size: 10 },
|
||||
next: { number: 3, size: 10 }
|
||||
}
|
||||
*/
|
||||
function createPageMeta(data) {
|
||||
let meta = {};
|
||||
|
||||
Object.keys(data).forEach((type) => {
|
||||
const link = data[type];
|
||||
meta[type] = {};
|
||||
|
||||
if (link) {
|
||||
//extracts from '/path?foo=bar&baz=foo' the string: foo=bar&baz=foo
|
||||
const query = link.split(/\?(.+)/)[1] || '';
|
||||
|
||||
query.split('&').forEach((pairs) => {
|
||||
const [param, value] = pairs.split('=');
|
||||
|
||||
if (decodeURIComponent(param) === 'page[number]') {
|
||||
meta[type].number = parseInt(value);
|
||||
} else if (decodeURIComponent(param) === 'page[size]') {
|
||||
meta[type].size = parseInt(value);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
return meta;
|
||||
}
|
||||
Reference in New Issue
Block a user