1 import Ember from 'ember'; |
1 import Ember from 'ember'; |
2 import _ from 'lodash/lodash'; |
2 import _ from 'lodash/lodash'; |
|
3 import RSVP from 'rsvp'; |
|
4 import ENV from 'app-client/config/environment'; |
|
5 import URI from 'urijs'; |
3 |
6 |
4 export default Ember.Route.extend({ |
7 export default Ember.Route.extend({ |
5 |
8 |
6 filter: Ember.inject.service(), |
9 filter: Ember.inject.service(), |
7 page: 1, |
10 constants: Ember.inject.service(), |
8 limit: 10, |
|
9 |
11 |
10 documents: [], |
12 model: Ember.observer('page', function(params) { |
11 model: Ember.observer('page', function() { |
13 var filterQueryArgs = _.clone(this.get('filter').get('queryParamsValues')); |
12 var self = this; |
14 var promise = this.store.query('document', _.merge(filterQueryArgs, { |
13 var promise = this.store.query('document', { |
15 page: params['page'], |
14 page: this.get('page'), |
16 perpage: this.get('constants').DOCUMENTS_PAGINATION_PERPAGE |
15 perpage: this.get('limit') |
17 })); |
16 }); |
|
17 promise.then(function(value) { |
|
18 if(self.controller) { |
|
19 self.controller.set('page', self.get('page')); |
|
20 self.controller.set('documents', self.get('documents')); |
|
21 } |
|
22 self.set('documents', value); |
|
23 }); |
|
24 return promise; |
18 return promise; |
25 }), |
19 }), |
26 |
|
27 setupController: function(controller) { |
|
28 this._super(...arguments); |
|
29 controller.set('page', this.get('page')); |
|
30 controller.set('limit', this.get('limit')); |
|
31 controller.set('documents', this.get('documents')); |
|
32 }, |
|
33 |
20 |
34 /** |
21 /** |
35 Serializes value of the query parameter based on defaultValueType |
22 Serializes value of the query parameter based on defaultValueType |
36 @method serializeQueryParam |
23 @method serializeQueryParam |
37 @param {Object} value |
24 @param {Object} value |
59 return this.get('filter').deserializeQueryParam(value, urlKey, defaultValueType); |
46 return this.get('filter').deserializeQueryParam(value, urlKey, defaultValueType); |
60 } |
47 } |
61 return this._super(value, urlKey, defaultValueType); |
48 return this._super(value, urlKey, defaultValueType); |
62 }, |
49 }, |
63 |
50 |
|
51 beforeModel: function(transition) { |
|
52 new RSVP.Promise((resolve) => { |
|
53 // succeed |
|
54 this.get('filter').setProperties(transition['queryParams']); |
|
55 resolve(); |
|
56 }); |
|
57 return this._super(...arguments); |
|
58 }, |
|
59 |
|
60 queryParams: Ember.computed('filter', function() { |
|
61 var res = this.get('filter').getRouteQueryParams(); |
|
62 res['page'] = { refreshModel: true }; |
|
63 res['notice'] = { refreshModel: false }; |
|
64 return res; |
|
65 }), |
64 |
66 |
65 actions: { |
67 actions: { |
66 |
|
67 setPageQueryparams: function(type) { |
|
68 var page = this.get('page'); |
|
69 if(type === 'previous') { |
|
70 page = page - 1; |
|
71 } else if(type === 'next') { |
|
72 page = page + 1; |
|
73 } |
|
74 this.propertyWillChange('page'); |
|
75 this.set('page', page); |
|
76 this.propertyDidChange('page'); |
|
77 }, |
|
78 |
|
79 |
|
80 willTransition: function() { |
|
81 // Prevent navigation from removing query parameters |
|
82 this.transitionTo({ queryParams: this.controller.get('queryParams') }); |
|
83 }, |
|
84 |
68 |
85 didTransition: function() { |
69 didTransition: function() { |
86 // Append body classname depending on the route |
70 // Append body classname depending on the route |
87 Ember.$('body').removeClass((this.controller.get('currentPath') || '').replace(/\//g, '-').dasherize()); |
71 Ember.$('body').removeClass((this.controller.get('currentPath') || '').replace(/\//g, '-').dasherize()); |
88 Ember.run.once(this, function() { |
72 Ember.run.once(this, function() { |
89 Ember.$('body').addClass((this.controller.get('currentPath') ||'').replace(/\//g, '-').dasherize()); |
73 Ember.$('body').addClass((this.controller.get('currentPath') ||'').replace(/\//g, '-').dasherize()); |
90 }); |
74 }); |
|
75 // change external navigations links |
|
76 if(ENV.APP.navigationLinksSelector) { |
|
77 return new RSVP.Promise((resolve) => { |
|
78 setTimeout(() => { |
|
79 let hash = window.location.hash; |
|
80 if(!hash) { |
|
81 return true; |
|
82 } |
|
83 let uriHash = URI(hash.substr(1)); |
|
84 Ember.$(ENV.APP.navigationLinksSelector).each((i, l) => { |
|
85 let uri = URI(Ember.$(l).prop('href')); |
|
86 if(uri.fragment()) { |
|
87 let urifragment = URI(uri.fragment()).search(uriHash.search()); |
|
88 Ember.$(l).prop('href', uri.fragment(urifragment.href()).href()); |
|
89 } |
|
90 }); |
|
91 resolve(true); |
|
92 }, 10); |
|
93 }); |
|
94 } |
|
95 return true; |
91 } |
96 } |
92 |
97 |
93 } |
98 } |
94 |
99 |
95 }); |
100 }); |