import { Component, Input, ChangeDetectionStrategy, Output, EventEmitter, ViewEncapsulation, OnInit } from '@angular/core'; // import { SearchQueryParams } from '../../store/model'; import { Attribute, Dataset } from 'src/app/metamodel/model'; @Component({ selector: 'app-datatable', templateUrl: 'datatable.component.html', styleUrls: ['datatable.component.css'], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None }) export class DatatableComponent implements OnInit { @Input() dataset: Dataset; // @Input() queryParams: SearchQueryParams; @Input() datasetAttributeList: Attribute[]; @Input() outputList: number[]; @Input() data: any[]; @Input() dataLength: number; @Input() selectedData: any[] = []; @Input() processWip: boolean = false; @Input() processDone: boolean = false; @Input() processId: string = null; @Output() getData: EventEmitter<[number, number, number, string]> = new EventEmitter(); @Output() addSelectedData: EventEmitter<number | string> = new EventEmitter(); @Output() deleteSelectedData: EventEmitter<number | string> = new EventEmitter(); @Output() executeProcess: EventEmitter<string> = new EventEmitter(); nbItems = 10; page = 1; sortedCol: number = null; sortedOrder: string = null; ngOnInit() { this.sortedCol = this.datasetAttributeList.find(a => a.search_flag === 'ID').id; this.sortedOrder = 'a'; this.getData.emit([this.page, this.nbItems, this.sortedCol, this.sortedOrder]); } getOutputList(): Attribute[] { return this.datasetAttributeList .filter(a => this.outputList.includes(a.id)) .sort((a, b) => a.output_display - b.output_display); } getAttributeId(attributeName: string): number { const attribute = this.datasetAttributeList.find(a => a.name === attributeName); return attribute.id; } toggleSelection(datum: any): void { const attribute = this.datasetAttributeList.find(a => a.search_flag === 'ID'); const index = this.selectedData.indexOf(datum[attribute.label]); if (index > -1) { this.deleteSelectedData.emit(datum[attribute.label]); } else { this.addSelectedData.emit(datum[attribute.label]); } } isSelected(datum: any): boolean { const attribute = this.datasetAttributeList.find(a => a.search_flag === 'ID'); if (this.selectedData.indexOf(datum[attribute.label]) > -1) { return true; } return false; } noSelectedData(): boolean { return this.selectedData.length < 1; } emitProcess(typeProcess: string): void { this.executeProcess.emit(typeProcess); } changePage(nb: number): void { this.page = nb; this.getData.emit([this.page, this.nbItems, this.sortedCol, this.sortedOrder]); } changeNbItems(nb: number): void { this.nbItems = nb; this.getData.emit([this.page, this.nbItems, this.sortedCol, this.sortedOrder]); } sort(id: number): void { if (id === this.sortedCol) { this.sortedOrder = this.sortedOrder === 'a' ? 'd' : 'a'; } else { this.sortedCol = id; this.sortedOrder = 'a'; } this.getData.emit([this.page, this.nbItems, this.sortedCol, this.sortedOrder]); } }