2 |
2 |
3 import _ from 'lodash/lodash'; |
3 import _ from 'lodash/lodash'; |
4 |
4 |
5 export default JSONAPISerializer.extend({ |
5 export default JSONAPISerializer.extend({ |
6 |
6 |
7 serialize: function(response, request) { |
7 serialize: function (response, request) { |
8 // Remove models with no name |
8 |
9 response.models = response.models.filter(element => element.label); |
9 // Remove models with no name |
10 // Alphabetical order |
10 response.models = response.models.filter(element => element.label); |
11 if(request.queryParams.sort === 'alphabetical') { |
11 |
12 response.models.sort(function(a, b) { |
12 let qParams = request.queryParams['theme']; |
13 var aLabel = a.label.toUpperCase(); |
13 if (qParams) { |
14 var bLabel = b.label.toUpperCase(); |
14 response.models = response.models |
15 if (aLabel < bLabel) { return -1; } |
15 .slice(0, response.models.length / Math.pow(2, qParams.length)) |
16 if (aLabel > bLabel) { return 1; } |
16 .map(t => { |
17 return 0; |
17 t.count = Math.max(Math.floor(t.count / 2), 1); |
18 }); |
18 return t; |
19 // Descending order |
19 }); |
20 } else if(request.queryParams.sort === 'descending') { |
|
21 response.models.sort(function(a, b) { |
|
22 return b.count - a.count; |
|
23 }); |
|
24 } |
|
25 var array = []; |
|
26 if(typeof request.queryParams.index !== 'undefined' && typeof request.queryParams.limit !== 'undefined') { |
|
27 var begin = parseInt(request.queryParams.index * request.queryParams.limit) || 0; |
|
28 var end = parseInt(begin + (request.queryParams.limit - 1)); |
|
29 array = response.models.slice(begin, end); |
|
30 } else { |
|
31 array = response.models; |
|
32 } |
|
33 return { 'themes': _(array).map((theme) => { return [theme.id, {count: theme.count, label: theme.label}];}).object().value() }; |
|
34 } |
20 } |
35 |
21 |
|
22 let total = response.models.length; |
|
23 |
|
24 // Alphabetical order |
|
25 if (request.queryParams.sort === 'alphabetical') { |
|
26 response.models.sort(function (a, b) { |
|
27 var aLabel = a.label.toUpperCase(); |
|
28 var bLabel = b.label.toUpperCase(); |
|
29 if (aLabel < bLabel) { return -1; } |
|
30 if (aLabel > bLabel) { return 1; } |
|
31 return 0; |
|
32 }); |
|
33 // Descending order |
|
34 } else if (request.queryParams.sort === 'descending') { |
|
35 response.models.sort(function (a, b) { |
|
36 return b.count - a.count; |
|
37 }); |
|
38 } |
|
39 var array = []; |
|
40 if (typeof request.queryParams.index !== 'undefined' && typeof request.queryParams.limit !== 'undefined') { |
|
41 var begin = parseInt(request.queryParams.index) * parseInt(request.queryParams.limit) || 0; |
|
42 var end = begin + parseInt(request.queryParams.limit); |
|
43 array = response.models.slice(begin, end); |
|
44 } else { |
|
45 array = response.models; |
|
46 } |
|
47 return { |
|
48 themes: _(array).map((theme) => { return [theme.id, { count: theme.count, label: theme.label }]; }).object().value(), |
|
49 meta: { |
|
50 total: total |
|
51 } |
|
52 }; |
|
53 } |
|
54 |
36 }); |
55 }); |