highcharts
Version:
JavaScript charting framework
116 lines (115 loc) • 3.09 kB
JavaScript
/* *
*
* (c) 2009-2026 Highsoft AS
*
* A commercial license may be required depending on use.
* See www.highcharts.com/license
*
*
* Authors:
* - Wojciech Chmiel
* - Sophie Bremer
*
* */
;
import DataModifier from './DataModifier.js';
import { merge } from '../../Shared/Utilities.js';
/* *
*
* Class
*
* */
/**
* Inverts columns and rows in a table.
*
* @private
*/
class InvertModifier extends DataModifier {
/* *
*
* Constructor
*
* */
/**
* Constructs an instance of the invert modifier.
*
* @param {Partial<InvertModifierOptions>} [options]
* Options to configure the invert modifier.
*/
constructor(options) {
super();
this.options = merge(InvertModifier.defaultOptions, options);
}
/* *
*
* Functions
*
* */
/**
* Inverts rows and columns in the table. If the given table does not have
* defined a `modified` property, the filtering is applied in-place on the
* original table rather than on a `modified` copy.
*
* @param {DataTable} table
* Table to invert.
*
* @param {DataEventDetail} [eventDetail]
* Custom information for pending events.
*
* @return {DataTable}
* Table with inverted `modified` property as a reference or modified table,
* if `modified` property of the original table is undefined.
*/
modifyTable(table, eventDetail) {
const modifier = this;
modifier.emit({ type: 'modify', detail: eventDetail, table });
const modified = table.getModified();
if (table.hasColumns(['columnIds'])) { // Inverted table
const columnIdsColumn = ((table.deleteColumns(['columnIds']) || {})
.columnIds || []), columns = {}, columnIds = [];
for (let i = 0, iEnd = columnIdsColumn.length; i < iEnd; ++i) {
columnIds.push('' + columnIdsColumn[i]);
}
for (let i = 0, iEnd = table.getRowCount(), row; i < iEnd; ++i) {
row = table.getRow(i);
if (row) {
columns[columnIds[i]] = row;
}
}
modified.deleteColumns();
modified.setColumns(columns);
}
else { // Regular table
const columns = {};
for (let i = 0, iEnd = table.getRowCount(), row; i < iEnd; ++i) {
row = table.getRow(i);
if (row) {
columns[`${i}`] = row;
}
}
columns.columnIds = table.getColumnIds();
modified.deleteColumns();
modified.setColumns(columns);
}
modifier.emit({ type: 'afterModify', detail: eventDetail, table });
return table;
}
}
/* *
*
* Static Properties
*
* */
/**
* Default options for the invert modifier.
*/
InvertModifier.defaultOptions = {
type: 'Invert'
};
DataModifier.registerType('Invert', InvertModifier);
/* *
*
* Default Export
*
* */
export default InvertModifier;