Files
redash/client/app/visualizations/chart/getChartData.js
Arik Fraimovich 56d3be2248 Prettier all the Javascript code & GitHub Action (#4433)
* Prettier all the JS files

* Add GitHub Action to autoformat code pushed to master

* Fix eslint violation due to formatting.

* Remove GitHub actions for styling

* Add restyled.io config
2019-12-11 17:05:38 +02:00

98 lines
2.3 KiB
JavaScript

import { isNil, isObject, each, forOwn, sortBy, values } from "lodash";
function addPointToSeries(point, seriesCollection, seriesName) {
if (seriesCollection[seriesName] === undefined) {
seriesCollection[seriesName] = {
name: seriesName,
type: "column",
data: [],
};
}
seriesCollection[seriesName].data.push(point);
}
export default function getChartData(data, options) {
const series = {};
const mappings = options.columnMapping;
each(data, row => {
let point = { $raw: row };
let seriesName = null;
let xValue = 0;
const yValues = {};
let eValue = null;
let sizeValue = null;
let zValue = null;
forOwn(row, (value, definition) => {
definition = "" + definition;
const definitionParts = definition.split("::") || definition.split("__");
const name = definitionParts[0];
const type = mappings ? mappings[definition] : definitionParts[1];
if (type === "unused") {
return;
}
if (type === "x") {
xValue = value;
point[type] = value;
}
if (type === "y") {
yValues[name] = value;
point[type] = value;
}
if (type === "yError") {
eValue = value;
point[type] = value;
}
if (type === "series") {
seriesName = String(value);
}
if (type === "size") {
point[type] = value;
sizeValue = value;
}
if (type === "zVal") {
point[type] = value;
zValue = value;
}
if (type === "multiFilter" || type === "multi-filter") {
seriesName = String(value);
}
});
if (isNil(seriesName)) {
each(yValues, (yValue, ySeriesName) => {
point = { x: xValue, y: yValue, $raw: point.$raw };
if (eValue !== null) {
point.yError = eValue;
}
if (sizeValue !== null) {
point.size = sizeValue;
}
if (zValue !== null) {
point.zVal = zValue;
}
addPointToSeries(point, series, ySeriesName);
});
} else {
addPointToSeries(point, series, seriesName);
}
});
return sortBy(values(series), ({ name }) => {
if (isObject(options.seriesOptions[name])) {
return options.seriesOptions[name].zIndex || 0;
}
return 0;
});
}