Adapt theme query limit and offset and sorting order in fixtures
authorChloe Laisne <chloe.laisne@gmail.com>
Sat, 09 Jul 2016 00:59:32 +0200
changeset 236 ac6928e86d14
parent 235 51acae6af8a3
child 237 69a9f3687902
Adapt theme query limit and offset and sorting order in fixtures
cms/app-client/app/routes/tabs/thematiques.js
cms/app-client/mirage/serializers/theme.js
--- a/cms/app-client/app/routes/tabs/thematiques.js	Fri Jul 08 18:41:32 2016 +0200
+++ b/cms/app-client/app/routes/tabs/thematiques.js	Sat Jul 09 00:59:32 2016 +0200
@@ -2,8 +2,16 @@
 
 export default Ember.Route.extend({
 
+	page: 0,
+	limit: 40,
+	sort: 'alphabetical',
+
     model: function() {
-        return this.store.findAll('theme');
+        return this.store.query('theme', {
+        	'limit': this.get('limit'),
+        	'page': this.get('page'),
+        	'sort': this.get('sort')
+        });
     }
 
 });
--- a/cms/app-client/mirage/serializers/theme.js	Fri Jul 08 18:41:32 2016 +0200
+++ b/cms/app-client/mirage/serializers/theme.js	Sat Jul 09 00:59:32 2016 +0200
@@ -3,7 +3,28 @@
 import _ from 'lodash/lodash';
 
 export default JSONAPISerializer.extend({
-    serialize(response) {
-        return _(response.models).map((theme) => { return [theme.id, {count: theme.count, label: theme.label}];}).object().value();
+
+    serialize: function(response, request) {
+    	// Remove models with no name
+    	response.models = response.models.filter(element => element.label);
+    	// Alphabetical order
+    	if(request.queryParams.sort === 'alphabetical') {
+    		response.models.sort(function(a, b) {
+				var aLabel = a.label.toUpperCase();
+				var bLabel = b.label.toUpperCase();
+				if (aLabel < bLabel) return -1;
+				if (aLabel > bLabel) return 1;
+				return 0;
+			});
+		// Descending order
+    	} else if(request.queryParams.sort === 'descending') {
+    		response.models.sort(function(a, b) {
+				return b.count - a.count;
+			});
+    	}
+    	var index = request.queryParams.page * request.queryParams.limit;
+    	var slice = response.models.slice(index, index + request.queryParams.limit);
+        return _(slice).map((theme) => { return [theme.id, {count: theme.count, label: theme.label}];}).object().value();
     }
+
 });