UNPKG

highcharts

Version:
116 lines (115 loc) 3.09 kB
/* * * * (c) 2009-2026 Highsoft AS * * A commercial license may be required depending on use. * See www.highcharts.com/license * * * Authors: * - Wojciech Chmiel * - Sophie Bremer * * */ 'use strict'; 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;