import {HighChartData} from '../types/high-chart-data'; import {HighChartSeries} from '../types/high-chart-series'; import * as Collections from 'immutable'; import {ChartTemplate} from '../types/chart'; export class Formatter { private highChartData: HighChartData; constructor() { this.highChartData = new HighChartData(null, null, null); } public loadDataBarOrColumnOrLine(config: ChartTemplate, data: any, categoryColumm: string, dataColumn: string, type?: string): void { this.highChartData.categories = []; this.highChartData.series = Collections.List(); this.seriesWith_Cat_Data(data, categoryColumm, dataColumn, type); this.assignToConfig(config); } public loadDataBarOrColumnOrLineWithColors(config: ChartTemplate, data: any, categoryColumn: string, dataColumn: string, colors: string[]): void { this.highChartData.colors = new Array(); this.highChartData.categories = []; this.highChartData.series = Collections.List(); this.seriesWith_Cat_Data_Color(data, categoryColumn, dataColumn, colors); this.assignToConfig(config); } public loadDataOneBar_TwoScatterSeries(config: ChartTemplate, data: any, categoryColumn: string, dataName: string, dataColumn: string, colorsColumn: string, scatterOneName: string, scatterOneColumn: string, scatterTwoName: string, scatterTwoColumn: string): void { this.highChartData.colors = new Array(); this.highChartData.categories = []; this.highChartData.series = Collections.List(); this.seriesColumnTwoScatter(data, categoryColumn, dataName, dataColumn, colorsColumn, scatterOneName, scatterOneColumn, scatterTwoName, scatterTwoColumn); this.assignToConfig(config); } public loadDataOneBar_OneScatterSeries(config: ChartTemplate, data: any, categoryColumn: string, dataName: string, dataColumn: string, colorsColumn: string, scatterOneName: string, scatterOneColumn: string): void { this.highChartData.categories = []; this.highChartData.series = Collections.List(); this.seriesColumnOneScatter(data, categoryColumn, dataName, dataColumn, colorsColumn, scatterOneName, scatterOneColumn); this.assignToConfig(config); } public loadDataMultiSeriesBarOrColumn(config: ChartTemplate, data: any, categoryColumn: string, dataNames: string[], dataColumns: string[], seriesType?: string[], seriesColors?: string[]) { this.highChartData.categories = data[categoryColumn]; this.highChartData.series = Collections.List(); if (typeof seriesType === 'undefined' || seriesType === null) { for (let i = 0; i < dataNames.length; i++) { const obj: HighChartSeries = this.getSeriesHighChartDataWithout('type', 'color'); obj.name = dataNames[i]; obj.data = data[dataColumns[i]]; this.highChartData.series = Collections.List(this.highChartData.series).push(obj); } } else if (typeof seriesType !== 'undefined' && (typeof seriesColors === 'undefined' || seriesColors === null)) { for (let i = 0; i < dataNames.length; i++) { const obj: HighChartSeries = this.getSeriesHighChartDataWithout('color'); obj.name = dataNames[i]; obj.type = seriesType[i]; obj.data = data[dataColumns[i]]; this.highChartData.series = Collections.List(this.highChartData.series).push(obj); } } else { for (let i = 0; i < dataNames.length; i++) { const obj: HighChartSeries = this.getSeriesHighChartDataWithout(); obj.name = dataNames[i]; obj.type = seriesType[i]; obj.color = seriesColors[i]; obj.data = data[dataColumns[i]]; this.highChartData.series = Collections.List(this.highChartData.series).push(obj); } } this.assignToConfig(config); } private getSeriesHighChartDataWithout(...args: string[]): HighChartSeries { const tempSeries: HighChartSeries = new HighChartSeries(); for (const str of args) { if (str.includes('color')) { tempSeries.color = null; } if (str.includes('type')) { tempSeries.type = null; } if (str.includes('data')) { tempSeries.data = null; } if (str.includes('name')) { tempSeries.name = null; } } return tempSeries; } private seriesWith_Cat_Data(data: any, catColumn: string, dataColumn: string, type?: string): HighChartData { try { this.highChartData.categories = data[catColumn]; const obj: HighChartSeries = this.getSeriesHighChartDataWithout('name', 'color'); obj.data = data[dataColumn]; obj.type = type ? type : null; this.highChartData.series = Collections.List([obj]); return this.highChartData; } finally { } } private seriesWith_Cat_Data_Color(data: any, categoryColumn: string, dataColumn: string, colors: string[]): HighChartData { try { this.highChartData.categories = data[categoryColumn]; this.highChartData.colors = colors; const obj: HighChartSeries = this.getSeriesHighChartDataWithout('name', 'type', 'color'); obj.data = data[dataColumn]; this.highChartData.series = Collections.List().push(obj); return this.highChartData; } finally { } } private seriesColumnTwoScatter(data: any, categoryColumn: string, dataName: string, dataColumn: string, colorsColumn: string, scatterOneName: string, scatterOneColumn: string, scatterTwoName: string, scatterTwoColumn: string): HighChartData { let obj: HighChartSeries; try { this.highChartData.categories = data[categoryColumn]; if (colorsColumn !== null && colorsColumn !== undefined) { this.highChartData.colors = data[colorsColumn]; } obj = this.getSeriesHighChartDataWithout('color'); obj.name = dataName; obj.data = data[dataColumn]; this.highChartData.series = Collections.List(this.highChartData.series).push(obj); obj = this.getSeriesHighChartDataWithout('color'); obj.name = scatterOneName; obj.type = 'scatter'; obj.data = data[scatterOneColumn]; this.highChartData.series = Collections.List(this.highChartData.series).push(obj); obj = this.getSeriesHighChartDataWithout('color'); obj.name = scatterTwoName; obj.type = 'scatter'; obj.data = data[scatterTwoColumn]; this.highChartData.series = Collections.List(this.highChartData.series).push(obj); return this.highChartData; } finally { } } private seriesColumnOneScatter(data: any, categoryColumn: string, dataName: string, dataColumn: string, colorsColumn: string, scatterOneName: string, scatterOneColumn: string): HighChartData { let obj: HighChartSeries; try { this.highChartData.categories = data[categoryColumn]; // dont add user colors if the column is null if (colorsColumn !== undefined && colorsColumn !== '' && colorsColumn === null) { this.highChartData.colors = data[colorsColumn]; } // column series obj = this.getSeriesHighChartDataWithout('color'); obj.name = dataName; obj.data = data[dataColumn]; this.highChartData.series = Collections.List(this.highChartData.series).push(obj); // scatter series obj = this.getSeriesHighChartDataWithout('color'); obj.name = scatterOneName; obj.type = 'scatter'; obj.data = data[scatterOneColumn]; this.highChartData.series = Collections.List(this.highChartData.series).push(obj); return this.highChartData; } finally { } } private assignToConfig(config: ChartTemplate): void { config.xAxis.categories = this.highChartData.categories; config.series = this.highChartData.series.toArray(); if (this.highChartData.colors && this.highChartData.colors.length > 0) { config.colors = this.highChartData.colors; } } }