Commit 3e74be8c authored by Kevin Yumang's avatar Kevin Yumang

SERV-2286 - refactor js file

parent a47b1ab1
//#region MAIN FUNCTIONS
function set_chart() { function set_chart() {
let chartCounter = 0; let chartCounter = 0;
...@@ -14,7 +15,6 @@ function set_chart() { ...@@ -14,7 +15,6 @@ function set_chart() {
} }
// main function
function init_chart(chartId) { function init_chart(chartId) {
// Define element // Define element
...@@ -24,21 +24,7 @@ function init_chart(chartId) { ...@@ -24,21 +24,7 @@ function init_chart(chartId) {
let elementObject = $(lineChartElement); let elementObject = $(lineChartElement);
let numberOfCharts = elementObject.attr('charts') ?? 1; let numberOfCharts = elementObject.attr('charts') ?? 1;
let multichart = (numberOfCharts > 1); set_chart_height(numberOfCharts, lineChartElement)
let rawData = elementObject.attr('raw') ? JSON.parse(elementObject.attr('raw')) : null;
console.log('raw', rawData);
console.log(numberOfCharts);
console.log(multichart);
// adjust container height before initialising the chart.
if (multichart) {
let height = (numberOfCharts * 240); // (chart height = 160 | charts spacing = 80)
lineChartElement.style.height = height + 'px';
console.log('adjusted container height', height + 'px');
}
let lineChart = echarts.init(lineChartElement); let lineChart = echarts.init(lineChartElement);
...@@ -50,7 +36,7 @@ function init_chart(chartId) { ...@@ -50,7 +36,7 @@ function init_chart(chartId) {
fontSize: 15 fontSize: 15
}); });
set_data(elementObject, multichart, numberOfCharts, rawData, function(options) { set_data(elementObject, numberOfCharts, function(options) {
lineChart.hideLoading(); lineChart.hideLoading();
lineChart.setOption(options); lineChart.setOption(options);
setResizeEvent(lineChartElement, lineChart); setResizeEvent(lineChartElement, lineChart);
...@@ -58,53 +44,34 @@ function init_chart(chartId) { ...@@ -58,53 +44,34 @@ function init_chart(chartId) {
} }
} }
function set_data(elementObject, multichart, numberOfCharts, rawData, callback) { function set_data(elementObject, numberOfCharts, callback) {
setTimeout(function() { setTimeout(function() {
let options;
const defaultColors = ['#5470c6', '#91cc75', '#fac858', '#ee6666', '#73c0de', '#3ba272', '#fc8452', '#9a60b4', '#a1887f', '#ffb980', '#2ec7c9','#b6a2de','#5ab1ef', '#d87a80', '#ea7ccc']; const defaultColors = ['#5470c6', '#91cc75', '#fac858', '#ee6666', '#73c0de', '#3ba272', '#fc8452', '#9a60b4', '#a1887f', '#ffb980', '#2ec7c9','#b6a2de','#5ab1ef', '#d87a80', '#ea7ccc'];
let options;
let rawData = elementObject.attr('raw') ? JSON.parse(elementObject.attr('raw')) : null;
if(rawData == null) { if(rawData == null) {
let multichart = (numberOfCharts > 1);
// variables (this will be set by user) // variables (this will be set by user)
let titles = JSON.parse(elementObject.attr('titles')) ?? []; let titles = JSON.parse(elementObject.attr('titles')) ?? [];
let colors = JSON.parse(elementObject.attr('colors')) ?? defaultColors; let colors = JSON.parse(elementObject.attr('colors')) ?? defaultColors;
let showPointValues = (elementObject.attr('point-values') == 'true' || elementObject.attr('point-values') == true); // default false
let boundaryGap = (elementObject.attr('boundary-gap') == 'true' || elementObject.attr('boundary-gap') == true); // default true let boundaryGap = (elementObject.attr('boundary-gap') == 'true' || elementObject.attr('boundary-gap') == true); // default true
let inverted = (elementObject.attr('inverted') == 'true' || elementObject.attr('inverted') == true); // default false let inverted = (elementObject.attr('inverted') == 'true' || elementObject.attr('inverted') == true); // default false
let showDataZoom = (elementObject.attr('data-zoom') == 'true' || elementObject.attr('data-zoom') == true); // default false let showDataZoom = (elementObject.attr('data-zoom') == 'true' || elementObject.attr('data-zoom') == true); // default false
let stacked = (elementObject.attr('stacked') == 'true' || elementObject.attr('stacked') == true); // default false
let isArea = (elementObject.attr('is-area') == 'true' || elementObject.attr('is-area') == true); // default false
let animationDuration = elementObject.attr('animation-duration') ?? 750; let animationDuration = elementObject.attr('animation-duration') ?? 750;
// ex '{value} users' - https://echarts.apache.org/en/option.html#yAxis.axisLabel.formatter // ex '{value} users' - https://echarts.apache.org/en/option.html#yAxis.axisLabel.formatter
let yAxisLabelValueFormat = elementObject.attr('y-axis-label-value-format') ?? null; let yAxisLabelValueFormat = elementObject.attr('y-axis-label-value-format') ?? null;
// min | max | average
let markLine = elementObject.attr('mark-line') ?? null;
let categories = JSON.parse(elementObject.attr('categories')) ?? null; let categories = JSON.parse(elementObject.attr('categories')) ?? null;
let series = JSON.parse(elementObject.attr('series')) ?? null; let series = JSON.parse(elementObject.attr('series')) ?? null;
let seriesNames = series && series.map(function(item){ return item.name }); let seriesNames = series && series.map(function(item){ return item.name });
let seriesObject = setSeries(series, showPointValues, markLine, stacked, isArea); let seriesObject = setSeries(series, elementObject);
console.log('titles', titles);
console.log('colors', colors);
console.log('point-values', showPointValues);
console.log('boundary-gap', boundaryGap);
console.log('inverted', inverted);
console.log('data-zoom', showDataZoom);
console.log('stacked', stacked);
console.log('is-area', isArea);
console.log('animation-duration', animationDuration);
console.log('y-axis-label-value-format', yAxisLabelValueFormat);
console.log('mark-line', markLine);
console.log('categories', categories);
console.log('series', series);
console.log('series names', seriesNames);
console.log('series object', seriesObject);
// Options // Options
options = { options = {
...@@ -151,28 +118,44 @@ function set_data(elementObject, multichart, numberOfCharts, rawData, callback) ...@@ -151,28 +118,44 @@ function set_data(elementObject, multichart, numberOfCharts, rawData, callback)
options = rawData; options = rawData;
} }
callback(options); callback(options);
}, 1000); }, 1000);
} }
// sub functions function set_chart_height(numberOfCharts, lineChartElement) {
function setSeries(seriesData, showPointValues = false, markLineDataType = null, stack = false, isArea = false) {
// adjust container height before initialising the chart.
if (numberOfCharts > 1) {
let height = (numberOfCharts * 240); // (chart height = 160 | charts spacing = 80)
lineChartElement.style.height = height + 'px';
}
return lineChartElement;
}
//#endregion
//#region FUNCTIONS FOR OPTIONS
function setSeries(seriesData, elementObject) {
// uses series options if available else use global options. // uses series options if available else use global options.
let seriesArray = []; let seriesArray = [];
if(!seriesData || seriesData.length == 0) return []; if(!seriesData || seriesData.length == 0) return [];
let showPointValues = (elementObject.attr('point-values') == 'true' || elementObject.attr('point-values') == true) ?? false;
let stacked = (elementObject.attr('stacked') == 'true' || elementObject.attr('stacked') == true) ?? false;
let isArea = (elementObject.attr('is-area') == 'true' || elementObject.attr('is-area') == true) ?? false;
let markLine = elementObject.attr('mark-line') ?? null; // min | max | average
for(let i = 0; i < seriesData.length; i++) { for(let i = 0; i < seriesData.length; i++) {
let series = { let series = {
name: seriesData[i].name, name: seriesData[i].name,
type: seriesData[i].type ?? 'line', type: seriesData[i].type ?? 'line',
data: seriesData[i].data, data: seriesData[i].data,
stack: seriesData[i].stack ?? stack, stack: seriesData[i].stacked ?? stacked,
smooth: true, smooth: true,
symbol: 'circle', symbol: 'circle',
symbolSize: 7, symbolSize: 7,
...@@ -190,31 +173,8 @@ function setSeries(seriesData, showPointValues = false, markLineDataType = null ...@@ -190,31 +173,8 @@ function setSeries(seriesData, showPointValues = false, markLineDataType = null
yAxisIndex: seriesData[i].index ?? 0 yAxisIndex: seriesData[i].index ?? 0
} }
if(seriesData[i].markline != undefined && ['min', 'max', 'average'].includes(markLineDataType)) { setMarkLine(series, seriesData[i], markLine);
setArea(series, seriesData[i], isArea);
series.markLine = {
data: [{
type: seriesData[i].markline,
name: seriesData[i].markline[0].toUpperCase() + seriesData[i].markline.substring(1),
}]
};
} else if(markLineDataType != null && ['min', 'max', 'average'].includes(markLineDataType)) {
series.markLine = {
data: [{
type: markLineDataType,
name: markLineDataType[0].toUpperCase() + markLineDataType.substring(1),
}]
};
}
let area = seriesData[i].isArea ?? isArea;
if(area == true) {
series.areaStyle = {};
}
seriesArray.push(series); seriesArray.push(series);
...@@ -446,6 +406,41 @@ function setAxisPointer(multichart = false) { ...@@ -446,6 +406,41 @@ function setAxisPointer(multichart = false) {
return pointer; return pointer;
} }
//#endregion
//#region SUB FUNCTIONS FOR SERIES
function setMarkLine(series, seriesData, markLine) {
if(seriesData.markLine != undefined && ['min', 'max', 'average'].includes(markLine)) {
series.markLine = {
data: [{
type: seriesData.markLine,
name: seriesData.markLine[0].toUpperCase() + seriesData.markLine.substring(1),
}]
};
} else if(markLine != null && ['min', 'max', 'average'].includes(markLine)) {
series.markLine = {
data: [{
type: markLine,
name: markLine[0].toUpperCase() + markLine.substring(1),
}]
};
}
}
function setArea(series, seriesData, isArea) {
let area = seriesData.isArea ?? isArea;
if(area == true) {
series.areaStyle = {};
}
}
//#endregion
function setResizeEvent(lineChartElement, lineChart) { function setResizeEvent(lineChartElement, lineChart) {
// Resize function // Resize function
...@@ -467,7 +462,6 @@ function setResizeEvent(lineChartElement, lineChart) { ...@@ -467,7 +462,6 @@ function setResizeEvent(lineChartElement, lineChart) {
}); });
} }
$(document).ready(function() { $(document).ready(function() {
if (typeof echarts == 'undefined') { if (typeof echarts == 'undefined') {
......
...@@ -49,11 +49,10 @@ ...@@ -49,11 +49,10 @@
'charts' => 1, 'charts' => 1,
'colors' => ['#5470c6', '#91cc75', '#fac858', '#ee6666', '#73c0de', '#3ba272', '#fc8452', '#9a60b4', '#a1887f', '#ffb980', '#2ec7c9','#b6a2de','#5ab1ef', '#d87a80', '#ea7ccc'], 'colors' => ['#5470c6', '#91cc75', '#fac858', '#ee6666', '#73c0de', '#3ba272', '#fc8452', '#9a60b4', '#a1887f', '#ffb980', '#2ec7c9','#b6a2de','#5ab1ef', '#d87a80', '#ea7ccc'],
'point-values' => true, 'point-values' => true,
'boundary-gap' => false, 'boundary-gap' => true,
'inverted' => false, 'inverted' => false,
'data-zoom' => true, 'data-zoom' => true,
'stacked' => false, 'stacked' => false,
'is-area' => true,
'animation-duration' => 500, 'animation-duration' => 500,
'y-axis-label-value-format' => '{value} users', 'y-axis-label-value-format' => '{value} users',
'mark-line' => 'average', 'mark-line' => 'average',
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment