import { computed } from '@ember/object'; import BasicComponent from './basic-component'; export default BasicComponent.extend({ tagName: 'th', order: computed('route.controller.orders', function() { return this.getDir(); }), sorting: computed.none('order'), asc: computed.equal('order', 'asc'), desc: computed.equal('order', 'desc'), // classNameBindings: ['asc:sorting_asc', 'desc:sorting_desc', 'sorting:sorting'], attributeBindings: ['style'], getDir() { const me = this; const name = me.get('name'); const orders = me.getOrders(); if (orders && orders.length) { const order = orders.find(order => order.hasOwnProperty(name)); if (order) { return order[name]; } } }, getOrders() { const me = this; const strOrders = me.get('route.controller.orders'); if (strOrders) { return JSON.parse(strOrders); } }, actions: { sort() { const me = this; let orders = me.getOrders() || []; const name = me.get('name'); if (orders.length) { orders = orders.filter(order => !order.hasOwnProperty(name)); } const order = {}; order[name] = me.get('order') === 'asc' ? 'desc' : 'asc'; // prepend sort orders.unshift(order); me.set('route.controller.orders', JSON.stringify(orders)); }, removeSort() { const me = this; const orders = me.getOrders(); if (orders) { const name = me.get('name'); me.set('route.controller.orders', JSON.stringify(orders.filter(order => !order.hasOwnProperty(name)))); } } } });