diff -r 5ef3bfef0bff -r 48458e099b05 cms/app-client/app/routes/application.js --- 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; } }