import { AddingColumnEvent, AddColumnAtPositionEvent, EditCellEvent, RemoveColumnEvent, RowClickEvent, SortColumnEvent, ToggleSubfieldEvent } from './events'; import { ColumnState } from './column-state.class'; import { ColumnConfig, ColumnLookup, Row, SortingMode } from './types'; import { EventEmitter, Injectable } from '@angular/core'; @Injectable() export class TableStateService { rows: Row[]; columnsConfig: ColumnConfig[]; visibleColumns: string[]; columnsLookup: ColumnLookup; sortedColumnName: string | undefined; addingColumnIndex: number | undefined; initialSortColumn: string | undefined; visibleColumnsBeforePreview: string[] | undefined; // defaults reorderingEnabled = true; rowsSortingMode: SortingMode = 'default'; changeColumnVisibility = true; // output events addingColumn = new EventEmitter(); addColumn = new EventEmitter(); removeColumn = new EventEmitter(); sortColumn = new EventEmitter(); sortColumnInit = new EventEmitter(); toggleSubfield = new EventEmitter(); visibleColumnsChange = new EventEmitter(); rowClick = new EventEmitter(); // editCell = new EventEmitter(); constructor() { } get hasAllColumnsVisible(): boolean { if (!this.visibleColumns) { return true; } return this.visibleColumns.length === this.columnsConfig.length; } isSorted(column: ColumnState, direction: string | undefined) { if (!column) { return; } let isSorted: boolean = column.config.id === this.sortedColumnName; if (!direction) { return isSorted; } else { let directionMatch: boolean = column.currentSortDirection === direction; return isSorted && directionMatch; } } }