@deephaven/iris-grid 1.28.0 → 1.29.0
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.
- package/dist/ColumnStatistics.js +1 -1
- package/dist/ColumnStatistics.js.map +1 -1
- package/dist/IrisGrid.d.ts +28 -4
- package/dist/IrisGrid.d.ts.map +1 -1
- package/dist/IrisGrid.js +185 -113
- package/dist/IrisGrid.js.map +1 -1
- package/dist/IrisGridCopyHandler.d.ts +5 -4
- package/dist/IrisGridCopyHandler.d.ts.map +1 -1
- package/dist/IrisGridCopyHandler.js +36 -29
- package/dist/IrisGridCopyHandler.js.map +1 -1
- package/dist/IrisGridModel.d.ts +2 -2
- package/dist/IrisGridModel.d.ts.map +1 -1
- package/dist/IrisGridModel.js +2 -2
- package/dist/IrisGridModel.js.map +1 -1
- package/dist/IrisGridSelectionUtils.d.ts +26 -0
- package/dist/IrisGridSelectionUtils.d.ts.map +1 -0
- package/dist/IrisGridSelectionUtils.js +84 -0
- package/dist/IrisGridSelectionUtils.js.map +1 -0
- package/dist/IrisGridTableModel.d.ts +4 -4
- package/dist/IrisGridTableModel.d.ts.map +1 -1
- package/dist/IrisGridTableModel.js +8 -8
- package/dist/IrisGridTableModel.js.map +1 -1
- package/dist/IrisGridTableModelTemplate.d.ts +25 -3
- package/dist/IrisGridTableModelTemplate.d.ts.map +1 -1
- package/dist/IrisGridTableModelTemplate.js +283 -79
- package/dist/IrisGridTableModelTemplate.js.map +1 -1
- package/dist/IrisGridTreeTableModel.d.ts +2 -0
- package/dist/IrisGridTreeTableModel.d.ts.map +1 -1
- package/dist/IrisGridTreeTableModel.js +11 -0
- package/dist/IrisGridTreeTableModel.js.map +1 -1
- package/dist/KeyedGridModel.d.ts +63 -0
- package/dist/KeyedGridModel.d.ts.map +1 -0
- package/dist/KeyedGridModel.js +12 -0
- package/dist/KeyedGridModel.js.map +1 -0
- package/dist/KeyedSelection.d.ts +194 -0
- package/dist/KeyedSelection.d.ts.map +1 -0
- package/dist/KeyedSelection.js +699 -0
- package/dist/KeyedSelection.js.map +1 -0
- package/dist/LazyIrisGrid.d.ts +1 -0
- package/dist/LazyIrisGrid.d.ts.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/key-handlers/CopyKeyHandler.d.ts.map +1 -1
- package/dist/key-handlers/CopyKeyHandler.js +8 -6
- package/dist/key-handlers/CopyKeyHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridContextMenuHandler.d.ts +1 -1
- package/dist/mousehandlers/IrisGridContextMenuHandler.d.ts.map +1 -1
- package/dist/mousehandlers/IrisGridContextMenuHandler.js +94 -69
- package/dist/mousehandlers/IrisGridContextMenuHandler.js.map +1 -1
- package/dist/sidebar/TableCsvExporter.d.ts +7 -4
- package/dist/sidebar/TableCsvExporter.d.ts.map +1 -1
- package/dist/sidebar/TableCsvExporter.js +86 -38
- package/dist/sidebar/TableCsvExporter.js.map +1 -1
- package/package.json +9 -9
|
@@ -22,6 +22,8 @@ declare class IrisGridTreeTableModel extends IrisGridTableModelTemplate<DhType.T
|
|
|
22
22
|
private virtualColumns;
|
|
23
23
|
private showExtraGroupCol;
|
|
24
24
|
constructor(dh: typeof DhType, table: DhType.TreeTable, formatter?: Formatter, inputTable?: DhType.InputTable | null, columnAlignmentMap?: Map<string, CanvasTextAlign>);
|
|
25
|
+
get selectionKeyColumnIndices(): readonly ModelIndex[];
|
|
26
|
+
get hasUniqueSelectionKeys(): boolean;
|
|
25
27
|
get showExtraGroupColumn(): boolean;
|
|
26
28
|
set showExtraGroupColumn(showExtraGroupCol: boolean);
|
|
27
29
|
updateVirtualColumns(): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IrisGridTreeTableModel.d.ts","sourceRoot":"","sources":["../src/IrisGridTreeTableModel.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EACxB,KAAK,QAAQ,EACb,SAAS,EACT,KAAK,UAAU,EAChB,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAE3D,OAAO,EAAE,SAAS,EAAc,MAAM,wBAAwB,CAAC;AAM/D,OAAO,EAAE,KAAK,KAAK,EAAE,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC;AAC5D,OAAO,0BAA0B,MAAM,8BAA8B,CAAC;AACtE,OAAO,aAAqC,MAAM,iBAAiB,CAAC;AACpE,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAsCzD,MAAM,WAAW,SAAU,SAAQ,KAAK;IACtC,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,SAAS,CAW1D;AAUD,wBAAgB,wBAAwB,CACtC,UAAU,EAAE,aAAa,GACxB,UAAU,IAAI,sBAAsB,CAEtC;AAED,cAAM,sBACJ,SAAQ,0BAA0B,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,CAC9D,YAAW,mBAAmB;IAE9B,qFAAqF;IACrF,OAAO,CAAC,cAAc,CAAkB;IAExC,OAAO,CAAC,iBAAiB,CAAQ;gBAG/B,EAAE,EAAE,OAAO,MAAM,EACjB,KAAK,EAAE,MAAM,CAAC,SAAS,EACvB,SAAS,YAAoB,EAC7B,UAAU,GAAE,MAAM,CAAC,UAAU,GAAG,IAAW,EAC3C,kBAAkB,+BAAqC;
|
|
1
|
+
{"version":3,"file":"IrisGridTreeTableModel.d.ts","sourceRoot":"","sources":["../src/IrisGridTreeTableModel.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EACxB,KAAK,QAAQ,EACb,SAAS,EACT,KAAK,UAAU,EAChB,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAE3D,OAAO,EAAE,SAAS,EAAc,MAAM,wBAAwB,CAAC;AAM/D,OAAO,EAAE,KAAK,KAAK,EAAE,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC;AAC5D,OAAO,0BAA0B,MAAM,8BAA8B,CAAC;AACtE,OAAO,aAAqC,MAAM,iBAAiB,CAAC;AACpE,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAsCzD,MAAM,WAAW,SAAU,SAAQ,KAAK;IACtC,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,SAAS,CAW1D;AAUD,wBAAgB,wBAAwB,CACtC,UAAU,EAAE,aAAa,GACxB,UAAU,IAAI,sBAAsB,CAEtC;AAED,cAAM,sBACJ,SAAQ,0BAA0B,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,CAC9D,YAAW,mBAAmB;IAE9B,qFAAqF;IACrF,OAAO,CAAC,cAAc,CAAkB;IAExC,OAAO,CAAC,iBAAiB,CAAQ;gBAG/B,EAAE,EAAE,OAAO,MAAM,EACjB,KAAK,EAAE,MAAM,CAAC,SAAS,EACvB,SAAS,YAAoB,EAC7B,UAAU,GAAE,MAAM,CAAC,UAAU,GAAG,IAAW,EAC3C,kBAAkB,+BAAqC;IAYzD,IAAI,yBAAyB,IAAI,SAAS,UAAU,EAAE,CAErD;IAGD,IAAI,sBAAsB,IAAI,OAAO,CAEpC;IAED,IAAI,oBAAoB,IAAI,OAAO,CAElC;IAED,IAAI,oBAAoB,CAAC,iBAAiB,EAAE,OAAO,EAMlD;IAED,oBAAoB,IAAI,IAAI;IAY5B,qBAAqB,CACnB,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GACvB,IAAI;IAaP,WAAW,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,GAAG,MAAM;IAuCjD,YAAY,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,GAAG,MAAM;IAyC5E,gBAAgB,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,GAAG,eAAe;IAuB/D,kBAAkB,CAAC,GAAG,EAAE,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,SAAS;IA8BtE,QAAQ,CACZ,MAAM,EAAE,SAAS,EAAE,EACnB,cAAc,CAAC,EAAE,OAAO,EACxB,WAAW,GAAE,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,KAAK,OACjD,GACN,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;IA8CvB,IAAI,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,CAE7B;IAED,IAAI,iBAAiB,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,CAIhD;IAED,IAAI,cAAc,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,CAK7C;IAED,aAAa,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,GAAG,QAAQ;IAO5D,YAAY,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,GAAG,MAAM,CAAC,MAAM;IAOhE;;;OAGG;IACH,OAAO,CAAC,wBAAwB;IAQhC,mBAAmB,CAAC,MAAM,EAAE,UAAU,GAAG,gBAAgB,GAAG,IAAI;IAShE,IAAI,WAAW,IAAI,MAAM,CAAC,WAAW,GAAG,IAAI,GAAG,SAAS,CAKvD;IAED,IAAI,iBAAiB,IAAI,OAAO,CAE/B;IAED,IAAI,4BAA4B,IAAI,OAAO,CAM1C;IAED,IAAI,oBAAoB,IAAI,OAAO,CAElC;IAED,IAAI,uBAAuB,IAAI,OAAO,CAErC;IAED,IAAI,0BAA0B,IAAI,OAAO,CAExC;IAED,IAAI,yBAAyB,IAAI,OAAO,CAEvC;IAED,IAAI,YAAY,IAAI,OAAO,CAE1B;IAED,YAAY,CAAC,WAAW,EAAE,UAAU,GAAG,OAAO;IAU9C,eAAe,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO;IAI5C,eAAe,CAAC,CAAC,EAAE,UAAU,GAAG,OAAO;IAKvC,aAAa,CAAC,CAAC,EAAE,UAAU,GAAG,OAAO;IAKrC,cAAc,CACZ,CAAC,EAAE,UAAU,EACb,UAAU,EAAE,OAAO,EACnB,iBAAiB,UAAQ,GACxB,IAAI;IAQP,SAAS,IAAI,IAAI;IAMjB,WAAW,IAAI,IAAI;IAMnB,WAAW,CAAC,CAAC,EAAE,UAAU,GAAG,UAAU;IAKtC,gBAAgB,mBAEI,SAAS,MAAM,CAAC,MAAM,EAAE,gBAC1B,SAAS,MAAM,CAAC,MAAM,EAAE,qBAExC;IAEF,qBAAqB,mBAED,SAAS,MAAM,CAAC,MAAM,EAAE,uBACnB,SAAS,MAAM,CAAC,MAAM,EAAE,qBAE/C;IAEF,4BAA4B,YAEf,SAAS,MAAM,CAAC,MAAM,EAAE,gCACH,OAAO,qBAClB,SAAS,MAAM,CAAC,MAAM,EAAE,kBAC3B,SAAS,MAAM,CAAC,MAAM,EAAE,kBACxB,SAAS,MAAM,CAAC,MAAM,EAAE,iBAqB1C;IAEF,yBAAyB,mBACN,SAAS,MAAM,CAAC,MAAM,EAAE,iBAMzC;IAEF,mBAAmB,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,IAAI;CAKjD;AAED,eAAe,sBAAsB,CAAC"}
|
|
@@ -86,6 +86,17 @@ class IrisGridTreeTableModel extends IrisGridTableModelTemplate {
|
|
|
86
86
|
_defineProperty(this, "getCachedGroupedColumnSet", memoize(groupedColumns => new Set(groupedColumns.map(c1 => this.columns.findIndex(c2 => c1.name === c2.name)))));
|
|
87
87
|
this.virtualColumns = this.showExtraGroupColumn && table.groupedColumns.length > 1 ? [VirtualGroupColumn] : [];
|
|
88
88
|
}
|
|
89
|
+
|
|
90
|
+
// Tree tables currently do not support keyed selection
|
|
91
|
+
// This insures that a rollup on a keyed table will not get a keyed selection
|
|
92
|
+
get selectionKeyColumnIndices() {
|
|
93
|
+
return EMPTY_ARRAY;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
// Tree tables currently do not support keyed selection
|
|
97
|
+
get hasUniqueSelectionKeys() {
|
|
98
|
+
return false;
|
|
99
|
+
}
|
|
89
100
|
get showExtraGroupColumn() {
|
|
90
101
|
return this.showExtraGroupCol;
|
|
91
102
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IrisGridTreeTableModel.js","names":["memoize","GridRange","Log","Formatter","TableUtils","assertNotNull","EMPTY_ARRAY","EventShimCustomEvent","IrisGridTableModelTemplate","IrisGridModel","IrisGridUtils","log","module","VirtualGroupColumn","Object","freeze","name","displayName","type","dataType","STRING","constituentType","isPartitionColumn","isSortable","isProxy","description","index","filter","Error","sort","formatColor","get","getFormat","formatNumber","formatDate","isUITreeRow","row","hasChildren","isExpanded","depth","isLayoutTreeTable","table","layoutHints","undefined","isIrisGridTreeTableModel","tableModel","showExtraGroupColumn","IrisGridTreeTableModel","constructor","dh","formatter","arguments","length","inputTable","columnAlignmentMap","Map","_defineProperty","virtualColumns","tableColumns","tableGroupedColumns","columns","isAggregatedColumnsAvailable","aggregatedColumns","groupedColumns","Set","c","includes","map","c1","findIndex","c2","showExtraGroupCol","updateVirtualColumns","dispatchEvent","EVENT","COLUMNS_CHANGED","detail","applyBufferedViewport","viewportTop","viewportBottom","viewportColumns","setViewport","textForCell","x","y","column","sourceColumn","_this$columns$x","value","valueForCell","text","displayString","isTextType","showNullStrings","showEmptyStrings","getCachedGroupedColumnSet","has","colorForCell","theme","data","dataForCell","format","nullStringColor","color","columnTypeForFormatting","colorForValue","textColor","textAlignForCell","_this$columnAlignment","userTextAlignment","typeForFormatting","textAlignForValue","extractViewportRow","extractedRow","modifiedData","i","key","cellData","warn","set","_objectSpread","snapshot","ranges","includeHeaders","_arguments","_this","_asyncToGenerator","_this$viewport$column","formatValue","viewport","viewportData","result","push","viewportRange","offset","rows","intersection","startRow","endRow","r","resultRow","viewportRow","startColumn","endColumn","_viewportRow$data$get","getCachedColumns","getCachedGroupColumns","sourceForCell","virtualSourceColumnIndex","depthForRow","Math","min","getClearFilterRange","hasExpandableRows","isExpandAllAvailable","expandAll","isChartBuilderAvailable","isOrganizeColumnsAvailable","isSelectDistinctAvailable","isReversible","isFilterable","columnIndex","getCachedFilterableColumnSet","isColumnMovable","isRowExpandable","_row$hasChildren","isRowExpanded","_row$isExpanded","setRowExpanded","expandDescendants","setExpanded","collapseAll","_row$depth","updateFrozenColumns"],"sources":["../src/IrisGridTreeTableModel.ts"],"sourcesContent":["/* eslint class-methods-use-this: \"off\" */\nimport memoize from 'memoize-one';\nimport {\n type BoundedAxisRange,\n type ExpandableGridModel,\n type GridCell,\n GridRange,\n type ModelIndex,\n} from '@deephaven/grid';\nimport type { dh as DhType } from '@deephaven/jsapi-types';\nimport Log from '@deephaven/log';\nimport { Formatter, TableUtils } from '@deephaven/jsapi-utils';\nimport {\n assertNotNull,\n EMPTY_ARRAY,\n EventShimCustomEvent,\n} from '@deephaven/utils';\nimport { type UIRow, type ColumnName } from './CommonTypes';\nimport IrisGridTableModelTemplate from './IrisGridTableModelTemplate';\nimport IrisGridModel, { type DisplayColumn } from './IrisGridModel';\nimport { type IrisGridThemeType } from './IrisGridTheme';\nimport IrisGridUtils from './IrisGridUtils';\n\nconst log = Log.module('IrisGridTreeTableModel');\n\nconst VirtualGroupColumn = Object.freeze({\n name: '__DH_UI_GROUP__',\n displayName: 'Group',\n type: TableUtils.dataType.STRING,\n constituentType: TableUtils.dataType.STRING,\n isPartitionColumn: false,\n isSortable: false,\n isProxy: true,\n description: 'Key column',\n index: -1,\n filter: () => {\n throw new Error('Filter not implemented for virtual column');\n },\n sort: () => {\n throw new Error('Sort not implemented for virtual column');\n },\n formatColor: () => {\n throw new Error('Color not implemented for virtual column');\n },\n get: () => {\n throw new Error('get not implemented for virtual column');\n },\n getFormat: () => {\n throw new Error('getFormat not implemented for virtual column');\n },\n formatNumber: () => {\n throw new Error('formatNumber not implemented for virtual column');\n },\n formatDate: () => {\n throw new Error('formatDate not implemented for virtual column');\n },\n});\n\nexport interface UITreeRow extends UIRow {\n isExpanded: boolean;\n hasChildren: boolean;\n depth: number;\n}\n\n/**\n * Check if a row is a UITreeRow\n * @param row The row to check\n * @returns True if the row is a UITreeRow and false otherwise\n */\nexport function isUITreeRow(row: unknown): row is UITreeRow {\n return (\n row != null &&\n typeof row === 'object' &&\n 'hasChildren' in row &&\n 'isExpanded' in row &&\n 'depth' in row &&\n typeof row.hasChildren === 'boolean' &&\n typeof row.isExpanded === 'boolean' &&\n typeof row.depth === 'number'\n );\n}\n\ntype LayoutTreeTable = DhType.TreeTable & {\n layoutHints?: null | DhType.LayoutHints;\n};\n\nfunction isLayoutTreeTable(table: DhType.TreeTable): table is LayoutTreeTable {\n return (table as LayoutTreeTable).layoutHints !== undefined;\n}\n\nexport function isIrisGridTreeTableModel(\n tableModel: IrisGridModel\n): tableModel is IrisGridTreeTableModel {\n return (tableModel as IrisGridTreeTableModel).showExtraGroupColumn != null;\n}\n\nclass IrisGridTreeTableModel\n extends IrisGridTableModelTemplate<DhType.TreeTable, UITreeRow>\n implements ExpandableGridModel\n{\n /** We keep a virtual column at the front that tracks the \"group\" that is expanded */\n private virtualColumns: DisplayColumn[];\n\n private showExtraGroupCol = true;\n\n constructor(\n dh: typeof DhType,\n table: DhType.TreeTable,\n formatter = new Formatter(dh),\n inputTable: DhType.InputTable | null = null,\n columnAlignmentMap = new Map<string, CanvasTextAlign>()\n ) {\n super(dh, table, formatter, inputTable, columnAlignmentMap);\n\n this.virtualColumns =\n this.showExtraGroupColumn && table.groupedColumns.length > 1\n ? [VirtualGroupColumn]\n : [];\n }\n\n get showExtraGroupColumn(): boolean {\n return this.showExtraGroupCol;\n }\n\n set showExtraGroupColumn(showExtraGroupCol: boolean) {\n if (this.showExtraGroupCol === showExtraGroupCol) {\n return;\n }\n this.showExtraGroupCol = showExtraGroupCol;\n this.updateVirtualColumns();\n }\n\n updateVirtualColumns(): void {\n this.virtualColumns =\n this.showExtraGroupColumn && this.table.groupedColumns.length > 1\n ? [VirtualGroupColumn]\n : [];\n this.dispatchEvent(\n new EventShimCustomEvent(IrisGridModel.EVENT.COLUMNS_CHANGED, {\n detail: this.columns,\n })\n );\n }\n\n applyBufferedViewport(\n viewportTop: number,\n viewportBottom: number,\n columns: DhType.Column[]\n ): void {\n const viewportColumns = [\n // Need to always fetch the grouped columns so we always have key data for the rows\n // Used to display our virtual key column\n ...this.table.groupedColumns,\n ...columns.filter(\n c =>\n !this.virtualColumns.includes(c) && !this.groupedColumns.includes(c)\n ),\n ];\n this.table.setViewport(viewportTop, viewportBottom, viewportColumns);\n }\n\n textForCell(x: ModelIndex, y: ModelIndex): string {\n const column = this.sourceColumn(x, y);\n const row = this.row(y);\n if (row != null && column != null) {\n if (!row.hasChildren && column.constituentType != null) {\n const value = this.valueForCell(x, y);\n const text = this.displayString(\n value,\n column.constituentType,\n column.name\n );\n\n if (TableUtils.isTextType(this.columns[x]?.type)) {\n if (value === null) {\n return this.formatter.showNullStrings ? 'null' : '';\n }\n\n if (text === '') {\n return this.formatter.showEmptyStrings ? 'empty' : '';\n }\n }\n\n return text;\n }\n\n // Show empty string instead of null in rollup grouping columns (issue #1483)\n if (\n row.hasChildren &&\n row.depth <= x + 1 &&\n this.valueForCell(x, y) === null &&\n this.getCachedGroupedColumnSet(this.groupedColumns).has(x)\n ) {\n return '';\n }\n }\n\n return super.textForCell(x, y);\n }\n\n colorForCell(x: ModelIndex, y: ModelIndex, theme: IrisGridThemeType): string {\n const data = this.dataForCell(x, y);\n if (data) {\n const { format, value } = data;\n if (value == null || value === '') {\n assertNotNull(theme.nullStringColor);\n return theme.nullStringColor;\n }\n if (format?.color != null && format.color !== '') {\n return format.color;\n }\n\n // Fallback to formatting based on the value/type of the cell\n if (value != null) {\n const column = this.sourceColumn(x, y);\n const row = this.row(y);\n assertNotNull(row);\n\n let columnTypeForFormatting = column.type;\n\n // For tree table leaf nodes, use the constituent type for formatting\n if (\n isUITreeRow(row) &&\n row.hasChildren === false &&\n column.constituentType != null\n ) {\n columnTypeForFormatting = column.constituentType;\n }\n\n return IrisGridUtils.colorForValue(\n theme,\n columnTypeForFormatting,\n column.name,\n value\n );\n }\n }\n\n return theme.textColor;\n }\n\n textAlignForCell(x: ModelIndex, y: ModelIndex): CanvasTextAlign {\n const column = this.sourceColumn(x, y);\n\n const userTextAlignment = this.columnAlignmentMap?.get(column.name);\n if (userTextAlignment != null) {\n return userTextAlignment;\n }\n\n const row = this.row(y);\n let typeForFormatting = column.type;\n\n // For tree table leaf nodes, use the constituent type for formatting\n if (\n isUITreeRow(row) &&\n row.hasChildren === false &&\n column.constituentType != null\n ) {\n typeForFormatting = column.constituentType;\n }\n\n return IrisGridUtils.textAlignForValue(typeForFormatting, column.name);\n }\n\n extractViewportRow(row: DhType.TreeRow, columns: DhType.Column[]): UITreeRow {\n const { isExpanded, hasChildren, depth } = row;\n const extractedRow = super.extractViewportRow(row, columns);\n const modifiedData = new Map(extractedRow.data);\n if (hasChildren) {\n for (let i = 0; i < this.virtualColumns.length; i += 1) {\n const key = i + (depth - 1) + (this.virtualColumns.length - 1);\n // The root/total row (depth 1) has no grouping key, so `key` points at\n // a virtual column rather than a real grouped source column. Skip it\n // instead of warning.\n if (key >= this.virtualColumns.length) {\n const cellData = modifiedData.get(key);\n if (cellData == null) {\n log.warn('Missing key data for virtual column', i, depth, key, row);\n } else {\n modifiedData.set(i, cellData);\n }\n }\n }\n }\n\n return {\n ...extractedRow,\n data: modifiedData,\n isExpanded,\n hasChildren,\n depth,\n };\n }\n\n async snapshot(\n ranges: GridRange[],\n includeHeaders?: boolean,\n formatValue: (value: unknown, column: DhType.Column) => unknown = value =>\n value\n ): Promise<unknown[][]> {\n assertNotNull(this.viewport);\n assertNotNull(this.viewportData);\n const columns = this.viewport.columns ?? this.columns;\n const result = [];\n\n if (includeHeaders != null && includeHeaders) {\n result.push(columns.map(c => c.name));\n }\n\n const viewportRange = new GridRange(\n 0,\n this.viewportData.offset,\n columns.length,\n this.viewportData.offset + this.viewportData.rows.length - 1\n );\n\n for (let i = 0; i < ranges.length; i += 1) {\n const intersection = GridRange.intersection(viewportRange, ranges[i]);\n\n assertNotNull(intersection);\n assertNotNull(intersection.startRow);\n assertNotNull(intersection.endRow);\n\n for (let r = intersection.startRow; r <= intersection.endRow; r += 1) {\n const resultRow = [];\n const viewportRow =\n this.viewportData.rows[r - this.viewportData.offset];\n assertNotNull(intersection.startColumn);\n assertNotNull(intersection.endColumn);\n for (\n let c = intersection.startColumn;\n c <= intersection.endColumn;\n c += 1\n ) {\n resultRow.push(\n formatValue(viewportRow.data.get(c)?.value, this.columns[c])\n );\n }\n result.push(resultRow);\n }\n }\n\n return result;\n }\n\n get columns(): DhType.Column[] {\n return this.getCachedColumns(this.virtualColumns, super.columns);\n }\n\n get aggregatedColumns(): readonly DhType.Column[] {\n return this.isAggregatedColumnsAvailable\n ? this.table.aggregatedColumns\n : EMPTY_ARRAY;\n }\n\n get groupedColumns(): readonly DhType.Column[] {\n return this.getCachedGroupColumns(\n this.virtualColumns,\n this.table.groupedColumns\n );\n }\n\n sourceForCell(column: ModelIndex, row: ModelIndex): GridCell {\n if (column >= this.virtualColumns.length) {\n return { column, row };\n }\n return { column: this.virtualSourceColumnIndex(column, row), row };\n }\n\n sourceColumn(column: ModelIndex, row: ModelIndex): DhType.Column {\n if (column >= this.virtualColumns.length) {\n return super.sourceColumn(column, row);\n }\n return this.columns[this.virtualSourceColumnIndex(column, row)];\n }\n\n /**\n * Get the index of the grouped column that the virtual group column proxies\n * for the given cell.\n */\n private virtualSourceColumnIndex(\n column: ModelIndex,\n row: ModelIndex\n ): ModelIndex {\n const depth = this.depthForRow(row);\n return Math.min(column + depth, this.groupedColumns.length - 1);\n }\n\n getClearFilterRange(column: ModelIndex): BoundedAxisRange | null {\n if (column >= this.virtualColumns.length) {\n return super.getClearFilterRange(column);\n }\n // Source for the proxied column could be any of the grouped columns.\n // Return the range of columns matching the grouped columns.\n return [this.virtualColumns.length, this.groupedColumns.length];\n }\n\n get layoutHints(): DhType.LayoutHints | null | undefined {\n if (isLayoutTreeTable(this.table)) {\n return this.table.layoutHints;\n }\n return undefined;\n }\n\n get hasExpandableRows(): boolean {\n return true;\n }\n\n get isAggregatedColumnsAvailable(): boolean {\n return (\n // aggregatedColumns are not available in the Legacy API\n // and Core API before v0.39.4\n this.table.aggregatedColumns !== undefined\n );\n }\n\n get isExpandAllAvailable(): boolean {\n return this.table.expandAll !== undefined;\n }\n\n get isChartBuilderAvailable(): boolean {\n return false;\n }\n\n get isOrganizeColumnsAvailable(): boolean {\n return true;\n }\n\n get isSelectDistinctAvailable(): boolean {\n return false;\n }\n\n get isReversible(): boolean {\n return false;\n }\n\n isFilterable(columnIndex: ModelIndex): boolean {\n return this.getCachedFilterableColumnSet(\n this.columns,\n this.isAggregatedColumnsAvailable,\n this.aggregatedColumns,\n this.groupedColumns,\n this.virtualColumns\n ).has(columnIndex);\n }\n\n isColumnMovable(column: ModelIndex): boolean {\n return column >= this.groupedColumns.length;\n }\n\n isRowExpandable(y: ModelIndex): boolean {\n const row = this.row(y);\n return row?.hasChildren ?? false;\n }\n\n isRowExpanded(y: ModelIndex): boolean {\n const row = this.row(y);\n return row?.isExpanded ?? false;\n }\n\n setRowExpanded(\n y: ModelIndex,\n isExpanded: boolean,\n expandDescendants = false\n ): void {\n if (this.isExpandAllAvailable) {\n this.table.setExpanded(y, isExpanded, expandDescendants);\n } else {\n this.table.setExpanded(y, isExpanded);\n }\n }\n\n expandAll(): void {\n if (this.table.expandAll != null) {\n this.table.expandAll();\n }\n }\n\n collapseAll(): void {\n if (this.table.collapseAll != null) {\n this.table.collapseAll();\n }\n }\n\n depthForRow(y: ModelIndex): ModelIndex {\n const row = this.row(y);\n return (row?.depth ?? 1) - 1;\n }\n\n getCachedColumns = memoize(\n (\n virtualColumns: readonly DhType.Column[],\n tableColumns: readonly DhType.Column[]\n ) => [...virtualColumns, ...tableColumns]\n );\n\n getCachedGroupColumns = memoize(\n (\n virtualColumns: readonly DhType.Column[],\n tableGroupedColumns: readonly DhType.Column[]\n ) => [...virtualColumns, ...tableGroupedColumns]\n );\n\n getCachedFilterableColumnSet = memoize(\n (\n columns: readonly DhType.Column[],\n isAggregatedColumnsAvailable: boolean,\n aggregatedColumns: readonly DhType.Column[],\n groupedColumns: readonly DhType.Column[],\n virtualColumns: readonly DhType.Column[]\n ) => {\n if (isAggregatedColumnsAvailable) {\n return new Set(\n // Virtual and aggregated columns are not filterable\n columns\n .filter(\n c => !virtualColumns.includes(c) && !aggregatedColumns.includes(c)\n )\n .map(c1 => columns.findIndex(c2 => c1.name === c2.name))\n );\n }\n // For compatibility with the Enterprise JSAPI,\n // only groupedColumns are filterable on rollup tables\n // if aggregatedColumns API is not available.\n return new Set(\n (groupedColumns?.length > 0 ? groupedColumns : columns)\n .filter(c => !virtualColumns.includes(c))\n .map(c1 => columns.findIndex(c2 => c1.name === c2.name))\n );\n }\n );\n\n getCachedGroupedColumnSet = memoize(\n (groupedColumns: readonly DhType.Column[]) =>\n new Set(\n groupedColumns.map(c1 =>\n this.columns.findIndex(c2 => c1.name === c2.name)\n )\n )\n );\n\n updateFrozenColumns(columns: ColumnName[]): void {\n if (columns.length > 0) {\n throw new Error('Cannot freeze columns on a tree table');\n }\n }\n}\n\nexport default IrisGridTreeTableModel;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"IrisGridTreeTableModel.js","names":["memoize","GridRange","Log","Formatter","TableUtils","assertNotNull","EMPTY_ARRAY","EventShimCustomEvent","IrisGridTableModelTemplate","IrisGridModel","IrisGridUtils","log","module","VirtualGroupColumn","Object","freeze","name","displayName","type","dataType","STRING","constituentType","isPartitionColumn","isSortable","isProxy","description","index","filter","Error","sort","formatColor","get","getFormat","formatNumber","formatDate","isUITreeRow","row","hasChildren","isExpanded","depth","isLayoutTreeTable","table","layoutHints","undefined","isIrisGridTreeTableModel","tableModel","showExtraGroupColumn","IrisGridTreeTableModel","constructor","dh","formatter","arguments","length","inputTable","columnAlignmentMap","Map","_defineProperty","virtualColumns","tableColumns","tableGroupedColumns","columns","isAggregatedColumnsAvailable","aggregatedColumns","groupedColumns","Set","c","includes","map","c1","findIndex","c2","selectionKeyColumnIndices","hasUniqueSelectionKeys","showExtraGroupCol","updateVirtualColumns","dispatchEvent","EVENT","COLUMNS_CHANGED","detail","applyBufferedViewport","viewportTop","viewportBottom","viewportColumns","setViewport","textForCell","x","y","column","sourceColumn","_this$columns$x","value","valueForCell","text","displayString","isTextType","showNullStrings","showEmptyStrings","getCachedGroupedColumnSet","has","colorForCell","theme","data","dataForCell","format","nullStringColor","color","columnTypeForFormatting","colorForValue","textColor","textAlignForCell","_this$columnAlignment","userTextAlignment","typeForFormatting","textAlignForValue","extractViewportRow","extractedRow","modifiedData","i","key","cellData","warn","set","_objectSpread","snapshot","ranges","includeHeaders","_arguments","_this","_asyncToGenerator","_this$viewport$column","formatValue","viewport","viewportData","result","push","viewportRange","offset","rows","intersection","startRow","endRow","r","resultRow","viewportRow","startColumn","endColumn","_viewportRow$data$get","getCachedColumns","getCachedGroupColumns","sourceForCell","virtualSourceColumnIndex","depthForRow","Math","min","getClearFilterRange","hasExpandableRows","isExpandAllAvailable","expandAll","isChartBuilderAvailable","isOrganizeColumnsAvailable","isSelectDistinctAvailable","isReversible","isFilterable","columnIndex","getCachedFilterableColumnSet","isColumnMovable","isRowExpandable","_row$hasChildren","isRowExpanded","_row$isExpanded","setRowExpanded","expandDescendants","setExpanded","collapseAll","_row$depth","updateFrozenColumns"],"sources":["../src/IrisGridTreeTableModel.ts"],"sourcesContent":["/* eslint class-methods-use-this: \"off\" */\nimport memoize from 'memoize-one';\nimport {\n type BoundedAxisRange,\n type ExpandableGridModel,\n type GridCell,\n GridRange,\n type ModelIndex,\n} from '@deephaven/grid';\nimport type { dh as DhType } from '@deephaven/jsapi-types';\nimport Log from '@deephaven/log';\nimport { Formatter, TableUtils } from '@deephaven/jsapi-utils';\nimport {\n assertNotNull,\n EMPTY_ARRAY,\n EventShimCustomEvent,\n} from '@deephaven/utils';\nimport { type UIRow, type ColumnName } from './CommonTypes';\nimport IrisGridTableModelTemplate from './IrisGridTableModelTemplate';\nimport IrisGridModel, { type DisplayColumn } from './IrisGridModel';\nimport { type IrisGridThemeType } from './IrisGridTheme';\nimport IrisGridUtils from './IrisGridUtils';\n\nconst log = Log.module('IrisGridTreeTableModel');\n\nconst VirtualGroupColumn = Object.freeze({\n name: '__DH_UI_GROUP__',\n displayName: 'Group',\n type: TableUtils.dataType.STRING,\n constituentType: TableUtils.dataType.STRING,\n isPartitionColumn: false,\n isSortable: false,\n isProxy: true,\n description: 'Key column',\n index: -1,\n filter: () => {\n throw new Error('Filter not implemented for virtual column');\n },\n sort: () => {\n throw new Error('Sort not implemented for virtual column');\n },\n formatColor: () => {\n throw new Error('Color not implemented for virtual column');\n },\n get: () => {\n throw new Error('get not implemented for virtual column');\n },\n getFormat: () => {\n throw new Error('getFormat not implemented for virtual column');\n },\n formatNumber: () => {\n throw new Error('formatNumber not implemented for virtual column');\n },\n formatDate: () => {\n throw new Error('formatDate not implemented for virtual column');\n },\n});\n\nexport interface UITreeRow extends UIRow {\n isExpanded: boolean;\n hasChildren: boolean;\n depth: number;\n}\n\n/**\n * Check if a row is a UITreeRow\n * @param row The row to check\n * @returns True if the row is a UITreeRow and false otherwise\n */\nexport function isUITreeRow(row: unknown): row is UITreeRow {\n return (\n row != null &&\n typeof row === 'object' &&\n 'hasChildren' in row &&\n 'isExpanded' in row &&\n 'depth' in row &&\n typeof row.hasChildren === 'boolean' &&\n typeof row.isExpanded === 'boolean' &&\n typeof row.depth === 'number'\n );\n}\n\ntype LayoutTreeTable = DhType.TreeTable & {\n layoutHints?: null | DhType.LayoutHints;\n};\n\nfunction isLayoutTreeTable(table: DhType.TreeTable): table is LayoutTreeTable {\n return (table as LayoutTreeTable).layoutHints !== undefined;\n}\n\nexport function isIrisGridTreeTableModel(\n tableModel: IrisGridModel\n): tableModel is IrisGridTreeTableModel {\n return (tableModel as IrisGridTreeTableModel).showExtraGroupColumn != null;\n}\n\nclass IrisGridTreeTableModel\n extends IrisGridTableModelTemplate<DhType.TreeTable, UITreeRow>\n implements ExpandableGridModel\n{\n /** We keep a virtual column at the front that tracks the \"group\" that is expanded */\n private virtualColumns: DisplayColumn[];\n\n private showExtraGroupCol = true;\n\n constructor(\n dh: typeof DhType,\n table: DhType.TreeTable,\n formatter = new Formatter(dh),\n inputTable: DhType.InputTable | null = null,\n columnAlignmentMap = new Map<string, CanvasTextAlign>()\n ) {\n super(dh, table, formatter, inputTable, columnAlignmentMap);\n\n this.virtualColumns =\n this.showExtraGroupColumn && table.groupedColumns.length > 1\n ? [VirtualGroupColumn]\n : [];\n }\n\n // Tree tables currently do not support keyed selection\n // This insures that a rollup on a keyed table will not get a keyed selection\n get selectionKeyColumnIndices(): readonly ModelIndex[] {\n return EMPTY_ARRAY;\n }\n\n // Tree tables currently do not support keyed selection\n get hasUniqueSelectionKeys(): boolean {\n return false;\n }\n\n get showExtraGroupColumn(): boolean {\n return this.showExtraGroupCol;\n }\n\n set showExtraGroupColumn(showExtraGroupCol: boolean) {\n if (this.showExtraGroupCol === showExtraGroupCol) {\n return;\n }\n this.showExtraGroupCol = showExtraGroupCol;\n this.updateVirtualColumns();\n }\n\n updateVirtualColumns(): void {\n this.virtualColumns =\n this.showExtraGroupColumn && this.table.groupedColumns.length > 1\n ? [VirtualGroupColumn]\n : [];\n this.dispatchEvent(\n new EventShimCustomEvent(IrisGridModel.EVENT.COLUMNS_CHANGED, {\n detail: this.columns,\n })\n );\n }\n\n applyBufferedViewport(\n viewportTop: number,\n viewportBottom: number,\n columns: DhType.Column[]\n ): void {\n const viewportColumns = [\n // Need to always fetch the grouped columns so we always have key data for the rows\n // Used to display our virtual key column\n ...this.table.groupedColumns,\n ...columns.filter(\n c =>\n !this.virtualColumns.includes(c) && !this.groupedColumns.includes(c)\n ),\n ];\n this.table.setViewport(viewportTop, viewportBottom, viewportColumns);\n }\n\n textForCell(x: ModelIndex, y: ModelIndex): string {\n const column = this.sourceColumn(x, y);\n const row = this.row(y);\n if (row != null && column != null) {\n if (!row.hasChildren && column.constituentType != null) {\n const value = this.valueForCell(x, y);\n const text = this.displayString(\n value,\n column.constituentType,\n column.name\n );\n\n if (TableUtils.isTextType(this.columns[x]?.type)) {\n if (value === null) {\n return this.formatter.showNullStrings ? 'null' : '';\n }\n\n if (text === '') {\n return this.formatter.showEmptyStrings ? 'empty' : '';\n }\n }\n\n return text;\n }\n\n // Show empty string instead of null in rollup grouping columns (issue #1483)\n if (\n row.hasChildren &&\n row.depth <= x + 1 &&\n this.valueForCell(x, y) === null &&\n this.getCachedGroupedColumnSet(this.groupedColumns).has(x)\n ) {\n return '';\n }\n }\n\n return super.textForCell(x, y);\n }\n\n colorForCell(x: ModelIndex, y: ModelIndex, theme: IrisGridThemeType): string {\n const data = this.dataForCell(x, y);\n if (data) {\n const { format, value } = data;\n if (value == null || value === '') {\n assertNotNull(theme.nullStringColor);\n return theme.nullStringColor;\n }\n if (format?.color != null && format.color !== '') {\n return format.color;\n }\n\n // Fallback to formatting based on the value/type of the cell\n if (value != null) {\n const column = this.sourceColumn(x, y);\n const row = this.row(y);\n assertNotNull(row);\n\n let columnTypeForFormatting = column.type;\n\n // For tree table leaf nodes, use the constituent type for formatting\n if (\n isUITreeRow(row) &&\n row.hasChildren === false &&\n column.constituentType != null\n ) {\n columnTypeForFormatting = column.constituentType;\n }\n\n return IrisGridUtils.colorForValue(\n theme,\n columnTypeForFormatting,\n column.name,\n value\n );\n }\n }\n\n return theme.textColor;\n }\n\n textAlignForCell(x: ModelIndex, y: ModelIndex): CanvasTextAlign {\n const column = this.sourceColumn(x, y);\n\n const userTextAlignment = this.columnAlignmentMap?.get(column.name);\n if (userTextAlignment != null) {\n return userTextAlignment;\n }\n\n const row = this.row(y);\n let typeForFormatting = column.type;\n\n // For tree table leaf nodes, use the constituent type for formatting\n if (\n isUITreeRow(row) &&\n row.hasChildren === false &&\n column.constituentType != null\n ) {\n typeForFormatting = column.constituentType;\n }\n\n return IrisGridUtils.textAlignForValue(typeForFormatting, column.name);\n }\n\n extractViewportRow(row: DhType.TreeRow, columns: DhType.Column[]): UITreeRow {\n const { isExpanded, hasChildren, depth } = row;\n const extractedRow = super.extractViewportRow(row, columns);\n const modifiedData = new Map(extractedRow.data);\n if (hasChildren) {\n for (let i = 0; i < this.virtualColumns.length; i += 1) {\n const key = i + (depth - 1) + (this.virtualColumns.length - 1);\n // The root/total row (depth 1) has no grouping key, so `key` points at\n // a virtual column rather than a real grouped source column. Skip it\n // instead of warning.\n if (key >= this.virtualColumns.length) {\n const cellData = modifiedData.get(key);\n if (cellData == null) {\n log.warn('Missing key data for virtual column', i, depth, key, row);\n } else {\n modifiedData.set(i, cellData);\n }\n }\n }\n }\n\n return {\n ...extractedRow,\n data: modifiedData,\n isExpanded,\n hasChildren,\n depth,\n };\n }\n\n async snapshot(\n ranges: GridRange[],\n includeHeaders?: boolean,\n formatValue: (value: unknown, column: DhType.Column) => unknown = value =>\n value\n ): Promise<unknown[][]> {\n assertNotNull(this.viewport);\n assertNotNull(this.viewportData);\n const columns = this.viewport.columns ?? this.columns;\n const result = [];\n\n if (includeHeaders != null && includeHeaders) {\n result.push(columns.map(c => c.name));\n }\n\n const viewportRange = new GridRange(\n 0,\n this.viewportData.offset,\n columns.length,\n this.viewportData.offset + this.viewportData.rows.length - 1\n );\n\n for (let i = 0; i < ranges.length; i += 1) {\n const intersection = GridRange.intersection(viewportRange, ranges[i]);\n\n assertNotNull(intersection);\n assertNotNull(intersection.startRow);\n assertNotNull(intersection.endRow);\n\n for (let r = intersection.startRow; r <= intersection.endRow; r += 1) {\n const resultRow = [];\n const viewportRow =\n this.viewportData.rows[r - this.viewportData.offset];\n assertNotNull(intersection.startColumn);\n assertNotNull(intersection.endColumn);\n for (\n let c = intersection.startColumn;\n c <= intersection.endColumn;\n c += 1\n ) {\n resultRow.push(\n formatValue(viewportRow.data.get(c)?.value, this.columns[c])\n );\n }\n result.push(resultRow);\n }\n }\n\n return result;\n }\n\n get columns(): DhType.Column[] {\n return this.getCachedColumns(this.virtualColumns, super.columns);\n }\n\n get aggregatedColumns(): readonly DhType.Column[] {\n return this.isAggregatedColumnsAvailable\n ? this.table.aggregatedColumns\n : EMPTY_ARRAY;\n }\n\n get groupedColumns(): readonly DhType.Column[] {\n return this.getCachedGroupColumns(\n this.virtualColumns,\n this.table.groupedColumns\n );\n }\n\n sourceForCell(column: ModelIndex, row: ModelIndex): GridCell {\n if (column >= this.virtualColumns.length) {\n return { column, row };\n }\n return { column: this.virtualSourceColumnIndex(column, row), row };\n }\n\n sourceColumn(column: ModelIndex, row: ModelIndex): DhType.Column {\n if (column >= this.virtualColumns.length) {\n return super.sourceColumn(column, row);\n }\n return this.columns[this.virtualSourceColumnIndex(column, row)];\n }\n\n /**\n * Get the index of the grouped column that the virtual group column proxies\n * for the given cell.\n */\n private virtualSourceColumnIndex(\n column: ModelIndex,\n row: ModelIndex\n ): ModelIndex {\n const depth = this.depthForRow(row);\n return Math.min(column + depth, this.groupedColumns.length - 1);\n }\n\n getClearFilterRange(column: ModelIndex): BoundedAxisRange | null {\n if (column >= this.virtualColumns.length) {\n return super.getClearFilterRange(column);\n }\n // Source for the proxied column could be any of the grouped columns.\n // Return the range of columns matching the grouped columns.\n return [this.virtualColumns.length, this.groupedColumns.length];\n }\n\n get layoutHints(): DhType.LayoutHints | null | undefined {\n if (isLayoutTreeTable(this.table)) {\n return this.table.layoutHints;\n }\n return undefined;\n }\n\n get hasExpandableRows(): boolean {\n return true;\n }\n\n get isAggregatedColumnsAvailable(): boolean {\n return (\n // aggregatedColumns are not available in the Legacy API\n // and Core API before v0.39.4\n this.table.aggregatedColumns !== undefined\n );\n }\n\n get isExpandAllAvailable(): boolean {\n return this.table.expandAll !== undefined;\n }\n\n get isChartBuilderAvailable(): boolean {\n return false;\n }\n\n get isOrganizeColumnsAvailable(): boolean {\n return true;\n }\n\n get isSelectDistinctAvailable(): boolean {\n return false;\n }\n\n get isReversible(): boolean {\n return false;\n }\n\n isFilterable(columnIndex: ModelIndex): boolean {\n return this.getCachedFilterableColumnSet(\n this.columns,\n this.isAggregatedColumnsAvailable,\n this.aggregatedColumns,\n this.groupedColumns,\n this.virtualColumns\n ).has(columnIndex);\n }\n\n isColumnMovable(column: ModelIndex): boolean {\n return column >= this.groupedColumns.length;\n }\n\n isRowExpandable(y: ModelIndex): boolean {\n const row = this.row(y);\n return row?.hasChildren ?? false;\n }\n\n isRowExpanded(y: ModelIndex): boolean {\n const row = this.row(y);\n return row?.isExpanded ?? false;\n }\n\n setRowExpanded(\n y: ModelIndex,\n isExpanded: boolean,\n expandDescendants = false\n ): void {\n if (this.isExpandAllAvailable) {\n this.table.setExpanded(y, isExpanded, expandDescendants);\n } else {\n this.table.setExpanded(y, isExpanded);\n }\n }\n\n expandAll(): void {\n if (this.table.expandAll != null) {\n this.table.expandAll();\n }\n }\n\n collapseAll(): void {\n if (this.table.collapseAll != null) {\n this.table.collapseAll();\n }\n }\n\n depthForRow(y: ModelIndex): ModelIndex {\n const row = this.row(y);\n return (row?.depth ?? 1) - 1;\n }\n\n getCachedColumns = memoize(\n (\n virtualColumns: readonly DhType.Column[],\n tableColumns: readonly DhType.Column[]\n ) => [...virtualColumns, ...tableColumns]\n );\n\n getCachedGroupColumns = memoize(\n (\n virtualColumns: readonly DhType.Column[],\n tableGroupedColumns: readonly DhType.Column[]\n ) => [...virtualColumns, ...tableGroupedColumns]\n );\n\n getCachedFilterableColumnSet = memoize(\n (\n columns: readonly DhType.Column[],\n isAggregatedColumnsAvailable: boolean,\n aggregatedColumns: readonly DhType.Column[],\n groupedColumns: readonly DhType.Column[],\n virtualColumns: readonly DhType.Column[]\n ) => {\n if (isAggregatedColumnsAvailable) {\n return new Set(\n // Virtual and aggregated columns are not filterable\n columns\n .filter(\n c => !virtualColumns.includes(c) && !aggregatedColumns.includes(c)\n )\n .map(c1 => columns.findIndex(c2 => c1.name === c2.name))\n );\n }\n // For compatibility with the Enterprise JSAPI,\n // only groupedColumns are filterable on rollup tables\n // if aggregatedColumns API is not available.\n return new Set(\n (groupedColumns?.length > 0 ? groupedColumns : columns)\n .filter(c => !virtualColumns.includes(c))\n .map(c1 => columns.findIndex(c2 => c1.name === c2.name))\n );\n }\n );\n\n getCachedGroupedColumnSet = memoize(\n (groupedColumns: readonly DhType.Column[]) =>\n new Set(\n groupedColumns.map(c1 =>\n this.columns.findIndex(c2 => c1.name === c2.name)\n )\n )\n );\n\n updateFrozenColumns(columns: ColumnName[]): void {\n if (columns.length > 0) {\n throw new Error('Cannot freeze columns on a tree table');\n }\n }\n}\n\nexport default IrisGridTreeTableModel;\n"],"mappings":";;;;;;;AAAA;AACA,OAAOA,OAAO,MAAM,aAAa;AACjC,SAIEC,SAAS,QAEJ,iBAAiB;AAExB,OAAOC,GAAG,MAAM,gBAAgB;AAChC,SAASC,SAAS,EAAEC,UAAU,QAAQ,wBAAwB;AAC9D,SACEC,aAAa,EACbC,WAAW,EACXC,oBAAoB,QACf,kBAAkB;AAAC,OAEnBC,0BAA0B;AAAA,OAC1BC,aAAa;AAAA,OAEbC,aAAa;AAEpB,IAAMC,GAAG,GAAGT,GAAG,CAACU,MAAM,CAAC,wBAAwB,CAAC;AAEhD,IAAMC,kBAAkB,GAAGC,MAAM,CAACC,MAAM,CAAC;EACvCC,IAAI,EAAE,iBAAiB;EACvBC,WAAW,EAAE,OAAO;EACpBC,IAAI,EAAEd,UAAU,CAACe,QAAQ,CAACC,MAAM;EAChCC,eAAe,EAAEjB,UAAU,CAACe,QAAQ,CAACC,MAAM;EAC3CE,iBAAiB,EAAE,KAAK;EACxBC,UAAU,EAAE,KAAK;EACjBC,OAAO,EAAE,IAAI;EACbC,WAAW,EAAE,YAAY;EACzBC,KAAK,EAAE,CAAC,CAAC;EACTC,MAAM,EAAEA,CAAA,KAAM;IACZ,MAAM,IAAIC,KAAK,CAAC,2CAA2C,CAAC;EAC9D,CAAC;EACDC,IAAI,EAAEA,CAAA,KAAM;IACV,MAAM,IAAID,KAAK,CAAC,yCAAyC,CAAC;EAC5D,CAAC;EACDE,WAAW,EAAEA,CAAA,KAAM;IACjB,MAAM,IAAIF,KAAK,CAAC,0CAA0C,CAAC;EAC7D,CAAC;EACDG,GAAG,EAAEA,CAAA,KAAM;IACT,MAAM,IAAIH,KAAK,CAAC,wCAAwC,CAAC;EAC3D,CAAC;EACDI,SAAS,EAAEA,CAAA,KAAM;IACf,MAAM,IAAIJ,KAAK,CAAC,8CAA8C,CAAC;EACjE,CAAC;EACDK,YAAY,EAAEA,CAAA,KAAM;IAClB,MAAM,IAAIL,KAAK,CAAC,iDAAiD,CAAC;EACpE,CAAC;EACDM,UAAU,EAAEA,CAAA,KAAM;IAChB,MAAM,IAAIN,KAAK,CAAC,+CAA+C,CAAC;EAClE;AACF,CAAC,CAAC;AAQF;AACA;AACA;AACA;AACA;AACA,OAAO,SAASO,WAAWA,CAACC,GAAY,EAAoB;EAC1D,OACEA,GAAG,IAAI,IAAI,IACX,OAAOA,GAAG,KAAK,QAAQ,IACvB,aAAa,IAAIA,GAAG,IACpB,YAAY,IAAIA,GAAG,IACnB,OAAO,IAAIA,GAAG,IACd,OAAOA,GAAG,CAACC,WAAW,KAAK,SAAS,IACpC,OAAOD,GAAG,CAACE,UAAU,KAAK,SAAS,IACnC,OAAOF,GAAG,CAACG,KAAK,KAAK,QAAQ;AAEjC;AAMA,SAASC,iBAAiBA,CAACC,KAAuB,EAA4B;EAC5E,OAAQA,KAAK,CAAqBC,WAAW,KAAKC,SAAS;AAC7D;AAEA,OAAO,SAASC,wBAAwBA,CACtCC,UAAyB,EACa;EACtC,OAAQA,UAAU,CAA4BC,oBAAoB,IAAI,IAAI;AAC5E;AAEA,MAAMC,sBAAsB,SAClBvC,0BAA0B,CAEpC;EAMEwC,WAAWA,CACTC,EAAiB,EACjBR,KAAuB,EAIvB;IAAA,IAHAS,SAAS,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAR,SAAA,GAAAQ,SAAA,MAAG,IAAIhD,SAAS,CAAC8C,EAAE,CAAC;IAAA,IAC7BI,UAAoC,GAAAF,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAR,SAAA,GAAAQ,SAAA,MAAG,IAAI;IAAA,IAC3CG,kBAAkB,GAAAH,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAR,SAAA,GAAAQ,SAAA,MAAG,IAAII,GAAG,CAA0B,CAAC;IAEvD,KAAK,CAACN,EAAE,EAAER,KAAK,EAAES,SAAS,EAAEG,UAAU,EAAEC,kBAAkB,CAAC;IAZ7D;IAAAE,eAAA;IAAAA,eAAA,4BAG4B,IAAI;IAAAA,eAAA,2BA6YbxD,OAAO,CACxB,CACEyD,cAAwC,EACxCC,YAAsC,KACnC,CAAC,GAAGD,cAAc,EAAE,GAAGC,YAAY,CAC1C,CAAC;IAAAF,eAAA,gCAEuBxD,OAAO,CAC7B,CACEyD,cAAwC,EACxCE,mBAA6C,KAC1C,CAAC,GAAGF,cAAc,EAAE,GAAGE,mBAAmB,CACjD,CAAC;IAAAH,eAAA,uCAE8BxD,OAAO,CACpC,CACE4D,OAAiC,EACjCC,4BAAqC,EACrCC,iBAA2C,EAC3CC,cAAwC,EACxCN,cAAwC,KACrC;MACH,IAAII,4BAA4B,EAAE;QAChC,OAAO,IAAIG,GAAG;QACZ;QACAJ,OAAO,CACJjC,MAAM,CACLsC,CAAC,IAAI,CAACR,cAAc,CAACS,QAAQ,CAACD,CAAC,CAAC,IAAI,CAACH,iBAAiB,CAACI,QAAQ,CAACD,CAAC,CACnE,CAAC,CACAE,GAAG,CAACC,EAAE,IAAIR,OAAO,CAACS,SAAS,CAACC,EAAE,IAAIF,EAAE,CAACpD,IAAI,KAAKsD,EAAE,CAACtD,IAAI,CAAC,CAC3D,CAAC;MACH;MACA;MACA;MACA;MACA,OAAO,IAAIgD,GAAG,CACZ,CAAC,CAAAD,cAAc,aAAdA,cAAc,uBAAdA,cAAc,CAAEX,MAAM,IAAG,CAAC,GAAGW,cAAc,GAAGH,OAAO,EACnDjC,MAAM,CAACsC,CAAC,IAAI,CAACR,cAAc,CAACS,QAAQ,CAACD,CAAC,CAAC,CAAC,CACxCE,GAAG,CAACC,EAAE,IAAIR,OAAO,CAACS,SAAS,CAACC,EAAE,IAAIF,EAAE,CAACpD,IAAI,KAAKsD,EAAE,CAACtD,IAAI,CAAC,CAC3D,CAAC;IACH,CACF,CAAC;IAAAwC,eAAA,oCAE2BxD,OAAO,CAChC+D,cAAwC,IACvC,IAAIC,GAAG,CACLD,cAAc,CAACI,GAAG,CAACC,EAAE,IACnB,IAAI,CAACR,OAAO,CAACS,SAAS,CAACC,EAAE,IAAIF,EAAE,CAACpD,IAAI,KAAKsD,EAAE,CAACtD,IAAI,CAClD,CACF,CACJ,CAAC;IApbC,IAAI,CAACyC,cAAc,GACjB,IAAI,CAACX,oBAAoB,IAAIL,KAAK,CAACsB,cAAc,CAACX,MAAM,GAAG,CAAC,GACxD,CAACvC,kBAAkB,CAAC,GACpB,EAAE;EACV;;EAEA;EACA;EACA,IAAI0D,yBAAyBA,CAAA,EAA0B;IACrD,OAAOjE,WAAW;EACpB;;EAEA;EACA,IAAIkE,sBAAsBA,CAAA,EAAY;IACpC,OAAO,KAAK;EACd;EAEA,IAAI1B,oBAAoBA,CAAA,EAAY;IAClC,OAAO,IAAI,CAAC2B,iBAAiB;EAC/B;EAEA,IAAI3B,oBAAoBA,CAAC2B,iBAA0B,EAAE;IACnD,IAAI,IAAI,CAACA,iBAAiB,KAAKA,iBAAiB,EAAE;MAChD;IACF;IACA,IAAI,CAACA,iBAAiB,GAAGA,iBAAiB;IAC1C,IAAI,CAACC,oBAAoB,CAAC,CAAC;EAC7B;EAEAA,oBAAoBA,CAAA,EAAS;IAC3B,IAAI,CAACjB,cAAc,GACjB,IAAI,CAACX,oBAAoB,IAAI,IAAI,CAACL,KAAK,CAACsB,cAAc,CAACX,MAAM,GAAG,CAAC,GAC7D,CAACvC,kBAAkB,CAAC,GACpB,EAAE;IACR,IAAI,CAAC8D,aAAa,CAChB,IAAIpE,oBAAoB,CAACE,aAAa,CAACmE,KAAK,CAACC,eAAe,EAAE;MAC5DC,MAAM,EAAE,IAAI,CAAClB;IACf,CAAC,CACH,CAAC;EACH;EAEAmB,qBAAqBA,CACnBC,WAAmB,EACnBC,cAAsB,EACtBrB,OAAwB,EAClB;IACN,IAAMsB,eAAe,GAAG;IACtB;IACA;IACA,GAAG,IAAI,CAACzC,KAAK,CAACsB,cAAc,EAC5B,GAAGH,OAAO,CAACjC,MAAM,CACfsC,CAAC,IACC,CAAC,IAAI,CAACR,cAAc,CAACS,QAAQ,CAACD,CAAC,CAAC,IAAI,CAAC,IAAI,CAACF,cAAc,CAACG,QAAQ,CAACD,CAAC,CACvE,CAAC,CACF;IACD,IAAI,CAACxB,KAAK,CAAC0C,WAAW,CAACH,WAAW,EAAEC,cAAc,EAAEC,eAAe,CAAC;EACtE;EAEAE,WAAWA,CAACC,CAAa,EAAEC,CAAa,EAAU;IAChD,IAAMC,MAAM,GAAG,IAAI,CAACC,YAAY,CAACH,CAAC,EAAEC,CAAC,CAAC;IACtC,IAAMlD,GAAG,GAAG,IAAI,CAACA,GAAG,CAACkD,CAAC,CAAC;IACvB,IAAIlD,GAAG,IAAI,IAAI,IAAImD,MAAM,IAAI,IAAI,EAAE;MACjC,IAAI,CAACnD,GAAG,CAACC,WAAW,IAAIkD,MAAM,CAAClE,eAAe,IAAI,IAAI,EAAE;QAAA,IAAAoE,eAAA;QACtD,IAAMC,KAAK,GAAG,IAAI,CAACC,YAAY,CAACN,CAAC,EAAEC,CAAC,CAAC;QACrC,IAAMM,IAAI,GAAG,IAAI,CAACC,aAAa,CAC7BH,KAAK,EACLH,MAAM,CAAClE,eAAe,EACtBkE,MAAM,CAACvE,IACT,CAAC;QAED,IAAIZ,UAAU,CAAC0F,UAAU,EAAAL,eAAA,GAAC,IAAI,CAAC7B,OAAO,CAACyB,CAAC,CAAC,cAAAI,eAAA,uBAAfA,eAAA,CAAiBvE,IAAI,CAAC,EAAE;UAChD,IAAIwE,KAAK,KAAK,IAAI,EAAE;YAClB,OAAO,IAAI,CAACxC,SAAS,CAAC6C,eAAe,GAAG,MAAM,GAAG,EAAE;UACrD;UAEA,IAAIH,IAAI,KAAK,EAAE,EAAE;YACf,OAAO,IAAI,CAAC1C,SAAS,CAAC8C,gBAAgB,GAAG,OAAO,GAAG,EAAE;UACvD;QACF;QAEA,OAAOJ,IAAI;MACb;;MAEA;MACA,IACExD,GAAG,CAACC,WAAW,IACfD,GAAG,CAACG,KAAK,IAAI8C,CAAC,GAAG,CAAC,IAClB,IAAI,CAACM,YAAY,CAACN,CAAC,EAAEC,CAAC,CAAC,KAAK,IAAI,IAChC,IAAI,CAACW,yBAAyB,CAAC,IAAI,CAAClC,cAAc,CAAC,CAACmC,GAAG,CAACb,CAAC,CAAC,EAC1D;QACA,OAAO,EAAE;MACX;IACF;IAEA,OAAO,KAAK,CAACD,WAAW,CAACC,CAAC,EAAEC,CAAC,CAAC;EAChC;EAEAa,YAAYA,CAACd,CAAa,EAAEC,CAAa,EAAEc,KAAwB,EAAU;IAC3E,IAAMC,IAAI,GAAG,IAAI,CAACC,WAAW,CAACjB,CAAC,EAAEC,CAAC,CAAC;IACnC,IAAIe,IAAI,EAAE;MACR,IAAQE,MAAM,GAAYF,IAAI,CAAtBE,MAAM;QAAEb,KAAK,GAAKW,IAAI,CAAdX,KAAK;MACrB,IAAIA,KAAK,IAAI,IAAI,IAAIA,KAAK,KAAK,EAAE,EAAE;QACjCrF,aAAa,CAAC+F,KAAK,CAACI,eAAe,CAAC;QACpC,OAAOJ,KAAK,CAACI,eAAe;MAC9B;MACA,IAAI,CAAAD,MAAM,aAANA,MAAM,uBAANA,MAAM,CAAEE,KAAK,KAAI,IAAI,IAAIF,MAAM,CAACE,KAAK,KAAK,EAAE,EAAE;QAChD,OAAOF,MAAM,CAACE,KAAK;MACrB;;MAEA;MACA,IAAIf,KAAK,IAAI,IAAI,EAAE;QACjB,IAAMH,MAAM,GAAG,IAAI,CAACC,YAAY,CAACH,CAAC,EAAEC,CAAC,CAAC;QACtC,IAAMlD,GAAG,GAAG,IAAI,CAACA,GAAG,CAACkD,CAAC,CAAC;QACvBjF,aAAa,CAAC+B,GAAG,CAAC;QAElB,IAAIsE,uBAAuB,GAAGnB,MAAM,CAACrE,IAAI;;QAEzC;QACA,IACEiB,WAAW,CAACC,GAAG,CAAC,IAChBA,GAAG,CAACC,WAAW,KAAK,KAAK,IACzBkD,MAAM,CAAClE,eAAe,IAAI,IAAI,EAC9B;UACAqF,uBAAuB,GAAGnB,MAAM,CAAClE,eAAe;QAClD;QAEA,OAAOX,aAAa,CAACiG,aAAa,CAChCP,KAAK,EACLM,uBAAuB,EACvBnB,MAAM,CAACvE,IAAI,EACX0E,KACF,CAAC;MACH;IACF;IAEA,OAAOU,KAAK,CAACQ,SAAS;EACxB;EAEAC,gBAAgBA,CAACxB,CAAa,EAAEC,CAAa,EAAmB;IAAA,IAAAwB,qBAAA;IAC9D,IAAMvB,MAAM,GAAG,IAAI,CAACC,YAAY,CAACH,CAAC,EAAEC,CAAC,CAAC;IAEtC,IAAMyB,iBAAiB,IAAAD,qBAAA,GAAG,IAAI,CAACxD,kBAAkB,cAAAwD,qBAAA,uBAAvBA,qBAAA,CAAyB/E,GAAG,CAACwD,MAAM,CAACvE,IAAI,CAAC;IACnE,IAAI+F,iBAAiB,IAAI,IAAI,EAAE;MAC7B,OAAOA,iBAAiB;IAC1B;IAEA,IAAM3E,GAAG,GAAG,IAAI,CAACA,GAAG,CAACkD,CAAC,CAAC;IACvB,IAAI0B,iBAAiB,GAAGzB,MAAM,CAACrE,IAAI;;IAEnC;IACA,IACEiB,WAAW,CAACC,GAAG,CAAC,IAChBA,GAAG,CAACC,WAAW,KAAK,KAAK,IACzBkD,MAAM,CAAClE,eAAe,IAAI,IAAI,EAC9B;MACA2F,iBAAiB,GAAGzB,MAAM,CAAClE,eAAe;IAC5C;IAEA,OAAOX,aAAa,CAACuG,iBAAiB,CAACD,iBAAiB,EAAEzB,MAAM,CAACvE,IAAI,CAAC;EACxE;EAEAkG,kBAAkBA,CAAC9E,GAAmB,EAAEwB,OAAwB,EAAa;IAC3E,IAAQtB,UAAU,GAAyBF,GAAG,CAAtCE,UAAU;MAAED,WAAW,GAAYD,GAAG,CAA1BC,WAAW;MAAEE,KAAK,GAAKH,GAAG,CAAbG,KAAK;IACtC,IAAM4E,YAAY,GAAG,KAAK,CAACD,kBAAkB,CAAC9E,GAAG,EAAEwB,OAAO,CAAC;IAC3D,IAAMwD,YAAY,GAAG,IAAI7D,GAAG,CAAC4D,YAAY,CAACd,IAAI,CAAC;IAC/C,IAAIhE,WAAW,EAAE;MACf,KAAK,IAAIgF,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,IAAI,CAAC5D,cAAc,CAACL,MAAM,EAAEiE,CAAC,IAAI,CAAC,EAAE;QACtD,IAAMC,GAAG,GAAGD,CAAC,IAAI9E,KAAK,GAAG,CAAC,CAAC,IAAI,IAAI,CAACkB,cAAc,CAACL,MAAM,GAAG,CAAC,CAAC;QAC9D;QACA;QACA;QACA,IAAIkE,GAAG,IAAI,IAAI,CAAC7D,cAAc,CAACL,MAAM,EAAE;UACrC,IAAMmE,QAAQ,GAAGH,YAAY,CAACrF,GAAG,CAACuF,GAAG,CAAC;UACtC,IAAIC,QAAQ,IAAI,IAAI,EAAE;YACpB5G,GAAG,CAAC6G,IAAI,CAAC,qCAAqC,EAAEH,CAAC,EAAE9E,KAAK,EAAE+E,GAAG,EAAElF,GAAG,CAAC;UACrE,CAAC,MAAM;YACLgF,YAAY,CAACK,GAAG,CAACJ,CAAC,EAAEE,QAAQ,CAAC;UAC/B;QACF;MACF;IACF;IAEA,OAAAG,aAAA,CAAAA,aAAA,KACKP,YAAY;MACfd,IAAI,EAAEe,YAAY;MAClB9E,UAAU;MACVD,WAAW;MACXE;IAAK;EAET;EAEMoF,QAAQA,CACZC,MAAmB,EACnBC,cAAwB,EAGF;IAAA,IAAAC,UAAA,GAAA3E,SAAA;MAAA4E,KAAA;IAAA,OAAAC,iBAAA;MAAA,IAAAC,qBAAA;MAAA,IAFtBC,WAA+D,GAAAJ,UAAA,CAAA1E,MAAA,QAAA0E,UAAA,QAAAnF,SAAA,GAAAmF,UAAA,MAAGpC,KAAK,IACrEA,KAAK;MAEPrF,aAAa,CAAC0H,KAAI,CAACI,QAAQ,CAAC;MAC5B9H,aAAa,CAAC0H,KAAI,CAACK,YAAY,CAAC;MAChC,IAAMxE,OAAO,IAAAqE,qBAAA,GAAGF,KAAI,CAACI,QAAQ,CAACvE,OAAO,cAAAqE,qBAAA,cAAAA,qBAAA,GAAIF,KAAI,CAACnE,OAAO;MACrD,IAAMyE,MAAM,GAAG,EAAE;MAEjB,IAAIR,cAAc,IAAI,IAAI,IAAIA,cAAc,EAAE;QAC5CQ,MAAM,CAACC,IAAI,CAAC1E,OAAO,CAACO,GAAG,CAACF,CAAC,IAAIA,CAAC,CAACjD,IAAI,CAAC,CAAC;MACvC;MAEA,IAAMuH,aAAa,GAAG,IAAItI,SAAS,CACjC,CAAC,EACD8H,KAAI,CAACK,YAAY,CAACI,MAAM,EACxB5E,OAAO,CAACR,MAAM,EACd2E,KAAI,CAACK,YAAY,CAACI,MAAM,GAAGT,KAAI,CAACK,YAAY,CAACK,IAAI,CAACrF,MAAM,GAAG,CAC7D,CAAC;MAED,KAAK,IAAIiE,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGO,MAAM,CAACxE,MAAM,EAAEiE,CAAC,IAAI,CAAC,EAAE;QACzC,IAAMqB,YAAY,GAAGzI,SAAS,CAACyI,YAAY,CAACH,aAAa,EAAEX,MAAM,CAACP,CAAC,CAAC,CAAC;QAErEhH,aAAa,CAACqI,YAAY,CAAC;QAC3BrI,aAAa,CAACqI,YAAY,CAACC,QAAQ,CAAC;QACpCtI,aAAa,CAACqI,YAAY,CAACE,MAAM,CAAC;QAElC,KAAK,IAAIC,CAAC,GAAGH,YAAY,CAACC,QAAQ,EAAEE,CAAC,IAAIH,YAAY,CAACE,MAAM,EAAEC,CAAC,IAAI,CAAC,EAAE;UACpE,IAAMC,SAAS,GAAG,EAAE;UACpB,IAAMC,WAAW,GACfhB,KAAI,CAACK,YAAY,CAACK,IAAI,CAACI,CAAC,GAAGd,KAAI,CAACK,YAAY,CAACI,MAAM,CAAC;UACtDnI,aAAa,CAACqI,YAAY,CAACM,WAAW,CAAC;UACvC3I,aAAa,CAACqI,YAAY,CAACO,SAAS,CAAC;UACrC,KACE,IAAIhF,CAAC,GAAGyE,YAAY,CAACM,WAAW,EAChC/E,CAAC,IAAIyE,YAAY,CAACO,SAAS,EAC3BhF,CAAC,IAAI,CAAC,EACN;YAAA,IAAAiF,qBAAA;YACAJ,SAAS,CAACR,IAAI,CACZJ,WAAW,EAAAgB,qBAAA,GAACH,WAAW,CAAC1C,IAAI,CAACtE,GAAG,CAACkC,CAAC,CAAC,cAAAiF,qBAAA,uBAAvBA,qBAAA,CAAyBxD,KAAK,EAAEqC,KAAI,CAACnE,OAAO,CAACK,CAAC,CAAC,CAC7D,CAAC;UACH;UACAoE,MAAM,CAACC,IAAI,CAACQ,SAAS,CAAC;QACxB;MACF;MAEA,OAAOT,MAAM;IAAC;EAChB;EAEA,IAAIzE,OAAOA,CAAA,EAAoB;IAC7B,OAAO,IAAI,CAACuF,gBAAgB,CAAC,IAAI,CAAC1F,cAAc,EAAE,KAAK,CAACG,OAAO,CAAC;EAClE;EAEA,IAAIE,iBAAiBA,CAAA,EAA6B;IAChD,OAAO,IAAI,CAACD,4BAA4B,GACpC,IAAI,CAACpB,KAAK,CAACqB,iBAAiB,GAC5BxD,WAAW;EACjB;EAEA,IAAIyD,cAAcA,CAAA,EAA6B;IAC7C,OAAO,IAAI,CAACqF,qBAAqB,CAC/B,IAAI,CAAC3F,cAAc,EACnB,IAAI,CAAChB,KAAK,CAACsB,cACb,CAAC;EACH;EAEAsF,aAAaA,CAAC9D,MAAkB,EAAEnD,GAAe,EAAY;IAC3D,IAAImD,MAAM,IAAI,IAAI,CAAC9B,cAAc,CAACL,MAAM,EAAE;MACxC,OAAO;QAAEmC,MAAM;QAAEnD;MAAI,CAAC;IACxB;IACA,OAAO;MAAEmD,MAAM,EAAE,IAAI,CAAC+D,wBAAwB,CAAC/D,MAAM,EAAEnD,GAAG,CAAC;MAAEA;IAAI,CAAC;EACpE;EAEAoD,YAAYA,CAACD,MAAkB,EAAEnD,GAAe,EAAiB;IAC/D,IAAImD,MAAM,IAAI,IAAI,CAAC9B,cAAc,CAACL,MAAM,EAAE;MACxC,OAAO,KAAK,CAACoC,YAAY,CAACD,MAAM,EAAEnD,GAAG,CAAC;IACxC;IACA,OAAO,IAAI,CAACwB,OAAO,CAAC,IAAI,CAAC0F,wBAAwB,CAAC/D,MAAM,EAAEnD,GAAG,CAAC,CAAC;EACjE;;EAEA;AACF;AACA;AACA;EACUkH,wBAAwBA,CAC9B/D,MAAkB,EAClBnD,GAAe,EACH;IACZ,IAAMG,KAAK,GAAG,IAAI,CAACgH,WAAW,CAACnH,GAAG,CAAC;IACnC,OAAOoH,IAAI,CAACC,GAAG,CAAClE,MAAM,GAAGhD,KAAK,EAAE,IAAI,CAACwB,cAAc,CAACX,MAAM,GAAG,CAAC,CAAC;EACjE;EAEAsG,mBAAmBA,CAACnE,MAAkB,EAA2B;IAC/D,IAAIA,MAAM,IAAI,IAAI,CAAC9B,cAAc,CAACL,MAAM,EAAE;MACxC,OAAO,KAAK,CAACsG,mBAAmB,CAACnE,MAAM,CAAC;IAC1C;IACA;IACA;IACA,OAAO,CAAC,IAAI,CAAC9B,cAAc,CAACL,MAAM,EAAE,IAAI,CAACW,cAAc,CAACX,MAAM,CAAC;EACjE;EAEA,IAAIV,WAAWA,CAAA,EAA0C;IACvD,IAAIF,iBAAiB,CAAC,IAAI,CAACC,KAAK,CAAC,EAAE;MACjC,OAAO,IAAI,CAACA,KAAK,CAACC,WAAW;IAC/B;IACA,OAAOC,SAAS;EAClB;EAEA,IAAIgH,iBAAiBA,CAAA,EAAY;IAC/B,OAAO,IAAI;EACb;EAEA,IAAI9F,4BAA4BA,CAAA,EAAY;IAC1C;MACE;MACA;MACA,IAAI,CAACpB,KAAK,CAACqB,iBAAiB,KAAKnB;IAAS;EAE9C;EAEA,IAAIiH,oBAAoBA,CAAA,EAAY;IAClC,OAAO,IAAI,CAACnH,KAAK,CAACoH,SAAS,KAAKlH,SAAS;EAC3C;EAEA,IAAImH,uBAAuBA,CAAA,EAAY;IACrC,OAAO,KAAK;EACd;EAEA,IAAIC,0BAA0BA,CAAA,EAAY;IACxC,OAAO,IAAI;EACb;EAEA,IAAIC,yBAAyBA,CAAA,EAAY;IACvC,OAAO,KAAK;EACd;EAEA,IAAIC,YAAYA,CAAA,EAAY;IAC1B,OAAO,KAAK;EACd;EAEAC,YAAYA,CAACC,WAAuB,EAAW;IAC7C,OAAO,IAAI,CAACC,4BAA4B,CACtC,IAAI,CAACxG,OAAO,EACZ,IAAI,CAACC,4BAA4B,EACjC,IAAI,CAACC,iBAAiB,EACtB,IAAI,CAACC,cAAc,EACnB,IAAI,CAACN,cACP,CAAC,CAACyC,GAAG,CAACiE,WAAW,CAAC;EACpB;EAEAE,eAAeA,CAAC9E,MAAkB,EAAW;IAC3C,OAAOA,MAAM,IAAI,IAAI,CAACxB,cAAc,CAACX,MAAM;EAC7C;EAEAkH,eAAeA,CAAChF,CAAa,EAAW;IAAA,IAAAiF,gBAAA;IACtC,IAAMnI,GAAG,GAAG,IAAI,CAACA,GAAG,CAACkD,CAAC,CAAC;IACvB,QAAAiF,gBAAA,GAAOnI,GAAG,aAAHA,GAAG,uBAAHA,GAAG,CAAEC,WAAW,cAAAkI,gBAAA,cAAAA,gBAAA,GAAI,KAAK;EAClC;EAEAC,aAAaA,CAAClF,CAAa,EAAW;IAAA,IAAAmF,eAAA;IACpC,IAAMrI,GAAG,GAAG,IAAI,CAACA,GAAG,CAACkD,CAAC,CAAC;IACvB,QAAAmF,eAAA,GAAOrI,GAAG,aAAHA,GAAG,uBAAHA,GAAG,CAAEE,UAAU,cAAAmI,eAAA,cAAAA,eAAA,GAAI,KAAK;EACjC;EAEAC,cAAcA,CACZpF,CAAa,EACbhD,UAAmB,EAEb;IAAA,IADNqI,iBAAiB,GAAAxH,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAR,SAAA,GAAAQ,SAAA,MAAG,KAAK;IAEzB,IAAI,IAAI,CAACyG,oBAAoB,EAAE;MAC7B,IAAI,CAACnH,KAAK,CAACmI,WAAW,CAACtF,CAAC,EAAEhD,UAAU,EAAEqI,iBAAiB,CAAC;IAC1D,CAAC,MAAM;MACL,IAAI,CAAClI,KAAK,CAACmI,WAAW,CAACtF,CAAC,EAAEhD,UAAU,CAAC;IACvC;EACF;EAEAuH,SAASA,CAAA,EAAS;IAChB,IAAI,IAAI,CAACpH,KAAK,CAACoH,SAAS,IAAI,IAAI,EAAE;MAChC,IAAI,CAACpH,KAAK,CAACoH,SAAS,CAAC,CAAC;IACxB;EACF;EAEAgB,WAAWA,CAAA,EAAS;IAClB,IAAI,IAAI,CAACpI,KAAK,CAACoI,WAAW,IAAI,IAAI,EAAE;MAClC,IAAI,CAACpI,KAAK,CAACoI,WAAW,CAAC,CAAC;IAC1B;EACF;EAEAtB,WAAWA,CAACjE,CAAa,EAAc;IAAA,IAAAwF,UAAA;IACrC,IAAM1I,GAAG,GAAG,IAAI,CAACA,GAAG,CAACkD,CAAC,CAAC;IACvB,OAAO,EAAAwF,UAAA,GAAC1I,GAAG,aAAHA,GAAG,uBAAHA,GAAG,CAAEG,KAAK,cAAAuI,UAAA,cAAAA,UAAA,GAAI,CAAC,IAAI,CAAC;EAC9B;EAsDAC,mBAAmBA,CAACnH,OAAqB,EAAQ;IAC/C,IAAIA,OAAO,CAACR,MAAM,GAAG,CAAC,EAAE;MACtB,MAAM,IAAIxB,KAAK,CAAC,uCAAuC,CAAC;IAC1D;EACF;AACF;AAEA,eAAemB,sBAAsB","ignoreList":[]}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import type { dh as DhType } from '@deephaven/jsapi-types';
|
|
2
|
+
import type { GridRange, ModelIndex, VisibleIndex } from '@deephaven/grid';
|
|
3
|
+
/** Model that exposes key-column metadata for selection purposes. */
|
|
4
|
+
export interface KeyedGridModel {
|
|
5
|
+
/** Model column indices forming the row key for selection purposes. Empty for non-keyed tables. */
|
|
6
|
+
readonly selectionKeyColumnIndices: readonly ModelIndex[];
|
|
7
|
+
/** True if each key uniquely identifies at most one row. */
|
|
8
|
+
readonly hasUniqueSelectionKeys: boolean;
|
|
9
|
+
/** Current viewport row bounds; used to clamp gesture-key enumeration to visible rows. */
|
|
10
|
+
readonly viewport: {
|
|
11
|
+
top: number;
|
|
12
|
+
bottom: number;
|
|
13
|
+
} | null;
|
|
14
|
+
/**
|
|
15
|
+
* True when `row` participates in keyed selection. False for synthetic
|
|
16
|
+
* rows (totals / aggregation floating rows) whose column values are
|
|
17
|
+
* aggregates rather than real row keys.
|
|
18
|
+
*/
|
|
19
|
+
isKeyableRow: (row: VisibleIndex) => boolean;
|
|
20
|
+
/**
|
|
21
|
+
* Snapshots rows matching the given key values.
|
|
22
|
+
* For invertedSelection=true, snapshots all rows EXCEPT those matching the keys.
|
|
23
|
+
* For invertedSelection=true with empty keyValues, snapshots the entire table.
|
|
24
|
+
*
|
|
25
|
+
* @param columns The columns to include in the snapshot.
|
|
26
|
+
* @param keyValues A map of key column names to their corresponding values.
|
|
27
|
+
* @param invertedSelection Whether to invert the selection.
|
|
28
|
+
* @param includeHeaders Whether to include the headers in the snapshot.
|
|
29
|
+
* @param formatValue Function for formatting the raw value into a string.
|
|
30
|
+
* @returns A promise that resolves to a 2D array of the snapshot data.
|
|
31
|
+
*/
|
|
32
|
+
snapshotByKeys: (columns: readonly DhType.Column[], keyValues: ReadonlyMap<string, readonly unknown[]>, invertedSelection: boolean, includeHeaders?: boolean, formatValue?: (value: unknown, column: DhType.Column) => unknown, maxRows?: number | null) => Promise<unknown[][]>;
|
|
33
|
+
/**
|
|
34
|
+
* Text version of snapshotByKeys: columns tab-separated, rows newline-separated.
|
|
35
|
+
* @param columns The columns to include in the snapshot.
|
|
36
|
+
* @param keyValues A map of key column names to their corresponding values.
|
|
37
|
+
* @param invertedSelection Whether to invert the selection.
|
|
38
|
+
* @param includeHeaders Whether to include the headers in the snapshot.
|
|
39
|
+
* @param formatValue Function for formatting the raw value into a string.
|
|
40
|
+
* @returns A promise that resolves to a string representation of the snapshot.
|
|
41
|
+
*/
|
|
42
|
+
textSnapshotByKeys: (columns: readonly DhType.Column[], keyValues: ReadonlyMap<string, readonly unknown[]>, invertedSelection: boolean, includeHeaders?: boolean, formatValue?: (value: unknown, column: DhType.Column, row?: DhType.Row) => string, maxRows?: number | null) => Promise<string>;
|
|
43
|
+
/**
|
|
44
|
+
* Returns a filtered copy of the table containing only the rows identified by
|
|
45
|
+
* `keyValues` (or all rows except those, when `invertedSelection` is true).
|
|
46
|
+
* Ownership transfers to the caller; pass to `TableSaver` and it will close it.
|
|
47
|
+
*/
|
|
48
|
+
createFilteredByKeysTable: (keyValues: ReadonlyMap<string, readonly unknown[]>, invertedSelection: boolean) => Promise<DhType.Table>;
|
|
49
|
+
/**
|
|
50
|
+
* Fetches key values for the union of `ranges`. Used to resolve pending
|
|
51
|
+
* shift-click / programmatic selections that span out-of-viewport rows.
|
|
52
|
+
* Implementations may fetch a bounding envelope and filter internally; the
|
|
53
|
+
* returned map contains only rows within `ranges`.
|
|
54
|
+
*/
|
|
55
|
+
fetchKeyValuesForRowRanges: (ranges: readonly GridRange[]) => Promise<ReadonlyMap<string, readonly unknown[]>>;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Checks if the given model is a KeyedGridModel.
|
|
59
|
+
* @param model The model to check.
|
|
60
|
+
* @returns True if the model is a KeyedGridModel, false otherwise.
|
|
61
|
+
*/
|
|
62
|
+
export declare function isKeyedGridModel(model: unknown): model is KeyedGridModel;
|
|
63
|
+
//# sourceMappingURL=KeyedGridModel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"KeyedGridModel.d.ts","sourceRoot":"","sources":["../src/KeyedGridModel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE3E,qEAAqE;AACrE,MAAM,WAAW,cAAc;IAC7B,mGAAmG;IACnG,QAAQ,CAAC,yBAAyB,EAAE,SAAS,UAAU,EAAE,CAAC;IAC1D,4DAA4D;IAC5D,QAAQ,CAAC,sBAAsB,EAAE,OAAO,CAAC;IACzC,0FAA0F;IAC1F,QAAQ,CAAC,QAAQ,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAE1D;;;;OAIG;IACH,YAAY,EAAE,CAAC,GAAG,EAAE,YAAY,KAAK,OAAO,CAAC;IAE7C;;;;;;;;;;;OAWG;IACH,cAAc,EAAE,CACd,OAAO,EAAE,SAAS,MAAM,CAAC,MAAM,EAAE,EACjC,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,OAAO,EAAE,CAAC,EAClD,iBAAiB,EAAE,OAAO,EAC1B,cAAc,CAAC,EAAE,OAAO,EACxB,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,KAAK,OAAO,EAChE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,KACpB,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAE1B;;;;;;;;OAQG;IACH,kBAAkB,EAAE,CAClB,OAAO,EAAE,SAAS,MAAM,CAAC,MAAM,EAAE,EACjC,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,OAAO,EAAE,CAAC,EAClD,iBAAiB,EAAE,OAAO,EAC1B,cAAc,CAAC,EAAE,OAAO,EACxB,WAAW,CAAC,EAAE,CACZ,KAAK,EAAE,OAAO,EACd,MAAM,EAAE,MAAM,CAAC,MAAM,EACrB,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,KACb,MAAM,EACX,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,KACpB,OAAO,CAAC,MAAM,CAAC,CAAC;IAErB;;;;OAIG;IACH,yBAAyB,EAAE,CACzB,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,OAAO,EAAE,CAAC,EAClD,iBAAiB,EAAE,OAAO,KACvB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAE3B;;;;;OAKG;IACH,0BAA0B,EAAE,CAC1B,MAAM,EAAE,SAAS,SAAS,EAAE,KACzB,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE,SAAS,OAAO,EAAE,CAAC,CAAC,CAAC;CACvD;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,cAAc,CAIxE"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/** Model that exposes key-column metadata for selection purposes. */
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Checks if the given model is a KeyedGridModel.
|
|
5
|
+
* @param model The model to check.
|
|
6
|
+
* @returns True if the model is a KeyedGridModel, false otherwise.
|
|
7
|
+
*/
|
|
8
|
+
export function isKeyedGridModel(model) {
|
|
9
|
+
var indices = model.selectionKeyColumnIndices;
|
|
10
|
+
return indices != null && indices.length > 0;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=KeyedGridModel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"KeyedGridModel.js","names":["isKeyedGridModel","model","indices","selectionKeyColumnIndices","length"],"sources":["../src/KeyedGridModel.ts"],"sourcesContent":["import type { dh as DhType } from '@deephaven/jsapi-types';\nimport type { GridRange, ModelIndex, VisibleIndex } from '@deephaven/grid';\n\n/** Model that exposes key-column metadata for selection purposes. */\nexport interface KeyedGridModel {\n /** Model column indices forming the row key for selection purposes. Empty for non-keyed tables. */\n readonly selectionKeyColumnIndices: readonly ModelIndex[];\n /** True if each key uniquely identifies at most one row. */\n readonly hasUniqueSelectionKeys: boolean;\n /** Current viewport row bounds; used to clamp gesture-key enumeration to visible rows. */\n readonly viewport: { top: number; bottom: number } | null;\n\n /**\n * True when `row` participates in keyed selection. False for synthetic\n * rows (totals / aggregation floating rows) whose column values are\n * aggregates rather than real row keys.\n */\n isKeyableRow: (row: VisibleIndex) => boolean;\n\n /**\n * Snapshots rows matching the given key values.\n * For invertedSelection=true, snapshots all rows EXCEPT those matching the keys.\n * For invertedSelection=true with empty keyValues, snapshots the entire table.\n *\n * @param columns The columns to include in the snapshot.\n * @param keyValues A map of key column names to their corresponding values.\n * @param invertedSelection Whether to invert the selection.\n * @param includeHeaders Whether to include the headers in the snapshot.\n * @param formatValue Function for formatting the raw value into a string.\n * @returns A promise that resolves to a 2D array of the snapshot data.\n */\n snapshotByKeys: (\n columns: readonly DhType.Column[],\n keyValues: ReadonlyMap<string, readonly unknown[]>,\n invertedSelection: boolean,\n includeHeaders?: boolean,\n formatValue?: (value: unknown, column: DhType.Column) => unknown,\n maxRows?: number | null\n ) => Promise<unknown[][]>;\n\n /**\n * Text version of snapshotByKeys: columns tab-separated, rows newline-separated.\n * @param columns The columns to include in the snapshot.\n * @param keyValues A map of key column names to their corresponding values.\n * @param invertedSelection Whether to invert the selection.\n * @param includeHeaders Whether to include the headers in the snapshot.\n * @param formatValue Function for formatting the raw value into a string.\n * @returns A promise that resolves to a string representation of the snapshot.\n */\n textSnapshotByKeys: (\n columns: readonly DhType.Column[],\n keyValues: ReadonlyMap<string, readonly unknown[]>,\n invertedSelection: boolean,\n includeHeaders?: boolean,\n formatValue?: (\n value: unknown,\n column: DhType.Column,\n row?: DhType.Row\n ) => string,\n maxRows?: number | null\n ) => Promise<string>;\n\n /**\n * Returns a filtered copy of the table containing only the rows identified by\n * `keyValues` (or all rows except those, when `invertedSelection` is true).\n * Ownership transfers to the caller; pass to `TableSaver` and it will close it.\n */\n createFilteredByKeysTable: (\n keyValues: ReadonlyMap<string, readonly unknown[]>,\n invertedSelection: boolean\n ) => Promise<DhType.Table>;\n\n /**\n * Fetches key values for the union of `ranges`. Used to resolve pending\n * shift-click / programmatic selections that span out-of-viewport rows.\n * Implementations may fetch a bounding envelope and filter internally; the\n * returned map contains only rows within `ranges`.\n */\n fetchKeyValuesForRowRanges: (\n ranges: readonly GridRange[]\n ) => Promise<ReadonlyMap<string, readonly unknown[]>>;\n}\n\n/**\n * Checks if the given model is a KeyedGridModel.\n * @param model The model to check.\n * @returns True if the model is a KeyedGridModel, false otherwise.\n */\nexport function isKeyedGridModel(model: unknown): model is KeyedGridModel {\n const indices = (model as unknown as KeyedGridModel)\n .selectionKeyColumnIndices;\n return indices != null && indices.length > 0;\n}\n"],"mappings":"AAGA;;AAgFA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASA,gBAAgBA,CAACC,KAAc,EAA2B;EACxE,IAAMC,OAAO,GAAID,KAAK,CACnBE,yBAAyB;EAC5B,OAAOD,OAAO,IAAI,IAAI,IAAIA,OAAO,CAACE,MAAM,GAAG,CAAC;AAC9C","ignoreList":[]}
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
import { type CommitGestureOptions, type GestureExtendOptions, type GridRange, type GridRangeIndex, type SELECTION_DIRECTION, type Selection, type VisibleIndex } from '@deephaven/grid';
|
|
2
|
+
import type IrisGridModel from './IrisGridModel';
|
|
3
|
+
import type { KeyedGridModel } from './KeyedGridModel';
|
|
4
|
+
export type GetKeyedModel = () => IrisGridModel & KeyedGridModel;
|
|
5
|
+
/**
|
|
6
|
+
* Serializes key-column values to a stable string for use as a Map/Set key.
|
|
7
|
+
* JSON.stringify encodes NaN, Infinity, and -Infinity as null, so we
|
|
8
|
+
* substitute sentinel strings to preserve their distinct identities.
|
|
9
|
+
*/
|
|
10
|
+
export declare function serializeKeyValues(values: readonly unknown[]): string;
|
|
11
|
+
/**
|
|
12
|
+
* Configuration for a `KeyedSelection`. `getModel` is required; every
|
|
13
|
+
* other field defaults to an "empty" value (`null`, an empty set/map, or
|
|
14
|
+
* `false` where appropriate).
|
|
15
|
+
*/
|
|
16
|
+
export type KeyedSelectionOptions = {
|
|
17
|
+
/**
|
|
18
|
+
* Deferred lookup for the current `KeyedGridModel`. Passed as a closure
|
|
19
|
+
* (not a direct reference) so this Selection always reads the model
|
|
20
|
+
* currently on `Grid.props.model` — surviving prop swaps without holding
|
|
21
|
+
* a stale reference.
|
|
22
|
+
*/
|
|
23
|
+
getModel: GetKeyedModel;
|
|
24
|
+
/**
|
|
25
|
+
* Serialized keys that identify the committed selection. Interpreted as
|
|
26
|
+
* an inclusion set by default; as an exclusion set when
|
|
27
|
+
* `invertedSelection` is true.
|
|
28
|
+
*/
|
|
29
|
+
selectedKeys?: ReadonlySet<string>;
|
|
30
|
+
/**
|
|
31
|
+
* Ranges from the in-progress mouse gesture. Cleared on commit; used to
|
|
32
|
+
* render an overlay before the gesture settles.
|
|
33
|
+
*/
|
|
34
|
+
overlayRanges?: readonly GridRange[];
|
|
35
|
+
/**
|
|
36
|
+
* When true, `selectedKeys` is an exclusion set: all rows are selected
|
|
37
|
+
* EXCEPT those in the set.
|
|
38
|
+
*/
|
|
39
|
+
invertedSelection?: boolean;
|
|
40
|
+
/**
|
|
41
|
+
* Raw key-column values for each committed key; used for server-side
|
|
42
|
+
* filter construction (e.g. `buildKeyFilter`).
|
|
43
|
+
*/
|
|
44
|
+
selectedKeyValues?: ReadonlyMap<string, readonly unknown[]>;
|
|
45
|
+
/**
|
|
46
|
+
* When non-null, limits snapshot results to this many rows via the
|
|
47
|
+
* viewport subscription.
|
|
48
|
+
*/
|
|
49
|
+
maxRows?: number | null;
|
|
50
|
+
/**
|
|
51
|
+
* Ranges whose key values are being resolved asynchronously by
|
|
52
|
+
* `IrisGrid.resolveKeyedSelection`. Empty array means no resolution is in progress.
|
|
53
|
+
*/
|
|
54
|
+
pendingRanges?: readonly GridRange[];
|
|
55
|
+
/**
|
|
56
|
+
* Serialized key of the shift-click / drag anchor. Lets `getGestureAnchor`
|
|
57
|
+
* find where the anchor row moved to after a tick, so shift-click extends
|
|
58
|
+
* from the row the user actually clicked, not from a stale row index.
|
|
59
|
+
*/
|
|
60
|
+
anchorKey?: string | null;
|
|
61
|
+
/** Anchor row at click time. Fallback when the anchor key is out of viewport. */
|
|
62
|
+
anchorRow?: GridRangeIndex;
|
|
63
|
+
/** Serialized key of the row the cursor was set on; null when the cursor is unset. */
|
|
64
|
+
cursorKey?: string | null;
|
|
65
|
+
/** Row hint for the cursor; used when `cursorKey` is not in the current viewport. */
|
|
66
|
+
cursorRowHint?: VisibleIndex | null;
|
|
67
|
+
/** Cursor column; not key-tracked because columns do not drift with row ticks. */
|
|
68
|
+
cursorColumn?: VisibleIndex | null;
|
|
69
|
+
/** Serialized key of the row the shift/drag endpoint was set on; null when unset. */
|
|
70
|
+
selectionEndKey?: string | null;
|
|
71
|
+
/** Row hint for the endpoint; used when `selectionEndKey` is not in the current viewport. */
|
|
72
|
+
selectionEndRowHint?: VisibleIndex | null;
|
|
73
|
+
/** Endpoint column; not key-tracked because columns do not drift with row ticks. */
|
|
74
|
+
selectionEndColumn?: VisibleIndex | null;
|
|
75
|
+
};
|
|
76
|
+
/**
|
|
77
|
+
* Immutable `Selection` for keyed tables: identifies rows by their
|
|
78
|
+
* serialized key-column values rather than raw row indices, so the
|
|
79
|
+
* selection survives ticks that shuffle row positions.
|
|
80
|
+
*
|
|
81
|
+
* Rows sharing the same key highlight together (see `isRowSelected`).
|
|
82
|
+
* When `invertedSelection` is true, `selectedKeys` is treated as an
|
|
83
|
+
* exclusion set (all rows selected except those keys).
|
|
84
|
+
*/
|
|
85
|
+
export declare class KeyedSelection implements Selection {
|
|
86
|
+
static empty(getModel: GetKeyedModel): KeyedSelection;
|
|
87
|
+
private readonly getModel;
|
|
88
|
+
readonly selectedKeys: ReadonlySet<string>;
|
|
89
|
+
private readonly overlayRanges;
|
|
90
|
+
readonly invertedSelection: boolean;
|
|
91
|
+
readonly selectedKeyValues: ReadonlyMap<string, readonly unknown[]>;
|
|
92
|
+
readonly maxRows: number | null;
|
|
93
|
+
readonly pendingRanges: readonly GridRange[];
|
|
94
|
+
private readonly anchorKey;
|
|
95
|
+
private readonly anchorRow;
|
|
96
|
+
private readonly cursorKey;
|
|
97
|
+
private readonly cursorRowHint;
|
|
98
|
+
readonly cursorColumn: VisibleIndex | null;
|
|
99
|
+
private readonly selectionEndKey;
|
|
100
|
+
private readonly selectionEndRowHint;
|
|
101
|
+
readonly selectionEndColumn: VisibleIndex | null;
|
|
102
|
+
/** Keys derived from the current overlay range's viewport-visible rows. */
|
|
103
|
+
private readonly gestureKeys;
|
|
104
|
+
constructor(options: KeyedSelectionOptions);
|
|
105
|
+
/**
|
|
106
|
+
* Returns a copy of this selection with the given fields overridden.
|
|
107
|
+
* Unspecified fields carry through; pass `null` (or an empty
|
|
108
|
+
* set/map/false) to explicitly clear a field.
|
|
109
|
+
*/
|
|
110
|
+
private copyWith;
|
|
111
|
+
/**
|
|
112
|
+
* Returns both the serialized key and the raw values for a visible row, or
|
|
113
|
+
* `null` when the row is not keyable (e.g. totals / aggregation floating
|
|
114
|
+
* rows whose column values are aggregates, not real row keys).
|
|
115
|
+
*/
|
|
116
|
+
private getRowKeyData;
|
|
117
|
+
isEmpty(): boolean;
|
|
118
|
+
describe(): string;
|
|
119
|
+
isCellSelected(_column: VisibleIndex, row: VisibleIndex): boolean;
|
|
120
|
+
isRowSelected(row: VisibleIndex): boolean;
|
|
121
|
+
isColumnSelected(_column: VisibleIndex): boolean;
|
|
122
|
+
getNextCursorInDirection(current: {
|
|
123
|
+
row: GridRangeIndex;
|
|
124
|
+
column: GridRangeIndex;
|
|
125
|
+
}, direction: SELECTION_DIRECTION): {
|
|
126
|
+
row: GridRangeIndex;
|
|
127
|
+
column: GridRangeIndex;
|
|
128
|
+
} | null;
|
|
129
|
+
private getCursorLandingCell;
|
|
130
|
+
withCursor(row: VisibleIndex | null, column: VisibleIndex | null): KeyedSelection;
|
|
131
|
+
withSelectionEnd(row: VisibleIndex | null, column: VisibleIndex | null): KeyedSelection;
|
|
132
|
+
/**
|
|
133
|
+
* Replaces the transient overlay ranges (mid-gesture preview) with the
|
|
134
|
+
* given ranges. Preserves the gesture anchor so mid-drag range updates
|
|
135
|
+
* don't clobber the shift-click origin.
|
|
136
|
+
*
|
|
137
|
+
* When `isReplacing` is true the caller intends the overlay to replace
|
|
138
|
+
* the current committed selection (drag / shift+click); previously
|
|
139
|
+
* committed keys are dropped so the commit uses the overlay as a fresh
|
|
140
|
+
* selection. Otherwise the committed keys are kept, letting a subsequent
|
|
141
|
+
* `commitGesture` fold the overlay into the existing set.
|
|
142
|
+
*/
|
|
143
|
+
private withMouseGestureRanges;
|
|
144
|
+
/**
|
|
145
|
+
* Sets the gesture anchor (extend-from position for shift-click and
|
|
146
|
+
* keyboard extend) to the row's key. Passing `null` clears the anchor.
|
|
147
|
+
*/
|
|
148
|
+
private withGestureAnchor;
|
|
149
|
+
/**
|
|
150
|
+
* The current `{row, column}` of the gesture anchor, or `null` if none is
|
|
151
|
+
* set. Because `KeyedSelection` tracks the anchor by serialized key, the
|
|
152
|
+
* anchor's visible row may drift as the viewport scrolls. Resolves the
|
|
153
|
+
* key against the current viewport when possible; falls back to the
|
|
154
|
+
* click-time row hint (`anchorRow`) when the key has scrolled out. Returns
|
|
155
|
+
* `null` only when neither is set.
|
|
156
|
+
*/
|
|
157
|
+
private getGestureAnchor;
|
|
158
|
+
/**
|
|
159
|
+
* Returns the visible row of `key`, or `null` if it's not in the viewport.
|
|
160
|
+
* When multiple rows share the key (non-unique key columns), prefers the one
|
|
161
|
+
* closest to `hint` so we track the row the caller last saw the key at.
|
|
162
|
+
*/
|
|
163
|
+
private findKeyInViewport;
|
|
164
|
+
get cursorRow(): VisibleIndex | null;
|
|
165
|
+
get selectionEndRow(): VisibleIndex | null;
|
|
166
|
+
withGestureExtend(cursor: {
|
|
167
|
+
row: GridRangeIndex;
|
|
168
|
+
column: GridRangeIndex;
|
|
169
|
+
}, opts: GestureExtendOptions): KeyedSelection;
|
|
170
|
+
commitGesture(lastCommitted: Selection, opts: CommitGestureOptions): KeyedSelection;
|
|
171
|
+
clear(): KeyedSelection;
|
|
172
|
+
trimmed(): KeyedSelection;
|
|
173
|
+
withCommittedRanges(ranges: readonly GridRange[], anchor?: {
|
|
174
|
+
row: GridRangeIndex;
|
|
175
|
+
column: GridRangeIndex;
|
|
176
|
+
}): KeyedSelection;
|
|
177
|
+
private installCommittedRanges;
|
|
178
|
+
selectAll(): KeyedSelection;
|
|
179
|
+
truncate(maxRows: number): KeyedSelection;
|
|
180
|
+
/**
|
|
181
|
+
* Builds a fully-resolved selection from async-fetched key values merged with the current selection, clearing pendingRanges.
|
|
182
|
+
*/
|
|
183
|
+
resolve(keyValues: ReadonlyMap<string, readonly unknown[]>): KeyedSelection;
|
|
184
|
+
/**
|
|
185
|
+
* Returns the exact committed row count when each key maps to one row,
|
|
186
|
+
* or null when the count is unknown (non-unique keys or pending resolution).
|
|
187
|
+
* For inverted selections the count is approximate on ticking tables.
|
|
188
|
+
*/
|
|
189
|
+
getUniqueRowCount(): number | null;
|
|
190
|
+
/** Returns a new selection with the given row's key toggled. */
|
|
191
|
+
withToggledRow(row: VisibleIndex): KeyedSelection;
|
|
192
|
+
}
|
|
193
|
+
export default KeyedSelection;
|
|
194
|
+
//# sourceMappingURL=KeyedSelection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"KeyedSelection.d.ts","sourceRoot":"","sources":["../src/KeyedSelection.ts"],"names":[],"mappings":"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"}
|