import { Directive, EventEmitter, Input, Output } from '@angular/core'; export interface SortEvent { column: string reverse: boolean } @Directive({ selector: 'th[sortable]', host: { '[class.asc]': 'currentSortField == sortable && !currentSortReverse', '[class.des]': 'currentSortField == sortable && currentSortReverse', '(click)': 'rotate()' } }) export class SortableDirective { constructor() { } @Input() sortable: string = ''; @Input() currentSortReverse: boolean = false @Input() currentSortField: string @Output() sort = new EventEmitter(); rotate() { if (this.currentSortField != this.sortable) { this.sort.emit({column: this.sortable, reverse: false}); } else if (this.currentSortField == this.sortable && !this.currentSortReverse) { this.sort.emit({column: this.currentSortField, reverse: true}); } else { this.sort.emit({column: null, reverse: false}); } } }