import Ember from 'ember'; import BaseComponentMixin from '../mixins/components/base-component'; export default Ember.Component.extend(BaseComponentMixin, { tagName: 'th', order: Ember.computed('route.controller.sorters', function() { return this.getDir(); }), sorting: Ember.computed.none('order'), asc: Ember.computed.equal('order', 'asc'), desc: Ember.computed.equal('order', 'desc'), classNameBindings: ['asc:sorting_asc', 'desc:sorting_desc', 'sorting:sorting'], getDir() { let me = this; let name = me.get('name'); let sorters = me.getSorters(); if (sorters && sorters.length) { let sorter = sorters.find(sorter => sorter.hasOwnProperty(name)); if (sorter) { return sorter[name]; } } }, getSorters() { let me = this; let strSorters = me.get('route.controller.sorters'); if (strSorters) { return JSON.parse(strSorters); } }, actions: { sort() { let me = this; let sorters = me.getSorters() || []; let name = me.get('name'); if (sorters.length) { sorters = sorters.filter(sorter => !sorter.hasOwnProperty(name)); } let sorter = {}; sorter[name] = me.get('order') === 'asc' ? 'desc' : 'asc'; // prepend sort sorters.unshift(sorter); me.set('route.controller.sorters', JSON.stringify(sorters)); }, removeSort() { let me = this; let sorters = me.getSorters(); if (sorters) { let name = me.get('name'); me.set('route.controller.sorters', JSON.stringify(sorters.filter(sorter => !sorter.hasOwnProperty(name)))); } } } });