Permalink
Cannot retrieve contributors at this time
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
PowerPanel-Frontend/src/app/visualize-one/visualize-one.component.ts
Go to fileThis commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
258 lines (247 sloc)
9.29 KB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import { Component, OnInit, ViewChild, ElementRef } from '@angular/core'; | |
import { GeneratorService } from '../services/generator.service'; | |
import { DataService } from '../services/data.service'; | |
import { VisualizeService } from '../services/visualize.service'; | |
import { Router } from '@angular/router'; | |
import { Chart } from 'chart.js'; | |
import { Injectable } from '@angular/core'; | |
import { HttpClient, HttpHeaders } from '@angular/common/http'; | |
import 'rxjs/add/operator/map'; | |
import { $ } from 'protractor'; | |
import * as moment from 'moment'; | |
import { MatDatepickerModule, MatDatepicker } from '@angular/material/datepicker'; | |
import {LoginService} from '../services/login.service'; | |
import { GeneratorObject } from '../generator-object'; | |
@Component({ | |
selector: 'app-visualize-one', | |
templateUrl: './visualize-one.component.html', | |
styleUrls: ['./visualize-one.component.css'] | |
}) | |
export class VisualizeOneComponent implements OnInit { | |
public generators$: Array<GeneratorObject>; | |
public today$: any = null; | |
public chart$: Object; | |
public genName$: any = null; | |
public count: any = null; | |
public dataType$: any = null; | |
public dataSig$: any = null; | |
public unit$: any = null; | |
public function$: any = null; | |
public range$: any = null; | |
public startTime$: any = null; | |
public endTime$: any = null; | |
public dataNames$; | |
public laymanDataVal$: any = null; | |
public chart: any = null; | |
public signal$ = false; | |
private jsonToken$: string; | |
events: string[] = []; | |
public errorMessage: any = null; | |
@ViewChild('time_span') timeSpan: ElementRef; | |
@ViewChild('start_time') startTime: ElementRef; | |
@ViewChild('end_time') endTime: ElementRef; | |
constructor(public data: DataService, public graphData: VisualizeService, public genData: GeneratorService, | |
private router: Router, private http: HttpClient, private login: LoginService) { } | |
returnToStatistics() { | |
this.router.navigateByUrl('/statistics'); | |
localStorage.removeItem('data_type'); | |
} | |
resetAndRemakeChart() { | |
const errorMessage = []; | |
let optionalErrorMessage = ''; | |
const genCount = 1; | |
this.signal$ = false; | |
const funcVals = Array.prototype.slice.call(document.querySelectorAll('#func_select option:checked'), 0).map(function (v, i, a) { | |
return v.value; | |
}); | |
let funcVal = ''; | |
if (funcVals[0] !== '') { | |
funcVal = funcVals[0] + ''; | |
} | |
const rangeVals = Array.prototype.slice.call(document.querySelectorAll('#func_time_select option:checked'), 0).map(function (v, i, a) { | |
return v.value; | |
}); | |
let rangeVal = ''; | |
if (rangeVal[0] !== '') { | |
rangeVal = rangeVals[0] + ''; | |
} | |
const dataType = localStorage.getItem('data_type'); | |
let dataVal; | |
if (this.count === 0) { | |
if (dataType === null) { | |
dataVal = 'intake.pressure'; | |
} else { | |
dataVal = dataType; | |
} | |
} else if (dataType === null) { | |
const dataVals = Array.prototype.slice.call(document.querySelectorAll('#data_select option:checked'), 0).map(function (v, i, a) { | |
return v.value; | |
}); | |
if (dataVals[0] !== null) { | |
this.laymanDataVal$ = dataVal = dataVals[0] + ''; | |
if (dataVals[0] !== 'none') { | |
dataVal = this.data.convertNames(dataVal, 'metric'); | |
} else { | |
dataVal = dataVals[0]; | |
} | |
} else { | |
dataVal = 'metric'; | |
errorMessage.push(dataVal); | |
this.signal$ = true; | |
} | |
} else { | |
dataVal = dataType; | |
} | |
if (dataVal !== null) { | |
this.laymanDataVal$ = this.data.convertNames(dataVal, 'layman'); | |
this.dataType$ = this.laymanDataVal$; | |
} | |
let startTime = ''; | |
let endTime = ''; | |
if (this.count === 0) { | |
startTime = this.today$; | |
endTime = this.today$; | |
} else { | |
startTime = this.startTime.nativeElement.value; | |
endTime = this.endTime.nativeElement.value; | |
} | |
let timeStart; | |
let timeEnd; | |
if (startTime === '') { | |
timeStart = 'time start'; | |
errorMessage.push(timeStart); | |
this.signal$ = true; | |
} else if (endTime === '') { | |
timeEnd = 'time end'; | |
errorMessage.push(timeEnd); | |
this.signal$ = true; | |
} | |
const startArray = startTime.split('-'); | |
const endArray = endTime.split('-'); | |
let startNumArray; | |
let endNumArray; | |
if (startArray.length === 3 && endArray.length === 3) { | |
startNumArray = [parseInt(startArray[0], 10), parseInt(startArray[1], 10), parseInt(startArray[2], 10)]; | |
endNumArray = [parseInt(endArray[0], 10), parseInt(endArray[1], 10), parseInt(endArray[2], 10)]; | |
if (startNumArray[0] === endNumArray[0]) { // if years are equal | |
if (startNumArray[1] === endNumArray[1]) { // if months are equal | |
if (startNumArray[2] <= endNumArray[2]) { // if start days are less than or equal | |
timeStart = startArray[0] + '/' + startArray[1] + '/' + startArray[2] + '-00:00:00'; | |
timeEnd = endArray[0] + '/' + endArray[1] + '/' + endArray[2] + '-23:59:59'; | |
} else { | |
timeStart = 'time start'; | |
errorMessage.push(timeStart); | |
this.signal$ = true; | |
} | |
} else if (startNumArray[1] < endNumArray[1]) { // if start month is less | |
timeStart = startArray[0] + '/' + startArray[1] + '/' + startArray[2]; | |
timeEnd = endArray[0] + '/' + endArray[1] + '/' + endArray[2]; | |
} else { | |
timeStart = 'time start'; | |
errorMessage.push(timeStart); | |
this.signal$ = true; | |
} | |
} else if (startNumArray[0] < endNumArray[0]) { // if start year is less | |
timeStart = startArray[0] + '/' + startArray[1] + '/' + startArray[2]; | |
timeEnd = endArray[0] + '/' + endArray[1] + '/' + endArray[2]; | |
} else { | |
timeStart = 'time start'; | |
errorMessage.push(timeStart); | |
this.signal$ = true; | |
} | |
} else { | |
timeStart = 'time start'; | |
errorMessage.push(timeStart); | |
this.signal$ = true; | |
} | |
if (((funcVal === 'none') && (rangeVal !== 'none')) || ((funcVal !== 'none') && (rangeVal === 'none'))) { | |
optionalErrorMessage = ' Both function and range must be defined, or neither.'; | |
this.signal$ = true; | |
} | |
this.errorMessage = ''; | |
for (let i = 0; i < errorMessage.length; i++) { | |
if (i === 0) { | |
this.errorMessage = 'Error: ' + errorMessage[i]; | |
if ((i + 1) === errorMessage.length) { | |
this.errorMessage = this.errorMessage + ' is invalid.'; | |
} | |
} else if (((i + 1) === errorMessage.length) && (i !== 0)) { | |
this.errorMessage = this.errorMessage + ' and ' + errorMessage[i] + ' are invalid.'; | |
} else { | |
this.errorMessage = this.errorMessage + ', ' + errorMessage[i] + ' is invalid.'; | |
} | |
} | |
if (this.errorMessage !== null) { | |
this.errorMessage = this.errorMessage + '' + optionalErrorMessage; | |
} else { | |
this.errorMessage = optionalErrorMessage; | |
} | |
if (this.signal$ === false) { | |
const labels = []; | |
const data = []; | |
try { | |
// create chart based on user input | |
this.graphData.getDataForVis(this.jsonToken$, timeStart, timeEnd, funcVal, localStorage.getItem('gen_id'), dataVal, rangeVal) | |
.subscribe((graphData) => { | |
this.chart$ = graphData; | |
let sig; | |
let count = 0; | |
let realCount; | |
for (let n = 0; n < (Object.keys(this.chart$['outputs'][0]['dps']).length); n++) { | |
labels.push(this.chart$['outputs'][0]['dps'][n][0]); | |
if (n === 0) { | |
sig = this.chart$['outputs'][0]['dps'][n][0]; | |
count = 1; | |
} else if (sig === this.chart$['outputs'][0]['dps'][n][0]) { | |
realCount = count; | |
} else { | |
count++; | |
} | |
} | |
for (let c = 0; c < genCount; c++) { | |
const genData = []; | |
for (let n = 0; n < (Object.keys(this.chart$['outputs'][0]['dps']).length); n++) { | |
genData.push(this.chart$['outputs'][0]['dps'][n][c + 1]); | |
} | |
data.push(genData); | |
} | |
if (this.chart !== null) { | |
this.chart.destroy(); | |
} | |
this.chart = this.graphData.createChart(labels, data, [localStorage.getItem('gen_name')]); | |
this.unit$ = this.data.getUnits(dataVal); | |
this.startTime$ = startArray[1] + '/' + startArray[2] + '/' + startArray[0]; | |
this.endTime$ = endArray[1] + '/' + endArray[2] + '/' + endArray[0]; | |
this.function$ = funcVal; | |
this.range$ = rangeVal; | |
}); | |
} catch (err) { | |
return err; | |
} | |
} else if (this.signal$ === true) { | |
console.log('invalid entry'); | |
} | |
this.count = 1; | |
} | |
async ngOnInit() { | |
const today = new Date().toISOString().split('T')[0]; | |
this.today$ = today; | |
this.dataNames$ = this.data.getAllNames('layman'); | |
this.jsonToken$ = await this.login.getToken(); | |
const dataType = localStorage.getItem('data_type'); | |
if (dataType !== null) { | |
this.dataSig$ = false; | |
} else { | |
this.dataSig$ = true; | |
} | |
this.generators$ = await this.genData.getGenerators(this.jsonToken$); | |
this.resetAndRemakeChart(); | |
/* | |
try { | |
this.genData.getGenerators(this.jsonToken$).subscribe((genData) => { | |
this.generators$ = genData; | |
this.resetAndRemakeChart(); | |
return this.generators$; | |
});*/ | |
} | |
} |