blob: 76370f554cd976165f904c496d3eea4f157c0f23 [file] [log] [blame]
/********************************************************************************
* Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
*
* See the NOTICE file(s) distributed with this work for additional
* information regarding copyright ownership.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0.
*
* SPDX-License-Identifier: EPL-2.0
*
********************************************************************************/
import { Component, ViewChild, Input, OnChanges, SimpleChanges } from '@angular/core';
import { LazyLoadEvent, Column } from 'primeng/primeng';
import { Table } from 'primeng/table';
import { Node } from '../../../navigator/node';
import { ChartViewerDataService, getDataArray } from '../../services/chart-viewer-data.service';
import { MeasuredValues } from '../../model/chartviewer.model';
@Component({
selector: 'mdm5-dataTable',
templateUrl: 'data-table.component.html',
providers: []
})
export class DataTableComponent implements OnChanges {
@ViewChild('datatable')
private table: Table;
@Input()
channelGroup = new Node();
@Input()
channels = [new Node()];
tableLoading = false;
cols: Column[] = [];
totalRecords = 0;
recordsPerPage = 10;
datapoints = [];
constructor(private chartviewerService: ChartViewerDataService) {
}
ngOnChanges(changes: SimpleChanges) {
for (let propName in changes) {
if (propName === 'channelGroup' || propName === 'channels') {
this.table.reset();
}
}
}
load(mv: MeasuredValues[]) {
let zip = (rows => rows[0].map((_, c) => rows.map(row => row[c])));
this.cols = mv.map((m, i) => Object.assign(new Column(), { header: m.name, field: i }));
this.datapoints = zip(mv.map(m => getDataArray(m).values));
}
loadLazy(event: LazyLoadEvent) {
if (this.channelGroup === undefined) {
return;
}
setTimeout(() => {
this.tableLoading = true;
this.totalRecords = this.chartviewerService.getNumberOfRows(this.channelGroup);
this.chartviewerService.loadMeasuredValues(this.channelGroup, this.channels, event.first, event.rows).subscribe(mv => {
this.load(mv);
this.tableLoading = false;
},
() => this.tableLoading = false);
}, 0);
}
}