import type { DataEvent, DataEventCallback, DataEventDetail, DataEventEmitter } from './DataEvent'; import type DataModifier from './Modifiers/DataModifier'; import type DataTableOptions from './DataTableOptions'; import type { DataTableValue } from './DataTableOptions'; import type { TypedArray } from '../Shared/Types'; import DataTableCore from './DataTableCore.js'; /** * Class to manage columns and rows in a table structure. It provides methods * to add, remove, and manipulate columns and rows, as well as to retrieve data * from specific cells. * * @class * @name Highcharts.DataTable * * @param {Highcharts.DataTableOptions} [options] * Options to initialize the new DataTable instance. */ declare class DataTable extends DataTableCore implements DataEventEmitter { constructor(options?: DataTableOptions); private modifier?; private localRowIndexes?; private originalRowIndexes?; metadata?: Record; /** * Returns a clone of this table. The cloned table is completely independent * of the original, and any changes made to the clone will not affect * the original table. * * @function Highcharts.DataTable#clone * * @param {boolean} [skipColumns] * Whether to clone columns or not. * * @param {Highcharts.DataTableEventDetail} [eventDetail] * Custom information for pending events. * * @return {Highcharts.DataTable} * Clone of this data table. * * @emits #cloneTable * @emits #afterCloneTable */ clone(skipColumns?: boolean, eventDetail?: DataEventDetail): DataTable; /** * Deletes columns from the table. * * @function Highcharts.DataTable#deleteColumns * * @param {Array} [columnIds] * Names of columns to delete. If no array is provided, all * columns will be deleted. * * @param {Highcharts.DataTableEventDetail} [eventDetail] * Custom information for pending events. * * @return {Highcharts.DataTableColumnCollection|undefined} * Returns the deleted columns, if found. * * @emits #deleteColumns * @emits #afterDeleteColumns */ deleteColumns(columnIds?: Array, eventDetail?: DataEventDetail): (ColumnCollection | undefined); /** * Deletes the row index references. This is useful when the original table * is deleted, and the references are no longer needed. This table is * then considered an original table or a table that has the same rows * order as the original table. */ deleteRowIndexReferences(): void; /** * Deletes rows in this table. * * @function Highcharts.DataTable#deleteRows * * @param {number | number[]} [rowIndex] * Index of the row where deletion should start, or an array of indices for * deleting multiple rows. If not specified, all rows will be deleted. * * @param {number} [rowCount] * Number of rows to delete. * * @param {Highcharts.DataTableEventDetail} [eventDetail] * Custom information for pending events. * * @return {Array} * Returns the deleted rows, if found. * * @emits #deleteRows * @emits #afterDeleteRows */ deleteRows(rowIndex?: number | number[], rowCount?: number, eventDetail?: DataEventDetail): Array; /** * Emits an event on this table to all registered callbacks of the given * event. * @private * * @param {Event} e * Event object with event information. */ emit(e: Event): void; /** * Fetches a single cell value. * * @function Highcharts.DataTable#getCell * * @param {string} columnId * Column name of the cell to retrieve. * * @param {number} rowIndex * Row index of the cell to retrieve. * * @return {Highcharts.DataTableCellType|undefined} * Returns the cell value or `undefined`. */ getCell(columnId: string, rowIndex: number): (CellType | undefined); /** * Fetches the given column by the canonical column name. * This function is a simplified wrap of {@link getColumns}. * * @function Highcharts.DataTable#getColumn * * @param {string} columnId * Name of the column to get. * * @param {boolean} [asReference] * Whether to return the column as a readonly reference. * * @return {Highcharts.DataTableColumn|undefined} * A copy of the column, or `undefined` if not found. */ getColumn(columnId: string, asReference?: boolean): (Column | undefined); /** * Fetches all column IDs. * * @function Highcharts.DataTable#getColumnIds * * @return {Array} * Returns all column IDs. */ getColumnIds(): Array; getColumns(columnIds?: Array, asReference?: boolean): ColumnCollection; getColumns(columnIds: (Array | undefined), asReference: true): Record; getColumns(columnIds: (Array | undefined), asReference: false, asBasicColumns: true): Record; /** * Takes the original row index and returns the local row index in the * modified table for which this function is called. * * @param {number} originalRowIndex * Original row index to get the local row index for. * * @return {number|undefined} * Returns the local row index or `undefined` if not found. */ getLocalRowIndex(originalRowIndex: number): (number | undefined); /** * Returns the modifier associated with this table, if any. * * @return {Highcharts.DataModifier|undefined} * Returns the modifier or `undefined`. * * @private */ getModifier(): (DataModifier | undefined); /** * Takes the local row index and returns the index of the corresponding row * in the original table. * * @param {number} rowIndex * Local row index to get the original row index for. * * @return {number|undefined} * Returns the original row index or `undefined` if not found. */ getOriginalRowIndex(rowIndex: number): (number | undefined); /** * Retrieves the row at a given index. This function is a simplified wrap of * {@link getRows}. * * @function Highcharts.DataTable#getRow * * @param {number} rowIndex * Row index to retrieve. First row has index 0. * * @param {Array} [columnIds] * Column names in order to retrieve. * * @return {Highcharts.DataTableRow} * Returns the row values, or `undefined` if not found. */ getRow(rowIndex: number, columnIds?: Array): (Row | undefined); /** * Returns the number of rows in this table. * * @function Highcharts.DataTable#getRowCount * * @return {number} * Number of rows in this table. */ getRowCount(): number; /** * Retrieves the index of the first row matching a specific cell value. * * @function Highcharts.DataTable#getRowIndexBy * * @param {string} columnId * Column to search in. * * @param {Highcharts.DataTableCellType} cellValue * Cell value to search for. `NaN` and `undefined` are not supported. * * @param {number} [rowIndexOffset] * Index offset to start searching. * * @return {number|undefined} * Index of the first row matching the cell value. */ getRowIndexBy(columnId: string, cellValue: CellType, rowIndexOffset?: number): (number | undefined); /** * Retrieves the row at a given index. This function is a simplified wrap of * {@link getRowObjects}. * * @function Highcharts.DataTable#getRowObject * * @param {number} rowIndex * Row index. * * @param {Array} [columnIds] * Column names and their order to retrieve. * * @return {Highcharts.DataTableRowObject} * Returns the row values, or `undefined` if not found. */ getRowObject(rowIndex: number, columnIds?: Array): (RowObject | undefined); /** * Fetches all or a number of rows as an object. * * @function Highcharts.DataTable#getRowObjects * * @param {number} [rowIndex] * Index of the first row to fetch. Defaults to first row at index `0`. * * @param {number} [rowCount] * Number of rows to fetch. Defaults to maximal number of rows. * * @param {Array} [columnIds] * Column names and their order to retrieve. * * @return {Highcharts.DataTableRowObject} * Returns retrieved rows. */ getRowObjects(rowIndex?: number, rowCount?: number, columnIds?: Array): (Array); /** * Fetches all or a number of rows as an array. * * @function Highcharts.DataTable#getRows * * @param {number} [rowIndex] * Index of the first row to fetch. Defaults to first row at index `0`. * * @param {number} [rowCount] * Number of rows to fetch. Defaults to maximal number of rows. * * @param {Array} [columnIds] * Column names and their order to retrieve. * * @return {Highcharts.DataTableRow} * Returns retrieved rows. */ getRows(rowIndex?: number, rowCount?: number, columnIds?: Array): (Array); /** * Returns the unique version tag of the current state of the table. * * @function Highcharts.DataTable#getVersionTag * * @return {string} * Unique version tag. */ getVersionTag(): string; /** * Determines whether all specified column names exist in the table. * * @function Highcharts.DataTable#hasColumns * * @param {Array} columnIds * Column names to check. * * @return {boolean} * Returns `true` if all columns have been found, otherwise `false`. */ hasColumns(columnIds: Array): boolean; /** * Checks if any row in the specified column contains the given cell value. * * @function Highcharts.DataTable#hasRowWith * * @param {string} columnId * Column to search in. * * @param {Highcharts.DataTableCellType} cellValue * Cell value to search for. `NaN` and `undefined` are not supported. * * @return {boolean} * True, if a row has been found, otherwise false. */ hasRowWith(columnId: string, cellValue: CellType): boolean; /** * Registers a callback function to be executed when a specific event is * emitted. To stop listening to the event, call the function returned by * this method. * * @function Highcharts.DataTable#on * * @param {string} type * Event type as a string. * * @param {Highcharts.EventCallbackFunction} callback * Function to register for an event callback. * * @return {Function} * Function to unregister callback from the event. */ on(type: T, callback: DataEventCallback>): Function; /** * Changes the ID of an existing column to a new ID, effectively renaming * the column. * * @function Highcharts.DataTable#changeColumnId * * @param {string} columnId * Id of the column to be changed. * * @param {string} newColumnId * New id of the column. * * @return {boolean} * Returns `true` if successful, `false` if the column was not found. */ changeColumnId(columnId: string, newColumnId: string): boolean; /** * Sets the value of a specific cell identified by column ID and row index. * If the column does not exist, it will be created. If the row index is * beyond the current row count, the table will be expanded to accommodate * the new cell. * * @function Highcharts.DataTable#setCell * * @param {string} columnId * Column name to set. * * @param {number|undefined} rowIndex * Row index to set. * * @param {Highcharts.DataTableCellType} cellValue * Cell value to set. * * @param {Highcharts.DataTableEventDetail} [eventDetail] * Custom information for pending events. * * @emits #setCell * @emits #afterSetCell */ setCell(columnId: string, rowIndex: number, cellValue: CellType, eventDetail?: DataEventDetail): void; /** * Replaces or updates multiple columns in the table with new data. If a * column does not exist, it will be created and added to the table. * * @function Highcharts.DataTable#setColumns * * @param {Highcharts.DataTableColumnCollection} columns * Columns as a collection, where the keys are the column names. * * @param {number} [rowIndex] * Index of the first row to change. Keep undefined to reset. * * @param {Highcharts.DataTableEventDetail} [eventDetail] * Custom information for pending events. * * @param {boolean} [typeAsOriginal=false] * Determines whether the original column retains its type when data * replaced. If `true`, the original column keeps its type. If not * (default), the original column will adopt the type of the replacement * column. * * @emits #setColumns * @emits #afterSetColumns */ setColumns(columns: ColumnCollection, rowIndex?: number, eventDetail?: DataEventDetail, typeAsOriginal?: boolean): void; /** * Assigns a new data modifier to the table. * * This method does not modify the table directly. Instead, it sets the * `.modified` property of the table with a modified copy of this table, * as produced by the modifier. * * @param {Highcharts.DataModifier} [modifier] * Modifier to set, or `undefined` to unset. * * @param {Highcharts.DataTableEventDetail} [eventDetail] * Custom information for pending events. * * @return {Promise} * Resolves to this table if successful, or rejects on failure. * * @emits #setModifier * @emits #afterSetModifier */ setModifier(modifier?: DataModifier, eventDetail?: DataEventDetail): Promise; /** * Sets the original row indexes for the table. It is used to keep the * reference to the original rows when modifying the table. * * @param {Array} originalRowIndexes * Original row indexes array. * * @param {boolean} omitLocalRowIndexes * Whether to omit the local row indexes calculation. Defaults to `false`. */ setOriginalRowIndexes(originalRowIndexes: Array, omitLocalRowIndexes?: boolean): void; /** * Sets cell values of a row. Will insert a new row, if no index was * provided, or if the index is higher than the total number of table rows. * * Note: This function is just a simplified wrap of * {@link Highcharts.DataTable#setRows}. * * @function Highcharts.DataTable#setRow * * @param {Highcharts.DataTableRow|Highcharts.DataTableRowObject} row * Cell values to set. * * @param {number} [rowIndex] * Index of the row to set. Leave `undefined` to add as a new row. * * @param {boolean} [insert] * Whether to insert the row at the given index, or to overwrite the row. * * @param {Highcharts.DataTableEventDetail} [eventDetail] * Custom information for pending events. * * @emits #setRows * @emits #afterSetRows */ setRow(row: (Row | RowObject), rowIndex?: number, insert?: boolean, eventDetail?: DataEventDetail): void; /** * Sets cell values for multiple rows. Will insert new rows, if no index was * was provided, or if the index is higher than the total number of table * rows. * * @function Highcharts.DataTable#setRows * * @param {Array<(Highcharts.DataTableRow|Highcharts.DataTableRowObject)>} rows * Row values to set. * * @param {number} [rowIndex] * Index of the first row to set. Leave `undefined` to add as new rows. * * @param {boolean} [insert] * Whether to insert the row at the given index, or to overwrite the row. * * @param {Highcharts.DataTableEventDetail} [eventDetail] * Custom information for pending events. * * @emits #setRows * @emits #afterSetRows */ setRows(rows: Array<(Row | RowObject)>, rowIndex?: number, insert?: boolean, eventDetail?: DataEventDetail): void; } /** * Additionally it provides necessary types for events. */ /** * Possible value types for a table cell. */ export type CellType = (boolean | number | null | string | undefined); /** * Conventional array of table cells typed as `CellType`. */ export interface BasicColumn extends Array { [index: number]: CellType; } /** * Array of table cells in vertical expansion. */ export type Column = BasicColumn | TypedArray; /** * Collection of columns, where the key is the column name and * the value is an array of column values. */ export interface ColumnCollection { [columnId: string]: Column; } /** * Event object for cell-related events. */ export interface CellEvent extends DataEvent { readonly type: ('setCell' | 'afterSetCell'); readonly cellValue: CellType; readonly columnId: string; readonly rowIndex: number; } /** * Event object for clone-related events. */ export interface CloneEvent extends DataEvent { readonly type: ('cloneTable' | 'afterCloneTable'); readonly tableClone?: DataTable; } /** * Event object for column-related events. */ export interface ColumnEvent extends DataEvent { readonly type: ('deleteColumns' | 'afterDeleteColumns' | 'setColumns' | 'afterSetColumns'); readonly columns?: ColumnCollection; readonly columnIds: Array; readonly rowIndex?: number; } /** * All information objects of DataTable events. */ export type Event = (CellEvent | CloneEvent | ColumnEvent | SetModifierEvent | RowEvent); /** * Event object for modifier-related events. */ export interface ModifierEvent extends DataEvent { readonly type: ('setModifier' | 'afterSetModifier'); readonly modifier: (DataModifier | undefined); } /** * Array of table cells in horizontal expansion. Index of the array is the * index of the column names. */ export interface Row extends Array { [index: number]: CellType; } /** * Event object for row-related events. */ export interface RowEvent extends DataEvent { readonly type: ('deleteRows' | 'afterDeleteRows' | 'setRows' | 'afterSetRows'); readonly rowCount: number; readonly rowIndex: number | number[]; readonly rows?: Array; } /** * Object of row values, where the keys are the column names. */ export interface RowObject extends Record { [column: string]: CellType; } /** * Event object for the setModifier events. */ export interface SetModifierEvent extends DataEvent { readonly type: ('setModifier' | 'afterSetModifier' | 'setModifierError'); readonly error?: unknown; readonly modifier?: DataModifier; readonly modified?: DataTable; } export default DataTable;