Files
Sensores/static/lib/Highcharts-10.2.1/es-modules/Data/DataSeriesComposition.js
2025-04-17 00:35:33 -06:00

289 lines
9.0 KiB
JavaScript

/* *
*
* Imports
*
* */
import DataTable from './DataTable.js';
import U from '../Core/Utilities.js';
var addEvent = U.addEvent, fireEvent = U.fireEvent, isNumber = U.isNumber, merge = U.merge, wrap = U.wrap;
/* *
*
* Constants
*
* */
var composedClasses = [];
/* *
*
* Functions
*
* */
/**
* @private
*/
function wrapSeriesGeneratePoints(proceed) {
if (this.hasGroupedData) {
return proceed.call(this);
}
var PointClass = this.pointClass, cropStart = this.cropStart || 0, data = this.data || [], points = [], processedXData = this.processedXData, processedYData = this.processedYData;
var cursor, point;
for (var i = 0, iEnd = processedXData.length; i < iEnd; ++i) {
cursor = cropStart + i;
point = data[cursor];
if (!point) {
point = data[cursor] = (new PointClass()).init(this, processedYData[cursor], processedXData[i]);
}
point.index = cursor;
points[i] = point;
}
this.data = data;
this.points = points;
fireEvent(this, 'afterGeneratePoints');
}
/**
* @private
*/
function wrapSeriesSetData(proceed, data, redraw, animation) {
if (data === void 0) { data = []; }
if (redraw === void 0) { redraw = true; }
var datas = this.datas;
if (this.hasGroupedData || !this.options.dataAsColumns) {
return proceed.call(this, data, redraw, animation);
}
data = this.options.data = this.userOptions.data = (this.chart.options.chart.allowMutatingData ?
(data || []) :
merge(true, data));
var columns = {}, keys = (this.options.keys || this.parallelArrays).slice();
if (isNumber(data[0]) || keys.length === 1) {
// first column is implicit index
var xData = columns.x = [];
for (var i = 0, iEnd = data.length; i < iEnd; ++i) {
xData.push(this.autoIncrement());
}
columns[keys[1] || 'y'] = data;
}
else {
if (keys.indexOf('x') === -1 && keys.length > data.length) {
// first column is implicit index
var xData = columns.x = [];
for (var i = 0, iEnd = data.length; i < iEnd; ++i) {
xData.push(this.autoIncrement());
}
}
for (var i = 0, iEnd = Math.min(data.length, keys.length); i < iEnd; ++i) {
if (data[i] instanceof Array) {
columns[keys[i]] = data[i];
}
}
}
datas.setTable(new DataTable(columns, this.name));
}
/* *
*
* Class
*
* */
var DataSeriesAdditions = /** @class */ (function () {
/* *
*
* Constructor
*
* */
function DataSeriesAdditions(series) {
this.unlisteners = [];
var columns = {}, keys = series.parallelArrays;
for (var i = 0, iEnd = keys.length; i < iEnd; ++i) {
columns[keys[i]] = [];
}
this.series = series;
this.table = new DataTable();
}
/* *
*
* Static Functions
*
* */
/**
* @private
*/
DataSeriesAdditions.compose = function (SeriesClass) {
if (composedClasses.indexOf(SeriesClass) === -1) {
composedClasses.push(SeriesClass);
addEvent(SeriesClass, 'init', function () {
this.datas = new DataSeriesAdditions(this);
});
var seriesProto = SeriesClass.prototype;
wrap(seriesProto, 'generatePoints', wrapSeriesGeneratePoints);
wrap(seriesProto, 'setData', wrapSeriesSetData);
}
};
/* *
*
* Functions
*
* */
/**
* Triggers processing and redrawing
* @private
*/
DataSeriesAdditions.prototype.processTable = function (redraw, animation) {
var series = this.series;
if (series.options.legendType === 'point') {
series.processData();
series.generatePoints();
}
if (redraw) {
var chart = series.chart;
series.isDirty = chart.isDirtyBox = true;
series.isDirtyData = true;
chart.redraw(animation);
}
};
/**
* Experimental integration of the data layer
* @private
*/
DataSeriesAdditions.prototype.setTable = function (table, redraw, animation) {
if (redraw === void 0) { redraw = true; }
var series = this.series, anySeries = series, oldData = series.points, keys = series.parallelArrays, rowCount = table.getRowCount();
var key;
if (oldData) {
var xAxis = series.xAxis;
series.colorCounter = 0;
series.data = [];
delete anySeries.points;
delete anySeries.processedXData;
delete anySeries.processedYData;
delete anySeries.xIncrement;
for (var i = 0, iEnd = keys.length; i < iEnd; ++i) {
key = keys[i];
anySeries["".concat(key, "Data")] = [];
}
for (var i = 0, iEnd = oldData.length; i < iEnd; ++i) {
if (oldData[i] && (oldData[i].destroy)) {
oldData[i].destroy();
}
}
if (xAxis) {
xAxis.minRange = xAxis.userMinRange;
}
}
var column, failure = false, indexAsX = false;
for (var i = 0, iEnd = keys.length; i < iEnd; ++i) {
key = keys[i];
column = table.getColumn(key, true);
if (!column) {
if (key === 'x') {
indexAsX = true;
continue;
}
else {
failure = true;
break;
}
}
anySeries["".concat(key, "Data")] = column;
}
if (failure) {
// fallback to index
var columnNames = table.getColumnNames(), emptyColumn = [];
emptyColumn.length = rowCount;
var columnOffset = 0;
if (columnNames.length === keys.length - 1) {
// table index becomes x
columnOffset = 1;
indexAsX = true;
}
for (var i = columnOffset, iEnd = keys.length; i < iEnd; ++i) {
column = table.getColumn(columnNames[i], true);
key = keys[i];
anySeries["".concat(key, "Data")] = column || emptyColumn.slice();
}
}
this.indexAsX = indexAsX;
if (indexAsX && keys.indexOf('x') !== -1) {
column = [];
for (var x = 0; x < rowCount; ++x) {
column.push(series.autoIncrement());
}
anySeries.xData = column;
}
this.syncOff();
this.table = table;
if (redraw) {
this.syncOn();
}
this.processTable(redraw, oldData && animation);
};
/**
* Stops synchronisation of table changes with series.
* @private
*/
DataSeriesAdditions.prototype.syncOff = function () {
var unlisteners = this.unlisteners;
for (var i = 0, iEnd = unlisteners.length; i < iEnd; ++i) {
unlisteners[i]();
}
unlisteners.length = 0;
};
/**
* Activates synchronization of table changes with series.
* @private
*/
DataSeriesAdditions.prototype.syncOn = function () {
var _this = this;
if (this.unlisteners.length) {
return;
}
var series = this.series, table = this.table, anySeries = series, onChange = function (e) {
if (e.type === 'afterDeleteColumns') {
// deletion affects all points
_this.setTable(table, true);
return;
}
if (e.type === 'afterDeleteRows') {
if (e.rowIndex > 0 &&
e.rowIndex + e.rowCount < series.points.length) {
// deletion affects trailing points
_this.setTable(table, true);
return;
}
for (var i = e.rowIndex, iEnd = i + e.rowCount; i < iEnd; ++i) {
series.removePoint(i, false);
}
}
if (_this.indexAsX) {
if (e.type === 'afterSetCell') {
anySeries.xData[e.rowIndex] = e.rowIndex;
}
else if (e.type === 'afterSetRows') {
for (var i = e.rowIndex, iEnd = i + e.rowCount; i < iEnd; ++i) {
anySeries.xData[i] = series.autoIncrement();
}
}
}
_this.processTable(true);
};
this.unlisteners.push(table.on('afterDeleteColumns', onChange), table.on('afterDeleteRows', onChange), table.on('afterSetCell', onChange), table.on('afterSetRows', onChange));
};
return DataSeriesAdditions;
}());
/* *
*
* Default Export
*
* */
export default DataSeriesAdditions;
/* *
*
* API Options
*
* */
/**
* Indicates data is structured as columns instead of rows.
*
* @type {boolean}
* @requires es-modules/Data/DataSeriesComposition.js
* @apioption plotOptions.series.dataAsColumns
*/
(''); // keeps doclets above in JS file