131 lines
2.6 KiB
JavaScript
131 lines
2.6 KiB
JavaScript
import { fillArray } from '../utils/helpers';
|
|
import { DEFAULT_AXIS_CHART_TYPE, AXIS_DATASET_CHART_TYPES, DEFAULT_CHAR_WIDTH,
|
|
SERIES_LABEL_SPACE_RATIO } from '../utils/constants';
|
|
|
|
export function dataPrep(data, type) {
|
|
data.labels = data.labels || [];
|
|
|
|
let datasetLength = data.labels.length;
|
|
|
|
// Datasets
|
|
let datasets = data.datasets;
|
|
let zeroArray = new Array(datasetLength).fill(0);
|
|
if(!datasets) {
|
|
// default
|
|
datasets = [{
|
|
values: zeroArray
|
|
}];
|
|
}
|
|
|
|
datasets.map(d=> {
|
|
// Set values
|
|
if(!d.values) {
|
|
d.values = zeroArray;
|
|
} else {
|
|
// Check for non values
|
|
let vals = d.values;
|
|
vals = vals.map(val => (!isNaN(val) ? val : 0));
|
|
|
|
// Trim or extend
|
|
if(vals.length > datasetLength) {
|
|
vals = vals.slice(0, datasetLength);
|
|
} else {
|
|
vals = fillArray(vals, datasetLength - vals.length, 0);
|
|
}
|
|
d.values = vals;
|
|
}
|
|
|
|
// Set type
|
|
if(!d.chartType ) {
|
|
if(!AXIS_DATASET_CHART_TYPES.includes(type)) type = DEFAULT_AXIS_CHART_TYPE;
|
|
d.chartType = type;
|
|
}
|
|
|
|
});
|
|
|
|
// Markers
|
|
|
|
// Regions
|
|
// data.yRegions = data.yRegions || [];
|
|
if(data.yRegions) {
|
|
data.yRegions.map(d => {
|
|
if(d.end < d.start) {
|
|
[d.start, d.end] = [d.end, d.start];
|
|
}
|
|
});
|
|
}
|
|
|
|
return data;
|
|
}
|
|
|
|
export function zeroDataPrep(realData) {
|
|
let datasetLength = realData.labels.length;
|
|
let zeroArray = new Array(datasetLength).fill(0);
|
|
|
|
let zeroData = {
|
|
labels: realData.labels.slice(0, -1),
|
|
datasets: realData.datasets.map(d => {
|
|
return {
|
|
name: '',
|
|
values: zeroArray.slice(0, -1),
|
|
chartType: d.chartType
|
|
};
|
|
}),
|
|
};
|
|
|
|
if(realData.yMarkers) {
|
|
zeroData.yMarkers = [
|
|
{
|
|
value: 0,
|
|
label: ''
|
|
}
|
|
];
|
|
}
|
|
|
|
if(realData.yRegions) {
|
|
zeroData.yRegions = [
|
|
{
|
|
start: 0,
|
|
end: 0,
|
|
label: ''
|
|
}
|
|
];
|
|
}
|
|
|
|
return zeroData;
|
|
}
|
|
|
|
export function getShortenedLabels(chartWidth, labels=[], isSeries=true) {
|
|
let allowedSpace = (chartWidth / labels.length) * SERIES_LABEL_SPACE_RATIO;
|
|
if(allowedSpace <= 0) allowedSpace = 1;
|
|
let allowedLetters = allowedSpace / DEFAULT_CHAR_WIDTH;
|
|
|
|
let seriesMultiple;
|
|
if(isSeries) {
|
|
// Find the maximum label length for spacing calculations
|
|
let maxLabelLength = Math.max(...labels.map(label => label.length));
|
|
seriesMultiple = Math.ceil(maxLabelLength/allowedLetters);
|
|
}
|
|
|
|
let calcLabels = labels.map((label, i) => {
|
|
label += "";
|
|
if(label.length > allowedLetters) {
|
|
|
|
if(!isSeries) {
|
|
if(allowedLetters-3 > 0) {
|
|
label = label.slice(0, allowedLetters-3) + " ...";
|
|
} else {
|
|
label = label.slice(0, allowedLetters) + '..';
|
|
}
|
|
} else {
|
|
if(i % seriesMultiple !== 0 && i !== (labels.length - 1)) {
|
|
label = "";
|
|
}
|
|
}
|
|
}
|
|
return label;
|
|
});
|
|
|
|
return calcLabels;
|
|
}
|