@deephaven/iris-grid 0.13.14-input-table-paste-jackson.0 → 0.13.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3,6 +3,7 @@ import { GridModel, GridRange, ModelIndex, MoveOperation, VisibleIndex } from '@
3
3
  import type { Column, ColumnStatistics, CustomColumn, FilterCondition, Format, LayoutHints, RollupConfig, Row, Sort, Table, TotalsTableConfig } from '@deephaven/jsapi-shim';
4
4
  import { Formatter } from '@deephaven/jsapi-utils';
5
5
  declare type RowIndex = ModelIndex;
6
+ declare type ColumnName = string;
6
7
  declare type IrisGridModelEventNames = typeof IrisGridModel.EVENT[keyof typeof IrisGridModel.EVENT];
7
8
  declare type IrisGridModelEventMap = {
8
9
  [E in IrisGridModelEventNames]: Event<E>;
@@ -156,6 +157,10 @@ declare abstract class IrisGridModel<TEventMap extends Record<string, Event<stri
156
157
  * @returns Names of columns which should be locked to the back, but not floating
157
158
  */
158
159
  get backColumns(): string[];
160
+ /**
161
+ * @returns Names of key columns
162
+ */
163
+ get keyColumnSet(): Set<ColumnName>;
159
164
  /**
160
165
  * @returns Names of columns which should be frozen to the front and floating
161
166
  */
@@ -1 +1 @@
1
- {"version":3,"file":"IrisGridModel.d.ts","sourceRoot":"","sources":["../src/IrisGridModel.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"IrisGridModel.d.ts","sourceRoot":"","sources":["../src/IrisGridModel.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,8 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
2
2
 
3
3
  /* eslint-disable class-methods-use-this */
4
4
  import { GridModel } from '@deephaven/grid';
5
-
5
+ var EMPTY_ARRAY = [];
6
+ var EMPTY_SET = new Set();
6
7
  /**
7
8
  * Abstract class that extends the GridModel to have more functionality, like filtering and sorting.
8
9
  * For use from IrisGrid.
@@ -10,6 +11,7 @@ import { GridModel } from '@deephaven/grid';
10
11
  * Note that it still uses dh.Column, dh.FilterCondition, dh.Sort, etc., still. Theoretically should abstract
11
12
  * those out as well, so there's no dependency on IrisAPI at all, but it's a lot of work for no real gain at this time.
12
13
  */
14
+
13
15
  class IrisGridModel extends GridModel {
14
16
  constructor() {
15
17
  super();
@@ -72,13 +74,13 @@ class IrisGridModel extends GridModel {
72
74
 
73
75
 
74
76
  get movedColumns() {
75
- return [];
77
+ return EMPTY_ARRAY;
76
78
  }
77
79
  /** List of row movements defined by the model. Used as initial movements for IrisGrid */
78
80
 
79
81
 
80
82
  get movedRows() {
81
- return [];
83
+ return EMPTY_ARRAY;
82
84
  }
83
85
  /**
84
86
  * Retrieve the grouped columns for this model
@@ -98,7 +100,7 @@ class IrisGridModel extends GridModel {
98
100
 
99
101
 
100
102
  get frontColumns() {
101
- return [];
103
+ return EMPTY_ARRAY;
102
104
  }
103
105
  /**
104
106
  * @returns Names of columns which should be locked to the back, but not floating
@@ -106,7 +108,15 @@ class IrisGridModel extends GridModel {
106
108
 
107
109
 
108
110
  get backColumns() {
109
- return [];
111
+ return EMPTY_ARRAY;
112
+ }
113
+ /**
114
+ * @returns Names of key columns
115
+ */
116
+
117
+
118
+ get keyColumnSet() {
119
+ return EMPTY_SET;
110
120
  }
111
121
  /**
112
122
  * @returns Names of columns which should be frozen to the front and floating
@@ -114,7 +124,7 @@ class IrisGridModel extends GridModel {
114
124
 
115
125
 
116
126
  get frozenColumns() {
117
- return [];
127
+ return EMPTY_ARRAY;
118
128
  }
119
129
  /**
120
130
  * @param index The column index to check
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/IrisGridModel.ts"],"names":["GridModel","IrisGridModel","constructor","listenerCount","addEventListener","type0","callback0","options0","startListening","removeEventListener","stopListening","originalColumns","columns","movedColumns","movedRows","layoutHints","frontColumns","backColumns","frozenColumns","isColumnFrozen","index","isFilterRequired","isReversible","isColumnStatisticsAvailable","isCustomColumnsAvailable","isFormatColumnsAvailable","isExportAvailable","isValuesTableAvailable","isChartBuilderAvailable","isRollupAvailable","isSelectDistinctAvailable","isTotalsAvailable","isFilterable","columnIndex","close","isRowMovable","Object","freeze","UPDATED","FORMATTER_UPDATED","REQUEST_FAILED","COLUMNS_CHANGED","TABLE_CHANGED","FILTERS_CHANGED","SORTS_CHANGED","DISCONNECT","RECONNECT","TOTALS_UPDATED","PENDING_DATA_UPDATED"],"mappings":"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","sourcesContent":["/* eslint-disable class-methods-use-this */\nimport type { Event, EventTarget } from 'event-target-shim';\nimport {\n GridModel,\n GridRange,\n ModelIndex,\n MoveOperation,\n VisibleIndex,\n} from '@deephaven/grid';\nimport type {\n Column,\n ColumnStatistics,\n CustomColumn,\n FilterCondition,\n Format,\n LayoutHints,\n RollupConfig,\n Row,\n Sort,\n Table,\n TotalsTableConfig,\n} from '@deephaven/jsapi-shim';\nimport { Formatter } from '@deephaven/jsapi-utils';\n\ntype RowIndex = ModelIndex;\n\ntype IrisGridModelEventNames = typeof IrisGridModel.EVENT[keyof typeof IrisGridModel.EVENT];\n\ntype IrisGridModelEventMap = {\n [E in IrisGridModelEventNames]: Event<E>;\n};\n\n/**\n * Abstract class that extends the GridModel to have more functionality, like filtering and sorting.\n * For use from IrisGrid.\n * Provides some abstraction from the dh.Table and dh.TreeTable classes, so we can treat them somewhat the same.\n * Note that it still uses dh.Column, dh.FilterCondition, dh.Sort, etc., still. Theoretically should abstract\n * those out as well, so there's no dependency on IrisAPI at all, but it's a lot of work for no real gain at this time.\n */\nabstract class IrisGridModel<\n TEventMap extends Record<string, Event<string>> = Record<\n string,\n Event<string>\n >,\n TMode extends 'standard' | 'strict' = 'standard'\n> extends GridModel<TEventMap & IrisGridModelEventMap, TMode> {\n static EVENT = Object.freeze({\n UPDATED: 'UPDATED',\n FORMATTER_UPDATED: 'FORMATTER_UPDATED',\n REQUEST_FAILED: 'REQUEST_FAILED',\n COLUMNS_CHANGED: 'COLUMNS_CHANGED',\n TABLE_CHANGED: 'TABLE_CHANGED',\n FILTERS_CHANGED: 'FILTERS_CHANGED',\n SORTS_CHANGED: 'SORTS_CHANGED',\n DISCONNECT: 'DISCONNECT',\n RECONNECT: 'RECONNECT',\n TOTALS_UPDATED: 'TOTALS_UPDATED',\n PENDING_DATA_UPDATED: 'PENDING_DATA_UPDATED',\n } as const);\n\n constructor() {\n super();\n\n this.listenerCount = 0;\n }\n\n listenerCount: number;\n\n // Pulled directly from event-target-shim implementation signature\n // https://github.com/mysticatea/event-target-shim/blob/master/src/lib/event-target.ts#L99\n // Using Parameters<GridModel['addEventListener']> doesn't work\n addEventListener<T extends string & keyof TEventMap>(\n type0: T,\n callback0?: EventTarget.EventListener<this, TEventMap[T]> | null,\n options0?: boolean | EventTarget.AddOptions\n ): void {\n super.addEventListener(type0, callback0 as never, options0 as never);\n\n this.listenerCount += 1;\n if (this.listenerCount === 1) {\n this.startListening();\n }\n }\n\n removeEventListener<T extends string & keyof TEventMap>(\n type0: T,\n callback0?: EventTarget.EventListener<this, TEventMap[T]> | null,\n options0?: boolean | EventTarget.Options\n ): void {\n super.removeEventListener(type0, callback0 as never, options0 as never);\n\n this.listenerCount -= 1;\n if (this.listenerCount === 0) {\n this.stopListening();\n }\n }\n\n /**\n * Function called when first listener is added.\n * Override for implementation specific behaviour.\n */\n startListening(): void {\n // no-op\n }\n\n /**\n * Function called when last listener is removed.\n * Override for implementation specific behaviour.\n */\n stopListening(): void {\n // no-op\n }\n\n /**\n * Gets the columns for this model\n * @returns All columns in the model\n */\n abstract get columns(): Column[];\n\n /**\n * Gets the column index for this model\n * @param name The model column name.\n * @returns The numeric index of the requested column.\n */\n abstract getColumnIndexByName(name: string): ModelIndex;\n\n /**\n * Gets the columns for the model before any transformations (such as rollups) are applied.\n * @returns All original columns in the model.\n */\n get originalColumns(): Column[] {\n return this.columns;\n }\n\n /** List of column movements defined by the model. Used as initial movements for IrisGrid */\n get movedColumns(): MoveOperation[] {\n return [];\n }\n\n /** List of row movements defined by the model. Used as initial movements for IrisGrid */\n get movedRows(): MoveOperation[] {\n return [];\n }\n\n /**\n * Retrieve the grouped columns for this model\n * @returns The columns that are grouped\n */\n abstract get groupedColumns(): Column[];\n\n /**\n * The description for this model.\n * @returns The description of the model\n */\n abstract get description(): string;\n\n /**\n * @param column The model column index\n * @param row The model row index\n * @returns The format stored for that cell\n */\n abstract formatForCell(\n column: ModelIndex,\n row: ModelIndex\n ): Format | undefined;\n\n /**\n * @param column The model column index\n * @param row The model row index\n * @returns The value stored for that cell\n */\n abstract valueForCell(column: ModelIndex, row: ModelIndex): unknown;\n\n /**\n * @returns The filters set on this model\n */\n abstract get filter(): FilterCondition[];\n\n /**\n * @param filter The filters to set\n */\n abstract set filter(filter: FilterCondition[]);\n\n /**\n * @returns {Formatter} The formatter used when formatting data\n */\n abstract get formatter(): Formatter;\n\n /**\n * @param {Formatter} formatter The formatter to set\n */\n abstract set formatter(formatter: Formatter);\n\n /**\n * @param value The value to format\n * @param columnType The column type to format\n * @param columnName The column name to format\n */\n abstract displayString(\n value: unknown,\n columnType: string,\n columnName?: string\n ): string;\n\n /**\n * @returns The sorts used on this model\n */\n abstract get sort(): Sort[];\n\n /**\n * @param sort The sorts to use on this model\n */\n abstract set sort(sort: Sort[]);\n\n /**\n * @returns The custom columns on this model\n */\n abstract get customColumns(): string[];\n\n /**\n * @param customColumns The custom columns to use\n */\n abstract set customColumns(customColumns: string[]);\n\n /**\n * @returns The format columns on this model\n */\n abstract get formatColumns(): CustomColumn[];\n\n /**\n * @param formatColumns The format columns to use\n */\n abstract set formatColumns(formatColumns: CustomColumn[]);\n\n /**\n * @param columns The columns to treat as frozen\n */\n abstract updateFrozenColumns(columns: string[]): void;\n\n /**\n * @returns The config to use for rolling up this table\n */\n abstract get rollupConfig(): RollupConfig | null;\n\n abstract set rollupConfig(rollupConfig: RollupConfig | null);\n\n /**\n * @returns The config to use for the totals table of this model\n */\n abstract get totalsConfig(): TotalsTableConfig | null;\n\n abstract set totalsConfig(totalsConfig: TotalsTableConfig | null);\n\n /**\n * @returns The LayoutHints to use for the columns of this table model\n */\n get layoutHints(): LayoutHints | null {\n return null;\n }\n\n /**\n * @returns Names of columns which should be locked to the front, but not floating\n */\n get frontColumns(): string[] {\n return [];\n }\n\n /**\n * @returns Names of columns which should be locked to the back, but not floating\n */\n get backColumns(): string[] {\n return [];\n }\n\n /**\n * @returns Names of columns which should be frozen to the front and floating\n */\n get frozenColumns(): string[] {\n return [];\n }\n\n /**\n * @param index The column index to check\n * @returns Whether the column is one of LayoutHints' frozen columns\n */\n isColumnFrozen(index: ModelIndex): boolean {\n return false;\n }\n\n /**\n * @returns True if this model requires a filter to be set\n */\n get isFilterRequired(): boolean {\n return false;\n }\n\n get isReversible(): boolean {\n return true;\n }\n\n /**\n * @returns True if this model supports the columnStatistics(column) function\n */\n get isColumnStatisticsAvailable(): boolean {\n return false;\n }\n\n /**\n * @returns True if this model supports customColumns\n */\n get isCustomColumnsAvailable(): boolean {\n return false;\n }\n\n /**\n * @returns True if this model supports customColumns\n */\n get isFormatColumnsAvailable(): boolean {\n return false;\n }\n\n /**\n * @returns True if this model supports the export() function\n */\n get isExportAvailable(): boolean {\n return false;\n }\n\n /**\n * @returns True if this model supports the valuesTable(column) function\n */\n get isValuesTableAvailable(): boolean {\n return false;\n }\n\n /**\n * @returns True if this model should allow the chart builder\n */\n get isChartBuilderAvailable(): boolean {\n return false;\n }\n\n /**\n * @returns True if the rollup rows functionality is available\n */\n get isRollupAvailable(): boolean {\n return false;\n }\n\n /**\n * @return True if select distinct functionality is available\n */\n get isSelectDistinctAvailable(): boolean {\n return false;\n }\n\n /**\n * @returns True if the totals functionality is available\n */\n get isTotalsAvailable(): boolean {\n return false;\n }\n\n /**\n * The names of columns with select distinct enabled\n * @returns An array of column names\n */\n abstract get selectDistinctColumns(): string[];\n\n /**\n * Set the columns with select distinct enabled\n * @param names The array of column names to enable select distinct on\n */\n abstract set selectDistinctColumns(names: string[]);\n\n /**\n * The pending data for this model\n * @returns A map of row index to a map of column name/value pairs\n */\n abstract get pendingDataMap(): Map<RowIndex, Map<string, unknown>>;\n\n /**\n * Set the pending data for this model\n * @param A map of row index to a map of column name/value pairs\n */\n abstract set pendingDataMap(map: Map<RowIndex, Map<string, unknown>>);\n\n /**\n * @returns The count of pending rows to show\n */\n abstract get pendingRowCount(): number;\n\n /**\n * Set the count of pending rows to show\n * @param count The count of pending rows to show\n */\n abstract set pendingRowCount(count: number);\n\n /**\n * Errors for the pending data\n * @returns Map from row number to the error\n */\n abstract get pendingDataErrors(): Map<RowIndex, Error>;\n\n /**\n * Commit pending data and save all data to the table\n */\n abstract commitPending(): Promise<void>;\n\n /**\n * Check if a column is filterable\n * @param columnIndex The column index to check for filterability\n * @returns True if the current provided column index is filterable, false otherwise\n */\n isFilterable(columnIndex: ModelIndex): boolean {\n return false;\n }\n\n /**\n * Set the indices of the viewport\n * @param top Top of viewport\n * @param bottom Bottom of viewport\n * @param columns The columns in the viewport. `null` for all columns\n */\n abstract setViewport(\n top: VisibleIndex,\n bottom: VisibleIndex,\n columns: Column[] | null\n ): void;\n\n /**\n * Takes a snapshot of the provided ranges\n * @param ranges The model ranges to take the snapshot of\n * @returns Returns the data in a row/column matrix\n */\n abstract snapshot(ranges: GridRange[]): Promise<unknown[][]>;\n\n /**\n * @param ranges The ranges to take a snapshot of\n * @param includeHeaders Whether to include the headers in the snapshot or not\n * @param {(unknown, dh.Column, dh.Row) => string} formatValue A function to format a value for a cell. Defaults to model format value.\n * @returns A text formatted snapshot of the data for the specified range set\n */\n abstract textSnapshot(\n ranges: GridRange[],\n includeHeaders?: boolean,\n formatValue?: (value: unknown, column: Column, row: Row) => string\n ): Promise<string>;\n\n /**\n * @returns Returns a raw table that is frozen and can be used for exporting data\n */\n abstract export(): Promise<Table>;\n\n /**\n * @param column The column to get the distinct values for\n * @returns A table partitioned on the column specified\n */\n abstract valuesTable(column: Column): Promise<Table>;\n\n /**\n * @param column The column to get statistics for\n * @returns The column statistics\n */\n abstract columnStatistics(column: Column): Promise<ColumnStatistics>;\n\n /**\n * Close this model. It can no longer be used after being closed\n */\n close(): void {\n // no-op\n }\n\n /**\n * Don't allow any rows to be movable in any IrisGrids by default. Just columns.\n */\n isRowMovable(): boolean {\n return false;\n }\n\n /**\n * Delete ranges from an input grid. Will delete the entire row, causing data to shift up\n * @param ranges The ranges to delete\n * @returns A promise that resolves successfully when the operation is complete or rejects if there's an error\n */\n abstract delete(ranges: GridRange[]): Promise<void>;\n}\n\nexport default IrisGridModel;\n"],"file":"IrisGridModel.js"}
1
+ {"version":3,"sources":["../src/IrisGridModel.ts"],"names":["GridModel","EMPTY_ARRAY","EMPTY_SET","Set","IrisGridModel","constructor","listenerCount","addEventListener","type0","callback0","options0","startListening","removeEventListener","stopListening","originalColumns","columns","movedColumns","movedRows","layoutHints","frontColumns","backColumns","keyColumnSet","frozenColumns","isColumnFrozen","index","isFilterRequired","isReversible","isColumnStatisticsAvailable","isCustomColumnsAvailable","isFormatColumnsAvailable","isExportAvailable","isValuesTableAvailable","isChartBuilderAvailable","isRollupAvailable","isSelectDistinctAvailable","isTotalsAvailable","isFilterable","columnIndex","close","isRowMovable","Object","freeze","UPDATED","FORMATTER_UPDATED","REQUEST_FAILED","COLUMNS_CHANGED","TABLE_CHANGED","FILTERS_CHANGED","SORTS_CHANGED","DISCONNECT","RECONNECT","TOTALS_UPDATED","PENDING_DATA_UPDATED"],"mappings":"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","sourcesContent":["/* eslint-disable class-methods-use-this */\nimport type { Event, EventTarget } from 'event-target-shim';\nimport {\n GridModel,\n GridRange,\n ModelIndex,\n MoveOperation,\n VisibleIndex,\n} from '@deephaven/grid';\nimport type {\n Column,\n ColumnStatistics,\n CustomColumn,\n FilterCondition,\n Format,\n LayoutHints,\n RollupConfig,\n Row,\n Sort,\n Table,\n TotalsTableConfig,\n} from '@deephaven/jsapi-shim';\nimport { Formatter } from '@deephaven/jsapi-utils';\n\ntype RowIndex = ModelIndex;\ntype ColumnName = string;\n\ntype IrisGridModelEventNames = typeof IrisGridModel.EVENT[keyof typeof IrisGridModel.EVENT];\n\ntype IrisGridModelEventMap = {\n [E in IrisGridModelEventNames]: Event<E>;\n};\n\nconst EMPTY_ARRAY: never[] = [];\nconst EMPTY_SET: Set<never> = new Set();\n\n/**\n * Abstract class that extends the GridModel to have more functionality, like filtering and sorting.\n * For use from IrisGrid.\n * Provides some abstraction from the dh.Table and dh.TreeTable classes, so we can treat them somewhat the same.\n * Note that it still uses dh.Column, dh.FilterCondition, dh.Sort, etc., still. Theoretically should abstract\n * those out as well, so there's no dependency on IrisAPI at all, but it's a lot of work for no real gain at this time.\n */\nabstract class IrisGridModel<\n TEventMap extends Record<string, Event<string>> = Record<\n string,\n Event<string>\n >,\n TMode extends 'standard' | 'strict' = 'standard'\n> extends GridModel<TEventMap & IrisGridModelEventMap, TMode> {\n static EVENT = Object.freeze({\n UPDATED: 'UPDATED',\n FORMATTER_UPDATED: 'FORMATTER_UPDATED',\n REQUEST_FAILED: 'REQUEST_FAILED',\n COLUMNS_CHANGED: 'COLUMNS_CHANGED',\n TABLE_CHANGED: 'TABLE_CHANGED',\n FILTERS_CHANGED: 'FILTERS_CHANGED',\n SORTS_CHANGED: 'SORTS_CHANGED',\n DISCONNECT: 'DISCONNECT',\n RECONNECT: 'RECONNECT',\n TOTALS_UPDATED: 'TOTALS_UPDATED',\n PENDING_DATA_UPDATED: 'PENDING_DATA_UPDATED',\n } as const);\n\n constructor() {\n super();\n\n this.listenerCount = 0;\n }\n\n listenerCount: number;\n\n // Pulled directly from event-target-shim implementation signature\n // https://github.com/mysticatea/event-target-shim/blob/master/src/lib/event-target.ts#L99\n // Using Parameters<GridModel['addEventListener']> doesn't work\n addEventListener<T extends string & keyof TEventMap>(\n type0: T,\n callback0?: EventTarget.EventListener<this, TEventMap[T]> | null,\n options0?: boolean | EventTarget.AddOptions\n ): void {\n super.addEventListener(type0, callback0 as never, options0 as never);\n\n this.listenerCount += 1;\n if (this.listenerCount === 1) {\n this.startListening();\n }\n }\n\n removeEventListener<T extends string & keyof TEventMap>(\n type0: T,\n callback0?: EventTarget.EventListener<this, TEventMap[T]> | null,\n options0?: boolean | EventTarget.Options\n ): void {\n super.removeEventListener(type0, callback0 as never, options0 as never);\n\n this.listenerCount -= 1;\n if (this.listenerCount === 0) {\n this.stopListening();\n }\n }\n\n /**\n * Function called when first listener is added.\n * Override for implementation specific behaviour.\n */\n startListening(): void {\n // no-op\n }\n\n /**\n * Function called when last listener is removed.\n * Override for implementation specific behaviour.\n */\n stopListening(): void {\n // no-op\n }\n\n /**\n * Gets the columns for this model\n * @returns All columns in the model\n */\n abstract get columns(): Column[];\n\n /**\n * Gets the column index for this model\n * @param name The model column name.\n * @returns The numeric index of the requested column.\n */\n abstract getColumnIndexByName(name: string): ModelIndex;\n\n /**\n * Gets the columns for the model before any transformations (such as rollups) are applied.\n * @returns All original columns in the model.\n */\n get originalColumns(): Column[] {\n return this.columns;\n }\n\n /** List of column movements defined by the model. Used as initial movements for IrisGrid */\n get movedColumns(): MoveOperation[] {\n return EMPTY_ARRAY;\n }\n\n /** List of row movements defined by the model. Used as initial movements for IrisGrid */\n get movedRows(): MoveOperation[] {\n return EMPTY_ARRAY;\n }\n\n /**\n * Retrieve the grouped columns for this model\n * @returns The columns that are grouped\n */\n abstract get groupedColumns(): Column[];\n\n /**\n * The description for this model.\n * @returns The description of the model\n */\n abstract get description(): string;\n\n /**\n * @param column The model column index\n * @param row The model row index\n * @returns The format stored for that cell\n */\n abstract formatForCell(\n column: ModelIndex,\n row: ModelIndex\n ): Format | undefined;\n\n /**\n * @param column The model column index\n * @param row The model row index\n * @returns The value stored for that cell\n */\n abstract valueForCell(column: ModelIndex, row: ModelIndex): unknown;\n\n /**\n * @returns The filters set on this model\n */\n abstract get filter(): FilterCondition[];\n\n /**\n * @param filter The filters to set\n */\n abstract set filter(filter: FilterCondition[]);\n\n /**\n * @returns {Formatter} The formatter used when formatting data\n */\n abstract get formatter(): Formatter;\n\n /**\n * @param {Formatter} formatter The formatter to set\n */\n abstract set formatter(formatter: Formatter);\n\n /**\n * @param value The value to format\n * @param columnType The column type to format\n * @param columnName The column name to format\n */\n abstract displayString(\n value: unknown,\n columnType: string,\n columnName?: string\n ): string;\n\n /**\n * @returns The sorts used on this model\n */\n abstract get sort(): Sort[];\n\n /**\n * @param sort The sorts to use on this model\n */\n abstract set sort(sort: Sort[]);\n\n /**\n * @returns The custom columns on this model\n */\n abstract get customColumns(): string[];\n\n /**\n * @param customColumns The custom columns to use\n */\n abstract set customColumns(customColumns: string[]);\n\n /**\n * @returns The format columns on this model\n */\n abstract get formatColumns(): CustomColumn[];\n\n /**\n * @param formatColumns The format columns to use\n */\n abstract set formatColumns(formatColumns: CustomColumn[]);\n\n /**\n * @param columns The columns to treat as frozen\n */\n abstract updateFrozenColumns(columns: string[]): void;\n\n /**\n * @returns The config to use for rolling up this table\n */\n abstract get rollupConfig(): RollupConfig | null;\n\n abstract set rollupConfig(rollupConfig: RollupConfig | null);\n\n /**\n * @returns The config to use for the totals table of this model\n */\n abstract get totalsConfig(): TotalsTableConfig | null;\n\n abstract set totalsConfig(totalsConfig: TotalsTableConfig | null);\n\n /**\n * @returns The LayoutHints to use for the columns of this table model\n */\n get layoutHints(): LayoutHints | null {\n return null;\n }\n\n /**\n * @returns Names of columns which should be locked to the front, but not floating\n */\n get frontColumns(): string[] {\n return EMPTY_ARRAY;\n }\n\n /**\n * @returns Names of columns which should be locked to the back, but not floating\n */\n get backColumns(): string[] {\n return EMPTY_ARRAY;\n }\n\n /**\n * @returns Names of key columns\n */\n get keyColumnSet(): Set<ColumnName> {\n return EMPTY_SET;\n }\n\n /**\n * @returns Names of columns which should be frozen to the front and floating\n */\n get frozenColumns(): string[] {\n return EMPTY_ARRAY;\n }\n\n /**\n * @param index The column index to check\n * @returns Whether the column is one of LayoutHints' frozen columns\n */\n isColumnFrozen(index: ModelIndex): boolean {\n return false;\n }\n\n /**\n * @returns True if this model requires a filter to be set\n */\n get isFilterRequired(): boolean {\n return false;\n }\n\n get isReversible(): boolean {\n return true;\n }\n\n /**\n * @returns True if this model supports the columnStatistics(column) function\n */\n get isColumnStatisticsAvailable(): boolean {\n return false;\n }\n\n /**\n * @returns True if this model supports customColumns\n */\n get isCustomColumnsAvailable(): boolean {\n return false;\n }\n\n /**\n * @returns True if this model supports customColumns\n */\n get isFormatColumnsAvailable(): boolean {\n return false;\n }\n\n /**\n * @returns True if this model supports the export() function\n */\n get isExportAvailable(): boolean {\n return false;\n }\n\n /**\n * @returns True if this model supports the valuesTable(column) function\n */\n get isValuesTableAvailable(): boolean {\n return false;\n }\n\n /**\n * @returns True if this model should allow the chart builder\n */\n get isChartBuilderAvailable(): boolean {\n return false;\n }\n\n /**\n * @returns True if the rollup rows functionality is available\n */\n get isRollupAvailable(): boolean {\n return false;\n }\n\n /**\n * @return True if select distinct functionality is available\n */\n get isSelectDistinctAvailable(): boolean {\n return false;\n }\n\n /**\n * @returns True if the totals functionality is available\n */\n get isTotalsAvailable(): boolean {\n return false;\n }\n\n /**\n * The names of columns with select distinct enabled\n * @returns An array of column names\n */\n abstract get selectDistinctColumns(): string[];\n\n /**\n * Set the columns with select distinct enabled\n * @param names The array of column names to enable select distinct on\n */\n abstract set selectDistinctColumns(names: string[]);\n\n /**\n * The pending data for this model\n * @returns A map of row index to a map of column name/value pairs\n */\n abstract get pendingDataMap(): Map<RowIndex, Map<string, unknown>>;\n\n /**\n * Set the pending data for this model\n * @param A map of row index to a map of column name/value pairs\n */\n abstract set pendingDataMap(map: Map<RowIndex, Map<string, unknown>>);\n\n /**\n * @returns The count of pending rows to show\n */\n abstract get pendingRowCount(): number;\n\n /**\n * Set the count of pending rows to show\n * @param count The count of pending rows to show\n */\n abstract set pendingRowCount(count: number);\n\n /**\n * Errors for the pending data\n * @returns Map from row number to the error\n */\n abstract get pendingDataErrors(): Map<RowIndex, Error>;\n\n /**\n * Commit pending data and save all data to the table\n */\n abstract commitPending(): Promise<void>;\n\n /**\n * Check if a column is filterable\n * @param columnIndex The column index to check for filterability\n * @returns True if the current provided column index is filterable, false otherwise\n */\n isFilterable(columnIndex: ModelIndex): boolean {\n return false;\n }\n\n /**\n * Set the indices of the viewport\n * @param top Top of viewport\n * @param bottom Bottom of viewport\n * @param columns The columns in the viewport. `null` for all columns\n */\n abstract setViewport(\n top: VisibleIndex,\n bottom: VisibleIndex,\n columns: Column[] | null\n ): void;\n\n /**\n * Takes a snapshot of the provided ranges\n * @param ranges The model ranges to take the snapshot of\n * @returns Returns the data in a row/column matrix\n */\n abstract snapshot(ranges: GridRange[]): Promise<unknown[][]>;\n\n /**\n * @param ranges The ranges to take a snapshot of\n * @param includeHeaders Whether to include the headers in the snapshot or not\n * @param {(unknown, dh.Column, dh.Row) => string} formatValue A function to format a value for a cell. Defaults to model format value.\n * @returns A text formatted snapshot of the data for the specified range set\n */\n abstract textSnapshot(\n ranges: GridRange[],\n includeHeaders?: boolean,\n formatValue?: (value: unknown, column: Column, row: Row) => string\n ): Promise<string>;\n\n /**\n * @returns Returns a raw table that is frozen and can be used for exporting data\n */\n abstract export(): Promise<Table>;\n\n /**\n * @param column The column to get the distinct values for\n * @returns A table partitioned on the column specified\n */\n abstract valuesTable(column: Column): Promise<Table>;\n\n /**\n * @param column The column to get statistics for\n * @returns The column statistics\n */\n abstract columnStatistics(column: Column): Promise<ColumnStatistics>;\n\n /**\n * Close this model. It can no longer be used after being closed\n */\n close(): void {\n // no-op\n }\n\n /**\n * Don't allow any rows to be movable in any IrisGrids by default. Just columns.\n */\n isRowMovable(): boolean {\n return false;\n }\n\n /**\n * Delete ranges from an input grid. Will delete the entire row, causing data to shift up\n * @param ranges The ranges to delete\n * @returns A promise that resolves successfully when the operation is complete or rejects if there's an error\n */\n abstract delete(ranges: GridRange[]): Promise<void>;\n}\n\nexport default IrisGridModel;\n"],"file":"IrisGridModel.js"}
@@ -56,6 +56,7 @@ declare class IrisGridTableModel extends IrisGridModel<Record<string, import("ev
56
56
  textValueForCell(x: any, y: any): any;
57
57
  getMemoizedColumnMap: (this: any, tableColumns: any) => Map<any, any>;
58
58
  get columnMap(): Map<any, any>;
59
+ getMemoizedKeyColumnSet: (this: any, inputTableKeys: any) => Set<any>;
59
60
  getMemoizedFrontColumns: (this: any, layoutHintsFrontColumns: any) => any;
60
61
  getMemoizedBackColumns: (this: any, layoutHintsBackColumns: any) => any;
61
62
  getMemoizedFrozenColumns: (this: any, layoutHintsFrozenColumns: any, userFrozenColumns: any) => any;
@@ -1 +1 @@
1
- {"version":3,"file":"IrisGridTableModel.d.ts","sourceRoot":"","sources":["../src/IrisGridTableModel.js"],"names":[],"mappings":";AAkBA;;GAEG;AACH;IACE,gCAA4B;IAE5B,mCAA+B;IAE/B;;;;OAIG;IACH,yCAHW,SAAS,8BAiDnB;IAwFD,8BAEC;IAED,6BAEC;IAED,oCAIC;IAED,qCAIC;IAED,sCAIC;IAED,mCAMC;IA6xBD;;OAEG;IACH,sBAYC;IA97BC,yBAA8B;IAC9B,0BAA4B;IAE5B,kBAAwB;IACxB,gBAAkB;IAClB;;;;aAAoB;IACpB;;;aAAwB;IACxB,2BAA6B;IAC7B,yBAA2B;IAC3B,0BAA6B;IAE7B,iBAAuB;IACvB,6EAA8B;IAC9B,YAAkB;IAClB,oCAAyB;IAEzB,wBAA0B;IAC1B,wBAA0B;IAK1B,iCAAkC;IAClC,2BAA2B;IAE3B,uBAA6B;IAwE/B,2CAQC;IAED,8CAKC;IAsGD,gCAIC;IAsDD,0BAEC;IAED,qDAKC;IAED,mDAKC;IAED,wCAKC;IAED,sCAoCC;IAuJD,sEAIG;IAEH,+BAEC;IAED,0EAEE;IAMF,wEAEE;IAMF,oGAGE;IAyBF,iBAeC;IAED;;;;;OAKG;IACH,4CAFa,YAAY,IAAI,CAmB5B;IAED;;;;;OAKG;IACH,aAHW,MAAM,GACJ,MAAM,GAAC,IAAI,CAUvB;IAED;;;;;OAKG;IACH,cAHW,MAAM,GACJ,MAAM,GAAC,IAAI,CASvB;IAED;;;;OAIG;IACH,eAHW,MAAM,GACJ,OAAO,CAInB;IAED;;;;OAIG;IACH,gBAHW,MAAM,GACJ,OAAO,CAInB;IAED,iCAEC;IAcD,kCAQC;IAED,sCAsCC;IAWD,sEAIG;IAEH;;;OAGG;IACH;;;MAcC;IAED;;MAYC;IAED,0BASC;IAgJD,uCAiBC;IA8CD,iFAaC;IA+JD,oEAEE;IAEF,iPASE;IAEF,oKAGE;IAEF,uEASG;IAEH,6GAkBE;IAkBF,6BAEC;IAMD,qCAmCC;IAED,sCAWC;IAED,mCAEC;IAED,oCAEC;IAED;;OAEG;IACH,qBAFa,SAAS,CASrB;IAED;;OAEG;IACH,uBAFa,SAAS,CASrB;IAED;;;;;;OAMG;IACH,mBALW,MAAM,KACN,MAAM,cAEJ,QAAQ,IAAI,CAAC,CAKzB;IAED;;;;;OAKG;IACH,0BAJW,SAAS,EAAE,cAET,QAAQ,IAAI,CAAC,CAiIzB;IAED,wCAuJC;IAwBG,gDAAqC;IAiBzC,sCAEC;IAuFD,oDAQC;CACF"}
1
+ {"version":3,"file":"IrisGridTableModel.d.ts","sourceRoot":"","sources":["../src/IrisGridTableModel.js"],"names":[],"mappings":";AAmBA;;GAEG;AACH;IACE,gCAA4B;IAE5B,mCAA+B;IAE/B;;;;OAIG;IACH,yCAHW,SAAS,8BAkDnB;IAwFD,8BAEC;IAED,6BAEC;IAED,oCAIC;IAED,qCAIC;IAED,sCAIC;IAED,mCAMC;IAuyBD;;OAEG;IACH,sBAYC;IAx8BC,yBAA8B;IAC9B,0BAA4B;IAE5B,kBAAwB;IACxB,gBAAkB;IAClB;;;;aAAoB;IACpB;;;aAAwB;IACxB,2BAA6B;IAC7B,yBAA2B;IAC3B,0BAA6B;IAE7B,iBAAuB;IACvB,6EAA8B;IAC9B,YAAkB;IAClB,oCAAyB;IAEzB,wBAA0B;IAC1B,wBAA0B;IAK1B,iCAAkC;IAClC,2BAA2B;IAE3B,uBAA6B;IAwE/B,2CAQC;IAED,8CAKC;IAsGD,gCAIC;IAsDD,0BAEC;IAED,qDAKC;IAED,mDAKC;IAED,wCAKC;IAED,sCAoCC;IAuJD,sEAIG;IAEH,+BAEC;IAED,sEAEE;IAMF,0EAEE;IAMF,wEAEE;IAMF,oGAGE;IAyBF,iBAeC;IAED;;;;;OAKG;IACH,4CAFa,YAAY,IAAI,CAmB5B;IAED;;;;;OAKG;IACH,aAHW,MAAM,GACJ,MAAM,GAAC,IAAI,CAUvB;IAED;;;;;OAKG;IACH,cAHW,MAAM,GACJ,MAAM,GAAC,IAAI,CASvB;IAED;;;;OAIG;IACH,eAHW,MAAM,GACJ,OAAO,CAInB;IAED;;;;OAIG;IACH,gBAHW,MAAM,GACJ,OAAO,CAInB;IAED,iCAEC;IAcD,kCAQC;IAED,sCAwCC;IAWD,sEAIG;IAEH;;;OAGG;IACH;;;MAcC;IAED;;MAYC;IAED,0BASC;IAgJD,uCAiBC;IA8CD,iFAaC;IA+JD,oEAEE;IAEF,iPASE;IAEF,oKAGE;IAEF,uEASG;IAEH,6GAkBE;IAkBF,6BAEC;IAMD,qCAmCC;IAED,sCAWC;IAED,mCAEC;IAED,oCAEC;IAED;;OAEG;IACH,qBAFa,SAAS,CASrB;IAED;;OAEG;IACH,uBAFa,SAAS,CASrB;IAED;;;;;;OAMG;IACH,mBALW,MAAM,KACN,MAAM,cAEJ,QAAQ,IAAI,CAAC,CAKzB;IAED;;;;;OAKG;IACH,0BAJW,SAAS,EAAE,cAET,QAAQ,IAAI,CAAC,CAiIzB;IAED,wCAuJC;IAwBG,gDAAqC;IAiBzC,sCAEC;IAuFD,oDAQC;CACF"}
@@ -23,6 +23,7 @@ import MissingKeyError from "./MissingKeyError.js";
23
23
  var log = Log.module('IrisGridTableModel');
24
24
  var SET_VIEWPORT_THROTTLE = 150;
25
25
  var APPLY_VIEWPORT_THROTTLE = 0;
26
+ var EMPTY_ARRAY = Object.freeze([]);
26
27
  /**
27
28
  * Model for a grid showing an iris data table
28
29
  */
@@ -45,14 +46,16 @@ class IrisGridTableModel extends IrisGridModel {
45
46
  return columnMap;
46
47
  }));
47
48
 
48
- _defineProperty(this, "getMemoizedFrontColumns", memoize(layoutHintsFrontColumns => layoutHintsFrontColumns !== null && layoutHintsFrontColumns !== void 0 ? layoutHintsFrontColumns : []));
49
+ _defineProperty(this, "getMemoizedKeyColumnSet", memoize(inputTableKeys => new Set(inputTableKeys !== null && inputTableKeys !== void 0 ? inputTableKeys : EMPTY_ARRAY)));
49
50
 
50
- _defineProperty(this, "getMemoizedBackColumns", memoize(layoutHintsBackColumns => layoutHintsBackColumns !== null && layoutHintsBackColumns !== void 0 ? layoutHintsBackColumns : []));
51
+ _defineProperty(this, "getMemoizedFrontColumns", memoize(layoutHintsFrontColumns => layoutHintsFrontColumns !== null && layoutHintsFrontColumns !== void 0 ? layoutHintsFrontColumns : EMPTY_ARRAY));
52
+
53
+ _defineProperty(this, "getMemoizedBackColumns", memoize(layoutHintsBackColumns => layoutHintsBackColumns !== null && layoutHintsBackColumns !== void 0 ? layoutHintsBackColumns : EMPTY_ARRAY));
51
54
 
52
55
  _defineProperty(this, "getMemoizedFrozenColumns", memoize((layoutHintsFrozenColumns, userFrozenColumns) => {
53
56
  var _ref;
54
57
 
55
- return (_ref = userFrozenColumns !== null && userFrozenColumns !== void 0 ? userFrozenColumns : layoutHintsFrozenColumns) !== null && _ref !== void 0 ? _ref : [];
58
+ return (_ref = userFrozenColumns !== null && userFrozenColumns !== void 0 ? userFrozenColumns : layoutHintsFrozenColumns) !== null && _ref !== void 0 ? _ref : EMPTY_ARRAY;
56
59
  }));
57
60
 
58
61
  _defineProperty(this, "getColumnIndicesByNameMap", memoize(columns => {
@@ -566,6 +569,12 @@ class IrisGridTableModel extends IrisGridModel {
566
569
  return this.getMemoizedColumnMap(this.table.columns);
567
570
  }
568
571
 
572
+ get keyColumnSet() {
573
+ var _this$inputTable2;
574
+
575
+ return this.getMemoizedKeyColumnSet((_this$inputTable2 = this.inputTable) === null || _this$inputTable2 === void 0 ? void 0 : _this$inputTable2.keys);
576
+ }
577
+
569
578
  get frontColumns() {
570
579
  var _this$layoutHints;
571
580
 
@@ -593,7 +602,7 @@ class IrisGridTableModel extends IrisGridModel {
593
602
  }
594
603
 
595
604
  get groupedColumns() {
596
- return [];
605
+ return EMPTY_ARRAY;
597
606
  }
598
607
 
599
608
  get description() {
@@ -1227,9 +1236,7 @@ class IrisGridTableModel extends IrisGridModel {
1227
1236
  }
1228
1237
 
1229
1238
  isKeyColumn(x) {
1230
- var _this$inputTable$keyC2, _this$inputTable2;
1231
-
1232
- return x < ((_this$inputTable$keyC2 = (_this$inputTable2 = this.inputTable) === null || _this$inputTable2 === void 0 ? void 0 : _this$inputTable2.keyColumns.length) !== null && _this$inputTable$keyC2 !== void 0 ? _this$inputTable$keyC2 : 0);
1239
+ return this.keyColumnSet.has(this.columns[x].name);
1233
1240
  }
1234
1241
 
1235
1242
  isRowMovable() {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/IrisGridTableModel.js"],"names":["memoize","throttle","GridRange","GridUtils","memoizeClear","dh","Formatter","FormatterUtils","TableUtils","Log","PromiseUtils","IrisGridModel","AggregationOperation","IrisGridUtils","MissingKeyError","log","module","SET_VIEWPORT_THROTTLE","APPLY_VIEWPORT_THROTTLE","IrisGridTableModel","constructor","table","formatter","inputTable","tableColumns","columnMap","Map","forEach","col","set","name","layoutHintsFrontColumns","layoutHintsBackColumns","layoutHintsFrozenColumns","userFrozenColumns","columns","indices","i","Set","map","_","index","value","columnType","columnName","formatOverride","getFormattedString","max","isCustomColumnFormatDefined","top","bottom","viewHeight","viewportTop","Math","ROW_BUFFER_PAGES","viewportBottom","pendingDataMap","keyColumnCount","row","rowIndex","data","rowData","has","get","push","handleTableDisconnect","bind","handleTableReconnect","handleTableUpdate","handleTotalsUpdate","handleRequestFailed","handleCustomColumnsChanged","setViewport","applyViewport","leading","irisFormatter","listenerCount","subscription","viewport","viewportData","formattedStringData","pendingStringData","isSaveInProgress","totalsTable","totalsTablePromise","totals","totalsDataMap","customColumnList","formatColumnList","pendingNewDataMap","pendingNewRowCount","close","cancel","startListening","addEventListener","Table","EVENT_DISCONNECT","EVENT_RECONNECT","EVENT_UPDATED","Client","EVENT_REQUEST_FAILED","EVENT_CUSTOMCOLUMNSCHANGED","addTotalsListeners","stopListening","removeEventListener","removeTotalsListeners","closeSubscription","dispatchEvent","CustomEvent","EVENT","DISCONNECT","RECONNECT","event","copyViewportData","detail","UPDATED","copyTotalsData","REQUEST_FAILED","COLUMNS_CHANGED","rowCount","size","operationOrder","length","pendingDataErrors","getCachedPendingErrors","keyColumns","isValidIndex","Error","columnIndex","maxPendingDataRow","PENDING_DATA_UPDATED","pendingRowCount","count","keys","columnCount","floatingBottomRowCount","showOnTop","floatingTopRowCount","isExportAvailable","freeze","isColumnStatisticsAvailable","getColumnStatistics","isValuesTableAvailable","selectDistinct","copy","isRollupAvailable","rollup","isSelectDistinctAvailable","isCustomColumnsAvailable","applyCustomColumns","isFormatColumnsAvailable","isChartBuilderAvailable","isTotalsAvailable","getTotalsTable","isEditable","cacheFormattedValue","x","y","text","cachePendingValue","clearPendingValue","column","textValueForCell","undefined","valueForCell","totalsColumn","hasCustomColumnFormat","getCachedCustomColumnFormatFlag","type","formatForCell","formatString","displayString","textForCell","isKeyColumn","pendingRow","truncationCharForCell","isNumberType","truncateNumbersWithPound","colorForCell","theme","dataForCell","format","nullStringColor","color","isPendingRow","pendingTextColor","isDateType","dateColor","positiveNumberColor","negativeNumberColor","zeroNumberColor","errorTextColor","textColor","backgroundColorForCell","backgroundColor","textAlignForCell","textForColumnHeader","textForRowFooter","totalsRow","movedColumns","frontColumns","backColumns","frozenColumns","usedColumns","moveColumn","modelIndex","getColumnIndexByName","visibleIndex","getVisibleIndex","moveItem","frontIndex","backIndex","getMemoizedColumnMap","getMemoizedFrontColumns","layoutHints","getMemoizedBackColumns","getMemoizedFrozenColumns","floatingLeftColumnCount","groupedColumns","description","totalsRowCount","operation","offset","viewportY","rows","tableColumn","operations","operationMap","isOnlyOperation","matchName","find","isTotalsRow","warn","extractViewportData","totalsData","error","dataMap","defaultOperation","SUM","c","split","findIndex","getFormat","debug2","getColumnIndicesByNameMap","newData","r","newRow","extractViewportRow","filter","applyFilter","FORMATTER_UPDATED","getCachedFormattedString","sort","applySort","customColumns","debug","formatColumns","updateFrozenColumns","TABLE_CHANGED","totalsConfig","setTotalsTable","makeCancelable","then","catch","err","isCanceled","getCachedViewportRowRange","applyBufferedViewport","snapshot","ranges","includeHeaders","formatValue","consolidated","consolidate","isValidSnapshotRanges","topFloatingRowsSet","tableRanges","bottomFloatingRowsSet","range","startRow","endRow","add","startColumn","min","endColumn","columnsFromRanges","result","topFloatingRows","rangeSet","rangeSetFromRanges","bottomFloatingRows","textSnapshot","join","isFilterRequired","isUncoalesced","isFilterable","getCachedFilterableColumnSet","valuesTable","export","columnStatistics","isColumnMovable","includes","isColumnFrozen","isRowMovable","isEditableRange","isPendingRange","isKeyColumnInRange","bound","keyColumnSet","isDeletableRange","isEditableRanges","every","isDeletableRanges","getTableAreaRange","getPendingAreaRange","setValueForCell","setValueForRanges","columnSet","formattedText","forEachCell","makeValue","timeZone","pendingAreaRange","pendingRanges","intersection","newDataMap","newRowData","delete","tableAreaRange","newRows","addRows","setValues","edits","edit","makeCell","rowEditMap","reduce","rowMap","dataIndex","rangeRowCount","rowEdits","info","commitPending","pendingNewDataErrors","editValueForCell","pendingRange","deleteTable","Promise","all","filters","columnFilters","filterValue","makeFilterRawValue","eq","agg","curr","and","or","isValidForCell","e"],"mappings":"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","sourcesContent":["/* eslint class-methods-use-this: \"off\" */\nimport memoize from 'memoize-one';\nimport throttle from 'lodash.throttle';\nimport { GridRange, GridUtils, memoizeClear } from '@deephaven/grid';\nimport dh from '@deephaven/jsapi-shim';\nimport { Formatter, FormatterUtils, TableUtils } from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport { PromiseUtils } from '@deephaven/utils';\nimport IrisGridModel from './IrisGridModel';\nimport AggregationOperation from './sidebar/aggregations/AggregationOperation';\nimport IrisGridUtils from './IrisGridUtils';\nimport MissingKeyError from './MissingKeyError';\n\nconst log = Log.module('IrisGridTableModel');\n\nconst SET_VIEWPORT_THROTTLE = 150;\nconst APPLY_VIEWPORT_THROTTLE = 0;\n\n/**\n * Model for a grid showing an iris data table\n */\nclass IrisGridTableModel extends IrisGridModel {\n static ROW_BUFFER_PAGES = 1;\n\n static COLUMN_BUFFER_PAGES = 0;\n\n /**\n * @param {dh.Table} table Iris data table to be used in the model\n * @param {Formatter} formatter The formatter to use when getting formats\n * @param {dh.InputTable} inputTable Iris input table associated with this table\n */\n constructor(table, formatter = new Formatter(), inputTable = null) {\n super();\n\n this.handleTableDisconnect = this.handleTableDisconnect.bind(this);\n this.handleTableReconnect = this.handleTableReconnect.bind(this);\n this.handleTableUpdate = this.handleTableUpdate.bind(this);\n this.handleTotalsUpdate = this.handleTotalsUpdate.bind(this);\n this.handleRequestFailed = this.handleRequestFailed.bind(this);\n this.handleCustomColumnsChanged =\n this.handleCustomColumnsChanged.bind(this);\n this.setViewport = throttle(\n this.setViewport.bind(this),\n SET_VIEWPORT_THROTTLE\n );\n this.applyViewport = throttle(\n this.applyViewport.bind(this),\n APPLY_VIEWPORT_THROTTLE,\n { leading: false }\n );\n\n this.irisFormatter = formatter;\n this.inputTable = inputTable;\n this.listenerCount = 0;\n this.subscription = null;\n this.table = table;\n this.viewport = null;\n this.viewportData = null;\n this.formattedStringData = [];\n this.pendingStringData = [];\n this.isSaveInProgress = false;\n\n this.totalsTable = null;\n this.totalsTablePromise = null;\n this.totals = null;\n this.totalsDataMap = null;\n\n this.customColumnList = [];\n this.formatColumnList = [];\n\n // Map from new row index to their values. Only for input tables that can have new rows added.\n // The index of these rows start at 0, and they are appended at the end of the regular table data.\n // These rows can be sparse, so using a map instead of an array.\n this.pendingNewDataMap = new Map();\n this.pendingNewRowCount = 0;\n\n this.userFrozenColumns = null;\n }\n\n close() {\n this.table.close();\n if (this.totalsTable !== null) {\n this.totalsTable.close();\n }\n if (this.totalsTablePromise !== null) {\n this.totalsTablePromise.cancel();\n }\n }\n\n startListening() {\n super.startListening();\n\n this.table.addEventListener(\n dh.Table.EVENT_DISCONNECT,\n this.handleTableDisconnect\n );\n this.table.addEventListener(\n dh.Table.EVENT_RECONNECT,\n this.handleTableReconnect\n );\n this.table.addEventListener(dh.Table.EVENT_UPDATED, this.handleTableUpdate);\n this.table.addEventListener(\n dh.Client.EVENT_REQUEST_FAILED,\n this.handleRequestFailed\n );\n this.table.addEventListener(\n dh.Table.EVENT_CUSTOMCOLUMNSCHANGED,\n this.handleCustomColumnsChanged\n );\n\n if (this.totalsTable != null) {\n this.addTotalsListeners(this.totalsTable);\n }\n\n this.applyViewport();\n }\n\n stopListening() {\n super.stopListening();\n\n this.table.removeEventListener(\n dh.Table.EVENT_DISCONNECT,\n this.handleTableDisconnect\n );\n this.table.removeEventListener(\n dh.Table.EVENT_RECONNECT,\n this.handleTableReconnect\n );\n this.table.removeEventListener(\n dh.Table.EVENT_UPDATED,\n this.handleTableUpdate\n );\n this.table.removeEventListener(\n dh.Client.EVENT_REQUEST_FAILED,\n this.handleRequestFailed\n );\n this.table.removeEventListener(\n dh.Table.EVENT_CUSTOMCOLUMNSCHANGED,\n this.handleCustomColumnsChanged\n );\n\n if (this.totalsTable != null) {\n this.removeTotalsListeners(this.totalsTable);\n }\n\n this.closeSubscription();\n }\n\n addTotalsListeners(totalsTable) {\n totalsTable.addEventListener(\n dh.Table.EVENT_UPDATED,\n this.handleTotalsUpdate\n );\n\n // Totals table only has one row of data\n totalsTable.setViewport(0, 0);\n }\n\n removeTotalsListeners(totalsTable) {\n totalsTable.removeEventListener(\n dh.Table.EVENT_UPDATED,\n this.handleTotalsUpdate\n );\n }\n\n handleTableDisconnect() {\n this.dispatchEvent(new CustomEvent(IrisGridModel.EVENT.DISCONNECT));\n }\n\n handleTableReconnect() {\n this.dispatchEvent(new CustomEvent(IrisGridModel.EVENT.RECONNECT));\n }\n\n handleTableUpdate(event) {\n this.copyViewportData(event.detail);\n\n this.dispatchEvent(new CustomEvent(IrisGridModel.EVENT.UPDATED));\n }\n\n handleTotalsUpdate(event) {\n this.copyTotalsData(event.detail);\n\n this.dispatchEvent(new CustomEvent(IrisGridModel.EVENT.UPDATED));\n }\n\n handleRequestFailed(event) {\n this.dispatchEvent(\n new CustomEvent(IrisGridModel.EVENT.REQUEST_FAILED, event)\n );\n }\n\n handleCustomColumnsChanged() {\n this.dispatchEvent(\n new CustomEvent(IrisGridModel.EVENT.COLUMNS_CHANGED, {\n detail: this.columns,\n })\n );\n }\n\n get rowCount() {\n return (\n this.table.size +\n (this.totals?.operationOrder?.length ?? 0) +\n this.pendingNewRowCount\n );\n }\n\n get pendingDataErrors() {\n return this.getCachedPendingErrors(\n this.pendingNewDataMap,\n this.columns,\n this.inputTable?.keyColumns.length ?? 0\n );\n }\n\n get pendingDataMap() {\n return this.pendingNewDataMap;\n }\n\n set pendingDataMap(map) {\n if (map === this.pendingNewDataMap) {\n return;\n }\n\n map.forEach((row, rowIndex) => {\n if (!IrisGridUtils.isValidIndex(rowIndex)) {\n throw new Error('Invalid rowIndex', rowIndex);\n }\n\n const { data } = row;\n data.forEach((value, columnIndex) => {\n if (!IrisGridUtils.isValidIndex(columnIndex)) {\n throw new Error('Invalid columnIndex', columnIndex);\n }\n });\n });\n\n this.pendingNewDataMap = map;\n\n this.pendingNewRowCount = Math.max(\n this.pendingNewRowCount,\n this.maxPendingDataRow\n );\n\n this.formattedStringData = [];\n\n this.dispatchEvent(\n new CustomEvent(IrisGridModel.EVENT.PENDING_DATA_UPDATED)\n );\n }\n\n get pendingRowCount() {\n return this.pendingNewRowCount;\n }\n\n set pendingRowCount(count) {\n if (count === this.pendingNewRowCount) {\n return;\n }\n\n this.pendingNewRowCount = Math.max(0, count, this.maxPendingDataRow);\n\n this.dispatchEvent(new CustomEvent(IrisGridModel.EVENT.UPDATED));\n }\n\n get maxPendingDataRow() {\n return this.pendingNewDataMap.size > 0\n ? Math.max(...this.pendingNewDataMap.keys()) + 1\n : 0;\n }\n\n get columnCount() {\n return this.columns.length;\n }\n\n get floatingBottomRowCount() {\n return this.totals?.showOnTop\n ? 0\n : this.totals?.operationOrder?.length ?? 0;\n }\n\n get floatingTopRowCount() {\n return this.totals?.showOnTop\n ? this.totals?.operationOrder?.length ?? 0\n : 0;\n }\n\n get isExportAvailable() {\n return this.table.freeze != null;\n }\n\n get isColumnStatisticsAvailable() {\n return this.table.getColumnStatistics != null;\n }\n\n get isValuesTableAvailable() {\n return this.table.selectDistinct != null && this.table.copy != null;\n }\n\n get isRollupAvailable() {\n return this.table.rollup != null;\n }\n\n get isSelectDistinctAvailable() {\n return this.table.selectDistinct != null;\n }\n\n get isCustomColumnsAvailable() {\n return this.table.applyCustomColumns != null;\n }\n\n get isFormatColumnsAvailable() {\n return this.table.applyCustomColumns != null;\n }\n\n get isChartBuilderAvailable() {\n return true;\n }\n\n get isTotalsAvailable() {\n return this.table.getTotalsTable != null;\n }\n\n get isEditable() {\n return !this.isSaveInProgress && this.inputTable != null;\n }\n\n cacheFormattedValue(x, y, text) {\n if (this.formattedStringData[x] == null) {\n this.formattedStringData[x] = [];\n }\n this.formattedStringData[x][y] = text;\n }\n\n cachePendingValue(x, y, text) {\n if (this.pendingStringData[x] == null) {\n this.pendingStringData[x] = [];\n }\n this.pendingStringData[x][y] = text;\n }\n\n clearPendingValue(x, y) {\n const column = this.pendingStringData[x];\n if (column != null) {\n delete column[y];\n }\n }\n\n textValueForCell(x, y) {\n // First check if there's any pending values we should read from\n if (this.pendingStringData[x]?.[y] !== undefined) {\n return this.pendingStringData[x][y];\n }\n\n // Use a separate cache from memoization just for the strings that are currently displayed\n if (this.formattedStringData[x]?.[y] === undefined) {\n const value = this.valueForCell(x, y);\n if (value == null) {\n return null;\n }\n\n const column = this.totalsColumn(x, y) ?? this.columns[x];\n const hasCustomColumnFormat = this.getCachedCustomColumnFormatFlag(\n this.formatter,\n column.name,\n column.type\n );\n let formatOverride = null;\n if (!hasCustomColumnFormat) {\n const formatForCell = this.formatForCell(x, y);\n if (formatForCell?.formatString != null) {\n formatOverride = formatForCell;\n }\n }\n const text = this.displayString(\n value,\n column.type,\n column.name,\n formatOverride\n );\n this.cacheFormattedValue(x, y, text);\n }\n\n return this.formattedStringData[x][y];\n }\n\n textForCell(x, y) {\n const text = this.textValueForCell(x, y);\n if (text == null && this.isKeyColumn(x)) {\n const pendingRow = this.pendingRow(y);\n if (this.pendingDataMap.has(pendingRow)) {\n // Asterisk to show a value is required for a key column on a row that has some data entered\n return '*';\n }\n }\n return text;\n }\n\n truncationCharForCell(x) {\n const column = this.columns[x];\n const { type } = column;\n if (\n TableUtils.isNumberType(type) &&\n this.formatter.truncateNumbersWithPound\n ) {\n return '#';\n }\n\n return undefined;\n }\n\n colorForCell(x, y, theme) {\n const data = this.dataForCell(x, y);\n if (data) {\n const { format, value } = data;\n if (value == null || value === '') {\n return theme.nullStringColor;\n }\n if (format && format.color) {\n return format.color;\n }\n\n if (this.isPendingRow(y)) {\n // Data entered in a pending row\n return theme.pendingTextColor;\n }\n\n // Fallback to formatting based on the value/type of the cell\n if (value != null) {\n const column = this.totalsColumn(x, y) ?? this.columns[x];\n if (TableUtils.isDateType(column.type) || column.name === 'Date') {\n return theme.dateColor;\n }\n if (TableUtils.isNumberType(column.type)) {\n if (value > 0) {\n return theme.positiveNumberColor;\n }\n if (value < 0) {\n return theme.negativeNumberColor;\n }\n return theme.zeroNumberColor;\n }\n }\n } else if (this.isPendingRow(y) && this.isKeyColumn(x)) {\n return theme.errorTextColor;\n }\n\n return theme.textColor;\n }\n\n backgroundColorForCell(x, y) {\n return this.formatForCell(x, y)?.backgroundColor;\n }\n\n textAlignForCell(x) {\n const column = this.columns[x];\n const { type } = column;\n\n if (TableUtils.isNumberType(type)) {\n return 'right';\n }\n if (TableUtils.isDateType(type) || column.name === 'Date') {\n return 'center';\n }\n return 'left';\n }\n\n textForColumnHeader(x) {\n const column = this.columns[x];\n return `${column.name}`;\n }\n\n textForRowFooter(y) {\n const totalsRow = this.totalsRow(y);\n if (totalsRow != null) {\n return this.totals.operationOrder[totalsRow];\n }\n return '';\n }\n\n /**\n * Returns an array of the columns in the model\n * The order of model columns should never change once established\n */\n get columns() {\n return this.table.columns;\n }\n\n /**\n * Used to get the initial moved columns based on layout hints\n */\n get movedColumns() {\n let movedColumns = [];\n\n if (\n this.frontColumns.length ||\n this.backColumns.length ||\n this.frozenColumns.length\n ) {\n const usedColumns = new Set();\n\n const moveColumn = (name, index) => {\n if (usedColumns.has(name)) {\n throw new Error(`Column specified in multiple layout hints: ${name}`);\n }\n const modelIndex = this.getColumnIndexByName(name);\n if (!modelIndex) {\n throw new Error(`Unknown layout hint column: ${name}`);\n }\n const visibleIndex = GridUtils.getVisibleIndex(\n modelIndex,\n movedColumns\n );\n movedColumns = GridUtils.moveItem(visibleIndex, index, movedColumns);\n };\n\n let frontIndex = 0;\n this.frozenColumns.forEach(name => {\n moveColumn(name, frontIndex);\n frontIndex += 1;\n });\n this.frontColumns.forEach(name => {\n moveColumn(name, frontIndex);\n frontIndex += 1;\n });\n\n let backIndex = this.columnMap.size - 1;\n this.backColumns.forEach(name => {\n moveColumn(name, backIndex);\n backIndex -= 1;\n });\n }\n return movedColumns;\n }\n\n getMemoizedColumnMap = memoize(tableColumns => {\n const columnMap = new Map();\n tableColumns.forEach(col => columnMap.set(col.name, col));\n return columnMap;\n });\n\n get columnMap() {\n return this.getMemoizedColumnMap(this.table.columns);\n }\n\n getMemoizedFrontColumns = memoize(\n layoutHintsFrontColumns => layoutHintsFrontColumns ?? []\n );\n\n get frontColumns() {\n return this.getMemoizedFrontColumns(this.layoutHints?.frontColumns);\n }\n\n getMemoizedBackColumns = memoize(\n layoutHintsBackColumns => layoutHintsBackColumns ?? []\n );\n\n get backColumns() {\n return this.getMemoizedBackColumns(this.layoutHints?.backColumns);\n }\n\n getMemoizedFrozenColumns = memoize(\n (layoutHintsFrozenColumns, userFrozenColumns) =>\n userFrozenColumns ?? layoutHintsFrozenColumns ?? []\n );\n\n get frozenColumns() {\n return this.getMemoizedFrozenColumns(\n this.layoutHints?.frozenColumns,\n this.userFrozenColumns\n );\n }\n\n get layoutHints() {\n return this.table.layoutHints;\n }\n\n get floatingLeftColumnCount() {\n return this.frozenColumns.length;\n }\n\n get groupedColumns() {\n return [];\n }\n\n get description() {\n return this.table.description;\n }\n\n row(y) {\n const totalsRowCount = this.totals?.operationOrder?.length ?? 0;\n const showOnTop = this.totals?.showOnTop ?? false;\n const totalsRow = this.totalsRow(y);\n if (totalsRow != null) {\n const operation = this.totals.operationOrder[totalsRow];\n return this.totalsDataMap?.get(operation) ?? null;\n }\n const pendingRow = this.pendingRow(y);\n if (pendingRow != null) {\n return this.pendingNewDataMap.get(pendingRow) ?? null;\n }\n const offset = this.viewportData?.offset ?? 0;\n const viewportY = (showOnTop ? y - totalsRowCount : y) - offset;\n return this.viewportData?.rows?.[viewportY] ?? null;\n }\n\n /**\n * Retrieve the totals column if this is a totals row, or null otherwise\n * @param {ModelIndex} x Column index to get the totals column from\n * @param {ModelIndex} y Row index to get the totals column from\n * @returns {dh.Column | null}\n */\n totalsColumn(x, y) {\n const totalsRow = this.totalsRow(y);\n if (totalsRow == null) return null;\n\n const operation = this.totals.operationOrder[totalsRow];\n const tableColumn = this.columns[x];\n\n // If there's exactly one operation applied to this column, the totals table result column will just be the same\n // If there's more than one operation, the totals table column will be the original name with two underscores and the operation appended\n const operations = this.totals.operationMap[tableColumn.name];\n const isOnlyOperation =\n operations?.length === 1 && operations[0] === operation;\n const matchName = isOnlyOperation\n ? tableColumn.name\n : `${tableColumn.name}__${operation}`;\n\n return this.totalsTable.columns.find(column => column.name === matchName);\n }\n\n /**\n * Translate from the row in the model to a row in the totals table.\n * If the row is not a totals row, return null\n * @param {number} y The row in the model to get the totals row for\n * @returns {number|null} The row within the totals table if it's a totals row, null otherwise\n */\n totalsRow(y) {\n const totalsRowCount = this.totals?.operationOrder?.length ?? 0;\n const showOnTop = this.totals?.showOnTop ?? false;\n const totalsRow = showOnTop ? y : y - this.table.size;\n if (totalsRow >= 0 && totalsRow < totalsRowCount) {\n return totalsRow;\n }\n return null;\n }\n\n /**\n * Translate from the row in the model to a pending input row.\n * If the row is not a pending input row, return null\n * @param {number} y The row in the model to get the pending row for\n * @returns {number|null} The row within the pending input rows if it's a pending row, null otherwise\n */\n pendingRow(y) {\n const pendingRow = y - this.floatingTopRowCount - this.table.size;\n if (pendingRow >= 0) {\n return pendingRow;\n }\n\n return null;\n }\n\n /**\n * Check if a row is a totals table row\n * @param {number} y The row in the model to check if it's a totals table row\n * @returns {boolean} True if the row is a totals row, false if not\n */\n isTotalsRow(y) {\n return this.totalsRow(y) != null;\n }\n\n /**\n * Check if a row is a pending input row\n * @param {number} y The row in the model to check if it's a pending new row\n * @returns {boolean} True if the row is a pending new row, false if not\n */\n isPendingRow(y) {\n return this.pendingRow(y) != null;\n }\n\n dataForCell(x, y) {\n return this.row(y)?.data.get(x);\n }\n\n formatForCell(x, y) {\n return this.dataForCell(x, y)?.format;\n }\n\n valueForCell(x, y) {\n const data = this.dataForCell(x, y);\n if (data) {\n return data.value ?? null;\n }\n return undefined;\n }\n\n copyViewportData(data) {\n if (!data) {\n log.warn('invalid data!');\n return;\n }\n\n this.viewportData = this.extractViewportData(data);\n this.formattedStringData = [];\n }\n\n copyTotalsData(totalsData) {\n if (!totalsData) {\n log.warn('invalid data!');\n return;\n }\n\n const { columns, rows } = totalsData;\n if (rows.length !== 1) {\n log.error(\n 'Unexpected number of rows received for totals table, ignoring update'\n );\n return;\n }\n\n const dataMap = new Map();\n const row = rows[0];\n const defaultOperation =\n this.totals?.defaultOperation ?? AggregationOperation.SUM;\n const operationMap = this.totals?.operationMap;\n for (let c = 0; c < columns.length; c += 1) {\n const column = columns[c];\n const [name, operation = operationMap?.[name]?.[0] ?? defaultOperation] =\n column.name.split('__');\n if (!dataMap.has(operation)) {\n dataMap.set(operation, { data: new Map() });\n }\n const { data: rowData } = dataMap.get(operation);\n const columnIndex = this.columns.findIndex(col => col.name === name);\n rowData.set(columnIndex, {\n value: row.get(column),\n format: row.getFormat(column),\n });\n }\n\n log.debug2('copyTotalsData', dataMap);\n\n this.totalsDataMap = dataMap;\n this.formattedStringData = [];\n }\n\n /**\n * Gets the model index for a column from its name\n * @param {string} name The column name\n * @returns {number | undefined} The ModelIndex if it exists\n */\n getColumnIndexByName(name) {\n return this.getColumnIndicesByNameMap(this.columns).get(name);\n }\n\n getColumnIndicesByNameMap = memoize(columns => {\n const indices = new Map();\n columns.forEach(({ name }, i) => indices.set(name, i));\n return indices;\n });\n\n /**\n * Copies all the viewport data into an object that we can reference later.\n * @param {ViewportData} data The data to copy from\n */\n extractViewportData(data) {\n const newData = {\n offset: data.offset,\n rows: [],\n };\n\n const { columns } = data;\n for (let r = 0; r < data.rows.length; r += 1) {\n const row = data.rows[r];\n const newRow = this.extractViewportRow(row, columns);\n newData.rows.push(newRow);\n }\n\n return newData;\n }\n\n extractViewportRow(row, columns) {\n const data = new Map();\n for (let c = 0; c < columns.length; c += 1) {\n const column = columns[c];\n\n data.set(this.getColumnIndexByName(column.name), {\n value: row.get(column),\n format: row.getFormat(column),\n });\n }\n\n return { data };\n }\n\n closeSubscription() {\n log.debug2('closeSubscription', this.subscription);\n if (this.subscription) {\n this.subscription.close();\n this.subscription = null;\n }\n\n this.setViewport.cancel();\n this.applyViewport.cancel();\n }\n\n get filter() {\n return this.table.filter;\n }\n\n set filter(filter) {\n this.closeSubscription();\n this.table.applyFilter(filter);\n this.applyViewport();\n }\n\n get formatter() {\n return this.irisFormatter;\n }\n\n set formatter(formatter) {\n this.irisFormatter = formatter;\n this.formattedStringData = [];\n this.dispatchEvent(new CustomEvent(IrisGridModel.EVENT.FORMATTER_UPDATED));\n }\n\n displayString(value, columnType, columnName = '', formatOverride = null) {\n return this.getCachedFormattedString(\n this.formatter,\n value,\n columnType,\n columnName,\n formatOverride\n );\n }\n\n get sort() {\n return this.table.sort;\n }\n\n set sort(sort) {\n this.closeSubscription();\n this.table.applySort(sort);\n this.applyViewport();\n }\n\n get customColumns() {\n return this.customColumnList;\n }\n\n set customColumns(customColumns) {\n log.debug2(\n 'set customColumns',\n customColumns,\n this.customColumnList,\n customColumns === this.customColumnList\n );\n if (this.customColumnList.length === 0 && customColumns.length === 0) {\n log.debug('Ignore empty initial customColumns');\n this.customColumnList = customColumns;\n return;\n }\n if (this.customColumnList === customColumns) {\n log.debug('Ignore same customColumns');\n return;\n }\n this.closeSubscription();\n this.customColumnList = customColumns;\n this.table.applyCustomColumns([...customColumns, ...this.formatColumns]);\n this.applyViewport();\n }\n\n get formatColumns() {\n return this.formatColumnList;\n }\n\n set formatColumns(formatColumns) {\n log.debug2(\n 'set formatColumns',\n formatColumns,\n this.formatColumnList,\n formatColumns === this.formatColumnList\n );\n if (this.formatColumnList.length === 0 && formatColumns.length === 0) {\n log.debug('Ignore empty initial formatColumns');\n this.formatColumnList = formatColumns;\n return;\n }\n if (this.formatColumnList === formatColumns) {\n log.debug('Ignore same formatColumns');\n return;\n }\n this.closeSubscription();\n this.formatColumnList = formatColumns;\n this.table.applyCustomColumns([...this.customColumns, ...formatColumns]);\n this.applyViewport();\n }\n\n updateFrozenColumns(columns) {\n this.userFrozenColumns = columns;\n this.dispatchEvent(new CustomEvent(IrisGridModel.EVENT.TABLE_CHANGED));\n }\n\n set totalsConfig(totalsConfig) {\n log.debug('set totalsConfig', totalsConfig);\n\n if (totalsConfig === this.totals) {\n // Totals already set, or it will be set when the next model actually gets set\n return;\n }\n\n this.totals = totalsConfig;\n this.formattedStringData = [];\n\n if (this.totalsTablePromise != null) {\n this.totalsTablePromise.cancel();\n }\n\n this.setTotalsTable(null);\n\n if (totalsConfig == null) {\n this.dispatchEvent(new CustomEvent(IrisGridModel.EVENT.UPDATED));\n return;\n }\n\n this.totalsTablePromise = PromiseUtils.makeCancelable(\n this.table.getTotalsTable(totalsConfig),\n table => table.close()\n );\n this.totalsTablePromise\n .then(totalsTable => {\n this.totalsTablePromise = null;\n this.setTotalsTable(totalsTable);\n })\n .catch(err => {\n if (PromiseUtils.isCanceled(err)) {\n return;\n }\n\n log.error('Unable to set next totalsTable', err);\n this.totalsTablePromise = null;\n\n this.dispatchEvent(\n new CustomEvent(IrisGridModel.EVENT.REQUEST_FAILED, { detail: err })\n );\n });\n }\n\n setTotalsTable(totalsTable) {\n log.debug('setTotalsTable', totalsTable);\n\n if (this.totalsTable !== null) {\n if (this.listenerCount > 0) {\n this.removeTotalsListeners(this.totalsTable);\n }\n\n this.totalsTable.close();\n }\n\n this.totalsTable = totalsTable;\n this.totalsDataMap = null;\n\n if (this.listenerCount > 0 && this.totalsTable != null) {\n this.addTotalsListeners(totalsTable);\n }\n }\n\n setViewport(top, bottom, columns) {\n if (bottom < top) {\n log.error('Invalid viewport', top, bottom);\n return;\n }\n\n const { viewport } = this;\n if (\n viewport != null &&\n viewport.top === top &&\n viewport.bottom === bottom &&\n viewport.columns === columns\n ) {\n log.debug2('Ignoring duplicate viewport', viewport);\n return;\n }\n\n this.viewport = {\n top,\n bottom,\n columns,\n };\n log.debug2('setViewport', this.viewport);\n\n this.applyViewport();\n }\n\n /**\n * Applies the current viewport to the underlying table.\n */\n applyViewport() {\n if (!this.viewport) {\n return;\n }\n\n log.debug2('applyViewport', this.viewport);\n const { top, bottom, columns } = this.viewport;\n const [viewportTop, viewportBottom] = this.getCachedViewportRowRange(\n top,\n bottom\n );\n this.applyBufferedViewport(viewportTop, viewportBottom, columns);\n }\n\n applyBufferedViewport(viewportTop, viewportBottom, columns) {\n log.debug2('applyBufferedViewport', viewportTop, viewportBottom, columns);\n if (this.subscription == null) {\n log.debug2('applyBufferedViewport creating new subscription');\n this.subscription = this.table.setViewport(\n viewportTop,\n viewportBottom,\n columns\n );\n } else {\n log.debug2('applyBufferedViewport using existing subscription');\n this.subscription.setViewport(viewportTop, viewportBottom, columns);\n }\n }\n\n async snapshot(ranges, includeHeaders = false, formatValue = value => value) {\n if (this.subscription == null) {\n throw new Error('No subscription available');\n }\n\n const consolidated = GridRange.consolidate(ranges);\n if (!IrisGridUtils.isValidSnapshotRanges(consolidated)) {\n throw new Error('Invalid snapshot ranges', ranges);\n }\n\n // Need to separate out the floating ranges as they're from a different source\n const topFloatingRowsSet = new Set();\n const tableRanges = [];\n const bottomFloatingRowsSet = new Set();\n for (let i = 0; i < consolidated.length; i += 1) {\n const range = consolidated[i];\n\n // Get the rows that are in the top aggregations section\n for (\n let r = range.startRow;\n r <= range.endRow && r < this.floatingTopRowCount;\n r += 1\n ) {\n topFloatingRowsSet.add(r);\n }\n\n // Separate out the range that is part of the actual table (ie. not the floating ranges, not aggregations)\n if (\n range.endRow >= this.floatingTopRowCount &&\n range.startRow <= this.floatingTopRowCount + this.table.size\n ) {\n tableRanges.push(\n new GridRange(\n range.startColumn,\n Math.min(Math.max(0, range.startRow - this.floatingTopRowCount)),\n range.endColumn,\n Math.min(\n Math.max(0, range.endRow - this.floatingTopRowCount),\n this.table.size - this.floatingTopRowCount\n )\n )\n );\n }\n\n // Get the rows that are in the bottom aggregations section\n for (\n let r = Math.max(\n range.startRow,\n this.floatingTopRowCount + this.table.size\n );\n r <= range.endRow &&\n r <\n this.floatingTopRowCount +\n this.table.size +\n this.floatingBottomRowCount;\n r += 1\n ) {\n bottomFloatingRowsSet.add(r);\n }\n }\n\n const columns = IrisGridUtils.columnsFromRanges(consolidated, this.columns);\n const result = [];\n if (includeHeaders) {\n result.push(columns.map(c => c.name));\n }\n const topFloatingRows = [...topFloatingRowsSet].sort();\n for (let i = 0; i < topFloatingRows.length; i += 1) {\n const row = topFloatingRows[i];\n const rowData = columns.map(column =>\n formatValue(\n this.valueForCell(this.getColumnIndexByName(column.name), row),\n column\n )\n );\n if (includeHeaders) {\n rowData.push(this.textForRowFooter(row));\n }\n result.push(rowData);\n }\n\n if (tableRanges.length > 0) {\n const rangeSet = IrisGridUtils.rangeSetFromRanges(tableRanges);\n const snapshot = await this.subscription.snapshot(rangeSet, columns);\n result.push(\n ...snapshot.rows.map(rowData =>\n columns.map(column => formatValue(rowData.get(column), column))\n )\n );\n }\n\n const bottomFloatingRows = [...bottomFloatingRowsSet].sort();\n for (let i = 0; i < bottomFloatingRows.length; i += 1) {\n const row = bottomFloatingRows[i];\n const rowData = columns.map(column =>\n formatValue(\n this.valueForCell(this.getColumnIndexByName(column.name), row),\n column\n )\n );\n if (includeHeaders) {\n rowData.push(this.textForRowFooter(row));\n }\n result.push(rowData);\n }\n\n return result;\n }\n\n /**\n * Get a text snapshot of the provided ranges\n * @param {GridRange[]} ranges The ranges to get the snapshot for\n * @param {boolean} includeHeaders Whether to include the headers in the snapshot or not\n * @param {(unknown, dh.Column) => string} formatValue Function for formatting the raw value into a string\n * @returns {string} A formatted string of all the data, columns separated by `\\t` and rows separated by `\\n`\n */\n async textSnapshot(\n ranges,\n includeHeaders = false,\n formatValue = value => `${value}`\n ) {\n log.debug2('textSnapshot', ranges, includeHeaders);\n\n const data = await this.snapshot(ranges, includeHeaders, formatValue);\n return data.map(row => row.join('\\t')).join('\\n');\n }\n\n get isFilterRequired() {\n return this.table.isUncoalesced;\n }\n\n isFilterable(columnIndex) {\n return this.getCachedFilterableColumnSet(this.columns).has(columnIndex);\n }\n\n async valuesTable(column) {\n let table = null;\n try {\n table = await this.table.copy();\n table.applyFilter([]);\n table.applySort([]);\n return table.selectDistinct([column]);\n } finally {\n if (table != null) {\n table.close();\n }\n }\n }\n\n async export() {\n return this.table.freeze();\n }\n\n columnStatistics(column) {\n return this.table.getColumnStatistics(column);\n }\n\n getCachedFilterableColumnSet = memoize(\n columns => new Set(columns.map((_, index) => index))\n );\n\n getCachedFormattedString = memoizeClear(\n (formatter, value, columnType, columnName, formatOverride) =>\n formatter.getFormattedString(\n value,\n columnType,\n columnName,\n formatOverride\n ),\n { max: 10000 }\n );\n\n getCachedCustomColumnFormatFlag = memoizeClear(\n FormatterUtils.isCustomColumnFormatDefined,\n { max: 10000 }\n );\n\n getCachedViewportRowRange = memoize((top, bottom) => {\n const viewHeight = bottom - top;\n const viewportTop = Math.max(\n 0,\n top - viewHeight * IrisGridTableModel.ROW_BUFFER_PAGES\n );\n const viewportBottom =\n bottom + viewHeight * IrisGridTableModel.ROW_BUFFER_PAGES;\n return [viewportTop, viewportBottom];\n });\n\n getCachedPendingErrors = memoize(\n (pendingDataMap, columns, keyColumnCount) => {\n const map = new Map();\n pendingDataMap.forEach((row, rowIndex) => {\n const { data: rowData } = row;\n for (let i = 0; i < keyColumnCount; i += 1) {\n if (!rowData.has(i)) {\n if (!map.has(rowIndex)) {\n map.set(rowIndex, []);\n }\n map\n .get(rowIndex)\n .push(new MissingKeyError(rowIndex, columns[i].name));\n }\n }\n });\n return map;\n }\n );\n\n isColumnMovable(modelIndex) {\n const columnName = this.columns[modelIndex].name;\n if (\n this.frontColumns.includes(columnName) ||\n this.backColumns.includes(columnName) ||\n this.frozenColumns.includes(columnName)\n ) {\n return false;\n }\n return !this.isKeyColumn(modelIndex);\n }\n\n isColumnFrozen(modelIndex) {\n return this.frozenColumns.includes(this.columns[modelIndex].name);\n }\n\n isKeyColumn(x) {\n return x < (this.inputTable?.keyColumns.length ?? 0);\n }\n\n isRowMovable() {\n return false;\n }\n\n isEditableRange(range) {\n // Make sure we have an input table and a valid range\n if (\n this.inputTable == null ||\n range.startRow == null ||\n range.endRow == null\n ) {\n return false;\n }\n\n // Check that the edit is in the editable range\n // If an input table has keyed columns, the non-key columns are always editable\n // If an input table does not have key columns, it is append only and existing rows cannot be editable\n // Pending rows are always editable\n const isPendingRange =\n this.isPendingRow(range.startRow) && this.isPendingRow(range.endRow);\n\n let isKeyColumnInRange = false;\n\n // Check if any of the columns in grid range are key columns\n const bound = range.endColumn ?? this.table.size;\n for (let column = range.startColumn; column <= bound; column += 1) {\n if (this.isKeyColumn(column)) {\n isKeyColumnInRange = true;\n break;\n }\n }\n\n if (\n !(isPendingRange || (this.keyColumnSet.size !== 0 && !isKeyColumnInRange))\n ) {\n return false;\n }\n\n return true;\n }\n\n isDeletableRange(range) {\n return (\n this.inputTable != null &&\n range.startRow != null &&\n range.endRow != null &&\n range.startRow >= this.floatingTopRowCount &&\n range.startRow <\n this.floatingTopRowCount + this.table.size + this.pendingRowCount &&\n range.endRow <\n this.floatingTopRowCount + this.table.size + this.pendingRowCount\n );\n }\n\n isEditableRanges(ranges) {\n return ranges.every(range => this.isEditableRange(range));\n }\n\n isDeletableRanges(ranges) {\n return ranges.every(range => this.isDeletableRange(range));\n }\n\n /**\n * @returns {GridRange} A range corresponding to the underlying table\n */\n getTableAreaRange() {\n return new GridRange(\n null,\n this.floatingTopRowCount,\n null,\n this.floatingTopRowCount + this.table.size - 1\n );\n }\n\n /**\n * @returns {GridRange} A range corresponding to the pending new rows\n */\n getPendingAreaRange() {\n return new GridRange(\n null,\n this.floatingTopRowCount + this.table.size,\n null,\n this.floatingTopRowCount + this.table.size + this.pendingNewRowCount - 1\n );\n }\n\n /**\n * Set value in an editable table\n * @param {number} x The column to set\n * @param {number} y The row to set\n * @param {string} value The value to set\n * @returns {Promise<void>} A promise that resolves successfully when the operation is complete, or rejects if there's an error\n */\n async setValueForCell(x, y, text) {\n // Cache the value in our pending string cache so that it stays displayed until our edit has been completed\n return this.setValueForRanges([new GridRange(x, y, x, y)], text);\n }\n\n /**\n * Set value in an editable table\n * @param {GridRange[]} ranges The ranges to set\n * @param {string} value The values to set\n * @returns {Promise<void>} A promise that resolves successfully when the operation is complete, or rejects if there's an error\n */\n async setValueForRanges(ranges, text) {\n if (!this.isEditableRanges(ranges)) {\n throw new Error('Uneditable ranges', ranges);\n }\n\n try {\n // Cache the value in our pending string cache so that it stays displayed until our edit has been completed\n const columnSet = new Set();\n\n // Formatted text for each column\n // Since there could be different formatting for each column, but the value will be the same across rows\n const formattedText = [];\n GridRange.forEachCell(ranges, (x, y) => {\n const column = this.columns[x];\n columnSet.add(column);\n if (formattedText[x] === undefined) {\n const value = TableUtils.makeValue(\n column.type,\n text,\n this.formatter.timeZone\n );\n formattedText[x] =\n value != null\n ? this.displayString(value, column.type, column.name)\n : null;\n }\n this.cachePendingValue(x, y, formattedText[x]);\n });\n\n // Take care of updates to the pending new area first, as they can be updated synchronously\n const pendingAreaRange = this.getPendingAreaRange();\n const pendingRanges = ranges\n .map(range => GridRange.intersection(pendingAreaRange, range))\n .filter(range => range != null)\n .map(range =>\n GridRange.offset(\n range,\n 0,\n -(this.floatingTopRowCount + this.table.size)\n )\n );\n if (pendingRanges.length > 0) {\n const newDataMap = new Map(this.pendingNewDataMap);\n GridRange.forEachCell(pendingRanges, (columnIndex, rowIndex) => {\n if (!newDataMap.has(rowIndex)) {\n newDataMap.set(rowIndex, { data: new Map() });\n }\n\n const column = this.columns[columnIndex];\n const row = newDataMap.get(rowIndex);\n const { data: rowData } = row;\n const newRowData = new Map(rowData);\n const value = TableUtils.makeValue(\n column.type,\n text,\n this.formatter.timeZone\n );\n if (value != null) {\n newRowData.set(columnIndex, { value });\n } else {\n newRowData.delete(columnIndex);\n }\n if (newRowData.size > 0) {\n newDataMap.set(rowIndex, { ...row, data: newRowData });\n } else {\n newDataMap.delete(rowIndex);\n }\n });\n this.pendingDataMap = newDataMap;\n }\n\n this.dispatchEvent(new CustomEvent(IrisGridModel.EVENT.UPDATED));\n\n const tableAreaRange = this.getTableAreaRange();\n const tableRanges = ranges\n .map(range => GridRange.intersection(tableAreaRange, range))\n .filter(range => range != null);\n if (tableRanges.length > 0) {\n // Get a snapshot of the full rows, as we need to write a full row when editing\n const data = await this.snapshot(\n tableRanges.map(\n range => new GridRange(null, range.startRow, null, range.endRow)\n )\n );\n const newRows = data.map(row => {\n const newRow = {};\n for (let c = 0; c < this.columns.length; c += 1) {\n newRow[this.columns[c].name] = row[c];\n }\n\n columnSet.forEach(column => {\n newRow[column.name] = TableUtils.makeValue(\n column.type,\n text,\n this.formatter.timeZone\n );\n });\n return newRow;\n });\n\n const result = await this.inputTable.addRows(newRows);\n\n log.debug(\n 'setValueForRanges(',\n ranges,\n ',',\n text,\n ') set tableRanges',\n tableRanges,\n 'result',\n result\n );\n }\n\n // Add the changes to the formatted cache so it's still displayed until the update event is received\n // The update event could be received on the next tick, after the input rows have been committed,\n // so make sure we don't display stale data\n GridRange.forEachCell(ranges, (x, y) => {\n this.cacheFormattedValue(x, y, formattedText[x]);\n });\n } catch (err) {\n log.error('Unable to set ranges', ranges, text, err);\n } finally {\n GridRange.forEachCell(ranges, (x, y) => {\n this.clearPendingValue(x, y);\n });\n }\n }\n\n async setValues(edits = []) {\n log.debug('setValues(', edits, ')');\n if (\n !edits.every(edit =>\n this.isEditableRange(\n GridRange.makeCell(edit.column ?? edit.x, edit.row ?? edit.y)\n )\n )\n ) {\n throw new Error('Uneditable ranges', edits);\n }\n\n try {\n const newDataMap = new Map(this.pendingNewDataMap);\n\n // Cache the display values\n edits.forEach(edit => {\n const { text } = edit;\n const x = edit.column ?? edit.x;\n const y = edit.row ?? edit.y;\n const column = this.columns[x];\n const value = TableUtils.makeValue(\n column.type,\n text,\n this.formatter.timeZone\n );\n const formattedText =\n value != null\n ? this.displayString(value, column.type, column.name)\n : null;\n this.cachePendingValue(x, y, formattedText);\n\n // Take care of updates to the pending new area as well, as that can be updated synchronously\n const pendingRow = this.pendingRow(y);\n if (pendingRow != null) {\n if (!newDataMap.has(pendingRow)) {\n newDataMap.set(pendingRow, { data: new Map() });\n }\n\n const row = newDataMap.get(pendingRow);\n const { data: rowData } = row;\n const newRowData = new Map(rowData);\n if (value != null) {\n newRowData.set(x, { value });\n } else {\n newRowData.delete(x);\n }\n if (newRowData.size > 0) {\n newDataMap.set(pendingRow, { ...row, data: newRowData });\n } else {\n newDataMap.delete(pendingRow);\n }\n }\n });\n\n this.pendingDataMap = newDataMap;\n\n // Send an update right after setting the pending map so the values are displayed immediately\n this.dispatchEvent(new CustomEvent(IrisGridModel.EVENT.UPDATED));\n\n // Need to group by row...\n const rowEditMap = edits.reduce((rowMap, edit) => {\n const y = edit.row ?? edit.y;\n if (!rowMap.has(y)) {\n rowMap.set(y, []);\n }\n rowMap.get(y).push(edit);\n return rowMap;\n }, new Map());\n\n const ranges = GridRange.consolidate(\n edits.map(edit =>\n GridRange.makeCell(edit.column ?? edit.x, edit.row ?? edit.y)\n )\n );\n const tableAreaRange = this.getTableAreaRange();\n const tableRanges = ranges\n .map(range => GridRange.intersection(tableAreaRange, range))\n .filter(range => range != null);\n\n if (tableRanges.length > 0) {\n // Get a snapshot of the full rows, as we need to write a full row when editing\n const data = await this.snapshot(\n tableRanges.map(\n range => new GridRange(null, range.startRow, null, range.endRow)\n )\n );\n const newRows = data.map((row, dataIndex) => {\n let rowIndex = null;\n let r = dataIndex;\n for (let i = 0; i < tableRanges.length; i += 1) {\n const range = tableRanges[i];\n const rangeRowCount = GridRange.rowCount([range]);\n if (r < rangeRowCount) {\n rowIndex = range.startRow + r;\n break;\n }\n r -= rangeRowCount;\n }\n\n const newRow = {};\n for (let c = 0; c < this.columns.length; c += 1) {\n newRow[this.columns[c].name] = row[c];\n }\n\n const rowEdits = rowEditMap.get(rowIndex);\n if (rowEdits != null) {\n rowEdits.forEach(edit => {\n const column = this.columns[edit.column ?? edit.x];\n newRow[column.name] = TableUtils.makeValue(\n column.type,\n edit.text,\n this.formatter.timeZone\n );\n });\n }\n return newRow;\n });\n\n log.info('setValues setting tableRanges', tableRanges);\n\n const result = await this.inputTable.addRows(newRows);\n\n log.info('setValues set tableRanges', tableRanges, 'SUCCESS', result);\n }\n\n // We've sent the changes to the server, but have not yet got an update with those changes committed\n // Add the changes to the formatted cache so it's still displayed until the update event is received\n // The update event could be received on the next tick, after the input rows have been committed,\n // so make sure we don't display stale data\n edits.forEach(edit => {\n const { text } = edit;\n const x = edit.column ?? edit.x;\n const y = edit.row ?? edit.y;\n const column = this.columns[x];\n const value = TableUtils.makeValue(\n column.type,\n text,\n this.formatter.timeZone\n );\n const formattedText =\n value != null\n ? this.displayString(value, column.type, column.name)\n : null;\n this.cacheFormattedValue(x, y, formattedText);\n });\n } finally {\n edits.forEach(edit => {\n this.clearPendingValue(edit.column, edit.row);\n });\n }\n }\n\n async commitPending() {\n if (this.pendingNewDataMap.size <= 0) {\n throw new Error('No pending changes to commit');\n }\n\n try {\n this.isSaveInProgress = true;\n\n const newRows = [];\n this.pendingNewDataMap.forEach(row => {\n const newRow = {};\n row.data.forEach(({ value }, columnIndex) => {\n const column = this.columns[columnIndex];\n newRow[column.name] = value;\n });\n newRows.push(newRow);\n });\n const result = await this.inputTable.addRows(newRows);\n\n log.debug('commitPending()', this.pendingNewDataMap, 'result', result);\n\n this.pendingNewDataMap = new Map();\n this.pendingNewDataErrors = new Map();\n this.pendingNewRowCount = Math.max(\n 0,\n (this.viewport?.bottom ?? 0) - this.table.size\n );\n this.formattedStringData = [];\n\n this.dispatchEvent(\n new CustomEvent(IrisGridModel.EVENT.PENDING_DATA_UPDATED)\n );\n\n return result;\n } finally {\n this.isSaveInProgress = false;\n }\n }\n\n editValueForCell(x, y) {\n return this.textValueForCell(x, y);\n }\n\n async delete(ranges) {\n if (!this.isDeletableRanges(ranges)) {\n throw new Error('Undeletable ranges', ranges);\n }\n\n const { keyColumns } = this.inputTable;\n if (keyColumns.length === 0) {\n throw new Error('No key columns to allow deletion');\n }\n\n const pendingAreaRange = this.getPendingAreaRange();\n const pendingRanges = ranges\n .map(range => GridRange.intersection(pendingAreaRange, range))\n .filter(range => range != null)\n .map(range =>\n GridRange.offset(\n range,\n 0,\n -(this.floatingTopRowCount + this.table.size)\n )\n );\n\n if (pendingRanges.length > 0) {\n const newDataMap = new Map(this.pendingNewDataMap);\n for (let i = 0; i < pendingRanges.length; i += 1) {\n const pendingRange = pendingRanges[i];\n for (let r = pendingRange.startRow; r <= pendingRange.endRow; r += 1) {\n newDataMap.delete(r);\n }\n }\n this.pendingNewDataMap = newDataMap;\n\n this.formattedStringData = [];\n\n this.dispatchEvent(\n new CustomEvent(IrisGridModel.EVENT.PENDING_DATA_UPDATED)\n );\n\n this.dispatchEvent(new CustomEvent(IrisGridModel.EVENT.UPDATED));\n }\n\n const tableAreaRange = this.getTableAreaRange();\n const tableRanges = ranges\n .map(range => GridRange.intersection(tableAreaRange, range))\n .filter(range => range != null);\n if (tableRanges.length <= 0) {\n return null;\n }\n const [data, deleteTable] = await Promise.all([\n // Need to get the key values of each row\n this.snapshot(\n tableRanges.map(\n range =>\n new GridRange(\n 0,\n range.startRow,\n keyColumns.length - 1,\n range.endRow\n )\n )\n ),\n this.table.copy(),\n ]);\n\n // Now copy the existing table and filter it on the values in the snapshot for the key columns in the input table\n const filters = data.map(row => {\n const columnFilters = [];\n for (let c = 0; c < keyColumns.length; c += 1) {\n const column = keyColumns[c];\n const value = row[c];\n const filterValue = TableUtils.makeFilterRawValue(column.type, value);\n const filter = column.filter().eq(filterValue);\n columnFilters.push(filter);\n }\n return columnFilters.reduce((agg, curr) => (agg ? agg.and(curr) : curr));\n });\n\n const filter = filters.reduce((agg, curr) => (agg ? agg.or(curr) : curr));\n deleteTable.applyFilter([filter]);\n\n const result = await this.inputTable.deleteTable(deleteTable);\n deleteTable.close();\n return result;\n }\n\n isValidForCell(x, y, value) {\n try {\n const column = this.columns[x];\n TableUtils.makeValue(column.type, value, this.formatter.timeZone);\n return true;\n } catch (e) {\n return false;\n }\n }\n}\n\nexport default IrisGridTableModel;\n"],"file":"IrisGridTableModel.js"}
1
+ {"version":3,"sources":["../src/IrisGridTableModel.js"],"names":["memoize","throttle","GridRange","GridUtils","memoizeClear","dh","Formatter","FormatterUtils","TableUtils","Log","PromiseUtils","IrisGridModel","AggregationOperation","IrisGridUtils","MissingKeyError","log","module","SET_VIEWPORT_THROTTLE","APPLY_VIEWPORT_THROTTLE","EMPTY_ARRAY","Object","freeze","IrisGridTableModel","constructor","table","formatter","inputTable","tableColumns","columnMap","Map","forEach","col","set","name","inputTableKeys","Set","layoutHintsFrontColumns","layoutHintsBackColumns","layoutHintsFrozenColumns","userFrozenColumns","columns","indices","i","map","_","index","value","columnType","columnName","formatOverride","getFormattedString","max","isCustomColumnFormatDefined","top","bottom","viewHeight","viewportTop","Math","ROW_BUFFER_PAGES","viewportBottom","pendingDataMap","keyColumnCount","row","rowIndex","data","rowData","has","get","push","handleTableDisconnect","bind","handleTableReconnect","handleTableUpdate","handleTotalsUpdate","handleRequestFailed","handleCustomColumnsChanged","setViewport","applyViewport","leading","irisFormatter","listenerCount","subscription","viewport","viewportData","formattedStringData","pendingStringData","isSaveInProgress","totalsTable","totalsTablePromise","totals","totalsDataMap","customColumnList","formatColumnList","pendingNewDataMap","pendingNewRowCount","close","cancel","startListening","addEventListener","Table","EVENT_DISCONNECT","EVENT_RECONNECT","EVENT_UPDATED","Client","EVENT_REQUEST_FAILED","EVENT_CUSTOMCOLUMNSCHANGED","addTotalsListeners","stopListening","removeEventListener","removeTotalsListeners","closeSubscription","dispatchEvent","CustomEvent","EVENT","DISCONNECT","RECONNECT","event","copyViewportData","detail","UPDATED","copyTotalsData","REQUEST_FAILED","COLUMNS_CHANGED","rowCount","size","operationOrder","length","pendingDataErrors","getCachedPendingErrors","keyColumns","isValidIndex","Error","columnIndex","maxPendingDataRow","PENDING_DATA_UPDATED","pendingRowCount","count","keys","columnCount","floatingBottomRowCount","showOnTop","floatingTopRowCount","isExportAvailable","isColumnStatisticsAvailable","getColumnStatistics","isValuesTableAvailable","selectDistinct","copy","isRollupAvailable","rollup","isSelectDistinctAvailable","isCustomColumnsAvailable","applyCustomColumns","isFormatColumnsAvailable","isChartBuilderAvailable","isTotalsAvailable","getTotalsTable","isEditable","cacheFormattedValue","x","y","text","cachePendingValue","clearPendingValue","column","textValueForCell","undefined","valueForCell","totalsColumn","hasCustomColumnFormat","getCachedCustomColumnFormatFlag","type","formatForCell","formatString","displayString","textForCell","isKeyColumn","pendingRow","truncationCharForCell","isNumberType","truncateNumbersWithPound","colorForCell","theme","dataForCell","format","nullStringColor","color","isPendingRow","pendingTextColor","isDateType","dateColor","positiveNumberColor","negativeNumberColor","zeroNumberColor","errorTextColor","textColor","backgroundColorForCell","backgroundColor","textAlignForCell","textForColumnHeader","textForRowFooter","totalsRow","movedColumns","frontColumns","backColumns","frozenColumns","usedColumns","moveColumn","modelIndex","getColumnIndexByName","visibleIndex","getVisibleIndex","moveItem","frontIndex","backIndex","getMemoizedColumnMap","keyColumnSet","getMemoizedKeyColumnSet","getMemoizedFrontColumns","layoutHints","getMemoizedBackColumns","getMemoizedFrozenColumns","floatingLeftColumnCount","groupedColumns","description","totalsRowCount","operation","offset","viewportY","rows","tableColumn","operations","operationMap","isOnlyOperation","matchName","find","isTotalsRow","warn","extractViewportData","totalsData","error","dataMap","defaultOperation","SUM","c","split","findIndex","getFormat","debug2","getColumnIndicesByNameMap","newData","r","newRow","extractViewportRow","filter","applyFilter","FORMATTER_UPDATED","getCachedFormattedString","sort","applySort","customColumns","debug","formatColumns","updateFrozenColumns","TABLE_CHANGED","totalsConfig","setTotalsTable","makeCancelable","then","catch","err","isCanceled","getCachedViewportRowRange","applyBufferedViewport","snapshot","ranges","includeHeaders","formatValue","consolidated","consolidate","isValidSnapshotRanges","topFloatingRowsSet","tableRanges","bottomFloatingRowsSet","range","startRow","endRow","add","startColumn","min","endColumn","columnsFromRanges","result","topFloatingRows","rangeSet","rangeSetFromRanges","bottomFloatingRows","textSnapshot","join","isFilterRequired","isUncoalesced","isFilterable","getCachedFilterableColumnSet","valuesTable","export","columnStatistics","isColumnMovable","includes","isColumnFrozen","isRowMovable","isEditableRange","isPendingRange","isKeyColumnInRange","bound","isDeletableRange","isEditableRanges","every","isDeletableRanges","getTableAreaRange","getPendingAreaRange","setValueForCell","setValueForRanges","columnSet","formattedText","forEachCell","makeValue","timeZone","pendingAreaRange","pendingRanges","intersection","newDataMap","newRowData","delete","tableAreaRange","newRows","addRows","setValues","edits","edit","makeCell","rowEditMap","reduce","rowMap","dataIndex","rangeRowCount","rowEdits","info","commitPending","pendingNewDataErrors","editValueForCell","pendingRange","deleteTable","Promise","all","filters","columnFilters","filterValue","makeFilterRawValue","eq","agg","curr","and","or","isValidForCell","e"],"mappings":"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","sourcesContent":["/* eslint class-methods-use-this: \"off\" */\nimport memoize from 'memoize-one';\nimport throttle from 'lodash.throttle';\nimport { GridRange, GridUtils, memoizeClear } from '@deephaven/grid';\nimport dh from '@deephaven/jsapi-shim';\nimport { Formatter, FormatterUtils, TableUtils } from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport { PromiseUtils } from '@deephaven/utils';\nimport IrisGridModel from './IrisGridModel';\nimport AggregationOperation from './sidebar/aggregations/AggregationOperation';\nimport IrisGridUtils from './IrisGridUtils';\nimport MissingKeyError from './MissingKeyError';\n\nconst log = Log.module('IrisGridTableModel');\n\nconst SET_VIEWPORT_THROTTLE = 150;\nconst APPLY_VIEWPORT_THROTTLE = 0;\nconst EMPTY_ARRAY = Object.freeze([]);\n\n/**\n * Model for a grid showing an iris data table\n */\nclass IrisGridTableModel extends IrisGridModel {\n static ROW_BUFFER_PAGES = 1;\n\n static COLUMN_BUFFER_PAGES = 0;\n\n /**\n * @param {dh.Table} table Iris data table to be used in the model\n * @param {Formatter} formatter The formatter to use when getting formats\n * @param {dh.InputTable} inputTable Iris input table associated with this table\n */\n constructor(table, formatter = new Formatter(), inputTable = null) {\n super();\n\n this.handleTableDisconnect = this.handleTableDisconnect.bind(this);\n this.handleTableReconnect = this.handleTableReconnect.bind(this);\n this.handleTableUpdate = this.handleTableUpdate.bind(this);\n this.handleTotalsUpdate = this.handleTotalsUpdate.bind(this);\n this.handleRequestFailed = this.handleRequestFailed.bind(this);\n this.handleCustomColumnsChanged = this.handleCustomColumnsChanged.bind(\n this\n );\n this.setViewport = throttle(\n this.setViewport.bind(this),\n SET_VIEWPORT_THROTTLE\n );\n this.applyViewport = throttle(\n this.applyViewport.bind(this),\n APPLY_VIEWPORT_THROTTLE,\n { leading: false }\n );\n\n this.irisFormatter = formatter;\n this.inputTable = inputTable;\n this.listenerCount = 0;\n this.subscription = null;\n this.table = table;\n this.viewport = null;\n this.viewportData = null;\n this.formattedStringData = [];\n this.pendingStringData = [];\n this.isSaveInProgress = false;\n\n this.totalsTable = null;\n this.totalsTablePromise = null;\n this.totals = null;\n this.totalsDataMap = null;\n\n this.customColumnList = [];\n this.formatColumnList = [];\n\n // Map from new row index to their values. Only for input tables that can have new rows added.\n // The index of these rows start at 0, and they are appended at the end of the regular table data.\n // These rows can be sparse, so using a map instead of an array.\n this.pendingNewDataMap = new Map();\n this.pendingNewRowCount = 0;\n\n this.userFrozenColumns = null;\n }\n\n close() {\n this.table.close();\n if (this.totalsTable !== null) {\n this.totalsTable.close();\n }\n if (this.totalsTablePromise !== null) {\n this.totalsTablePromise.cancel();\n }\n }\n\n startListening() {\n super.startListening();\n\n this.table.addEventListener(\n dh.Table.EVENT_DISCONNECT,\n this.handleTableDisconnect\n );\n this.table.addEventListener(\n dh.Table.EVENT_RECONNECT,\n this.handleTableReconnect\n );\n this.table.addEventListener(dh.Table.EVENT_UPDATED, this.handleTableUpdate);\n this.table.addEventListener(\n dh.Client.EVENT_REQUEST_FAILED,\n this.handleRequestFailed\n );\n this.table.addEventListener(\n dh.Table.EVENT_CUSTOMCOLUMNSCHANGED,\n this.handleCustomColumnsChanged\n );\n\n if (this.totalsTable != null) {\n this.addTotalsListeners(this.totalsTable);\n }\n\n this.applyViewport();\n }\n\n stopListening() {\n super.stopListening();\n\n this.table.removeEventListener(\n dh.Table.EVENT_DISCONNECT,\n this.handleTableDisconnect\n );\n this.table.removeEventListener(\n dh.Table.EVENT_RECONNECT,\n this.handleTableReconnect\n );\n this.table.removeEventListener(\n dh.Table.EVENT_UPDATED,\n this.handleTableUpdate\n );\n this.table.removeEventListener(\n dh.Client.EVENT_REQUEST_FAILED,\n this.handleRequestFailed\n );\n this.table.removeEventListener(\n dh.Table.EVENT_CUSTOMCOLUMNSCHANGED,\n this.handleCustomColumnsChanged\n );\n\n if (this.totalsTable != null) {\n this.removeTotalsListeners(this.totalsTable);\n }\n\n this.closeSubscription();\n }\n\n addTotalsListeners(totalsTable) {\n totalsTable.addEventListener(\n dh.Table.EVENT_UPDATED,\n this.handleTotalsUpdate\n );\n\n // Totals table only has one row of data\n totalsTable.setViewport(0, 0);\n }\n\n removeTotalsListeners(totalsTable) {\n totalsTable.removeEventListener(\n dh.Table.EVENT_UPDATED,\n this.handleTotalsUpdate\n );\n }\n\n handleTableDisconnect() {\n this.dispatchEvent(new CustomEvent(IrisGridModel.EVENT.DISCONNECT));\n }\n\n handleTableReconnect() {\n this.dispatchEvent(new CustomEvent(IrisGridModel.EVENT.RECONNECT));\n }\n\n handleTableUpdate(event) {\n this.copyViewportData(event.detail);\n\n this.dispatchEvent(new CustomEvent(IrisGridModel.EVENT.UPDATED));\n }\n\n handleTotalsUpdate(event) {\n this.copyTotalsData(event.detail);\n\n this.dispatchEvent(new CustomEvent(IrisGridModel.EVENT.UPDATED));\n }\n\n handleRequestFailed(event) {\n this.dispatchEvent(\n new CustomEvent(IrisGridModel.EVENT.REQUEST_FAILED, event)\n );\n }\n\n handleCustomColumnsChanged() {\n this.dispatchEvent(\n new CustomEvent(IrisGridModel.EVENT.COLUMNS_CHANGED, {\n detail: this.columns,\n })\n );\n }\n\n get rowCount() {\n return (\n this.table.size +\n (this.totals?.operationOrder?.length ?? 0) +\n this.pendingNewRowCount\n );\n }\n\n get pendingDataErrors() {\n return this.getCachedPendingErrors(\n this.pendingNewDataMap,\n this.columns,\n this.inputTable?.keyColumns.length ?? 0\n );\n }\n\n get pendingDataMap() {\n return this.pendingNewDataMap;\n }\n\n set pendingDataMap(map) {\n if (map === this.pendingNewDataMap) {\n return;\n }\n\n map.forEach((row, rowIndex) => {\n if (!IrisGridUtils.isValidIndex(rowIndex)) {\n throw new Error('Invalid rowIndex', rowIndex);\n }\n\n const { data } = row;\n data.forEach((value, columnIndex) => {\n if (!IrisGridUtils.isValidIndex(columnIndex)) {\n throw new Error('Invalid columnIndex', columnIndex);\n }\n });\n });\n\n this.pendingNewDataMap = map;\n\n this.pendingNewRowCount = Math.max(\n this.pendingNewRowCount,\n this.maxPendingDataRow\n );\n\n this.formattedStringData = [];\n\n this.dispatchEvent(\n new CustomEvent(IrisGridModel.EVENT.PENDING_DATA_UPDATED)\n );\n }\n\n get pendingRowCount() {\n return this.pendingNewRowCount;\n }\n\n set pendingRowCount(count) {\n if (count === this.pendingNewRowCount) {\n return;\n }\n\n this.pendingNewRowCount = Math.max(0, count, this.maxPendingDataRow);\n\n this.dispatchEvent(new CustomEvent(IrisGridModel.EVENT.UPDATED));\n }\n\n get maxPendingDataRow() {\n return this.pendingNewDataMap.size > 0\n ? Math.max(...this.pendingNewDataMap.keys()) + 1\n : 0;\n }\n\n get columnCount() {\n return this.columns.length;\n }\n\n get floatingBottomRowCount() {\n return this.totals?.showOnTop\n ? 0\n : this.totals?.operationOrder?.length ?? 0;\n }\n\n get floatingTopRowCount() {\n return this.totals?.showOnTop\n ? this.totals?.operationOrder?.length ?? 0\n : 0;\n }\n\n get isExportAvailable() {\n return this.table.freeze != null;\n }\n\n get isColumnStatisticsAvailable() {\n return this.table.getColumnStatistics != null;\n }\n\n get isValuesTableAvailable() {\n return this.table.selectDistinct != null && this.table.copy != null;\n }\n\n get isRollupAvailable() {\n return this.table.rollup != null;\n }\n\n get isSelectDistinctAvailable() {\n return this.table.selectDistinct != null;\n }\n\n get isCustomColumnsAvailable() {\n return this.table.applyCustomColumns != null;\n }\n\n get isFormatColumnsAvailable() {\n return this.table.applyCustomColumns != null;\n }\n\n get isChartBuilderAvailable() {\n return true;\n }\n\n get isTotalsAvailable() {\n return this.table.getTotalsTable != null;\n }\n\n get isEditable() {\n return !this.isSaveInProgress && this.inputTable != null;\n }\n\n cacheFormattedValue(x, y, text) {\n if (this.formattedStringData[x] == null) {\n this.formattedStringData[x] = [];\n }\n this.formattedStringData[x][y] = text;\n }\n\n cachePendingValue(x, y, text) {\n if (this.pendingStringData[x] == null) {\n this.pendingStringData[x] = [];\n }\n this.pendingStringData[x][y] = text;\n }\n\n clearPendingValue(x, y) {\n const column = this.pendingStringData[x];\n if (column != null) {\n delete column[y];\n }\n }\n\n textValueForCell(x, y) {\n // First check if there's any pending values we should read from\n if (this.pendingStringData[x]?.[y] !== undefined) {\n return this.pendingStringData[x][y];\n }\n\n // Use a separate cache from memoization just for the strings that are currently displayed\n if (this.formattedStringData[x]?.[y] === undefined) {\n const value = this.valueForCell(x, y);\n if (value == null) {\n return null;\n }\n\n const column = this.totalsColumn(x, y) ?? this.columns[x];\n const hasCustomColumnFormat = this.getCachedCustomColumnFormatFlag(\n this.formatter,\n column.name,\n column.type\n );\n let formatOverride = null;\n if (!hasCustomColumnFormat) {\n const formatForCell = this.formatForCell(x, y);\n if (formatForCell?.formatString != null) {\n formatOverride = formatForCell;\n }\n }\n const text = this.displayString(\n value,\n column.type,\n column.name,\n formatOverride\n );\n this.cacheFormattedValue(x, y, text);\n }\n\n return this.formattedStringData[x][y];\n }\n\n textForCell(x, y) {\n const text = this.textValueForCell(x, y);\n if (text == null && this.isKeyColumn(x)) {\n const pendingRow = this.pendingRow(y);\n if (this.pendingDataMap.has(pendingRow)) {\n // Asterisk to show a value is required for a key column on a row that has some data entered\n return '*';\n }\n }\n return text;\n }\n\n truncationCharForCell(x) {\n const column = this.columns[x];\n const { type } = column;\n if (\n TableUtils.isNumberType(type) &&\n this.formatter.truncateNumbersWithPound\n ) {\n return '#';\n }\n\n return undefined;\n }\n\n colorForCell(x, y, theme) {\n const data = this.dataForCell(x, y);\n if (data) {\n const { format, value } = data;\n if (value == null || value === '') {\n return theme.nullStringColor;\n }\n if (format && format.color) {\n return format.color;\n }\n\n if (this.isPendingRow(y)) {\n // Data entered in a pending row\n return theme.pendingTextColor;\n }\n\n // Fallback to formatting based on the value/type of the cell\n if (value != null) {\n const column = this.totalsColumn(x, y) ?? this.columns[x];\n if (TableUtils.isDateType(column.type) || column.name === 'Date') {\n return theme.dateColor;\n }\n if (TableUtils.isNumberType(column.type)) {\n if (value > 0) {\n return theme.positiveNumberColor;\n }\n if (value < 0) {\n return theme.negativeNumberColor;\n }\n return theme.zeroNumberColor;\n }\n }\n } else if (this.isPendingRow(y) && this.isKeyColumn(x)) {\n return theme.errorTextColor;\n }\n\n return theme.textColor;\n }\n\n backgroundColorForCell(x, y) {\n return this.formatForCell(x, y)?.backgroundColor;\n }\n\n textAlignForCell(x) {\n const column = this.columns[x];\n const { type } = column;\n\n if (TableUtils.isNumberType(type)) {\n return 'right';\n }\n if (TableUtils.isDateType(type) || column.name === 'Date') {\n return 'center';\n }\n return 'left';\n }\n\n textForColumnHeader(x) {\n const column = this.columns[x];\n return `${column.name}`;\n }\n\n textForRowFooter(y) {\n const totalsRow = this.totalsRow(y);\n if (totalsRow != null) {\n return this.totals.operationOrder[totalsRow];\n }\n return '';\n }\n\n /**\n * Returns an array of the columns in the model\n * The order of model columns should never change once established\n */\n get columns() {\n return this.table.columns;\n }\n\n /**\n * Used to get the initial moved columns based on layout hints\n */\n get movedColumns() {\n let movedColumns = [];\n\n if (\n this.frontColumns.length ||\n this.backColumns.length ||\n this.frozenColumns.length\n ) {\n const usedColumns = new Set();\n\n const moveColumn = (name, index) => {\n if (usedColumns.has(name)) {\n throw new Error(`Column specified in multiple layout hints: ${name}`);\n }\n const modelIndex = this.getColumnIndexByName(name);\n if (!modelIndex) {\n throw new Error(`Unknown layout hint column: ${name}`);\n }\n const visibleIndex = GridUtils.getVisibleIndex(\n modelIndex,\n movedColumns\n );\n movedColumns = GridUtils.moveItem(visibleIndex, index, movedColumns);\n };\n\n let frontIndex = 0;\n this.frozenColumns.forEach(name => {\n moveColumn(name, frontIndex);\n frontIndex += 1;\n });\n this.frontColumns.forEach(name => {\n moveColumn(name, frontIndex);\n frontIndex += 1;\n });\n\n let backIndex = this.columnMap.size - 1;\n this.backColumns.forEach(name => {\n moveColumn(name, backIndex);\n backIndex -= 1;\n });\n }\n return movedColumns;\n }\n\n getMemoizedColumnMap = memoize(tableColumns => {\n const columnMap = new Map();\n tableColumns.forEach(col => columnMap.set(col.name, col));\n return columnMap;\n });\n\n get columnMap() {\n return this.getMemoizedColumnMap(this.table.columns);\n }\n\n getMemoizedKeyColumnSet = memoize(\n inputTableKeys => new Set(inputTableKeys ?? EMPTY_ARRAY)\n );\n\n get keyColumnSet() {\n return this.getMemoizedKeyColumnSet(this.inputTable?.keys);\n }\n\n getMemoizedFrontColumns = memoize(\n layoutHintsFrontColumns => layoutHintsFrontColumns ?? EMPTY_ARRAY\n );\n\n get frontColumns() {\n return this.getMemoizedFrontColumns(this.layoutHints?.frontColumns);\n }\n\n getMemoizedBackColumns = memoize(\n layoutHintsBackColumns => layoutHintsBackColumns ?? EMPTY_ARRAY\n );\n\n get backColumns() {\n return this.getMemoizedBackColumns(this.layoutHints?.backColumns);\n }\n\n getMemoizedFrozenColumns = memoize(\n (layoutHintsFrozenColumns, userFrozenColumns) =>\n userFrozenColumns ?? layoutHintsFrozenColumns ?? EMPTY_ARRAY\n );\n\n get frozenColumns() {\n return this.getMemoizedFrozenColumns(\n this.layoutHints?.frozenColumns,\n this.userFrozenColumns\n );\n }\n\n get layoutHints() {\n return this.table.layoutHints;\n }\n\n get floatingLeftColumnCount() {\n return this.frozenColumns.length;\n }\n\n get groupedColumns() {\n return EMPTY_ARRAY;\n }\n\n get description() {\n return this.table.description;\n }\n\n row(y) {\n const totalsRowCount = this.totals?.operationOrder?.length ?? 0;\n const showOnTop = this.totals?.showOnTop ?? false;\n const totalsRow = this.totalsRow(y);\n if (totalsRow != null) {\n const operation = this.totals.operationOrder[totalsRow];\n return this.totalsDataMap?.get(operation) ?? null;\n }\n const pendingRow = this.pendingRow(y);\n if (pendingRow != null) {\n return this.pendingNewDataMap.get(pendingRow) ?? null;\n }\n const offset = this.viewportData?.offset ?? 0;\n const viewportY = (showOnTop ? y - totalsRowCount : y) - offset;\n return this.viewportData?.rows?.[viewportY] ?? null;\n }\n\n /**\n * Retrieve the totals column if this is a totals row, or null otherwise\n * @param {ModelIndex} x Column index to get the totals column from\n * @param {ModelIndex} y Row index to get the totals column from\n * @returns {dh.Column | null}\n */\n totalsColumn(x, y) {\n const totalsRow = this.totalsRow(y);\n if (totalsRow == null) return null;\n\n const operation = this.totals.operationOrder[totalsRow];\n const tableColumn = this.columns[x];\n\n // If there's exactly one operation applied to this column, the totals table result column will just be the same\n // If there's more than one operation, the totals table column will be the original name with two underscores and the operation appended\n const operations = this.totals.operationMap[tableColumn.name];\n const isOnlyOperation =\n operations?.length === 1 && operations[0] === operation;\n const matchName = isOnlyOperation\n ? tableColumn.name\n : `${tableColumn.name}__${operation}`;\n\n return this.totalsTable.columns.find(column => column.name === matchName);\n }\n\n /**\n * Translate from the row in the model to a row in the totals table.\n * If the row is not a totals row, return null\n * @param {number} y The row in the model to get the totals row for\n * @returns {number|null} The row within the totals table if it's a totals row, null otherwise\n */\n totalsRow(y) {\n const totalsRowCount = this.totals?.operationOrder?.length ?? 0;\n const showOnTop = this.totals?.showOnTop ?? false;\n const totalsRow = showOnTop ? y : y - this.table.size;\n if (totalsRow >= 0 && totalsRow < totalsRowCount) {\n return totalsRow;\n }\n return null;\n }\n\n /**\n * Translate from the row in the model to a pending input row.\n * If the row is not a pending input row, return null\n * @param {number} y The row in the model to get the pending row for\n * @returns {number|null} The row within the pending input rows if it's a pending row, null otherwise\n */\n pendingRow(y) {\n const pendingRow = y - this.floatingTopRowCount - this.table.size;\n if (pendingRow >= 0) {\n return pendingRow;\n }\n\n return null;\n }\n\n /**\n * Check if a row is a totals table row\n * @param {number} y The row in the model to check if it's a totals table row\n * @returns {boolean} True if the row is a totals row, false if not\n */\n isTotalsRow(y) {\n return this.totalsRow(y) != null;\n }\n\n /**\n * Check if a row is a pending input row\n * @param {number} y The row in the model to check if it's a pending new row\n * @returns {boolean} True if the row is a pending new row, false if not\n */\n isPendingRow(y) {\n return this.pendingRow(y) != null;\n }\n\n dataForCell(x, y) {\n return this.row(y)?.data.get(x);\n }\n\n formatForCell(x, y) {\n return this.dataForCell(x, y)?.format;\n }\n\n valueForCell(x, y) {\n const data = this.dataForCell(x, y);\n if (data) {\n return data.value ?? null;\n }\n return undefined;\n }\n\n copyViewportData(data) {\n if (!data) {\n log.warn('invalid data!');\n return;\n }\n\n this.viewportData = this.extractViewportData(data);\n this.formattedStringData = [];\n }\n\n copyTotalsData(totalsData) {\n if (!totalsData) {\n log.warn('invalid data!');\n return;\n }\n\n const { columns, rows } = totalsData;\n if (rows.length !== 1) {\n log.error(\n 'Unexpected number of rows received for totals table, ignoring update'\n );\n return;\n }\n\n const dataMap = new Map();\n const row = rows[0];\n const defaultOperation =\n this.totals?.defaultOperation ?? AggregationOperation.SUM;\n const operationMap = this.totals?.operationMap;\n for (let c = 0; c < columns.length; c += 1) {\n const column = columns[c];\n const [\n name,\n operation = operationMap?.[name]?.[0] ?? defaultOperation,\n ] = column.name.split('__');\n if (!dataMap.has(operation)) {\n dataMap.set(operation, { data: new Map() });\n }\n const { data: rowData } = dataMap.get(operation);\n const columnIndex = this.columns.findIndex(col => col.name === name);\n rowData.set(columnIndex, {\n value: row.get(column),\n format: row.getFormat(column),\n });\n }\n\n log.debug2('copyTotalsData', dataMap);\n\n this.totalsDataMap = dataMap;\n this.formattedStringData = [];\n }\n\n /**\n * Gets the model index for a column from its name\n * @param {string} name The column name\n * @returns {number | undefined} The ModelIndex if it exists\n */\n getColumnIndexByName(name) {\n return this.getColumnIndicesByNameMap(this.columns).get(name);\n }\n\n getColumnIndicesByNameMap = memoize(columns => {\n const indices = new Map();\n columns.forEach(({ name }, i) => indices.set(name, i));\n return indices;\n });\n\n /**\n * Copies all the viewport data into an object that we can reference later.\n * @param {ViewportData} data The data to copy from\n */\n extractViewportData(data) {\n const newData = {\n offset: data.offset,\n rows: [],\n };\n\n const { columns } = data;\n for (let r = 0; r < data.rows.length; r += 1) {\n const row = data.rows[r];\n const newRow = this.extractViewportRow(row, columns);\n newData.rows.push(newRow);\n }\n\n return newData;\n }\n\n extractViewportRow(row, columns) {\n const data = new Map();\n for (let c = 0; c < columns.length; c += 1) {\n const column = columns[c];\n\n data.set(this.getColumnIndexByName(column.name), {\n value: row.get(column),\n format: row.getFormat(column),\n });\n }\n\n return { data };\n }\n\n closeSubscription() {\n log.debug2('closeSubscription', this.subscription);\n if (this.subscription) {\n this.subscription.close();\n this.subscription = null;\n }\n\n this.setViewport.cancel();\n this.applyViewport.cancel();\n }\n\n get filter() {\n return this.table.filter;\n }\n\n set filter(filter) {\n this.closeSubscription();\n this.table.applyFilter(filter);\n this.applyViewport();\n }\n\n get formatter() {\n return this.irisFormatter;\n }\n\n set formatter(formatter) {\n this.irisFormatter = formatter;\n this.formattedStringData = [];\n this.dispatchEvent(new CustomEvent(IrisGridModel.EVENT.FORMATTER_UPDATED));\n }\n\n displayString(value, columnType, columnName = '', formatOverride = null) {\n return this.getCachedFormattedString(\n this.formatter,\n value,\n columnType,\n columnName,\n formatOverride\n );\n }\n\n get sort() {\n return this.table.sort;\n }\n\n set sort(sort) {\n this.closeSubscription();\n this.table.applySort(sort);\n this.applyViewport();\n }\n\n get customColumns() {\n return this.customColumnList;\n }\n\n set customColumns(customColumns) {\n log.debug2(\n 'set customColumns',\n customColumns,\n this.customColumnList,\n customColumns === this.customColumnList\n );\n if (this.customColumnList.length === 0 && customColumns.length === 0) {\n log.debug('Ignore empty initial customColumns');\n this.customColumnList = customColumns;\n return;\n }\n if (this.customColumnList === customColumns) {\n log.debug('Ignore same customColumns');\n return;\n }\n this.closeSubscription();\n this.customColumnList = customColumns;\n this.table.applyCustomColumns([...customColumns, ...this.formatColumns]);\n this.applyViewport();\n }\n\n get formatColumns() {\n return this.formatColumnList;\n }\n\n set formatColumns(formatColumns) {\n log.debug2(\n 'set formatColumns',\n formatColumns,\n this.formatColumnList,\n formatColumns === this.formatColumnList\n );\n if (this.formatColumnList.length === 0 && formatColumns.length === 0) {\n log.debug('Ignore empty initial formatColumns');\n this.formatColumnList = formatColumns;\n return;\n }\n if (this.formatColumnList === formatColumns) {\n log.debug('Ignore same formatColumns');\n return;\n }\n this.closeSubscription();\n this.formatColumnList = formatColumns;\n this.table.applyCustomColumns([...this.customColumns, ...formatColumns]);\n this.applyViewport();\n }\n\n updateFrozenColumns(columns) {\n this.userFrozenColumns = columns;\n this.dispatchEvent(new CustomEvent(IrisGridModel.EVENT.TABLE_CHANGED));\n }\n\n set totalsConfig(totalsConfig) {\n log.debug('set totalsConfig', totalsConfig);\n\n if (totalsConfig === this.totals) {\n // Totals already set, or it will be set when the next model actually gets set\n return;\n }\n\n this.totals = totalsConfig;\n this.formattedStringData = [];\n\n if (this.totalsTablePromise != null) {\n this.totalsTablePromise.cancel();\n }\n\n this.setTotalsTable(null);\n\n if (totalsConfig == null) {\n this.dispatchEvent(new CustomEvent(IrisGridModel.EVENT.UPDATED));\n return;\n }\n\n this.totalsTablePromise = PromiseUtils.makeCancelable(\n this.table.getTotalsTable(totalsConfig),\n table => table.close()\n );\n this.totalsTablePromise\n .then(totalsTable => {\n this.totalsTablePromise = null;\n this.setTotalsTable(totalsTable);\n })\n .catch(err => {\n if (PromiseUtils.isCanceled(err)) {\n return;\n }\n\n log.error('Unable to set next totalsTable', err);\n this.totalsTablePromise = null;\n\n this.dispatchEvent(\n new CustomEvent(IrisGridModel.EVENT.REQUEST_FAILED, { detail: err })\n );\n });\n }\n\n setTotalsTable(totalsTable) {\n log.debug('setTotalsTable', totalsTable);\n\n if (this.totalsTable !== null) {\n if (this.listenerCount > 0) {\n this.removeTotalsListeners(this.totalsTable);\n }\n\n this.totalsTable.close();\n }\n\n this.totalsTable = totalsTable;\n this.totalsDataMap = null;\n\n if (this.listenerCount > 0 && this.totalsTable != null) {\n this.addTotalsListeners(totalsTable);\n }\n }\n\n setViewport(top, bottom, columns) {\n if (bottom < top) {\n log.error('Invalid viewport', top, bottom);\n return;\n }\n\n const { viewport } = this;\n if (\n viewport != null &&\n viewport.top === top &&\n viewport.bottom === bottom &&\n viewport.columns === columns\n ) {\n log.debug2('Ignoring duplicate viewport', viewport);\n return;\n }\n\n this.viewport = {\n top,\n bottom,\n columns,\n };\n log.debug2('setViewport', this.viewport);\n\n this.applyViewport();\n }\n\n /**\n * Applies the current viewport to the underlying table.\n */\n applyViewport() {\n if (!this.viewport) {\n return;\n }\n\n log.debug2('applyViewport', this.viewport);\n const { top, bottom, columns } = this.viewport;\n const [viewportTop, viewportBottom] = this.getCachedViewportRowRange(\n top,\n bottom\n );\n this.applyBufferedViewport(viewportTop, viewportBottom, columns);\n }\n\n applyBufferedViewport(viewportTop, viewportBottom, columns) {\n log.debug2('applyBufferedViewport', viewportTop, viewportBottom, columns);\n if (this.subscription == null) {\n log.debug2('applyBufferedViewport creating new subscription');\n this.subscription = this.table.setViewport(\n viewportTop,\n viewportBottom,\n columns\n );\n } else {\n log.debug2('applyBufferedViewport using existing subscription');\n this.subscription.setViewport(viewportTop, viewportBottom, columns);\n }\n }\n\n async snapshot(ranges, includeHeaders = false, formatValue = value => value) {\n if (this.subscription == null) {\n throw new Error('No subscription available');\n }\n\n const consolidated = GridRange.consolidate(ranges);\n if (!IrisGridUtils.isValidSnapshotRanges(consolidated)) {\n throw new Error('Invalid snapshot ranges', ranges);\n }\n\n // Need to separate out the floating ranges as they're from a different source\n const topFloatingRowsSet = new Set();\n const tableRanges = [];\n const bottomFloatingRowsSet = new Set();\n for (let i = 0; i < consolidated.length; i += 1) {\n const range = consolidated[i];\n\n // Get the rows that are in the top aggregations section\n for (\n let r = range.startRow;\n r <= range.endRow && r < this.floatingTopRowCount;\n r += 1\n ) {\n topFloatingRowsSet.add(r);\n }\n\n // Separate out the range that is part of the actual table (ie. not the floating ranges, not aggregations)\n if (\n range.endRow >= this.floatingTopRowCount &&\n range.startRow <= this.floatingTopRowCount + this.table.size\n ) {\n tableRanges.push(\n new GridRange(\n range.startColumn,\n Math.min(Math.max(0, range.startRow - this.floatingTopRowCount)),\n range.endColumn,\n Math.min(\n Math.max(0, range.endRow - this.floatingTopRowCount),\n this.table.size - this.floatingTopRowCount\n )\n )\n );\n }\n\n // Get the rows that are in the bottom aggregations section\n for (\n let r = Math.max(\n range.startRow,\n this.floatingTopRowCount + this.table.size\n );\n r <= range.endRow &&\n r <\n this.floatingTopRowCount +\n this.table.size +\n this.floatingBottomRowCount;\n r += 1\n ) {\n bottomFloatingRowsSet.add(r);\n }\n }\n\n const columns = IrisGridUtils.columnsFromRanges(consolidated, this.columns);\n const result = [];\n if (includeHeaders) {\n result.push(columns.map(c => c.name));\n }\n const topFloatingRows = [...topFloatingRowsSet].sort();\n for (let i = 0; i < topFloatingRows.length; i += 1) {\n const row = topFloatingRows[i];\n const rowData = columns.map(column =>\n formatValue(\n this.valueForCell(this.getColumnIndexByName(column.name), row),\n column\n )\n );\n if (includeHeaders) {\n rowData.push(this.textForRowFooter(row));\n }\n result.push(rowData);\n }\n\n if (tableRanges.length > 0) {\n const rangeSet = IrisGridUtils.rangeSetFromRanges(tableRanges);\n const snapshot = await this.subscription.snapshot(rangeSet, columns);\n result.push(\n ...snapshot.rows.map(rowData =>\n columns.map(column => formatValue(rowData.get(column), column))\n )\n );\n }\n\n const bottomFloatingRows = [...bottomFloatingRowsSet].sort();\n for (let i = 0; i < bottomFloatingRows.length; i += 1) {\n const row = bottomFloatingRows[i];\n const rowData = columns.map(column =>\n formatValue(\n this.valueForCell(this.getColumnIndexByName(column.name), row),\n column\n )\n );\n if (includeHeaders) {\n rowData.push(this.textForRowFooter(row));\n }\n result.push(rowData);\n }\n\n return result;\n }\n\n /**\n * Get a text snapshot of the provided ranges\n * @param {GridRange[]} ranges The ranges to get the snapshot for\n * @param {boolean} includeHeaders Whether to include the headers in the snapshot or not\n * @param {(unknown, dh.Column) => string} formatValue Function for formatting the raw value into a string\n * @returns {string} A formatted string of all the data, columns separated by `\\t` and rows separated by `\\n`\n */\n async textSnapshot(\n ranges,\n includeHeaders = false,\n formatValue = value => `${value}`\n ) {\n log.debug2('textSnapshot', ranges, includeHeaders);\n\n const data = await this.snapshot(ranges, includeHeaders, formatValue);\n return data.map(row => row.join('\\t')).join('\\n');\n }\n\n get isFilterRequired() {\n return this.table.isUncoalesced;\n }\n\n isFilterable(columnIndex) {\n return this.getCachedFilterableColumnSet(this.columns).has(columnIndex);\n }\n\n async valuesTable(column) {\n let table = null;\n try {\n table = await this.table.copy();\n table.applyFilter([]);\n table.applySort([]);\n return table.selectDistinct([column]);\n } finally {\n if (table != null) {\n table.close();\n }\n }\n }\n\n async export() {\n return this.table.freeze();\n }\n\n columnStatistics(column) {\n return this.table.getColumnStatistics(column);\n }\n\n getCachedFilterableColumnSet = memoize(\n columns => new Set(columns.map((_, index) => index))\n );\n\n getCachedFormattedString = memoizeClear(\n (formatter, value, columnType, columnName, formatOverride) =>\n formatter.getFormattedString(\n value,\n columnType,\n columnName,\n formatOverride\n ),\n { max: 10000 }\n );\n\n getCachedCustomColumnFormatFlag = memoizeClear(\n FormatterUtils.isCustomColumnFormatDefined,\n { max: 10000 }\n );\n\n getCachedViewportRowRange = memoize((top, bottom) => {\n const viewHeight = bottom - top;\n const viewportTop = Math.max(\n 0,\n top - viewHeight * IrisGridTableModel.ROW_BUFFER_PAGES\n );\n const viewportBottom =\n bottom + viewHeight * IrisGridTableModel.ROW_BUFFER_PAGES;\n return [viewportTop, viewportBottom];\n });\n\n getCachedPendingErrors = memoize(\n (pendingDataMap, columns, keyColumnCount) => {\n const map = new Map();\n pendingDataMap.forEach((row, rowIndex) => {\n const { data: rowData } = row;\n for (let i = 0; i < keyColumnCount; i += 1) {\n if (!rowData.has(i)) {\n if (!map.has(rowIndex)) {\n map.set(rowIndex, []);\n }\n map\n .get(rowIndex)\n .push(new MissingKeyError(rowIndex, columns[i].name));\n }\n }\n });\n return map;\n }\n );\n\n isColumnMovable(modelIndex) {\n const columnName = this.columns[modelIndex].name;\n if (\n this.frontColumns.includes(columnName) ||\n this.backColumns.includes(columnName) ||\n this.frozenColumns.includes(columnName)\n ) {\n return false;\n }\n return !this.isKeyColumn(modelIndex);\n }\n\n isColumnFrozen(modelIndex) {\n return this.frozenColumns.includes(this.columns[modelIndex].name);\n }\n\n isKeyColumn(x) {\n return this.keyColumnSet.has(this.columns[x].name);\n }\n\n isRowMovable() {\n return false;\n }\n\n isEditableRange(range) {\n // Make sure we have an input table and a valid range\n if (\n this.inputTable == null ||\n range.startRow == null ||\n range.endRow == null\n ) {\n return false;\n }\n\n // Check that the edit is in the editable range\n // If an input table has keyed columns, the non-key columns are always editable\n // If an input table does not have key columns, it is append only and existing rows cannot be editable\n // Pending rows are always editable\n const isPendingRange =\n this.isPendingRow(range.startRow) && this.isPendingRow(range.endRow);\n\n let isKeyColumnInRange = false;\n\n // Check if any of the columns in grid range are key columns\n const bound = range.endColumn ?? this.table.size;\n for (let column = range.startColumn; column <= bound; column += 1) {\n if (this.isKeyColumn(column)) {\n isKeyColumnInRange = true;\n break;\n }\n }\n\n if (\n !(isPendingRange || (this.keyColumnSet.size !== 0 && !isKeyColumnInRange))\n ) {\n return false;\n }\n\n return true;\n }\n\n isDeletableRange(range) {\n return (\n this.inputTable != null &&\n range.startRow != null &&\n range.endRow != null &&\n range.startRow >= this.floatingTopRowCount &&\n range.startRow <\n this.floatingTopRowCount + this.table.size + this.pendingRowCount &&\n range.endRow <\n this.floatingTopRowCount + this.table.size + this.pendingRowCount\n );\n }\n\n isEditableRanges(ranges) {\n return ranges.every(range => this.isEditableRange(range));\n }\n\n isDeletableRanges(ranges) {\n return ranges.every(range => this.isDeletableRange(range));\n }\n\n /**\n * @returns {GridRange} A range corresponding to the underlying table\n */\n getTableAreaRange() {\n return new GridRange(\n null,\n this.floatingTopRowCount,\n null,\n this.floatingTopRowCount + this.table.size - 1\n );\n }\n\n /**\n * @returns {GridRange} A range corresponding to the pending new rows\n */\n getPendingAreaRange() {\n return new GridRange(\n null,\n this.floatingTopRowCount + this.table.size,\n null,\n this.floatingTopRowCount + this.table.size + this.pendingNewRowCount - 1\n );\n }\n\n /**\n * Set value in an editable table\n * @param {number} x The column to set\n * @param {number} y The row to set\n * @param {string} value The value to set\n * @returns {Promise<void>} A promise that resolves successfully when the operation is complete, or rejects if there's an error\n */\n async setValueForCell(x, y, text) {\n // Cache the value in our pending string cache so that it stays displayed until our edit has been completed\n return this.setValueForRanges([new GridRange(x, y, x, y)], text);\n }\n\n /**\n * Set value in an editable table\n * @param {GridRange[]} ranges The ranges to set\n * @param {string} value The values to set\n * @returns {Promise<void>} A promise that resolves successfully when the operation is complete, or rejects if there's an error\n */\n async setValueForRanges(ranges, text) {\n if (!this.isEditableRanges(ranges)) {\n throw new Error('Uneditable ranges', ranges);\n }\n\n try {\n // Cache the value in our pending string cache so that it stays displayed until our edit has been completed\n const columnSet = new Set();\n\n // Formatted text for each column\n // Since there could be different formatting for each column, but the value will be the same across rows\n const formattedText = [];\n GridRange.forEachCell(ranges, (x, y) => {\n const column = this.columns[x];\n columnSet.add(column);\n if (formattedText[x] === undefined) {\n const value = TableUtils.makeValue(\n column.type,\n text,\n this.formatter.timeZone\n );\n formattedText[x] =\n value != null\n ? this.displayString(value, column.type, column.name)\n : null;\n }\n this.cachePendingValue(x, y, formattedText[x]);\n });\n\n // Take care of updates to the pending new area first, as they can be updated synchronously\n const pendingAreaRange = this.getPendingAreaRange();\n const pendingRanges = ranges\n .map(range => GridRange.intersection(pendingAreaRange, range))\n .filter(range => range != null)\n .map(range =>\n GridRange.offset(\n range,\n 0,\n -(this.floatingTopRowCount + this.table.size)\n )\n );\n if (pendingRanges.length > 0) {\n const newDataMap = new Map(this.pendingNewDataMap);\n GridRange.forEachCell(pendingRanges, (columnIndex, rowIndex) => {\n if (!newDataMap.has(rowIndex)) {\n newDataMap.set(rowIndex, { data: new Map() });\n }\n\n const column = this.columns[columnIndex];\n const row = newDataMap.get(rowIndex);\n const { data: rowData } = row;\n const newRowData = new Map(rowData);\n const value = TableUtils.makeValue(\n column.type,\n text,\n this.formatter.timeZone\n );\n if (value != null) {\n newRowData.set(columnIndex, { value });\n } else {\n newRowData.delete(columnIndex);\n }\n if (newRowData.size > 0) {\n newDataMap.set(rowIndex, { ...row, data: newRowData });\n } else {\n newDataMap.delete(rowIndex);\n }\n });\n this.pendingDataMap = newDataMap;\n }\n\n this.dispatchEvent(new CustomEvent(IrisGridModel.EVENT.UPDATED));\n\n const tableAreaRange = this.getTableAreaRange();\n const tableRanges = ranges\n .map(range => GridRange.intersection(tableAreaRange, range))\n .filter(range => range != null);\n if (tableRanges.length > 0) {\n // Get a snapshot of the full rows, as we need to write a full row when editing\n const data = await this.snapshot(\n tableRanges.map(\n range => new GridRange(null, range.startRow, null, range.endRow)\n )\n );\n const newRows = data.map(row => {\n const newRow = {};\n for (let c = 0; c < this.columns.length; c += 1) {\n newRow[this.columns[c].name] = row[c];\n }\n\n columnSet.forEach(column => {\n newRow[column.name] = TableUtils.makeValue(\n column.type,\n text,\n this.formatter.timeZone\n );\n });\n return newRow;\n });\n\n const result = await this.inputTable.addRows(newRows);\n\n log.debug(\n 'setValueForRanges(',\n ranges,\n ',',\n text,\n ') set tableRanges',\n tableRanges,\n 'result',\n result\n );\n }\n\n // Add the changes to the formatted cache so it's still displayed until the update event is received\n // The update event could be received on the next tick, after the input rows have been committed,\n // so make sure we don't display stale data\n GridRange.forEachCell(ranges, (x, y) => {\n this.cacheFormattedValue(x, y, formattedText[x]);\n });\n } catch (err) {\n log.error('Unable to set ranges', ranges, text, err);\n } finally {\n GridRange.forEachCell(ranges, (x, y) => {\n this.clearPendingValue(x, y);\n });\n }\n }\n\n async setValues(edits = []) {\n log.debug('setValues(', edits, ')');\n if (\n !edits.every(edit =>\n this.isEditableRange(\n GridRange.makeCell(edit.column ?? edit.x, edit.row ?? edit.y)\n )\n )\n ) {\n throw new Error('Uneditable ranges', edits);\n }\n\n try {\n const newDataMap = new Map(this.pendingNewDataMap);\n\n // Cache the display values\n edits.forEach(edit => {\n const { text } = edit;\n const x = edit.column ?? edit.x;\n const y = edit.row ?? edit.y;\n const column = this.columns[x];\n const value = TableUtils.makeValue(\n column.type,\n text,\n this.formatter.timeZone\n );\n const formattedText =\n value != null\n ? this.displayString(value, column.type, column.name)\n : null;\n this.cachePendingValue(x, y, formattedText);\n\n // Take care of updates to the pending new area as well, as that can be updated synchronously\n const pendingRow = this.pendingRow(y);\n if (pendingRow != null) {\n if (!newDataMap.has(pendingRow)) {\n newDataMap.set(pendingRow, { data: new Map() });\n }\n\n const row = newDataMap.get(pendingRow);\n const { data: rowData } = row;\n const newRowData = new Map(rowData);\n if (value != null) {\n newRowData.set(x, { value });\n } else {\n newRowData.delete(x);\n }\n if (newRowData.size > 0) {\n newDataMap.set(pendingRow, { ...row, data: newRowData });\n } else {\n newDataMap.delete(pendingRow);\n }\n }\n });\n\n this.pendingDataMap = newDataMap;\n\n // Send an update right after setting the pending map so the values are displayed immediately\n this.dispatchEvent(new CustomEvent(IrisGridModel.EVENT.UPDATED));\n\n // Need to group by row...\n const rowEditMap = edits.reduce((rowMap, edit) => {\n const y = edit.row ?? edit.y;\n if (!rowMap.has(y)) {\n rowMap.set(y, []);\n }\n rowMap.get(y).push(edit);\n return rowMap;\n }, new Map());\n\n const ranges = GridRange.consolidate(\n edits.map(edit =>\n GridRange.makeCell(edit.column ?? edit.x, edit.row ?? edit.y)\n )\n );\n const tableAreaRange = this.getTableAreaRange();\n const tableRanges = ranges\n .map(range => GridRange.intersection(tableAreaRange, range))\n .filter(range => range != null);\n\n if (tableRanges.length > 0) {\n // Get a snapshot of the full rows, as we need to write a full row when editing\n const data = await this.snapshot(\n tableRanges.map(\n range => new GridRange(null, range.startRow, null, range.endRow)\n )\n );\n const newRows = data.map((row, dataIndex) => {\n let rowIndex = null;\n let r = dataIndex;\n for (let i = 0; i < tableRanges.length; i += 1) {\n const range = tableRanges[i];\n const rangeRowCount = GridRange.rowCount([range]);\n if (r < rangeRowCount) {\n rowIndex = range.startRow + r;\n break;\n }\n r -= rangeRowCount;\n }\n\n const newRow = {};\n for (let c = 0; c < this.columns.length; c += 1) {\n newRow[this.columns[c].name] = row[c];\n }\n\n const rowEdits = rowEditMap.get(rowIndex);\n if (rowEdits != null) {\n rowEdits.forEach(edit => {\n const column = this.columns[edit.column ?? edit.x];\n newRow[column.name] = TableUtils.makeValue(\n column.type,\n edit.text,\n this.formatter.timeZone\n );\n });\n }\n return newRow;\n });\n\n log.info('setValues setting tableRanges', tableRanges);\n\n const result = await this.inputTable.addRows(newRows);\n\n log.info('setValues set tableRanges', tableRanges, 'SUCCESS', result);\n }\n\n // We've sent the changes to the server, but have not yet got an update with those changes committed\n // Add the changes to the formatted cache so it's still displayed until the update event is received\n // The update event could be received on the next tick, after the input rows have been committed,\n // so make sure we don't display stale data\n edits.forEach(edit => {\n const { text } = edit;\n const x = edit.column ?? edit.x;\n const y = edit.row ?? edit.y;\n const column = this.columns[x];\n const value = TableUtils.makeValue(\n column.type,\n text,\n this.formatter.timeZone\n );\n const formattedText =\n value != null\n ? this.displayString(value, column.type, column.name)\n : null;\n this.cacheFormattedValue(x, y, formattedText);\n });\n } finally {\n edits.forEach(edit => {\n this.clearPendingValue(edit.column, edit.row);\n });\n }\n }\n\n async commitPending() {\n if (this.pendingNewDataMap.size <= 0) {\n throw new Error('No pending changes to commit');\n }\n\n try {\n this.isSaveInProgress = true;\n\n const newRows = [];\n this.pendingNewDataMap.forEach(row => {\n const newRow = {};\n row.data.forEach(({ value }, columnIndex) => {\n const column = this.columns[columnIndex];\n newRow[column.name] = value;\n });\n newRows.push(newRow);\n });\n const result = await this.inputTable.addRows(newRows);\n\n log.debug('commitPending()', this.pendingNewDataMap, 'result', result);\n\n this.pendingNewDataMap = new Map();\n this.pendingNewDataErrors = new Map();\n this.pendingNewRowCount = Math.max(\n 0,\n (this.viewport?.bottom ?? 0) - this.table.size\n );\n this.formattedStringData = [];\n\n this.dispatchEvent(\n new CustomEvent(IrisGridModel.EVENT.PENDING_DATA_UPDATED)\n );\n\n return result;\n } finally {\n this.isSaveInProgress = false;\n }\n }\n\n editValueForCell(x, y) {\n return this.textValueForCell(x, y);\n }\n\n async delete(ranges) {\n if (!this.isDeletableRanges(ranges)) {\n throw new Error('Undeletable ranges', ranges);\n }\n\n const { keyColumns } = this.inputTable;\n if (keyColumns.length === 0) {\n throw new Error('No key columns to allow deletion');\n }\n\n const pendingAreaRange = this.getPendingAreaRange();\n const pendingRanges = ranges\n .map(range => GridRange.intersection(pendingAreaRange, range))\n .filter(range => range != null)\n .map(range =>\n GridRange.offset(\n range,\n 0,\n -(this.floatingTopRowCount + this.table.size)\n )\n );\n\n if (pendingRanges.length > 0) {\n const newDataMap = new Map(this.pendingNewDataMap);\n for (let i = 0; i < pendingRanges.length; i += 1) {\n const pendingRange = pendingRanges[i];\n for (let r = pendingRange.startRow; r <= pendingRange.endRow; r += 1) {\n newDataMap.delete(r);\n }\n }\n this.pendingNewDataMap = newDataMap;\n\n this.formattedStringData = [];\n\n this.dispatchEvent(\n new CustomEvent(IrisGridModel.EVENT.PENDING_DATA_UPDATED)\n );\n\n this.dispatchEvent(new CustomEvent(IrisGridModel.EVENT.UPDATED));\n }\n\n const tableAreaRange = this.getTableAreaRange();\n const tableRanges = ranges\n .map(range => GridRange.intersection(tableAreaRange, range))\n .filter(range => range != null);\n if (tableRanges.length <= 0) {\n return null;\n }\n const [data, deleteTable] = await Promise.all([\n // Need to get the key values of each row\n this.snapshot(\n tableRanges.map(\n range =>\n new GridRange(\n 0,\n range.startRow,\n keyColumns.length - 1,\n range.endRow\n )\n )\n ),\n this.table.copy(),\n ]);\n\n // Now copy the existing table and filter it on the values in the snapshot for the key columns in the input table\n const filters = data.map(row => {\n const columnFilters = [];\n for (let c = 0; c < keyColumns.length; c += 1) {\n const column = keyColumns[c];\n const value = row[c];\n const filterValue = TableUtils.makeFilterRawValue(column.type, value);\n const filter = column.filter().eq(filterValue);\n columnFilters.push(filter);\n }\n return columnFilters.reduce((agg, curr) => (agg ? agg.and(curr) : curr));\n });\n\n const filter = filters.reduce((agg, curr) => (agg ? agg.or(curr) : curr));\n deleteTable.applyFilter([filter]);\n\n const result = await this.inputTable.deleteTable(deleteTable);\n deleteTable.close();\n return result;\n }\n\n isValidForCell(x, y, value) {\n try {\n const column = this.columns[x];\n TableUtils.makeValue(column.type, value, this.formatter.timeZone);\n return true;\n } catch (e) {\n return false;\n }\n }\n}\n\nexport default IrisGridTableModel;\n"],"file":"IrisGridTableModel.js"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@deephaven/iris-grid",
3
- "version": "0.13.14-input-table-paste-jackson.0+5156a4ab",
3
+ "version": "0.13.14",
4
4
  "description": "Deephaven Iris Grid",
5
5
  "author": "Deephaven Data Labs LLC",
6
6
  "license": "Apache-2.0",
@@ -30,17 +30,17 @@
30
30
  "start": "cross-env NODE_ENV=development npm run watch"
31
31
  },
32
32
  "dependencies": {
33
- "@deephaven/components": "^0.13.14-input-table-paste-jackson.0+5156a4ab",
34
- "@deephaven/console": "^0.13.14-input-table-paste-jackson.0+5156a4ab",
35
- "@deephaven/filters": "^0.13.14-input-table-paste-jackson.0+5156a4ab",
36
- "@deephaven/grid": "^0.13.14-input-table-paste-jackson.0+5156a4ab",
37
- "@deephaven/icons": "^0.13.14-input-table-paste-jackson.0+5156a4ab",
38
- "@deephaven/jsapi-shim": "^0.13.14-input-table-paste-jackson.0+5156a4ab",
39
- "@deephaven/jsapi-utils": "^0.13.14-input-table-paste-jackson.0+5156a4ab",
40
- "@deephaven/log": "^0.13.14-input-table-paste-jackson.0+5156a4ab",
41
- "@deephaven/react-hooks": "^0.13.14-input-table-paste-jackson.0+5156a4ab",
42
- "@deephaven/storage": "^0.13.14-input-table-paste-jackson.0+5156a4ab",
43
- "@deephaven/utils": "^0.13.14-input-table-paste-jackson.0+5156a4ab",
33
+ "@deephaven/components": "^0.13.14",
34
+ "@deephaven/console": "^0.13.14",
35
+ "@deephaven/filters": "^0.13.14",
36
+ "@deephaven/grid": "^0.13.14",
37
+ "@deephaven/icons": "^0.13.14",
38
+ "@deephaven/jsapi-shim": "^0.13.14",
39
+ "@deephaven/jsapi-utils": "^0.13.14",
40
+ "@deephaven/log": "^0.13.14",
41
+ "@deephaven/react-hooks": "^0.13.14",
42
+ "@deephaven/storage": "^0.13.14",
43
+ "@deephaven/utils": "^0.13.14",
44
44
  "@fortawesome/react-fontawesome": "^0.1.15",
45
45
  "classnames": "^2.3.1",
46
46
  "deep-equal": "^2.0.5",
@@ -61,8 +61,8 @@
61
61
  "react": "^17.x"
62
62
  },
63
63
  "devDependencies": {
64
- "@deephaven/mocks": "^0.13.14-input-table-paste-jackson.0+5156a4ab",
65
- "@deephaven/tsconfig": "^0.13.14-input-table-paste-jackson.0+5156a4ab"
64
+ "@deephaven/mocks": "^0.13.14",
65
+ "@deephaven/tsconfig": "^0.13.14"
66
66
  },
67
67
  "files": [
68
68
  "dist"
@@ -73,5 +73,5 @@
73
73
  "publishConfig": {
74
74
  "access": "public"
75
75
  },
76
- "gitHead": "5156a4abaf73f8f4be2567dccbdc7507f01af52b"
76
+ "gitHead": "4b06132a601fd2bcd7c16373d29958cf3da355ca"
77
77
  }