147 lines
4.5 KiB
JavaScript
147 lines
4.5 KiB
JavaScript
/* *
|
|
*
|
|
* (c) 2020-2022 Highsoft AS
|
|
*
|
|
* License: www.highcharts.com/license
|
|
*
|
|
* !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
|
|
*
|
|
* Authors:
|
|
* - Sophie Bremer
|
|
*
|
|
* */
|
|
'use strict';
|
|
var __extends = (this && this.__extends) || (function () {
|
|
var extendStatics = function (d, b) {
|
|
extendStatics = Object.setPrototypeOf ||
|
|
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
return extendStatics(d, b);
|
|
};
|
|
return function (d, b) {
|
|
if (typeof b !== "function" && b !== null)
|
|
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
|
extendStatics(d, b);
|
|
function __() { this.constructor = d; }
|
|
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
};
|
|
})();
|
|
import DataModifier from './DataModifier.js';
|
|
import DataTable from '../DataTable.js';
|
|
import U from '../../Core/Utilities.js';
|
|
var merge = U.merge;
|
|
/* *
|
|
*
|
|
* Class
|
|
*
|
|
* */
|
|
/**
|
|
* Groups table rows into subtables depending on column values.
|
|
*
|
|
* @private
|
|
*/
|
|
var GroupModifier = /** @class */ (function (_super) {
|
|
__extends(GroupModifier, _super);
|
|
/* *
|
|
*
|
|
* Constructors
|
|
*
|
|
* */
|
|
/**
|
|
* Constructs an instance of the group modifier.
|
|
*
|
|
* @param {GroupModifier.Options} [options]
|
|
* Options to configure the group modifier.
|
|
*/
|
|
function GroupModifier(options) {
|
|
var _this = _super.call(this) || this;
|
|
_this.options = merge(GroupModifier.defaultOptions, options);
|
|
return _this;
|
|
}
|
|
/* *
|
|
*
|
|
* Functions
|
|
*
|
|
* */
|
|
/**
|
|
* Applies modifications to the table rows and returns a new table with
|
|
* subtable, containing the grouped rows. The rows of the new table contain
|
|
* three columns:
|
|
* - `groupBy`: Column name used to group rows by.
|
|
* - `table`: Subtable containing the grouped rows.
|
|
* - `value`: containing the common value of the group
|
|
*
|
|
* @param {DataTable} table
|
|
* Table to modify.
|
|
*
|
|
* @param {DataEventEmitter.EventDetail} [eventDetail]
|
|
* Custom information for pending events.
|
|
*
|
|
* @return {DataTable}
|
|
* Table with `modified` property as a reference.
|
|
*/
|
|
GroupModifier.prototype.modifyTable = function (table, eventDetail) {
|
|
var modifier = this;
|
|
modifier.emit({ type: 'modify', detail: eventDetail, table: table });
|
|
var byGroups = [], tableGroups = [], valueGroups = [], groupColumn = (modifier.options.groupColumn ||
|
|
table.getColumnNames()[0]), valueColumn = (table.getColumn(groupColumn) ||
|
|
[]), _a = modifier.options, invalidValues = _a.invalidValues, validValues = _a.validValues, modified = table.modified = table.clone(true, eventDetail);
|
|
var value, valueIndex;
|
|
for (var i = 0, iEnd = valueColumn.length; i < iEnd; ++i) {
|
|
value = valueColumn[i];
|
|
if (typeof value !== 'undefined') {
|
|
if (value instanceof DataTable ||
|
|
(invalidValues &&
|
|
invalidValues.indexOf(value) >= 0) || (validValues &&
|
|
validValues.indexOf(value) === -1)) {
|
|
continue;
|
|
}
|
|
valueIndex = valueGroups.indexOf(value);
|
|
if (valueIndex === -1) {
|
|
var newTable = new DataTable();
|
|
newTable.setRows([table.getRowObject(i) || {}]);
|
|
byGroups.push(groupColumn);
|
|
tableGroups.push(newTable);
|
|
valueGroups.push(value);
|
|
}
|
|
else {
|
|
tableGroups[valueIndex].setRows([table.getRow(i) || []]);
|
|
}
|
|
}
|
|
}
|
|
modified.deleteColumns();
|
|
modified.setColumns({
|
|
groupBy: byGroups,
|
|
table: tableGroups,
|
|
value: valueGroups
|
|
});
|
|
modifier.emit({ type: 'afterModify', detail: eventDetail, table: table });
|
|
return table;
|
|
};
|
|
/* *
|
|
*
|
|
* Static Properties
|
|
*
|
|
* */
|
|
/**
|
|
* Default options to group table rows.
|
|
*/
|
|
GroupModifier.defaultOptions = {
|
|
modifier: 'Group',
|
|
groupColumn: ''
|
|
};
|
|
return GroupModifier;
|
|
}(DataModifier));
|
|
/* *
|
|
*
|
|
* Register
|
|
*
|
|
* */
|
|
DataModifier.addModifier(GroupModifier);
|
|
/* *
|
|
*
|
|
* Export
|
|
*
|
|
* */
|
|
export default GroupModifier;
|