cms/app-client/app/routes/application.js
changeset 394 48458e099b05
parent 392 4fbe94af93e8
child 401 9ff56cc0c656
--- a/cms/app-client/app/routes/application.js	Sun Nov 06 03:44:16 2016 +0100
+++ b/cms/app-client/app/routes/application.js	Tue Nov 08 01:22:56 2016 +0100
@@ -1,36 +1,23 @@
 import Ember from 'ember';
 import _ from 'lodash/lodash';
+import RSVP from 'rsvp';
+import ENV from 'app-client/config/environment';
+import URI from 'urijs';
 
 export default Ember.Route.extend({
 
     filter: Ember.inject.service(),
-    page: 1,
-    limit: 10,
+    constants: Ember.inject.service(),
 
-    documents: [],
-    model: Ember.observer('page', function() {
-        var self = this;
-        var promise = this.store.query('document', {
-            page: this.get('page'),
-            perpage: this.get('limit')
-        });
-        promise.then(function(value) {
-            if(self.controller) {
-                self.controller.set('page', self.get('page'));
-                self.controller.set('documents', self.get('documents'));
-            }
-            self.set('documents', value);
-        });
+    model: Ember.observer('page', function(params) {
+        var filterQueryArgs = _.clone(this.get('filter').get('queryParamsValues'));
+        var promise = this.store.query('document', _.merge(filterQueryArgs, {
+            page: params['page'],
+            perpage: this.get('constants').DOCUMENTS_PAGINATION_PERPAGE
+        }));
         return promise;
     }),
 
-    setupController: function(controller) {
-        this._super(...arguments);
-        controller.set('page', this.get('page'));
-        controller.set('limit', this.get('limit'));
-        controller.set('documents', this.get('documents'));
-    },
-
     /**
       Serializes value of the query parameter based on defaultValueType
       @method serializeQueryParam
@@ -61,33 +48,51 @@
         return this._super(value, urlKey, defaultValueType);
     },
 
+    beforeModel: function(transition) {
+        new RSVP.Promise((resolve) => {
+          // succeed
+          this.get('filter').setProperties(transition['queryParams']);
+          resolve();
+        });
+        return this._super(...arguments);
+    },
+
+    queryParams: Ember.computed('filter', function() {
+        var res = this.get('filter').getRouteQueryParams();
+        res['page'] = { refreshModel: true };
+        res['notice'] = { refreshModel: false };
+        return res;
+    }),
 
     actions: {
 
-        setPageQueryparams: function(type) {
-            var page = this.get('page');
-            if(type === 'previous') {
-                page = page - 1;
-            } else if(type === 'next') {
-                page = page + 1;
-            }
-            this.propertyWillChange('page');
-            this.set('page', page);
-            this.propertyDidChange('page');
-        },
-
-
-        willTransition: function() {
-            // Prevent navigation from removing query parameters
-            this.transitionTo({ queryParams: this.controller.get('queryParams') });
-        },
-
         didTransition: function() {
             // Append body classname depending on the route
             Ember.$('body').removeClass((this.controller.get('currentPath') || '').replace(/\//g, '-').dasherize());
             Ember.run.once(this, function() {
                 Ember.$('body').addClass((this.controller.get('currentPath') ||'').replace(/\//g, '-').dasherize());
             });
+            // change external navigations links
+            if(ENV.APP.navigationLinksSelector) {
+                return new RSVP.Promise((resolve) => {
+                  setTimeout(() => {
+                    let hash = window.location.hash;
+                    if(!hash) {
+                        return true;
+                    }
+                    let uriHash = URI(hash.substr(1));
+                    Ember.$(ENV.APP.navigationLinksSelector).each((i, l) => {
+                        let uri = URI(Ember.$(l).prop('href'));
+                        if(uri.fragment()) {
+                          let urifragment = URI(uri.fragment()).search(uriHash.search());
+                          Ember.$(l).prop('href', uri.fragment(urifragment.href()).href());
+                        }
+                    });
+                    resolve(true);
+                  }, 10);
+                });
+            }
+            return true;
         }
 
     }