/
category.js
98 lines (85 loc) · 2.37 KB
/
category.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
import Route from '@ember/routing/route';
import {inject as service} from '@ember/service';
import {observer} from '@ember/object';
import {on} from '@ember/object/evented';
import { get } from '@ember/object';
import InfinityModel from 'ember-infinity/lib/infinity-model';
const ExtendedInfinityModel = InfinityModel.extend({
filter: service(),
buildParams() {
let params = this._super(...arguments);
if (this.get('firstLoad')){
params['event'] = 'load_more';
}
return params;
},
afterInfinityModel(nodes) {
if (nodes.get('meta.attributes.data')) {
let attrIds = [];
nodes.get('meta.attributes.data').forEach((item) => {
if (item.id){
attrIds.push(item.id);
}
});
this.get('filter').set('attributes',
this.store.peekAll('attribute').filter(
function(attr) {
return attrIds.includes(attr.get('id'));
})
);
}
if (nodes.get('meta.filter-counter')) {
this.get('filter').set('filterCounter', nodes.get('meta.filter-counter'));
}
this.set('firstLoad', true);
}
});
export default Route.extend({
router: service(),
breadcrumbs: service(),
infinity: service(),
filter: service(),
clearBreadcrumbs: on('deactivate', function () {
this.get('breadcrumbs').setCurrentCategory(null);
}),
onFilterChange: observer('filter.filterStr', function () {
this.set('event', 'filter');
this.refresh();
}),
model(params) {
return this.get('store').peekRecord('category', params.id);
},
afterModel(model, transition) {
if (!model) {
return;
}
let params = {
'startingPage': get(transition, 'to.queryParams.page'),
'category_id': model.get('id'),
'perPage': 10,
'f': this.get('filter.filterStr')
};
if (this.get('event')) {
params['event'] = this.get('event');
this.set('event', null);
}
return this.infinity.model('node', params , ExtendedInfinityModel).then((m) => {
model.set('nodes', m);
});
},
setupController(controller, model) {
this.get('breadcrumbs').setCurrentCategory(model);
this._super(controller, model);
},
actions:{
goToPage(pageNo) {
this.get('router').transitionTo('category.filter', {
queryParams: {
page: pageNo
}
});
this.set('event', 'page');
this.refresh();
}
}
});