51 lines
1.5 KiB
JavaScript
51 lines
1.5 KiB
JavaScript
import BaseComponent from './basic-component';
|
|
import { computed } from '@ember/object';
|
|
import { none, equal } from '@ember/object/computed';
|
|
|
|
export default BaseComponent.extend({
|
|
tagName: 'th',
|
|
order: computed('route.controller.sorters', function() {
|
|
return this.getDir();
|
|
}),
|
|
sorting: none('order'),
|
|
asc: equal('order', 'asc'),
|
|
desc: equal('order', 'desc'),
|
|
// classNameBindings: ['asc:sorting_asc', 'desc:sorting_desc', 'sorting:sorting'],
|
|
attributeBindings: ['style'],
|
|
getDir() {
|
|
let me = this;
|
|
let name = me.get('name');
|
|
let sorters = me.getSorters();
|
|
if (sorters) {
|
|
return sorters[name];
|
|
}
|
|
},
|
|
getSorters() {
|
|
let me = this;
|
|
let strSorters = me.get('route.controller.sorters');
|
|
if (strSorters) {
|
|
return JSON.parse(strSorters);
|
|
}
|
|
},
|
|
actions: {
|
|
sort() {
|
|
const me = this;
|
|
let sorters = me.getSorters() || {};
|
|
let name = me.get('name');
|
|
sorters[name] =
|
|
me.get('order') === 'asc' ?
|
|
'desc' : 'asc';
|
|
me.set('route.controller.sorters', JSON.stringify(sorters));
|
|
},
|
|
removeSort() {
|
|
let me = this;
|
|
let sorters = me.getSorters();
|
|
if (sorters) {
|
|
delete sorters[me.get('name')];
|
|
me.set('route.controller.sorters',
|
|
JSON.stringify(sorters));
|
|
}
|
|
}
|
|
}
|
|
});
|