import Ember from 'ember' import layout from '../templates/components/sortable-table-header' export default Ember.Component.extend layout: layout tagName: 'th' classNames: ['sortable-table-header'] classNameBindings: ['isSortedByKey:sorted:not-sorted-by', 'sortDirectionClass'] filters: Ember.Object.create() tScope: '' defaultDirection: '' # asc or desc direction: 'asc' init: -> @_super arguments... Ember.defineProperty @, 'filter_calls', Ember.computed.alias("filters.filter_calls") sortDirectionClass: Ember.computed 'isSortedByKey', -> return false unless @get('isSortedByKey') if @get('direction') is 'desc' then 'descending' else 'ascending' isSortedByKey: Ember.computed 'filters.s', -> return false unless s = @get('filters.s') if Ember.isArray s return false unless sort_statement = Ember.get(s, 'firstObject') else if typeof s is 'string' sort_statement = s else false [sort_key, direction] = sort_statement.split(/\s+/) direction ||= 'asc' @set 'direction', direction sort_key is @get('key') headerContent: Ember.computed 'key', 'tScope', -> return '?' unless key = @get('key') if t_scope = @get('tScope') t key, scope: t_scope else key.replace(/[_\W]+/g, ' ').capitalize() click: -> return unless key = @get('key') if isSortedByKey = @get('isSortedByKey') if @get('direction') is 'asc' @set 'filters.s', "#{key} desc" else @set 'filters.s', "#{key} asc" else default_direction = @get('defaultDirection') default_direction ||= if key.match /date|(_at$)/ then 'desc' else 'asc' default_direction = 'asc' if default_direction is 'ascending' default_direction = 'desc' if default_direction is 'descending' @set 'filters.s', "#{key} #{default_direction}" @get('model')?.reload?()