UNPKG

@daryl110/go-chart

Version:

library to easily build charts

134 lines (129 loc) 4.07 kB
const { reusableChartBuild, createDatasetColor, reusableOnClickFunction } = require('../others/chartjs.utils'); /** * @memberOf ChartJSModule * @function * @name lineChart * @desc function to build a line chart * @param {string} title - chart title * @param {HTMLBodyElement} htmlElementContainer - container html element, where the chart is inserted * @param {string} idElement - chart id * @param {array} labels - array of strings containing the labels of each value within the dataset * @param {array} datasets - array of objects containing the dataset groups taking into account the group of labels, * with the structure: * <code> [ * { * data: array, // array of numbers containing the values to be graphed, * label: string, // title of the dataset, * backgroundColor: string, // rgba string of the background color of the value, * borderColor: string, // rgba string the border color of the value, * backgroundOpacity: boolean, * withFilling: boolean // extend color between origin to data on chart * } * ]</code> * @param {string=} [positionOfLegend='top'] - legend position, which can be (top | bottom | left | right) * @param {ChartJSModule.chartJSUtils.reusableOnClickFunction=} [clickEventForEachElement=() => {}] - callback function on event click on chart element * @return {*|{}} * @see <img src="https://i.imgur.com/UzAlHwi.jpg"></img> * @example chartJS.lineChart( * 'line-chart', // title of chart * document.getElementById('charts'), // id of container of the chart * 'line_chart', // id of chart to build * [ * 'January', * 'February', * 'March', * 'April', * 'May', * 'June', * 'July', * 'August', * 'September', * 'October', * 'November', * 'December' * ], // labels of data * [ * { * data: [58, 90, 50, 25, 80, 96, 100, 53, 26, 10, 52, 0], * label: 'a', * backgroundColor: 'rgba(255,213,0,0.33)', * }, * { * data: [50, 20, 20, 29, 40, 45, 21, 5, 56, 98, 100, 90], * label: 'b', * withFilling: true, * backgroundOpacity: true * } * ], // data * ); */ module.exports = ( title, htmlElementContainer, idElement, labels, datasets, positionOfLegend = 'top', clickEventForEachElement = () => { } ) => { const datasetsArray = []; let lineChart = {}; lineChart = reusableChartBuild( datasets, ( { data, label, backgroundColor = undefined, borderColor = undefined, backgroundOpacity = false, withFilling = false } ) => { const { backgroundColorLabelItem, borderColorLabelItem } = createDatasetColor(backgroundColor, borderColor, backgroundOpacity); datasetsArray.push({ label, data, backgroundColor: backgroundColorLabelItem, borderColor: borderColorLabelItem, pointRadius: 6, fill: withFilling }); }, htmlElementContainer, idElement, { type: 'line', data: { labels, datasets: datasetsArray }, options: { title: { display: true, text: title }, responsive: true, legend: { position: positionOfLegend }, scales: { yAxes: [{ ticks: { beginAtZero: true } }] }, onClick: ($event) => reusableOnClickFunction($event, lineChart, clickEventForEachElement) } } ); return lineChart; };