in modules/frontend/app/components/page-queries/components/queries-notebook/controller.ts [528:717]
xLbl: _chartLabel(row, xCol, null),
y: _chartNumber(row, colIdx, index)
};
index++;
return v;
});
datum.push({series: valCol.label, key: valCol.label, values});
}
});
}
return datum;
}
function _xX(d) {
return d.x;
}
function _yY(d) {
return d.y;
}
function _xAxisTimeFormat(d) {
return d3.time.format('%X')(new Date(d));
}
const _intClasses = ['java.lang.Byte', 'java.lang.Integer', 'java.lang.Long', 'java.lang.Short'];
function _intType(cls) {
return _.includes(_intClasses, cls);
}
const _xAxisWithLabelFormat = function(paragraph) {
return function(d) {
const values = paragraph.charts[0].data[0].values;
const fmt = _intType(paragraph.chartKeyCols[0].type) ? 'd' : ',.2f';
const dx = values[d];
if (!dx)
return d3.format(fmt)(d);
const lbl = dx.xLbl;
return lbl ? lbl : d3.format(fmt)(d);
};
};
function _xAxisLabel(paragraph) {
return _.isEmpty(paragraph.chartKeyCols) ? 'X' : paragraph.chartKeyCols[0].label;
}
const _yAxisFormat = function(d) {
const fmt = d < 1000 ? ',.2f' : '.3s';
return d3.format(fmt)(d);
};
function _updateCharts(paragraph) {
$timeout(() => _.forEach(paragraph.charts, (chart) => chart.api.update()), 100);
}
function _updateChartsWithData(paragraph, newDatum) {
$timeout(() => {
if (!paragraph.chartTimeLineEnabled()) {
const chartDatum = paragraph.charts[0].data;
chartDatum.length = 0;
_.forEach(newDatum, (series) => chartDatum.push(series));
}
paragraph.charts[0].api.update();
});
}
function _yAxisLabel(paragraph) {
const cols = paragraph.chartValCols;
const tml = paragraph.chartTimeLineEnabled();
return _.isEmpty(cols) ? 'Y' : _.map(cols, function(col) {
let lbl = col.label;
if (tml)
lbl += ' [' + col.aggFx + ']';
return lbl;
}).join(', ');
}
function _barChart(paragraph) {
const datum = _chartDatum(paragraph);
if (_.isEmpty(paragraph.charts)) {
const stacked = paragraph.chartsOptions && paragraph.chartsOptions.barChart
? paragraph.chartsOptions.barChart.stacked
: true;
const options = {
chart: {
type: 'multiBarChart',
height: 400,
margin: {left: 70},
duration: 0,
x: _xX,
y: _yY,
xAxis: {
axisLabel: _xAxisLabel(paragraph),
tickFormat: paragraph.chartTimeLineEnabled() ? _xAxisTimeFormat : _xAxisWithLabelFormat(paragraph),
showMaxMin: false
},
yAxis: {
axisLabel: _yAxisLabel(paragraph),
tickFormat: _yAxisFormat
},
color: IgniteChartColors,
stacked,
showControls: true,
legend: {
vers: 'furious',
margin: {right: -15}
}
}
};
paragraph.charts = [{options, data: datum}];
_updateCharts(paragraph);
}
else
_updateChartsWithData(paragraph, datum);
}
function _pieChartDatum(paragraph) {
const datum = [];
if (paragraph.chartColumnsConfigured() && !paragraph.chartTimeLineEnabled()) {
paragraph.chartValCols.forEach(function(valCol) {
let index = paragraph.total;
const values = _.map(paragraph.rows, (row) => {
const xCol = paragraph.chartKeyCols[0].value;
const v = {
x: xCol < 0 ? index : row[xCol],
y: _chartNumber(row, valCol.value, index)
};
// Workaround for known problem with zero values on Pie chart.
if (v.y === 0)
v.y = 0.0001;
index++;
return v;
});
datum.push({series: paragraph.chartKeyCols[0].label, key: valCol.label, values});
});
}
return datum;
}
function _pieChart(paragraph) {
let datum = _pieChartDatum(paragraph);
if (datum.length === 0)
datum = [{values: []}];
paragraph.charts = _.map(datum, function(data) {
return {
options: {
chart: {
type: 'pieChart',
height: 400,
duration: 0,
x: _xX,
y: _yY,
showLabels: true,
labelThreshold: 0.05,
labelType: 'percent',
donut: true,
donutRatio: 0.35,
legend: {