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 }) } } }