@deephaven/iris-grid 0.41.3 → 0.41.4
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/IrisGridRenderer.d.ts.map +1 -1
- package/dist/IrisGridRenderer.js +1 -2
- package/dist/IrisGridRenderer.js.map +1 -1
- package/dist/IrisGridTableModelTemplate.d.ts +2 -2
- package/dist/IrisGridTableModelTemplate.d.ts.map +1 -1
- package/dist/IrisGridTableModelTemplate.js +15 -3
- package/dist/IrisGridTableModelTemplate.js.map +1 -1
- package/dist/IrisGridTreeTableModel.d.ts +1 -0
- package/dist/IrisGridTreeTableModel.d.ts.map +1 -1
- package/dist/IrisGridTreeTableModel.js +5 -0
- package/dist/IrisGridTreeTableModel.js.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IrisGridRenderer.d.ts","sourceRoot":"","sources":["../src/IrisGridRenderer.ts"],"names":[],"mappings":"AAGA,OAAO,EAML,cAAc,EACf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,UAAU,EACV,WAAW,EACX,cAAc,EACd,YAAY,EACZ,eAAe,EACf,aAAa,EAEb,YAAY,EACb,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAc,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAEjE,OAAO,EACL,yBAAyB,EACzB,sBAAsB,EACtB,cAAc,EACd,WAAW,EACZ,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAa5C,MAAM,MAAM,mBAAmB,GAAG,eAAe,GAAG;IAClD,KAAK,EAAE,aAAa,CAAC;IACrB,KAAK,EAAE,iBAAiB,CAAC;IACzB,iBAAiB,EAAE,cAAc,CAAC;IAClC,iBAAiB,EAAE,OAAO,CAAC;IAC3B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,WAAW,EAAE,WAAW,CAAC;IACzB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,eAAe,EAAE,yBAAyB,CAAC;IAC3C,YAAY,EAAE,sBAAsB,CAAC;IACrC,WAAW,EAAE,OAAO,CAAC;CACtB,CAAC;AACF;;KAEK;AACL,cAAM,gBAAiB,SAAQ,YAAY;IACzC,MAAM,CAAC,aAAa,CAClB,cAAc,EAAE,cAAc,GAAG,SAAS,GAAG,IAAI,EACjD,WAAW,EAAE,WAAW,GAAG,SAAS,GAAG,IAAI,GAC1C,OAAO;;IAeV,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE9B,SAAS,IAAI,IAAI;IASjB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,GAAG,IAAI;IAcnD,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAI7B,WAAW,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI;IAa7C,UAAU,CAAC,KAAK,EAAE,mBAAmB,GAAG,IAAI;IAM5C,QAAQ,CACN,OAAO,EAAE,wBAAwB,EACjC,KAAK,EAAE,mBAAmB,GACzB,IAAI;IAKP,aAAa,CACX,OAAO,EAAE,wBAAwB,EACjC,KAAK,EAAE,mBAAmB,GACzB,IAAI;IAQP,eAAe,CACb,OAAO,EAAE,wBAAwB,EACjC,KAAK,EAAE,mBAAmB,EAC1B,MAAM,EAAE,YAAY,EACpB,GAAG,EAAE,YAAY,GAChB,IAAI;
|
|
1
|
+
{"version":3,"file":"IrisGridRenderer.d.ts","sourceRoot":"","sources":["../src/IrisGridRenderer.ts"],"names":[],"mappings":"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"}
|
package/dist/IrisGridRenderer.js
CHANGED
|
@@ -102,8 +102,7 @@ class IrisGridRenderer extends GridRenderer {
|
|
|
102
102
|
if (value === null || value === '') {
|
|
103
103
|
var originalFont = context.font;
|
|
104
104
|
context.font = "italic ".concat(originalFont);
|
|
105
|
-
|
|
106
|
-
super.drawCellContent(context, state, column, row, displayValue);
|
|
105
|
+
super.drawCellContent(context, state, column, row);
|
|
107
106
|
context.font = originalFont;
|
|
108
107
|
return;
|
|
109
108
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IrisGridRenderer.js","names":["dhSortDown","dhSortUp","vsTriangleDown","vsTriangleRight","vsLinkExternal","GridRenderer","GridUtils","TableUtils","assertNotNull","getOrThrow","ICON_NAMES","Object","freeze","SORT_UP","SORT_DOWN","CARET_DOWN","CARET_RIGHT","CELL_OVERFLOW","EXPAND_ICON_SIZE","ICON_SIZE","IrisGridRenderer","isFilterValid","advancedFilter","quickFilter","isAdvancedFilterValid","filter","isQuickFilterValid","constructor","icons","initIcons","setIcon","name","faIcon","path","Array","isArray","icon","Path2D","scaledIcon","scaleMatrix","a","d","addPath","getIcon","getSortIcon","sort","direction","sortDirection","ascending","descending","drawCanvas","state","drawScrim","drawGrid","context","drawCellOverflowButton","drawGridLines","drawGroupedColumnLine","drawPendingRowLine","drawCellContent","column","row","metrics","model","modelColumns","modelRows","modelRow","modelColumn","get","undefined","value","valueForCell","isTextType","columns","type","originalFont","font","displayValue","theme","groupedColumns","maxY","allColumnWidths","allColumnXs","length","groupedColumnDividerColor","lastVisibleGroupColumnIndex","columnX","columnWidth","x","strokeStyle","lineWidth","beginPath","moveTo","lineTo","stroke","allRowYs","maxX","pendingRowCount","firstPendingRow","rowCount","floatingBottomRowCount","y","save","setLineDash","pendingTextColor","restore","drawMouseColumnHover","hoverSelectColumn","linkerColumnHoverBackgroundColor","fillStyle","fillRect","drawMouseRowHover","isSelectingColumn","loadingScrimProgress","width","height","gridY","scrimBlurSize","scrimColor","globalCompositeOperation","rect","clip","drawColumnHeaders","reverseType","columnHeaderHeight","drawFilterHeaders","hasReverse","REVERSE_TYPE","NONE","color","headerReverseBarColor","headerSortBarColor","drawHeaderBar","reverseHeaderBarHeight","sortHeaderBarHeight","barHeight","interior","offset","headerBarCasingColor","columnHeaderMaxDepth","drawColumnHeadersAtDepth","range","boundsProp","depth","isMenuShown","bounds","drawColumnHeaderAtIndex","index","gridX","fontWidths","headerHorizontalPadding","columnName","getSortForColumn","text","textForColumnHeader","fontWidth","DEFAULT_FONT_WIDTH","textWidth","textRight","defaultX","Math","min","yOffset","translate","fill","isFilterBarShown","quickFilters","advancedFilters","drawExpandedFilterHeaders","size","drawCollapsedFilterHeaders","filterBarHeight","visibleColumns","textAlign","filterBarExpandedActiveBackgroundColor","filterBarExpandedBackgroundColor","y1","filterBarSeparatorColor","i","isFilterable","x1","drawExpandedFilterHeader","filterBarExpandedActiveCellBackgroundColor","filterBarErrorColor","filterBarHorizontalPadding","headerColor","filterText","getFilterText","measureText","maxLength","substring","rectLeft","rectTop","rectWidth","rectHeight","strokeRect","textX","textY","fillText","headerSeparatorColor","filterBarCollapsedHeight","drawCollapsedFilterHeader","filterBarActiveColor","filterBarActiveBackgroundColor","drawTreeMarker","rowY","treeBox","isExpanded","markerIcon","iconX","iconY","drawRowFooters","mouseX","mouseY","floatingTopHeight","floatingBottomHeight","floatingRows","rowFooterWidth","horizontalBarHeight","verticalBarWidth","allRowHeights","cellHorizontalPadding","floatingGridRowColor","floatingRowBackgroundColors","rowHoverBackgroundColor","mouseRow","getRowAtY","includes","rowHeight","textForRowFooter","getTextRenderMetrics","textMetrics","mouseColumn","getGridPointFromXY","left","getCellOverflowButtonPosition","shouldRenderOverflowButton","getCellInfoFromXY","isStringType","textForCell","truncatedText","getCachedTruncatedString","truncationCharForCell","NULL_POSITION","top","gridWidth","right","buttonLeft","buttonTop","buttonWidth","buttonHeight","overflowButtonColor","overflowButtonHoverColor","getExpandButtonPosition","max"],"sources":["../src/IrisGridRenderer.ts"],"sourcesContent":["/* eslint react/destructuring-assignment: \"off\" */\n/* eslint class-methods-use-this: \"off\" */\n/* eslint no-param-reassign: \"off\" */\nimport {\n dhSortDown,\n dhSortUp,\n vsTriangleDown,\n vsTriangleRight,\n vsLinkExternal,\n IconDefinition,\n} from '@deephaven/icons';\nimport {\n BoundedAxisRange,\n BoxCoordinates,\n Coordinate,\n GridMetrics,\n GridRangeIndex,\n GridRenderer,\n GridRenderState,\n GridThemeType,\n GridUtils,\n VisibleIndex,\n} from '@deephaven/grid';\nimport type { Sort } from '@deephaven/jsapi-types';\nimport { TableUtils, ReverseType } from '@deephaven/jsapi-utils';\nimport { assertNotNull, getOrThrow } from '@deephaven/utils';\nimport {\n ReadonlyAdvancedFilterMap,\n ReadonlyQuickFilterMap,\n AdvancedFilter,\n QuickFilter,\n} from './CommonTypes';\nimport { IrisGridThemeType } from './IrisGridTheme';\nimport IrisGridModel from './IrisGridModel';\n\nconst ICON_NAMES = Object.freeze({\n SORT_UP: 'sortUp',\n SORT_DOWN: 'sortDown',\n CARET_DOWN: 'caretDown',\n CARET_RIGHT: 'caretRight',\n CELL_OVERFLOW: 'cellOverflow',\n});\n\nconst EXPAND_ICON_SIZE = 10;\nconst ICON_SIZE = 16;\n\nexport type IrisGridRenderState = GridRenderState & {\n model: IrisGridModel;\n theme: IrisGridThemeType;\n hoverSelectColumn: GridRangeIndex;\n isSelectingColumn: boolean;\n loadingScrimProgress: number;\n reverseType: ReverseType;\n isFilterBarShown: boolean;\n advancedFilters: ReadonlyAdvancedFilterMap;\n quickFilters: ReadonlyQuickFilterMap;\n isMenuShown: boolean;\n};\n/**\n * Handles rendering some of the Iris specific features, such as sorting icons, sort bar display\n * */\nclass IrisGridRenderer extends GridRenderer {\n static isFilterValid(\n advancedFilter: AdvancedFilter | undefined | null,\n quickFilter: QuickFilter | undefined | null\n ): boolean {\n const isAdvancedFilterValid =\n advancedFilter == null || advancedFilter.filter != null;\n const isQuickFilterValid =\n quickFilter == null || quickFilter.filter != null;\n return isAdvancedFilterValid && isQuickFilterValid;\n }\n\n constructor() {\n super();\n this.icons = {};\n\n this.initIcons();\n }\n\n icons: Record<string, Path2D>;\n\n initIcons(): void {\n this.setIcon(ICON_NAMES.SORT_UP, dhSortUp);\n this.setIcon(ICON_NAMES.SORT_DOWN, dhSortDown);\n this.setIcon(ICON_NAMES.CARET_DOWN, vsTriangleDown);\n this.setIcon(ICON_NAMES.CARET_RIGHT, vsTriangleRight);\n this.setIcon(ICON_NAMES.CELL_OVERFLOW, vsLinkExternal);\n }\n\n // Scales the icon to be square and match the global ICON_SIZE\n setIcon(name: string, faIcon: IconDefinition): void {\n const path = Array.isArray(faIcon.icon[4])\n ? faIcon.icon[4][0]\n : faIcon.icon[4];\n const icon = new Path2D(path);\n const scaledIcon = new Path2D();\n const scaleMatrix = {\n a: ICON_SIZE / faIcon.icon[0],\n d: ICON_SIZE / faIcon.icon[1],\n };\n scaledIcon.addPath(icon, scaleMatrix);\n this.icons[name] = scaledIcon;\n }\n\n getIcon(name: string): Path2D {\n return this.icons[name];\n }\n\n getSortIcon(sort: Sort | null): Path2D | null {\n if (!sort) {\n return null;\n }\n if (sort.direction === TableUtils.sortDirection.ascending) {\n return this.getIcon(ICON_NAMES.SORT_UP);\n }\n if (sort.direction === TableUtils.sortDirection.descending) {\n return this.getIcon(ICON_NAMES.SORT_DOWN);\n }\n return null;\n }\n\n drawCanvas(state: IrisGridRenderState): void {\n super.drawCanvas(state);\n\n this.drawScrim(state);\n }\n\n drawGrid(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n super.drawGrid(context, state);\n this.drawCellOverflowButton(state);\n }\n\n drawGridLines(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n super.drawGridLines(context, state);\n\n this.drawGroupedColumnLine(context, state);\n\n this.drawPendingRowLine(context, state);\n }\n\n drawCellContent(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState,\n column: VisibleIndex,\n row: VisibleIndex\n ): void {\n const { metrics, model } = state;\n const { modelColumns, modelRows } = metrics;\n const modelRow = getOrThrow(modelRows, row);\n const modelColumn = modelColumns.get(column);\n if (modelColumn === undefined) {\n return;\n }\n const value = model.valueForCell(modelColumn, modelRow);\n if (TableUtils.isTextType(model.columns[modelColumn]?.type)) {\n if (value === null || value === '') {\n const originalFont = context.font;\n context.font = `italic ${originalFont}`;\n const displayValue = value === null ? 'null' : 'empty';\n super.drawCellContent(context, state, column, row, displayValue);\n context.font = originalFont;\n return;\n }\n }\n super.drawCellContent(context, state, column, row);\n }\n\n drawGroupedColumnLine(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n const { metrics, model, theme } = state;\n const { groupedColumns } = model;\n const { maxY, allColumnWidths, allColumnXs } = metrics;\n if (\n groupedColumns.length === 0 ||\n theme.groupedColumnDividerColor == null\n ) {\n return;\n }\n\n // This assumes that the engine puts the grouped columns at the start of the\n // model, so model and visible index match for grouped columns. If we ever\n // add freeze support for tree tables or allow moving the grouped columns,\n // this assumption may no longer hold true. If such a change occurs, we'll\n // need to revisit this since a single vertical divider may no longer make\n // sense.\n const lastVisibleGroupColumnIndex = groupedColumns.length - 1;\n\n const columnX = allColumnXs.get(lastVisibleGroupColumnIndex);\n const columnWidth = allColumnWidths.get(lastVisibleGroupColumnIndex);\n if (columnX == null || columnWidth == null) {\n return;\n }\n\n const x = columnX + columnWidth + 0.5;\n\n context.strokeStyle = theme.groupedColumnDividerColor;\n context.lineWidth = 1;\n context.beginPath();\n context.moveTo(x, 0);\n context.lineTo(x, maxY);\n context.stroke();\n }\n\n drawPendingRowLine(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n const { metrics, model, theme } = state;\n const { allRowYs, maxX } = metrics;\n const { pendingRowCount } = model;\n if (pendingRowCount <= 0) {\n return;\n }\n\n const firstPendingRow =\n model.rowCount - model.pendingRowCount - model.floatingBottomRowCount;\n let y = allRowYs.get(firstPendingRow);\n if (y == null) {\n return;\n }\n\n y -= 0.5;\n context.save();\n context.setLineDash([4, 2]);\n context.strokeStyle = theme.pendingTextColor;\n\n context.lineWidth = 1;\n context.beginPath();\n context.moveTo(0, y);\n context.lineTo(maxX, y);\n context.stroke();\n context.restore();\n }\n\n drawMouseColumnHover(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n const { theme, metrics, hoverSelectColumn } = state;\n if (\n hoverSelectColumn == null ||\n theme.linkerColumnHoverBackgroundColor == null\n ) {\n return;\n }\n\n const { allColumnWidths, allColumnXs, maxY } = metrics;\n\n const x = getOrThrow(allColumnXs, hoverSelectColumn);\n const columnWidth = getOrThrow(allColumnWidths, hoverSelectColumn);\n\n context.fillStyle = theme.linkerColumnHoverBackgroundColor;\n context.fillRect(x, 0, columnWidth, maxY);\n }\n\n drawMouseRowHover(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n const { isSelectingColumn } = state;\n if (!isSelectingColumn) {\n super.drawMouseRowHover(context, state);\n }\n }\n\n drawScrim(state: IrisGridRenderState): void {\n const { context, loadingScrimProgress, metrics, theme } = state;\n if (loadingScrimProgress == null) {\n return;\n }\n\n const { width, height, gridY } = metrics;\n const { scrimBlurSize, scrimColor } = theme;\n\n context.save();\n\n // Use global composite so we can change the underlying layer to grayscale\n context.globalCompositeOperation = 'color';\n context.filter = `blur(${scrimBlurSize}px)`;\n if (scrimColor != null) {\n context.fillStyle = scrimColor;\n }\n\n // Clip the path so the top edge is hard edge, bottom edge is soft/blurry\n context.beginPath();\n context.rect(0, gridY, width, height - gridY);\n context.clip();\n\n // Extend the edges beyond the clip area so they're hard edges\n context.fillRect(\n -scrimBlurSize,\n -scrimBlurSize + gridY,\n scrimBlurSize * 2 + width,\n (scrimBlurSize * 2 + (height - gridY)) * loadingScrimProgress\n );\n\n // add an overlay of the scrim color to darken things a bit\n context.globalCompositeOperation = 'overlay';\n context.filter = `blur(${scrimBlurSize}px) opacity(15%)`;\n context.fillRect(\n -scrimBlurSize,\n -scrimBlurSize + gridY,\n scrimBlurSize * 2 + width,\n (scrimBlurSize * 2 + (height - gridY)) * loadingScrimProgress\n );\n\n context.restore();\n }\n\n drawColumnHeaders(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n super.drawColumnHeaders(context, state);\n\n const { theme, metrics, model, reverseType } = state;\n const { columnHeaderHeight } = metrics;\n\n this.drawFilterHeaders(context, state);\n\n if (columnHeaderHeight <= 0) {\n return;\n }\n\n const { sort } = model;\n // if there is only one sort bar, it is interior to the header to save space\n if (sort.length === 1) {\n const hasReverse = reverseType !== TableUtils.REVERSE_TYPE.NONE;\n\n let color;\n if (hasReverse) {\n color = theme.headerReverseBarColor;\n } else {\n color = theme.headerSortBarColor;\n }\n this.drawHeaderBar(\n context,\n state,\n color,\n hasReverse ? theme.reverseHeaderBarHeight : theme.sortHeaderBarHeight\n );\n } else if (sort.length > 1) {\n // if there's multiple bars, the sort is interior to header\n // and the reverse claims space in the table\n if (\n // has table reverse\n reverseType !== TableUtils.REVERSE_TYPE.NONE\n ) {\n this.drawHeaderBar(\n context,\n state,\n theme.headerReverseBarColor,\n theme.reverseHeaderBarHeight,\n false\n );\n }\n this.drawHeaderBar(\n context,\n state,\n theme.headerSortBarColor,\n theme.sortHeaderBarHeight\n );\n }\n }\n\n drawHeaderBar(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState,\n color: string | CanvasGradient | CanvasPattern,\n barHeight: number,\n interior = true\n ): void {\n const { theme, metrics, model } = state;\n const { columnHeaderHeight, width } = metrics;\n // Draw casing with 1 pixel above and below the bar,\n // 1px falls on the existing split between grid/headers\n // so don't need to be accounnted for in math elsewhere\n let offset = 0;\n if (!interior) {\n offset = barHeight;\n }\n context.fillStyle = theme.headerBarCasingColor;\n context.fillRect(\n 0,\n model.columnHeaderMaxDepth * columnHeaderHeight - barHeight - 2 + offset,\n width,\n barHeight + 2\n );\n\n context.fillStyle = color;\n context.fillRect(\n 0,\n model.columnHeaderMaxDepth * columnHeaderHeight - barHeight - 1 + offset,\n width,\n barHeight\n );\n }\n\n drawColumnHeadersAtDepth(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState,\n range: BoundedAxisRange,\n boundsProp: { minX: number; maxX: number },\n depth: number\n ): void {\n const { metrics, model, isMenuShown } = state;\n const { columnHeaderMaxDepth } = model;\n const { width } = metrics;\n const bounds = {\n ...boundsProp,\n maxX:\n depth === columnHeaderMaxDepth - 1 && boundsProp.maxX === width\n ? width - (isMenuShown ? 0 : 30) // Account for the menu button\n : boundsProp.maxX,\n };\n super.drawColumnHeadersAtDepth(context, state, range, bounds, depth);\n }\n\n drawColumnHeaderAtIndex(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState,\n index: VisibleIndex,\n bounds: { minX: number; maxX: number }\n ): void {\n super.drawColumnHeaderAtIndex(context, state, index, bounds);\n const { metrics, model, theme } = state;\n const {\n modelColumns,\n allColumnWidths,\n allColumnXs,\n gridX,\n columnHeaderHeight,\n fontWidths,\n } = metrics;\n\n const { headerHorizontalPadding } = theme;\n const columnWidth = getOrThrow(allColumnWidths, index, 0);\n const columnX = getOrThrow(allColumnXs, index) + gridX;\n const modelColumn = modelColumns.get(index);\n\n if (modelColumn == null) {\n return;\n }\n\n const columnName = model.columns[modelColumn]?.name;\n\n if (columnName == null) {\n return;\n }\n\n const sort = TableUtils.getSortForColumn(model.sort, columnName);\n\n if (!sort) {\n return;\n }\n\n const icon = this.getSortIcon(sort);\n if (!icon) {\n return;\n }\n\n const text = model.textForColumnHeader(modelColumn);\n if (text === undefined) {\n return;\n }\n\n const fontWidth =\n fontWidths.get(context.font) ?? GridRenderer.DEFAULT_FONT_WIDTH;\n assertNotNull(fontWidth);\n const textWidth = text.length * fontWidth;\n const textRight = gridX + columnX + textWidth + headerHorizontalPadding;\n let { maxX } = bounds;\n maxX -= headerHorizontalPadding;\n const defaultX =\n gridX + columnX + columnWidth - headerHorizontalPadding - 1;\n\n const x = textRight > maxX ? textRight + 1 : Math.min(maxX, defaultX);\n const yOffset =\n sort.direction === TableUtils.sortDirection.ascending ? -6 : -12;\n const y = columnHeaderHeight * 0.5 + yOffset;\n\n context.save();\n\n context.beginPath();\n context.rect(columnX, 0, columnWidth, columnHeaderHeight);\n context.clip();\n\n context.fillStyle = theme.headerSortBarColor;\n context.translate(x, y);\n context.fill(icon);\n\n context.restore();\n }\n\n drawFilterHeaders(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n const { isFilterBarShown, quickFilters, advancedFilters } = state;\n\n if (isFilterBarShown) {\n this.drawExpandedFilterHeaders(context, state);\n } else if (\n (quickFilters != null && quickFilters.size > 0) ||\n (advancedFilters != null && advancedFilters.size > 0)\n ) {\n this.drawCollapsedFilterHeaders(context, state);\n }\n }\n\n drawExpandedFilterHeaders(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n const { metrics, model, theme, quickFilters, advancedFilters } = state;\n const { filterBarHeight } = theme;\n\n if (filterBarHeight <= 0) {\n return;\n }\n\n const {\n gridX,\n gridY,\n maxX,\n modelColumns,\n visibleColumns,\n allColumnWidths,\n allColumnXs,\n } = metrics;\n\n const columnHeaderHeight = gridY - filterBarHeight;\n\n context.save();\n\n context.font = theme.font;\n context.textAlign = 'left';\n\n if (\n (quickFilters != null && quickFilters.size > 0) ||\n (advancedFilters != null && advancedFilters.size > 0)\n ) {\n // fill style if a fiter is set on any column\n context.fillStyle = theme.filterBarExpandedActiveBackgroundColor;\n } else {\n // fill style with no filters set\n context.fillStyle = theme.filterBarExpandedBackgroundColor;\n }\n\n // Draw the background\n context.fillRect(gridX, columnHeaderHeight, maxX, filterBarHeight - 1);\n\n // Draw the bottom border\n context.fillStyle = theme.headerBarCasingColor;\n\n context.fillRect(gridX, columnHeaderHeight + filterBarHeight - 1, maxX, 1);\n\n // Draw the filter input boxes\n const y1 = columnHeaderHeight;\n context.strokeStyle = theme.filterBarSeparatorColor;\n context.beginPath();\n\n for (let i = 0; i < visibleColumns.length; i += 1) {\n const column = visibleColumns[i];\n const modelColumn = getOrThrow(modelColumns, column);\n const columnX = getOrThrow(allColumnXs, column);\n const columnWidth = getOrThrow(allColumnWidths, column);\n if (model.isFilterable(modelColumn) && columnWidth > 0) {\n const x1 = gridX + (columnX ?? 0);\n context.rect(x1 + 0.5, y1 + 0.5, columnWidth, filterBarHeight - 2); // 1 for the border, 1 for the casing\n }\n }\n context.stroke();\n\n for (let i = 0; i < visibleColumns.length; i += 1) {\n const column = visibleColumns[i];\n const columnWidth = getOrThrow(allColumnWidths, column);\n const columnX = getOrThrow(allColumnXs, column);\n const x = columnX + gridX;\n this.drawExpandedFilterHeader(context, state, column, x, columnWidth);\n }\n\n context.restore();\n }\n\n drawExpandedFilterHeader(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState,\n column: VisibleIndex,\n columnX: Coordinate,\n columnWidth: number\n ): void {\n if (columnWidth <= 0) {\n return;\n }\n\n const { metrics, theme, quickFilters, advancedFilters } = state;\n const { modelColumns, gridY } = metrics;\n const {\n filterBarHeight,\n filterBarExpandedActiveCellBackgroundColor,\n filterBarErrorColor,\n filterBarHorizontalPadding,\n headerColor,\n } = theme;\n const columnHeaderHeight = gridY - filterBarHeight;\n const modelColumn = modelColumns.get(column);\n if (modelColumn === undefined) return;\n const quickFilter = quickFilters.get(modelColumn);\n const advancedFilter = advancedFilters.get(modelColumn);\n if (quickFilter == null && advancedFilter == null) {\n return;\n }\n\n let text = null;\n if (quickFilter != null) {\n const { text: filterText } = quickFilter;\n text = filterText;\n if (!text) {\n text = TableUtils.getFilterText(quickFilter.filter);\n }\n\n if (text != null) {\n const { fontWidths } = metrics;\n let fontWidth = fontWidths.get(context.font);\n if (fontWidth == null || fontWidth === 0) {\n fontWidth = context.measureText('8').width;\n if (!fontWidth) {\n fontWidth = 10;\n }\n }\n\n const maxLength =\n (columnWidth - filterBarHorizontalPadding * 2) / fontWidth;\n if (maxLength <= 0) {\n text = '';\n } else if (text.length > maxLength) {\n text = `${text.substring(0, maxLength - 1)}…`;\n }\n }\n }\n\n context.save();\n\n const isFilterValid = IrisGridRenderer.isFilterValid(\n advancedFilter,\n quickFilter\n );\n if (isFilterValid && filterBarExpandedActiveCellBackgroundColor != null) {\n // draw active filter background inside cell\n context.fillStyle = filterBarExpandedActiveCellBackgroundColor;\n context.fillRect(\n columnX + 1, // +1 left border\n columnHeaderHeight + 1, // +1 top border\n columnWidth - 1, // -1 right border\n filterBarHeight - 3 // -3 top, bottom border and bottom casing\n );\n } else if (filterBarErrorColor != null) {\n // draw error box inside cell\n context.fillStyle = filterBarErrorColor;\n context.lineWidth = 2;\n context.strokeStyle = filterBarErrorColor;\n // Because this is drawn with a strokeRect, we have to add/subtract half the,\n // linewidth from each side to make interior, in addition to accounting for any borders/casings\n const rectLeft = columnX + 2; // 1 for strokeRect, 1 for border\n const rectTop = columnHeaderHeight + 2; // 1 for strokeRect, 1 for border\n const rectWidth = columnWidth - 3; // for 2 border and 1 for strokeRect\n const rectHeight = filterBarHeight - 5; // -2 for strokeRect, -3 for top, bottom border and bottom casing\n context.strokeRect(rectLeft, rectTop, rectWidth, rectHeight);\n }\n\n if (text != null && text !== '') {\n const textX = columnX + filterBarHorizontalPadding;\n const textY = columnHeaderHeight + filterBarHeight * 0.5 + 1; // + 1 for border\n context.fillStyle = headerColor;\n context.fillText(text, textX, textY);\n }\n\n context.restore();\n }\n\n drawCollapsedFilterHeaders(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n const { metrics, theme } = state;\n const { headerSeparatorColor, filterBarCollapsedHeight } = theme;\n\n if (filterBarCollapsedHeight <= 0) {\n return;\n }\n\n const {\n gridX,\n gridY,\n maxX,\n visibleColumns,\n allColumnWidths,\n allColumnXs,\n } = metrics;\n const columnHeaderHeight = gridY - filterBarCollapsedHeight;\n\n context.save();\n\n // Draw the background of the collapsed filter bar\n context.fillStyle = headerSeparatorColor;\n context.fillRect(gridX, columnHeaderHeight, maxX, filterBarCollapsedHeight);\n\n for (let i = 0; i < visibleColumns.length; i += 1) {\n const column = visibleColumns[i];\n const columnWidth = allColumnWidths.get(column);\n const columnX = allColumnXs.get(column);\n if (columnX != null && columnWidth != null) {\n const x = columnX + gridX;\n // draw the collapsed cells\n this.drawCollapsedFilterHeader(context, state, column, x, columnWidth);\n }\n }\n\n context.restore();\n }\n\n drawCollapsedFilterHeader(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState,\n column: VisibleIndex,\n columnX: Coordinate,\n columnWidth: number\n ): void {\n if (columnWidth <= 0) {\n return;\n }\n\n const { metrics, theme, quickFilters, advancedFilters } = state;\n const { modelColumns, gridY } = metrics;\n const modelColumn = modelColumns.get(column);\n\n if (modelColumn === undefined) return;\n const quickFilter = quickFilters.get(modelColumn);\n const advancedFilter = advancedFilters.get(modelColumn);\n\n const {\n filterBarCollapsedHeight,\n filterBarActiveColor,\n filterBarActiveBackgroundColor,\n filterBarErrorColor,\n } = theme;\n\n context.save();\n\n const isFilterValid = IrisGridRenderer.isFilterValid(\n advancedFilter,\n quickFilter\n );\n\n if (\n filterBarActiveBackgroundColor != null &&\n quickFilter == null &&\n advancedFilter == null\n ) {\n context.fillStyle = filterBarActiveBackgroundColor;\n } else if (filterBarActiveColor != null && isFilterValid) {\n context.fillStyle = filterBarActiveColor;\n } else if (filterBarErrorColor != null) {\n context.fillStyle = filterBarErrorColor;\n }\n\n const x = columnX + 1; // for gap between columns\n const y = gridY - filterBarCollapsedHeight;\n const rectWidth = columnWidth - 1; // for gap between columns\n const rectHeight = filterBarCollapsedHeight - 1; // for casing bottom\n context.fillRect(x, y, rectWidth, rectHeight);\n\n context.restore();\n }\n\n drawTreeMarker(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState,\n columnX: Coordinate,\n rowY: Coordinate,\n treeBox: BoxCoordinates,\n color: string,\n isExpanded: boolean\n ): void {\n context.save();\n const { x1, y1 } = treeBox;\n const markerIcon = isExpanded\n ? this.getIcon(ICON_NAMES.CARET_DOWN)\n : this.getIcon(ICON_NAMES.CARET_RIGHT);\n const iconX = columnX + x1 - 2;\n const iconY = rowY + y1 + 2.5;\n\n context.fillStyle = color;\n context.textAlign = 'center';\n context.translate(iconX, iconY);\n context.fill(markerIcon);\n context.restore();\n }\n\n drawRowFooters(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n const { metrics, model, mouseX, mouseY, theme } = state;\n const {\n gridY,\n gridX,\n maxX,\n modelRows,\n floatingTopHeight,\n floatingBottomHeight,\n floatingRows,\n rowFooterWidth,\n height,\n horizontalBarHeight,\n verticalBarWidth,\n allRowHeights,\n allRowYs,\n width,\n } = metrics;\n // Only draw the footers on the floating rows\n if (rowFooterWidth <= 0 || floatingRows.length === 0) {\n return;\n }\n\n const {\n cellHorizontalPadding,\n floatingGridRowColor,\n floatingRowBackgroundColors,\n headerColor,\n rowHoverBackgroundColor,\n } = theme;\n\n context.translate(gridX, gridY);\n\n context.beginPath();\n const x = Math.min(maxX, width - rowFooterWidth - verticalBarWidth - gridX);\n context.fillStyle = floatingRowBackgroundColors;\n if (floatingTopHeight > 0) {\n context.rect(x, 0, rowFooterWidth, floatingTopHeight);\n }\n if (floatingBottomHeight > 0) {\n context.rect(\n x,\n height - gridY - horizontalBarHeight - floatingBottomHeight,\n rowFooterWidth,\n floatingBottomHeight\n );\n }\n context.fill();\n\n const mouseRow =\n mouseX != null &&\n mouseY != null &&\n mouseX >= gridX &&\n mouseX <= maxX + rowFooterWidth\n ? GridUtils.getRowAtY(mouseY, metrics)\n : null;\n if (\n rowHoverBackgroundColor != null &&\n mouseRow !== null &&\n floatingRows.includes(mouseRow)\n ) {\n context.fillStyle = rowHoverBackgroundColor;\n const y = allRowYs.get(mouseRow);\n const rowHeight = allRowHeights.get(mouseRow);\n assertNotNull(y);\n assertNotNull(rowHeight);\n context.fillRect(x, y, rowFooterWidth, rowHeight);\n }\n\n context.beginPath();\n if (floatingGridRowColor != null) {\n context.strokeStyle = floatingGridRowColor;\n }\n if (floatingTopHeight > 0) {\n context.moveTo(x + 0.5, 0.5);\n context.lineTo(x + 0.5, floatingTopHeight - 0.5);\n }\n if (floatingBottomHeight > 0) {\n const y = height - gridY - horizontalBarHeight - floatingBottomHeight;\n context.moveTo(x - 0.5, y + 0.5);\n context.lineTo(x - 0.5, y + floatingBottomHeight - 0.5);\n }\n context.stroke();\n\n context.fillStyle = headerColor;\n context.textAlign = 'left';\n\n const textX = x + cellHorizontalPadding;\n for (let i = 0; i < floatingRows.length; i += 1) {\n const row = floatingRows[i];\n const rowHeight = allRowHeights.get(row);\n const rowY = allRowYs.get(row);\n const modelRow = modelRows.get(row);\n if (rowY != null && rowHeight != null && modelRow != null) {\n const textY = rowY + rowHeight * 0.5;\n context.fillText(model.textForRowFooter(modelRow), textX, textY);\n }\n }\n\n context.translate(-gridX, -gridY);\n }\n\n // This will shrink the size the text may take when the overflow button is rendered\n // The text will truncate to a smaller width and won't overlap the button\n getTextRenderMetrics(\n state: IrisGridRenderState,\n column: VisibleIndex,\n row: VisibleIndex\n ): {\n width: number;\n x: Coordinate;\n y: Coordinate;\n } {\n const textMetrics = super.getTextRenderMetrics(state, column, row);\n\n const { mouseX, mouseY, metrics } = state;\n\n if (mouseX == null || mouseY == null) {\n return textMetrics;\n }\n\n const { column: mouseColumn, row: mouseRow } = GridUtils.getGridPointFromXY(\n mouseX,\n mouseY,\n metrics\n );\n\n if (column === mouseColumn && row === mouseRow) {\n const { left } = this.getCellOverflowButtonPosition(state);\n if (this.shouldRenderOverflowButton(state) && left != null) {\n textMetrics.width = left - metrics.gridX - textMetrics.x;\n }\n }\n return textMetrics;\n }\n\n shouldRenderOverflowButton(state: IrisGridRenderState): boolean {\n const { context, mouseX, mouseY, metrics, model, theme } = state;\n if (mouseX == null || mouseY == null) {\n return false;\n }\n\n const { row, column, modelRow, modelColumn } = GridUtils.getCellInfoFromXY(\n mouseX,\n mouseY,\n metrics\n );\n\n if (\n row == null ||\n column == null ||\n modelRow == null ||\n modelColumn == null ||\n !TableUtils.isStringType(model.columns[modelColumn].type)\n ) {\n return false;\n }\n\n const text = model.textForCell(modelColumn, modelRow) ?? '';\n const { width: textWidth } = super.getTextRenderMetrics(state, column, row);\n const fontWidth =\n metrics.fontWidths.get(theme.font) ?? IrisGridRenderer.DEFAULT_FONT_WIDTH;\n\n context.save();\n context.font = theme.font;\n\n const truncatedText = this.getCachedTruncatedString(\n context,\n text,\n textWidth,\n fontWidth,\n model.truncationCharForCell(modelColumn, modelRow)\n );\n context.restore();\n\n return text !== '' && truncatedText !== text;\n }\n\n getCellOverflowButtonPosition({\n mouseX,\n mouseY,\n metrics,\n theme,\n }: {\n mouseX: Coordinate | null;\n mouseY: Coordinate | null;\n metrics: GridMetrics | undefined;\n theme: GridThemeType;\n }): {\n left: Coordinate | null;\n top: Coordinate | null;\n width: number | null;\n height: number | null;\n } {\n const NULL_POSITION = { left: null, top: null, width: null, height: null };\n if (mouseX == null || mouseY == null || metrics == null) {\n return NULL_POSITION;\n }\n const { rowHeight, columnWidth, left, top } = GridUtils.getCellInfoFromXY(\n mouseX,\n mouseY,\n metrics\n );\n\n if (left == null || columnWidth == null || top == null) {\n return NULL_POSITION;\n }\n\n const { width: gridWidth, verticalBarWidth } = metrics;\n const { cellHorizontalPadding } = theme;\n\n const width = ICON_SIZE + 2 * cellHorizontalPadding;\n const height = rowHeight;\n // Right edge of column or of visible grid, whichever is smaller\n const right = Math.min(\n metrics.gridX + left + columnWidth,\n gridWidth - verticalBarWidth\n );\n const buttonLeft = right - width;\n const buttonTop = metrics.gridY + top;\n\n return { left: buttonLeft, top: buttonTop, width, height };\n }\n\n drawCellOverflowButton(state: IrisGridRenderState): void {\n const { context, mouseX, mouseY, theme } = state;\n if (mouseX == null || mouseY == null) return;\n\n if (!this.shouldRenderOverflowButton(state)) {\n return;\n }\n\n const {\n left: buttonLeft,\n top: buttonTop,\n width: buttonWidth,\n height: buttonHeight,\n } = this.getCellOverflowButtonPosition(state);\n\n const {\n cellHorizontalPadding,\n overflowButtonColor,\n overflowButtonHoverColor,\n } = theme;\n\n context.save();\n if (\n overflowButtonHoverColor != null &&\n buttonLeft != null &&\n buttonWidth != null &&\n buttonTop != null &&\n buttonHeight != null &&\n mouseX >= buttonLeft &&\n mouseX <= buttonLeft + buttonWidth &&\n mouseY >= buttonTop &&\n mouseY <= buttonTop + buttonHeight\n ) {\n context.fillStyle = overflowButtonHoverColor;\n } else if (overflowButtonColor != null) {\n context.fillStyle = overflowButtonColor;\n }\n const icon = this.getIcon(ICON_NAMES.CELL_OVERFLOW);\n if (buttonLeft != null && buttonTop != null) {\n context.translate(buttonLeft + cellHorizontalPadding, buttonTop + 2);\n }\n context.fill(icon);\n\n context.restore();\n }\n\n getExpandButtonPosition(\n {\n mouseX,\n mouseY,\n metrics,\n theme,\n }: {\n mouseX: Coordinate | null;\n mouseY: Coordinate | null;\n metrics: GridMetrics | undefined;\n theme: GridThemeType;\n },\n depth: number | null\n ): {\n left: Coordinate | null;\n top: Coordinate | null;\n width: number | null;\n height: number | null;\n } {\n const NULL_POSITION = { left: null, top: null, width: null, height: null };\n if (mouseX == null || mouseY == null || depth == null || !metrics) {\n return NULL_POSITION;\n }\n const { rowHeight, left, top } = GridUtils.getCellInfoFromXY(\n mouseX,\n mouseY,\n metrics\n );\n\n assertNotNull(left);\n assertNotNull(rowHeight);\n assertNotNull(top);\n const { cellHorizontalPadding } = theme;\n\n const width = EXPAND_ICON_SIZE + 2 * cellHorizontalPadding;\n\n const buttonLeft = Math.max(left + EXPAND_ICON_SIZE * depth, metrics.gridX);\n const buttonTop = metrics.gridY + top;\n\n return {\n left: buttonLeft,\n top: buttonTop,\n width,\n height: rowHeight,\n };\n }\n}\n\nexport default IrisGridRenderer;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"IrisGridRenderer.js","names":["dhSortDown","dhSortUp","vsTriangleDown","vsTriangleRight","vsLinkExternal","GridRenderer","GridUtils","TableUtils","assertNotNull","getOrThrow","ICON_NAMES","Object","freeze","SORT_UP","SORT_DOWN","CARET_DOWN","CARET_RIGHT","CELL_OVERFLOW","EXPAND_ICON_SIZE","ICON_SIZE","IrisGridRenderer","isFilterValid","advancedFilter","quickFilter","isAdvancedFilterValid","filter","isQuickFilterValid","constructor","icons","initIcons","setIcon","name","faIcon","path","Array","isArray","icon","Path2D","scaledIcon","scaleMatrix","a","d","addPath","getIcon","getSortIcon","sort","direction","sortDirection","ascending","descending","drawCanvas","state","drawScrim","drawGrid","context","drawCellOverflowButton","drawGridLines","drawGroupedColumnLine","drawPendingRowLine","drawCellContent","column","row","metrics","model","modelColumns","modelRows","modelRow","modelColumn","get","undefined","value","valueForCell","isTextType","columns","type","originalFont","font","theme","groupedColumns","maxY","allColumnWidths","allColumnXs","length","groupedColumnDividerColor","lastVisibleGroupColumnIndex","columnX","columnWidth","x","strokeStyle","lineWidth","beginPath","moveTo","lineTo","stroke","allRowYs","maxX","pendingRowCount","firstPendingRow","rowCount","floatingBottomRowCount","y","save","setLineDash","pendingTextColor","restore","drawMouseColumnHover","hoverSelectColumn","linkerColumnHoverBackgroundColor","fillStyle","fillRect","drawMouseRowHover","isSelectingColumn","loadingScrimProgress","width","height","gridY","scrimBlurSize","scrimColor","globalCompositeOperation","rect","clip","drawColumnHeaders","reverseType","columnHeaderHeight","drawFilterHeaders","hasReverse","REVERSE_TYPE","NONE","color","headerReverseBarColor","headerSortBarColor","drawHeaderBar","reverseHeaderBarHeight","sortHeaderBarHeight","barHeight","interior","offset","headerBarCasingColor","columnHeaderMaxDepth","drawColumnHeadersAtDepth","range","boundsProp","depth","isMenuShown","bounds","drawColumnHeaderAtIndex","index","gridX","fontWidths","headerHorizontalPadding","columnName","getSortForColumn","text","textForColumnHeader","fontWidth","DEFAULT_FONT_WIDTH","textWidth","textRight","defaultX","Math","min","yOffset","translate","fill","isFilterBarShown","quickFilters","advancedFilters","drawExpandedFilterHeaders","size","drawCollapsedFilterHeaders","filterBarHeight","visibleColumns","textAlign","filterBarExpandedActiveBackgroundColor","filterBarExpandedBackgroundColor","y1","filterBarSeparatorColor","i","isFilterable","x1","drawExpandedFilterHeader","filterBarExpandedActiveCellBackgroundColor","filterBarErrorColor","filterBarHorizontalPadding","headerColor","filterText","getFilterText","measureText","maxLength","substring","rectLeft","rectTop","rectWidth","rectHeight","strokeRect","textX","textY","fillText","headerSeparatorColor","filterBarCollapsedHeight","drawCollapsedFilterHeader","filterBarActiveColor","filterBarActiveBackgroundColor","drawTreeMarker","rowY","treeBox","isExpanded","markerIcon","iconX","iconY","drawRowFooters","mouseX","mouseY","floatingTopHeight","floatingBottomHeight","floatingRows","rowFooterWidth","horizontalBarHeight","verticalBarWidth","allRowHeights","cellHorizontalPadding","floatingGridRowColor","floatingRowBackgroundColors","rowHoverBackgroundColor","mouseRow","getRowAtY","includes","rowHeight","textForRowFooter","getTextRenderMetrics","textMetrics","mouseColumn","getGridPointFromXY","left","getCellOverflowButtonPosition","shouldRenderOverflowButton","getCellInfoFromXY","isStringType","textForCell","truncatedText","getCachedTruncatedString","truncationCharForCell","NULL_POSITION","top","gridWidth","right","buttonLeft","buttonTop","buttonWidth","buttonHeight","overflowButtonColor","overflowButtonHoverColor","getExpandButtonPosition","max"],"sources":["../src/IrisGridRenderer.ts"],"sourcesContent":["/* eslint react/destructuring-assignment: \"off\" */\n/* eslint class-methods-use-this: \"off\" */\n/* eslint no-param-reassign: \"off\" */\nimport {\n dhSortDown,\n dhSortUp,\n vsTriangleDown,\n vsTriangleRight,\n vsLinkExternal,\n IconDefinition,\n} from '@deephaven/icons';\nimport {\n BoundedAxisRange,\n BoxCoordinates,\n Coordinate,\n GridMetrics,\n GridRangeIndex,\n GridRenderer,\n GridRenderState,\n GridThemeType,\n GridUtils,\n VisibleIndex,\n} from '@deephaven/grid';\nimport type { Sort } from '@deephaven/jsapi-types';\nimport { TableUtils, ReverseType } from '@deephaven/jsapi-utils';\nimport { assertNotNull, getOrThrow } from '@deephaven/utils';\nimport {\n ReadonlyAdvancedFilterMap,\n ReadonlyQuickFilterMap,\n AdvancedFilter,\n QuickFilter,\n} from './CommonTypes';\nimport { IrisGridThemeType } from './IrisGridTheme';\nimport IrisGridModel from './IrisGridModel';\n\nconst ICON_NAMES = Object.freeze({\n SORT_UP: 'sortUp',\n SORT_DOWN: 'sortDown',\n CARET_DOWN: 'caretDown',\n CARET_RIGHT: 'caretRight',\n CELL_OVERFLOW: 'cellOverflow',\n});\n\nconst EXPAND_ICON_SIZE = 10;\nconst ICON_SIZE = 16;\n\nexport type IrisGridRenderState = GridRenderState & {\n model: IrisGridModel;\n theme: IrisGridThemeType;\n hoverSelectColumn: GridRangeIndex;\n isSelectingColumn: boolean;\n loadingScrimProgress: number;\n reverseType: ReverseType;\n isFilterBarShown: boolean;\n advancedFilters: ReadonlyAdvancedFilterMap;\n quickFilters: ReadonlyQuickFilterMap;\n isMenuShown: boolean;\n};\n/**\n * Handles rendering some of the Iris specific features, such as sorting icons, sort bar display\n * */\nclass IrisGridRenderer extends GridRenderer {\n static isFilterValid(\n advancedFilter: AdvancedFilter | undefined | null,\n quickFilter: QuickFilter | undefined | null\n ): boolean {\n const isAdvancedFilterValid =\n advancedFilter == null || advancedFilter.filter != null;\n const isQuickFilterValid =\n quickFilter == null || quickFilter.filter != null;\n return isAdvancedFilterValid && isQuickFilterValid;\n }\n\n constructor() {\n super();\n this.icons = {};\n\n this.initIcons();\n }\n\n icons: Record<string, Path2D>;\n\n initIcons(): void {\n this.setIcon(ICON_NAMES.SORT_UP, dhSortUp);\n this.setIcon(ICON_NAMES.SORT_DOWN, dhSortDown);\n this.setIcon(ICON_NAMES.CARET_DOWN, vsTriangleDown);\n this.setIcon(ICON_NAMES.CARET_RIGHT, vsTriangleRight);\n this.setIcon(ICON_NAMES.CELL_OVERFLOW, vsLinkExternal);\n }\n\n // Scales the icon to be square and match the global ICON_SIZE\n setIcon(name: string, faIcon: IconDefinition): void {\n const path = Array.isArray(faIcon.icon[4])\n ? faIcon.icon[4][0]\n : faIcon.icon[4];\n const icon = new Path2D(path);\n const scaledIcon = new Path2D();\n const scaleMatrix = {\n a: ICON_SIZE / faIcon.icon[0],\n d: ICON_SIZE / faIcon.icon[1],\n };\n scaledIcon.addPath(icon, scaleMatrix);\n this.icons[name] = scaledIcon;\n }\n\n getIcon(name: string): Path2D {\n return this.icons[name];\n }\n\n getSortIcon(sort: Sort | null): Path2D | null {\n if (!sort) {\n return null;\n }\n if (sort.direction === TableUtils.sortDirection.ascending) {\n return this.getIcon(ICON_NAMES.SORT_UP);\n }\n if (sort.direction === TableUtils.sortDirection.descending) {\n return this.getIcon(ICON_NAMES.SORT_DOWN);\n }\n return null;\n }\n\n drawCanvas(state: IrisGridRenderState): void {\n super.drawCanvas(state);\n\n this.drawScrim(state);\n }\n\n drawGrid(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n super.drawGrid(context, state);\n this.drawCellOverflowButton(state);\n }\n\n drawGridLines(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n super.drawGridLines(context, state);\n\n this.drawGroupedColumnLine(context, state);\n\n this.drawPendingRowLine(context, state);\n }\n\n drawCellContent(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState,\n column: VisibleIndex,\n row: VisibleIndex\n ): void {\n const { metrics, model } = state;\n const { modelColumns, modelRows } = metrics;\n const modelRow = getOrThrow(modelRows, row);\n const modelColumn = modelColumns.get(column);\n if (modelColumn === undefined) {\n return;\n }\n const value = model.valueForCell(modelColumn, modelRow);\n if (TableUtils.isTextType(model.columns[modelColumn]?.type)) {\n if (value === null || value === '') {\n const originalFont = context.font;\n context.font = `italic ${originalFont}`;\n super.drawCellContent(context, state, column, row);\n context.font = originalFont;\n return;\n }\n }\n super.drawCellContent(context, state, column, row);\n }\n\n drawGroupedColumnLine(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n const { metrics, model, theme } = state;\n const { groupedColumns } = model;\n const { maxY, allColumnWidths, allColumnXs } = metrics;\n if (\n groupedColumns.length === 0 ||\n theme.groupedColumnDividerColor == null\n ) {\n return;\n }\n\n // This assumes that the engine puts the grouped columns at the start of the\n // model, so model and visible index match for grouped columns. If we ever\n // add freeze support for tree tables or allow moving the grouped columns,\n // this assumption may no longer hold true. If such a change occurs, we'll\n // need to revisit this since a single vertical divider may no longer make\n // sense.\n const lastVisibleGroupColumnIndex = groupedColumns.length - 1;\n\n const columnX = allColumnXs.get(lastVisibleGroupColumnIndex);\n const columnWidth = allColumnWidths.get(lastVisibleGroupColumnIndex);\n if (columnX == null || columnWidth == null) {\n return;\n }\n\n const x = columnX + columnWidth + 0.5;\n\n context.strokeStyle = theme.groupedColumnDividerColor;\n context.lineWidth = 1;\n context.beginPath();\n context.moveTo(x, 0);\n context.lineTo(x, maxY);\n context.stroke();\n }\n\n drawPendingRowLine(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n const { metrics, model, theme } = state;\n const { allRowYs, maxX } = metrics;\n const { pendingRowCount } = model;\n if (pendingRowCount <= 0) {\n return;\n }\n\n const firstPendingRow =\n model.rowCount - model.pendingRowCount - model.floatingBottomRowCount;\n let y = allRowYs.get(firstPendingRow);\n if (y == null) {\n return;\n }\n\n y -= 0.5;\n context.save();\n context.setLineDash([4, 2]);\n context.strokeStyle = theme.pendingTextColor;\n\n context.lineWidth = 1;\n context.beginPath();\n context.moveTo(0, y);\n context.lineTo(maxX, y);\n context.stroke();\n context.restore();\n }\n\n drawMouseColumnHover(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n const { theme, metrics, hoverSelectColumn } = state;\n if (\n hoverSelectColumn == null ||\n theme.linkerColumnHoverBackgroundColor == null\n ) {\n return;\n }\n\n const { allColumnWidths, allColumnXs, maxY } = metrics;\n\n const x = getOrThrow(allColumnXs, hoverSelectColumn);\n const columnWidth = getOrThrow(allColumnWidths, hoverSelectColumn);\n\n context.fillStyle = theme.linkerColumnHoverBackgroundColor;\n context.fillRect(x, 0, columnWidth, maxY);\n }\n\n drawMouseRowHover(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n const { isSelectingColumn } = state;\n if (!isSelectingColumn) {\n super.drawMouseRowHover(context, state);\n }\n }\n\n drawScrim(state: IrisGridRenderState): void {\n const { context, loadingScrimProgress, metrics, theme } = state;\n if (loadingScrimProgress == null) {\n return;\n }\n\n const { width, height, gridY } = metrics;\n const { scrimBlurSize, scrimColor } = theme;\n\n context.save();\n\n // Use global composite so we can change the underlying layer to grayscale\n context.globalCompositeOperation = 'color';\n context.filter = `blur(${scrimBlurSize}px)`;\n if (scrimColor != null) {\n context.fillStyle = scrimColor;\n }\n\n // Clip the path so the top edge is hard edge, bottom edge is soft/blurry\n context.beginPath();\n context.rect(0, gridY, width, height - gridY);\n context.clip();\n\n // Extend the edges beyond the clip area so they're hard edges\n context.fillRect(\n -scrimBlurSize,\n -scrimBlurSize + gridY,\n scrimBlurSize * 2 + width,\n (scrimBlurSize * 2 + (height - gridY)) * loadingScrimProgress\n );\n\n // add an overlay of the scrim color to darken things a bit\n context.globalCompositeOperation = 'overlay';\n context.filter = `blur(${scrimBlurSize}px) opacity(15%)`;\n context.fillRect(\n -scrimBlurSize,\n -scrimBlurSize + gridY,\n scrimBlurSize * 2 + width,\n (scrimBlurSize * 2 + (height - gridY)) * loadingScrimProgress\n );\n\n context.restore();\n }\n\n drawColumnHeaders(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n super.drawColumnHeaders(context, state);\n\n const { theme, metrics, model, reverseType } = state;\n const { columnHeaderHeight } = metrics;\n\n this.drawFilterHeaders(context, state);\n\n if (columnHeaderHeight <= 0) {\n return;\n }\n\n const { sort } = model;\n // if there is only one sort bar, it is interior to the header to save space\n if (sort.length === 1) {\n const hasReverse = reverseType !== TableUtils.REVERSE_TYPE.NONE;\n\n let color;\n if (hasReverse) {\n color = theme.headerReverseBarColor;\n } else {\n color = theme.headerSortBarColor;\n }\n this.drawHeaderBar(\n context,\n state,\n color,\n hasReverse ? theme.reverseHeaderBarHeight : theme.sortHeaderBarHeight\n );\n } else if (sort.length > 1) {\n // if there's multiple bars, the sort is interior to header\n // and the reverse claims space in the table\n if (\n // has table reverse\n reverseType !== TableUtils.REVERSE_TYPE.NONE\n ) {\n this.drawHeaderBar(\n context,\n state,\n theme.headerReverseBarColor,\n theme.reverseHeaderBarHeight,\n false\n );\n }\n this.drawHeaderBar(\n context,\n state,\n theme.headerSortBarColor,\n theme.sortHeaderBarHeight\n );\n }\n }\n\n drawHeaderBar(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState,\n color: string | CanvasGradient | CanvasPattern,\n barHeight: number,\n interior = true\n ): void {\n const { theme, metrics, model } = state;\n const { columnHeaderHeight, width } = metrics;\n // Draw casing with 1 pixel above and below the bar,\n // 1px falls on the existing split between grid/headers\n // so don't need to be accounnted for in math elsewhere\n let offset = 0;\n if (!interior) {\n offset = barHeight;\n }\n context.fillStyle = theme.headerBarCasingColor;\n context.fillRect(\n 0,\n model.columnHeaderMaxDepth * columnHeaderHeight - barHeight - 2 + offset,\n width,\n barHeight + 2\n );\n\n context.fillStyle = color;\n context.fillRect(\n 0,\n model.columnHeaderMaxDepth * columnHeaderHeight - barHeight - 1 + offset,\n width,\n barHeight\n );\n }\n\n drawColumnHeadersAtDepth(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState,\n range: BoundedAxisRange,\n boundsProp: { minX: number; maxX: number },\n depth: number\n ): void {\n const { metrics, model, isMenuShown } = state;\n const { columnHeaderMaxDepth } = model;\n const { width } = metrics;\n const bounds = {\n ...boundsProp,\n maxX:\n depth === columnHeaderMaxDepth - 1 && boundsProp.maxX === width\n ? width - (isMenuShown ? 0 : 30) // Account for the menu button\n : boundsProp.maxX,\n };\n super.drawColumnHeadersAtDepth(context, state, range, bounds, depth);\n }\n\n drawColumnHeaderAtIndex(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState,\n index: VisibleIndex,\n bounds: { minX: number; maxX: number }\n ): void {\n super.drawColumnHeaderAtIndex(context, state, index, bounds);\n const { metrics, model, theme } = state;\n const {\n modelColumns,\n allColumnWidths,\n allColumnXs,\n gridX,\n columnHeaderHeight,\n fontWidths,\n } = metrics;\n\n const { headerHorizontalPadding } = theme;\n const columnWidth = getOrThrow(allColumnWidths, index, 0);\n const columnX = getOrThrow(allColumnXs, index) + gridX;\n const modelColumn = modelColumns.get(index);\n\n if (modelColumn == null) {\n return;\n }\n\n const columnName = model.columns[modelColumn]?.name;\n\n if (columnName == null) {\n return;\n }\n\n const sort = TableUtils.getSortForColumn(model.sort, columnName);\n\n if (!sort) {\n return;\n }\n\n const icon = this.getSortIcon(sort);\n if (!icon) {\n return;\n }\n\n const text = model.textForColumnHeader(modelColumn);\n if (text === undefined) {\n return;\n }\n\n const fontWidth =\n fontWidths.get(context.font) ?? GridRenderer.DEFAULT_FONT_WIDTH;\n assertNotNull(fontWidth);\n const textWidth = text.length * fontWidth;\n const textRight = gridX + columnX + textWidth + headerHorizontalPadding;\n let { maxX } = bounds;\n maxX -= headerHorizontalPadding;\n const defaultX =\n gridX + columnX + columnWidth - headerHorizontalPadding - 1;\n\n const x = textRight > maxX ? textRight + 1 : Math.min(maxX, defaultX);\n const yOffset =\n sort.direction === TableUtils.sortDirection.ascending ? -6 : -12;\n const y = columnHeaderHeight * 0.5 + yOffset;\n\n context.save();\n\n context.beginPath();\n context.rect(columnX, 0, columnWidth, columnHeaderHeight);\n context.clip();\n\n context.fillStyle = theme.headerSortBarColor;\n context.translate(x, y);\n context.fill(icon);\n\n context.restore();\n }\n\n drawFilterHeaders(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n const { isFilterBarShown, quickFilters, advancedFilters } = state;\n\n if (isFilterBarShown) {\n this.drawExpandedFilterHeaders(context, state);\n } else if (\n (quickFilters != null && quickFilters.size > 0) ||\n (advancedFilters != null && advancedFilters.size > 0)\n ) {\n this.drawCollapsedFilterHeaders(context, state);\n }\n }\n\n drawExpandedFilterHeaders(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n const { metrics, model, theme, quickFilters, advancedFilters } = state;\n const { filterBarHeight } = theme;\n\n if (filterBarHeight <= 0) {\n return;\n }\n\n const {\n gridX,\n gridY,\n maxX,\n modelColumns,\n visibleColumns,\n allColumnWidths,\n allColumnXs,\n } = metrics;\n\n const columnHeaderHeight = gridY - filterBarHeight;\n\n context.save();\n\n context.font = theme.font;\n context.textAlign = 'left';\n\n if (\n (quickFilters != null && quickFilters.size > 0) ||\n (advancedFilters != null && advancedFilters.size > 0)\n ) {\n // fill style if a fiter is set on any column\n context.fillStyle = theme.filterBarExpandedActiveBackgroundColor;\n } else {\n // fill style with no filters set\n context.fillStyle = theme.filterBarExpandedBackgroundColor;\n }\n\n // Draw the background\n context.fillRect(gridX, columnHeaderHeight, maxX, filterBarHeight - 1);\n\n // Draw the bottom border\n context.fillStyle = theme.headerBarCasingColor;\n\n context.fillRect(gridX, columnHeaderHeight + filterBarHeight - 1, maxX, 1);\n\n // Draw the filter input boxes\n const y1 = columnHeaderHeight;\n context.strokeStyle = theme.filterBarSeparatorColor;\n context.beginPath();\n\n for (let i = 0; i < visibleColumns.length; i += 1) {\n const column = visibleColumns[i];\n const modelColumn = getOrThrow(modelColumns, column);\n const columnX = getOrThrow(allColumnXs, column);\n const columnWidth = getOrThrow(allColumnWidths, column);\n if (model.isFilterable(modelColumn) && columnWidth > 0) {\n const x1 = gridX + (columnX ?? 0);\n context.rect(x1 + 0.5, y1 + 0.5, columnWidth, filterBarHeight - 2); // 1 for the border, 1 for the casing\n }\n }\n context.stroke();\n\n for (let i = 0; i < visibleColumns.length; i += 1) {\n const column = visibleColumns[i];\n const columnWidth = getOrThrow(allColumnWidths, column);\n const columnX = getOrThrow(allColumnXs, column);\n const x = columnX + gridX;\n this.drawExpandedFilterHeader(context, state, column, x, columnWidth);\n }\n\n context.restore();\n }\n\n drawExpandedFilterHeader(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState,\n column: VisibleIndex,\n columnX: Coordinate,\n columnWidth: number\n ): void {\n if (columnWidth <= 0) {\n return;\n }\n\n const { metrics, theme, quickFilters, advancedFilters } = state;\n const { modelColumns, gridY } = metrics;\n const {\n filterBarHeight,\n filterBarExpandedActiveCellBackgroundColor,\n filterBarErrorColor,\n filterBarHorizontalPadding,\n headerColor,\n } = theme;\n const columnHeaderHeight = gridY - filterBarHeight;\n const modelColumn = modelColumns.get(column);\n if (modelColumn === undefined) return;\n const quickFilter = quickFilters.get(modelColumn);\n const advancedFilter = advancedFilters.get(modelColumn);\n if (quickFilter == null && advancedFilter == null) {\n return;\n }\n\n let text = null;\n if (quickFilter != null) {\n const { text: filterText } = quickFilter;\n text = filterText;\n if (!text) {\n text = TableUtils.getFilterText(quickFilter.filter);\n }\n\n if (text != null) {\n const { fontWidths } = metrics;\n let fontWidth = fontWidths.get(context.font);\n if (fontWidth == null || fontWidth === 0) {\n fontWidth = context.measureText('8').width;\n if (!fontWidth) {\n fontWidth = 10;\n }\n }\n\n const maxLength =\n (columnWidth - filterBarHorizontalPadding * 2) / fontWidth;\n if (maxLength <= 0) {\n text = '';\n } else if (text.length > maxLength) {\n text = `${text.substring(0, maxLength - 1)}…`;\n }\n }\n }\n\n context.save();\n\n const isFilterValid = IrisGridRenderer.isFilterValid(\n advancedFilter,\n quickFilter\n );\n if (isFilterValid && filterBarExpandedActiveCellBackgroundColor != null) {\n // draw active filter background inside cell\n context.fillStyle = filterBarExpandedActiveCellBackgroundColor;\n context.fillRect(\n columnX + 1, // +1 left border\n columnHeaderHeight + 1, // +1 top border\n columnWidth - 1, // -1 right border\n filterBarHeight - 3 // -3 top, bottom border and bottom casing\n );\n } else if (filterBarErrorColor != null) {\n // draw error box inside cell\n context.fillStyle = filterBarErrorColor;\n context.lineWidth = 2;\n context.strokeStyle = filterBarErrorColor;\n // Because this is drawn with a strokeRect, we have to add/subtract half the,\n // linewidth from each side to make interior, in addition to accounting for any borders/casings\n const rectLeft = columnX + 2; // 1 for strokeRect, 1 for border\n const rectTop = columnHeaderHeight + 2; // 1 for strokeRect, 1 for border\n const rectWidth = columnWidth - 3; // for 2 border and 1 for strokeRect\n const rectHeight = filterBarHeight - 5; // -2 for strokeRect, -3 for top, bottom border and bottom casing\n context.strokeRect(rectLeft, rectTop, rectWidth, rectHeight);\n }\n\n if (text != null && text !== '') {\n const textX = columnX + filterBarHorizontalPadding;\n const textY = columnHeaderHeight + filterBarHeight * 0.5 + 1; // + 1 for border\n context.fillStyle = headerColor;\n context.fillText(text, textX, textY);\n }\n\n context.restore();\n }\n\n drawCollapsedFilterHeaders(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n const { metrics, theme } = state;\n const { headerSeparatorColor, filterBarCollapsedHeight } = theme;\n\n if (filterBarCollapsedHeight <= 0) {\n return;\n }\n\n const {\n gridX,\n gridY,\n maxX,\n visibleColumns,\n allColumnWidths,\n allColumnXs,\n } = metrics;\n const columnHeaderHeight = gridY - filterBarCollapsedHeight;\n\n context.save();\n\n // Draw the background of the collapsed filter bar\n context.fillStyle = headerSeparatorColor;\n context.fillRect(gridX, columnHeaderHeight, maxX, filterBarCollapsedHeight);\n\n for (let i = 0; i < visibleColumns.length; i += 1) {\n const column = visibleColumns[i];\n const columnWidth = allColumnWidths.get(column);\n const columnX = allColumnXs.get(column);\n if (columnX != null && columnWidth != null) {\n const x = columnX + gridX;\n // draw the collapsed cells\n this.drawCollapsedFilterHeader(context, state, column, x, columnWidth);\n }\n }\n\n context.restore();\n }\n\n drawCollapsedFilterHeader(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState,\n column: VisibleIndex,\n columnX: Coordinate,\n columnWidth: number\n ): void {\n if (columnWidth <= 0) {\n return;\n }\n\n const { metrics, theme, quickFilters, advancedFilters } = state;\n const { modelColumns, gridY } = metrics;\n const modelColumn = modelColumns.get(column);\n\n if (modelColumn === undefined) return;\n const quickFilter = quickFilters.get(modelColumn);\n const advancedFilter = advancedFilters.get(modelColumn);\n\n const {\n filterBarCollapsedHeight,\n filterBarActiveColor,\n filterBarActiveBackgroundColor,\n filterBarErrorColor,\n } = theme;\n\n context.save();\n\n const isFilterValid = IrisGridRenderer.isFilterValid(\n advancedFilter,\n quickFilter\n );\n\n if (\n filterBarActiveBackgroundColor != null &&\n quickFilter == null &&\n advancedFilter == null\n ) {\n context.fillStyle = filterBarActiveBackgroundColor;\n } else if (filterBarActiveColor != null && isFilterValid) {\n context.fillStyle = filterBarActiveColor;\n } else if (filterBarErrorColor != null) {\n context.fillStyle = filterBarErrorColor;\n }\n\n const x = columnX + 1; // for gap between columns\n const y = gridY - filterBarCollapsedHeight;\n const rectWidth = columnWidth - 1; // for gap between columns\n const rectHeight = filterBarCollapsedHeight - 1; // for casing bottom\n context.fillRect(x, y, rectWidth, rectHeight);\n\n context.restore();\n }\n\n drawTreeMarker(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState,\n columnX: Coordinate,\n rowY: Coordinate,\n treeBox: BoxCoordinates,\n color: string,\n isExpanded: boolean\n ): void {\n context.save();\n const { x1, y1 } = treeBox;\n const markerIcon = isExpanded\n ? this.getIcon(ICON_NAMES.CARET_DOWN)\n : this.getIcon(ICON_NAMES.CARET_RIGHT);\n const iconX = columnX + x1 - 2;\n const iconY = rowY + y1 + 2.5;\n\n context.fillStyle = color;\n context.textAlign = 'center';\n context.translate(iconX, iconY);\n context.fill(markerIcon);\n context.restore();\n }\n\n drawRowFooters(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n const { metrics, model, mouseX, mouseY, theme } = state;\n const {\n gridY,\n gridX,\n maxX,\n modelRows,\n floatingTopHeight,\n floatingBottomHeight,\n floatingRows,\n rowFooterWidth,\n height,\n horizontalBarHeight,\n verticalBarWidth,\n allRowHeights,\n allRowYs,\n width,\n } = metrics;\n // Only draw the footers on the floating rows\n if (rowFooterWidth <= 0 || floatingRows.length === 0) {\n return;\n }\n\n const {\n cellHorizontalPadding,\n floatingGridRowColor,\n floatingRowBackgroundColors,\n headerColor,\n rowHoverBackgroundColor,\n } = theme;\n\n context.translate(gridX, gridY);\n\n context.beginPath();\n const x = Math.min(maxX, width - rowFooterWidth - verticalBarWidth - gridX);\n context.fillStyle = floatingRowBackgroundColors;\n if (floatingTopHeight > 0) {\n context.rect(x, 0, rowFooterWidth, floatingTopHeight);\n }\n if (floatingBottomHeight > 0) {\n context.rect(\n x,\n height - gridY - horizontalBarHeight - floatingBottomHeight,\n rowFooterWidth,\n floatingBottomHeight\n );\n }\n context.fill();\n\n const mouseRow =\n mouseX != null &&\n mouseY != null &&\n mouseX >= gridX &&\n mouseX <= maxX + rowFooterWidth\n ? GridUtils.getRowAtY(mouseY, metrics)\n : null;\n if (\n rowHoverBackgroundColor != null &&\n mouseRow !== null &&\n floatingRows.includes(mouseRow)\n ) {\n context.fillStyle = rowHoverBackgroundColor;\n const y = allRowYs.get(mouseRow);\n const rowHeight = allRowHeights.get(mouseRow);\n assertNotNull(y);\n assertNotNull(rowHeight);\n context.fillRect(x, y, rowFooterWidth, rowHeight);\n }\n\n context.beginPath();\n if (floatingGridRowColor != null) {\n context.strokeStyle = floatingGridRowColor;\n }\n if (floatingTopHeight > 0) {\n context.moveTo(x + 0.5, 0.5);\n context.lineTo(x + 0.5, floatingTopHeight - 0.5);\n }\n if (floatingBottomHeight > 0) {\n const y = height - gridY - horizontalBarHeight - floatingBottomHeight;\n context.moveTo(x - 0.5, y + 0.5);\n context.lineTo(x - 0.5, y + floatingBottomHeight - 0.5);\n }\n context.stroke();\n\n context.fillStyle = headerColor;\n context.textAlign = 'left';\n\n const textX = x + cellHorizontalPadding;\n for (let i = 0; i < floatingRows.length; i += 1) {\n const row = floatingRows[i];\n const rowHeight = allRowHeights.get(row);\n const rowY = allRowYs.get(row);\n const modelRow = modelRows.get(row);\n if (rowY != null && rowHeight != null && modelRow != null) {\n const textY = rowY + rowHeight * 0.5;\n context.fillText(model.textForRowFooter(modelRow), textX, textY);\n }\n }\n\n context.translate(-gridX, -gridY);\n }\n\n // This will shrink the size the text may take when the overflow button is rendered\n // The text will truncate to a smaller width and won't overlap the button\n getTextRenderMetrics(\n state: IrisGridRenderState,\n column: VisibleIndex,\n row: VisibleIndex\n ): {\n width: number;\n x: Coordinate;\n y: Coordinate;\n } {\n const textMetrics = super.getTextRenderMetrics(state, column, row);\n\n const { mouseX, mouseY, metrics } = state;\n\n if (mouseX == null || mouseY == null) {\n return textMetrics;\n }\n\n const { column: mouseColumn, row: mouseRow } = GridUtils.getGridPointFromXY(\n mouseX,\n mouseY,\n metrics\n );\n\n if (column === mouseColumn && row === mouseRow) {\n const { left } = this.getCellOverflowButtonPosition(state);\n if (this.shouldRenderOverflowButton(state) && left != null) {\n textMetrics.width = left - metrics.gridX - textMetrics.x;\n }\n }\n return textMetrics;\n }\n\n shouldRenderOverflowButton(state: IrisGridRenderState): boolean {\n const { context, mouseX, mouseY, metrics, model, theme } = state;\n if (mouseX == null || mouseY == null) {\n return false;\n }\n\n const { row, column, modelRow, modelColumn } = GridUtils.getCellInfoFromXY(\n mouseX,\n mouseY,\n metrics\n );\n\n if (\n row == null ||\n column == null ||\n modelRow == null ||\n modelColumn == null ||\n !TableUtils.isStringType(model.columns[modelColumn].type)\n ) {\n return false;\n }\n\n const text = model.textForCell(modelColumn, modelRow) ?? '';\n const { width: textWidth } = super.getTextRenderMetrics(state, column, row);\n const fontWidth =\n metrics.fontWidths.get(theme.font) ?? IrisGridRenderer.DEFAULT_FONT_WIDTH;\n\n context.save();\n context.font = theme.font;\n\n const truncatedText = this.getCachedTruncatedString(\n context,\n text,\n textWidth,\n fontWidth,\n model.truncationCharForCell(modelColumn, modelRow)\n );\n context.restore();\n\n return text !== '' && truncatedText !== text;\n }\n\n getCellOverflowButtonPosition({\n mouseX,\n mouseY,\n metrics,\n theme,\n }: {\n mouseX: Coordinate | null;\n mouseY: Coordinate | null;\n metrics: GridMetrics | undefined;\n theme: GridThemeType;\n }): {\n left: Coordinate | null;\n top: Coordinate | null;\n width: number | null;\n height: number | null;\n } {\n const NULL_POSITION = { left: null, top: null, width: null, height: null };\n if (mouseX == null || mouseY == null || metrics == null) {\n return NULL_POSITION;\n }\n const { rowHeight, columnWidth, left, top } = GridUtils.getCellInfoFromXY(\n mouseX,\n mouseY,\n metrics\n );\n\n if (left == null || columnWidth == null || top == null) {\n return NULL_POSITION;\n }\n\n const { width: gridWidth, verticalBarWidth } = metrics;\n const { cellHorizontalPadding } = theme;\n\n const width = ICON_SIZE + 2 * cellHorizontalPadding;\n const height = rowHeight;\n // Right edge of column or of visible grid, whichever is smaller\n const right = Math.min(\n metrics.gridX + left + columnWidth,\n gridWidth - verticalBarWidth\n );\n const buttonLeft = right - width;\n const buttonTop = metrics.gridY + top;\n\n return { left: buttonLeft, top: buttonTop, width, height };\n }\n\n drawCellOverflowButton(state: IrisGridRenderState): void {\n const { context, mouseX, mouseY, theme } = state;\n if (mouseX == null || mouseY == null) return;\n\n if (!this.shouldRenderOverflowButton(state)) {\n return;\n }\n\n const {\n left: buttonLeft,\n top: buttonTop,\n width: buttonWidth,\n height: buttonHeight,\n } = this.getCellOverflowButtonPosition(state);\n\n const {\n cellHorizontalPadding,\n overflowButtonColor,\n overflowButtonHoverColor,\n } = theme;\n\n context.save();\n if (\n overflowButtonHoverColor != null &&\n buttonLeft != null &&\n buttonWidth != null &&\n buttonTop != null &&\n buttonHeight != null &&\n mouseX >= buttonLeft &&\n mouseX <= buttonLeft + buttonWidth &&\n mouseY >= buttonTop &&\n mouseY <= buttonTop + buttonHeight\n ) {\n context.fillStyle = overflowButtonHoverColor;\n } else if (overflowButtonColor != null) {\n context.fillStyle = overflowButtonColor;\n }\n const icon = this.getIcon(ICON_NAMES.CELL_OVERFLOW);\n if (buttonLeft != null && buttonTop != null) {\n context.translate(buttonLeft + cellHorizontalPadding, buttonTop + 2);\n }\n context.fill(icon);\n\n context.restore();\n }\n\n getExpandButtonPosition(\n {\n mouseX,\n mouseY,\n metrics,\n theme,\n }: {\n mouseX: Coordinate | null;\n mouseY: Coordinate | null;\n metrics: GridMetrics | undefined;\n theme: GridThemeType;\n },\n depth: number | null\n ): {\n left: Coordinate | null;\n top: Coordinate | null;\n width: number | null;\n height: number | null;\n } {\n const NULL_POSITION = { left: null, top: null, width: null, height: null };\n if (mouseX == null || mouseY == null || depth == null || !metrics) {\n return NULL_POSITION;\n }\n const { rowHeight, left, top } = GridUtils.getCellInfoFromXY(\n mouseX,\n mouseY,\n metrics\n );\n\n assertNotNull(left);\n assertNotNull(rowHeight);\n assertNotNull(top);\n const { cellHorizontalPadding } = theme;\n\n const width = EXPAND_ICON_SIZE + 2 * cellHorizontalPadding;\n\n const buttonLeft = Math.max(left + EXPAND_ICON_SIZE * depth, metrics.gridX);\n const buttonTop = metrics.gridY + top;\n\n return {\n left: buttonLeft,\n top: buttonTop,\n width,\n height: rowHeight,\n };\n }\n}\n\nexport default IrisGridRenderer;\n"],"mappings":"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"}
|
|
@@ -92,7 +92,7 @@ declare class IrisGridTableModelTemplate<T extends TableTemplate<T> = Table, R e
|
|
|
92
92
|
cacheFormattedValue(x: ModelIndex, y: ModelIndex, text: string | null): void;
|
|
93
93
|
cachePendingValue(x: ModelIndex, y: ModelIndex, text: string | null): void;
|
|
94
94
|
clearPendingValue(x: ModelIndex, y: ModelIndex): void;
|
|
95
|
-
textValueForCell(x: ModelIndex, y: ModelIndex): string | null;
|
|
95
|
+
textValueForCell(x: ModelIndex, y: ModelIndex): string | null | undefined;
|
|
96
96
|
textForCell(x: ModelIndex, y: ModelIndex): string;
|
|
97
97
|
truncationCharForCell(x: ModelIndex): '#' | undefined;
|
|
98
98
|
colorForCell(x: ModelIndex, y: ModelIndex, theme: IrisGridThemeType): string;
|
|
@@ -244,7 +244,7 @@ declare class IrisGridTableModelTemplate<T extends TableTemplate<T> = Table, R e
|
|
|
244
244
|
setValueForRanges(ranges: GridRange[], text: string): Promise<void>;
|
|
245
245
|
setValues(edits?: EditOperation[]): Promise<void>;
|
|
246
246
|
commitPending(): Promise<void>;
|
|
247
|
-
editValueForCell(x: ModelIndex, y: ModelIndex): string | null;
|
|
247
|
+
editValueForCell(x: ModelIndex, y: ModelIndex): string | null | undefined;
|
|
248
248
|
delete(ranges: GridRange[]): Promise<void>;
|
|
249
249
|
isValidForCell(x: ModelIndex, y: ModelIndex, value: string): boolean;
|
|
250
250
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IrisGridTableModelTemplate.d.ts","sourceRoot":"","sources":["../src/IrisGridTableModelTemplate.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,aAAa,EACb,SAAS,EAGT,UAAU,EACV,aAAa,EACb,YAAY,EACb,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EACV,MAAM,EACN,gBAAgB,EAChB,YAAY,EACZ,EAAE,IAAI,MAAM,EACZ,eAAe,EACf,MAAM,EACN,UAAU,EACV,WAAW,EACX,YAAY,EACZ,GAAG,EACH,IAAI,EACJ,KAAK,EACL,aAAa,EAEb,WAAW,EACX,cAAc,EACd,YAAY,EACb,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,iBAAiB,EAIlB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,SAAS,EAAkB,MAAM,wBAAwB,CAAC;AAC/E,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAE5C,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAC5C,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAChD,OAAO,EACL,UAAU,EACV,mBAAmB,EACnB,KAAK,EACL,cAAc,EACd,QAAQ,EACR,cAAc,EACd,mBAAmB,EACpB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,iBAA0C,MAAM,qBAAqB,CAAC;AAS7E,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,aAAa,GACnB,KAAK,IAAI,0BAA0B,CAErC;AAED;;GAEG;AAEH,cAAM,0BAA0B,CAC9B,CAAC,SAAS,aAAa,CAAC,CAAC,CAAC,GAAG,KAAK,EAClC,CAAC,SAAS,KAAK,GAAG,KAAK,CACvB,SAAQ,aAAa;IACrB,MAAM,CAAC,gBAAgB,SAAK;IAE5B,OAAO,CACL,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,cAAc,EACzB,KAAK,EAAE,OAAO,EACd,WAAW,CAAC,EAAE,OAAO,GAAG,SAAS,EACjC,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,EAC9B,WAAW,CAAC,EAAE,OAAO,GAAG,SAAS,GAChC,OAAO,CAAC,MAAM,CAAC;IAIlB,MAAM,IAAI,OAAO,CAAC,KAAK,CAAC;IAIxB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAI3D,IAAI,aAAa,IAAI,UAAU,EAAE,CAEhC;IAED,IAAI,aAAa,CAAC,aAAa,EAAE,UAAU,EAAE,EAE5C;IAED,IAAI,aAAa,IAAI,YAAY,EAAE,CAElC;IAED,IAAI,aAAa,CAAC,aAAa,EAAE,YAAY,EAAE,EAE9C;IAED,mBAAmB,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,IAAI;IAIhD,IAAI,YAAY,IAAI,YAAY,GAAG,IAAI,CAEtC;IAED,IAAI,YAAY,CAAC,YAAY,EAAE,YAAY,GAAG,IAAI,EAEjD;IAED,IAAI,qBAAqB,IAAI,UAAU,EAAE,CAExC;IAED,IAAI,qBAAqB,CAAC,KAAK,EAAE,UAAU,EAAE,EAE5C;IAED;;;OAGG;IACH,IAAI,OAAO,IAAI,MAAM,EAAE,CAEtB;IAED,EAAE,EAAE,MAAM,CAAC;IAEX,aAAa,EAAE,aAAa,CAAC;IAE7B,UAAU,EAAE,UAAU,CAAC;IAEvB,OAAO,CAAC,aAAa,CAAY;IAEjC,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;IAE9B,OAAO,CAAC,YAAY,CAAmC;IAEvD,KAAK,EAAE,CAAC,CAAC;IAET,QAAQ,EAAE;QACR,GAAG,EAAE,YAAY,CAAC;QAClB,MAAM,EAAE,YAAY,CAAC;QACrB,OAAO,EAAE,MAAM,EAAE,CAAC;KACnB,GAAG,IAAI,CAAC;IAET,YAAY,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAEvC,mBAAmB,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;IAEzC,OAAO,CAAC,iBAAiB,CAAsB;IAE/C,OAAO,CAAC,gBAAgB,CAAU;IAElC,OAAO,CAAC,WAAW,CAAqB;IAExC,kBAAkB,EAAE,iBAAiB,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;IAE1D,MAAM,EAAE,mBAAmB,GAAG,IAAI,CAAC;IAEnC,OAAO,CAAC,aAAa,CAAwB;IAK7C,OAAO,CAAC,iBAAiB,CAAoB;IAE7C,OAAO,CAAC,kBAAkB,CAAK;IAE/B,OAAO,CAAC,qBAAqB,CAA6C;IAE1E,OAAO,CAAC,qBAAqB,CAA6C;IAE1E,OAAO,CAAC,qBAAqB,CAAuB;IAEpD,OAAO,CAAC,mBAAmB,CAA2B;IAEtD,OAAO,CAAC,aAAa,CAAgC;IAErD;;;;;OAKG;gBAED,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,CAAC,EACR,SAAS,YAAoB,EAC7B,UAAU,GAAE,UAAU,GAAG,IAAW;IA2CtC,KAAK,IAAI,IAAI;IAUb,cAAc,IAAI,IAAI;IA8BtB,aAAa,IAAI,IAAI;IAiCrB,kBAAkB,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI;IAWlD,qBAAqB,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI;IAQrD,qBAAqB,IAAI,IAAI;IAM7B,oBAAoB,IAAI,IAAI;IAI5B,iBAAiB,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IAM3C,kBAAkB,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IAM5C,mBAAmB,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IAM7C,0BAA0B,IAAI,IAAI;IAQlC,IAAI,QAAQ,IAAI,MAAM,CAMrB;IAED,IAAI,iBAAiB,IAAI,mBAAmB,CAM3C;IAED,IAAI,cAAc,IAAI,cAAc,CAAC,CAAC,CAAC,CAEtC;IAED,IAAI,cAAc,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC,CAAC,EA8BxC;IAED,IAAI,eAAe,IAAI,MAAM,CAE5B;IAED,IAAI,eAAe,CAAC,KAAK,EAAE,MAAM,EAQhC;IAED,IAAI,iBAAiB,IAAI,MAAM,CAI9B;IAED,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,IAAI,sBAAsB,IAAI,MAAM,CAInC;IAED,IAAI,mBAAmB,IAAI,MAAM,CAIhC;IAED,IAAI,uBAAuB,IAAI,OAAO,CAErC;IAED,IAAI,iBAAiB,IAAI,OAAO,CAE/B;IAED,IAAI,UAAU,IAAI,OAAO,CAExB;IAED,mBAAmB,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAO5E,iBAAiB,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAO1E,iBAAiB,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,GAAG,IAAI;IAOrD,gBAAgB,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"IrisGridTableModelTemplate.d.ts","sourceRoot":"","sources":["../src/IrisGridTableModelTemplate.ts"],"names":[],"mappings":"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"}
|
|
@@ -492,9 +492,12 @@ class IrisGridTableModelTemplate extends IrisGridModel {
|
|
|
492
492
|
if (((_this$formattedString = this.formattedStringData[x]) === null || _this$formattedString === void 0 ? void 0 : _this$formattedString[y]) === undefined) {
|
|
493
493
|
var _this$totalsColumn;
|
|
494
494
|
var _value = this.valueForCell(x, y);
|
|
495
|
-
if (_value
|
|
495
|
+
if (_value === null) {
|
|
496
496
|
return null;
|
|
497
497
|
}
|
|
498
|
+
if (_value === undefined) {
|
|
499
|
+
return undefined;
|
|
500
|
+
}
|
|
498
501
|
var _column = (_this$totalsColumn = this.totalsColumn(x, y)) !== null && _this$totalsColumn !== void 0 ? _this$totalsColumn : this.columns[x];
|
|
499
502
|
var hasCustomColumnFormat = this.getCachedCustomColumnFormatFlag(this.formatter, _column.name, _column.type);
|
|
500
503
|
var formatOverride;
|
|
@@ -510,6 +513,7 @@ class IrisGridTableModelTemplate extends IrisGridModel {
|
|
|
510
513
|
return this.formattedStringData[x][y];
|
|
511
514
|
}
|
|
512
515
|
textForCell(x, y) {
|
|
516
|
+
var _this$columns$x;
|
|
513
517
|
var text = this.textValueForCell(x, y);
|
|
514
518
|
if (text == null && this.isKeyColumn(x)) {
|
|
515
519
|
var pendingRow = this.pendingRow(y);
|
|
@@ -518,6 +522,14 @@ class IrisGridTableModelTemplate extends IrisGridModel {
|
|
|
518
522
|
return '*';
|
|
519
523
|
}
|
|
520
524
|
}
|
|
525
|
+
if (TableUtils.isTextType((_this$columns$x = this.columns[x]) === null || _this$columns$x === void 0 ? void 0 : _this$columns$x.type)) {
|
|
526
|
+
if (text === null) {
|
|
527
|
+
return 'null';
|
|
528
|
+
}
|
|
529
|
+
if (text === '') {
|
|
530
|
+
return 'empty';
|
|
531
|
+
}
|
|
532
|
+
}
|
|
521
533
|
return text !== null && text !== void 0 ? text : '';
|
|
522
534
|
}
|
|
523
535
|
truncationCharForCell(x) {
|
|
@@ -623,12 +635,12 @@ class IrisGridTableModelTemplate extends IrisGridModel {
|
|
|
623
635
|
return this.columnHeaderParentMap.get((_this$columnAtDepth$n = (_this$columnAtDepth = this.columnAtDepth(modelIndex, depth)) === null || _this$columnAtDepth === void 0 ? void 0 : _this$columnAtDepth.name) !== null && _this$columnAtDepth$n !== void 0 ? _this$columnAtDepth$n : '');
|
|
624
636
|
}
|
|
625
637
|
columnAtDepth(x) {
|
|
626
|
-
var _this$columns$
|
|
638
|
+
var _this$columns$x2;
|
|
627
639
|
var depth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
|
|
628
640
|
if (depth === 0) {
|
|
629
641
|
return this.columns[x];
|
|
630
642
|
}
|
|
631
|
-
var columnName = (_this$columns$
|
|
643
|
+
var columnName = (_this$columns$x2 = this.columns[x]) === null || _this$columns$x2 === void 0 ? void 0 : _this$columns$x2.name;
|
|
632
644
|
var group = this.columnHeaderParentMap.get(columnName);
|
|
633
645
|
if (!group) {
|
|
634
646
|
return undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IrisGridTableModelTemplate.js","names":["memoize","throttle","GridRange","GridUtils","memoizeClear","Log","EventShimCustomEvent","PromiseUtils","assertNotNull","TableUtils","Formatter","FormatterUtils","IrisGridModel","AggregationOperation","IrisGridUtils","MissingKeyError","isColumnHeaderGroup","log","module","SET_VIEWPORT_THROTTLE","APPLY_VIEWPORT_THROTTLE","EMPTY_ARRAY","isIrisGridTableModelTemplate","model","table","undefined","IrisGridTableModelTemplate","seekRow","startRow","column","valueType","value","insensitive","contains","isBackwards","Error","export","columnStatistics","customColumns","formatColumns","updateFrozenColumns","columns","rollupConfig","selectDistinctColumns","names","constructor","dh","formatter","inputTable","Map","layoutHints","movedColumns","groupMap","parseColumnHeaderGroups","columnGroups","moveColumn","name","toIndex","modelIndex","getColumnIndexByName","visibleIndex","getVisibleIndex","moveItem","moveGroup","group","get","visibleRange","getVisibleRange","moveRange","frontColumns","backColumns","frozenColumns","length","usedColumns","Set","frontIndex","forEach","has","backIndex","columnMap","size","layoutHintColumnGroups","values","sort","a","b","depth","firstChildName","children","rightModelIndex","rightVisibleIndex","firstChildGroup","i","childName","childGroup","childColumn","isBeforeGroup","moveToIndex","childIndexes","_movedColumns","groups","tableColumns","col","set","indices","top","bottom","error","viewport","debug2","applyViewport","viewportTop","viewportBottom","getCachedViewportRowRange","applyBufferedViewport","leading","columnType","columnName","formatOverride","getFormattedString","max","isCustomColumnFormatDefined","viewHeight","Math","ROW_BUFFER_PAGES","pendingDataMap","keyColumnCount","map","row","rowIndex","data","rowData","push","handleTableDisconnect","bind","handleTableReconnect","handleTableUpdate","handleTotalsUpdate","handleRequestFailed","handleCustomColumnsChanged","irisFormatter","irisGridUtils","subscription","tableUtils","viewportData","formattedStringData","pendingStringData","isSaveInProgress","totalsTable","totalsTablePromise","totals","totalsDataMap","pendingNewDataMap","pendingNewRowCount","columnHeaderGroups","close","cancel","startListening","addEventListener","Table","EVENT_DISCONNECT","EVENT_RECONNECT","EVENT_UPDATED","Client","EVENT_REQUEST_FAILED","EVENT_CUSTOMCOLUMNSCHANGED","addTotalsListeners","stopListening","removeEventListener","removeTotalsListeners","closeSubscription","setViewport","dispatchEvent","EVENT","DISCONNECT","RECONNECT","event","copyViewportData","detail","UPDATED","copyTotalsData","REQUEST_FAILED","COLUMNS_CHANGED","rowCount","operationOrder","pendingDataErrors","getCachedPendingErrors","keyColumns","isValidIndex","columnIndex","maxPendingDataRow","PENDING_DATA_UPDATED","pendingRowCount","count","keys","columnCount","floatingBottomRowCount","showOnTop","floatingTopRowCount","isChartBuilderAvailable","isTotalsAvailable","getTotalsTable","isEditable","cacheFormattedValue","x","y","text","cachePendingValue","clearPendingValue","textValueForCell","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","header","columnAtDepth","isNew","colorForColumnHeader","getColumnHeaderGroup","getColumnHeaderParentGroup","columnHeaderParentMap","currentDepth","textForRowFooter","totalsRow","initialMovedColumns","getMemoizedInitialMovedColumns","initialMovedRows","initialColumnHeaderGroups","getMemoizedInitialColumnHeaderGroups","getMemoizedColumnMap","columnHeaderMaxDepth","_columnHeaderMaxDepth","columnHeaderGroupMap","_columnHeaderGroupMap","_columnHeaderGroups","newGroups","maxDepth","parentMap","groupedColumns","totalsRowCount","operation","offset","viewportY","rows","defaultOperation","SUM","tableColumn","find","isTotalsRow","warn","extractViewportData","totalsData","dataMap","operationMap","c","split","findIndex","getFormat","getColumnIndicesByNameMap","newData","r","newRow","extractViewportRow","index","filter","applyFilter","FORMATTER_UPDATED","getCachedFormattedString","applySort","totalsConfig","debug","setTotalsTable","makeCancelable","then","catch","err","isCanceled","listenerCount","snapshot","ranges","includeHeaders","formatValue","consolidateRanges","consolidated","consolidate","isValidSnapshotRanges","topFloatingRowsSet","tableRanges","bottomFloatingRowsSet","range","endRow","add","startColumn","min","endColumn","columnsFromRanges","result","topFloatingRows","rangeSet","rangeSetFromRanges","bottomFloatingRows","textSnapshot","join","valuesTable","copy","selectDistinct","isColumnMovable","includes","isRowMovable","isEditableRange","isBounded","isPendingRange","isDeletableRange","isEditableRanges","every","isDeletableRanges","getTableAreaRange","getPendingAreaRange","setValueForCell","setValueForRanges","columnSet","formattedText","forEachCell","makeValue","timeZone","pendingAreaRange","pendingRanges","intersection","newDataMap","newRowData","delete","tableAreaRange","newRows","addRows","cellText","setValues","edits","edit","makeCell","rowEditMap","reduce","rowMap","dataIndex","rangeRowCount","rowEdits","info","commitPending","editValueForCell","pendingRange","deleteTable","Promise","all","filters","columnFilters","filterValue","makeFilterRawValue","eq","agg","curr","and","or","isValidForCell","e"],"sources":["../src/IrisGridTableModelTemplate.ts"],"sourcesContent":["/* eslint-disable no-underscore-dangle */\n/* eslint class-methods-use-this: \"off\" */\nimport memoize from 'memoize-one';\nimport throttle from 'lodash.throttle';\nimport {\n EditOperation,\n GridRange,\n GridUtils,\n memoizeClear,\n ModelIndex,\n MoveOperation,\n VisibleIndex,\n} from '@deephaven/grid';\nimport type {\n Column,\n ColumnStatistics,\n CustomColumn,\n dh as DhType,\n FilterCondition,\n Format,\n InputTable,\n LayoutHints,\n RollupConfig,\n Row,\n Sort,\n Table,\n TableTemplate,\n TableViewportSubscription,\n TotalsTable,\n ValueTypeUnion,\n ViewportData,\n} from '@deephaven/jsapi-types';\nimport Log from '@deephaven/log';\nimport {\n CancelablePromise,\n EventShimCustomEvent,\n PromiseUtils,\n assertNotNull,\n} from '@deephaven/utils';\nimport { TableUtils, Formatter, FormatterUtils } from '@deephaven/jsapi-utils';\nimport IrisGridModel from './IrisGridModel';\nimport AggregationOperation from './sidebar/aggregations/AggregationOperation';\nimport IrisGridUtils from './IrisGridUtils';\nimport MissingKeyError from './MissingKeyError';\nimport {\n ColumnName,\n UITotalsTableConfig,\n UIRow,\n PendingDataMap,\n CellData,\n UIViewportData,\n PendingDataErrorMap,\n} from './CommonTypes';\nimport { IrisGridThemeType } from './IrisGridTheme';\nimport ColumnHeaderGroup, { isColumnHeaderGroup } from './ColumnHeaderGroup';\n\nconst log = Log.module('IrisGridTableModel');\n\nconst SET_VIEWPORT_THROTTLE = 150;\nconst APPLY_VIEWPORT_THROTTLE = 0;\n\nconst EMPTY_ARRAY: unknown[] = [];\n\nexport function isIrisGridTableModelTemplate(\n model: IrisGridModel\n): model is IrisGridTableModelTemplate {\n return (model as IrisGridTableModelTemplate).table !== undefined;\n}\n\n/**\n * Template model for a grid\n */\n\nclass IrisGridTableModelTemplate<\n T extends TableTemplate<T> = Table,\n R extends UIRow = UIRow\n> extends IrisGridModel {\n static ROW_BUFFER_PAGES = 1;\n\n seekRow(\n startRow: number,\n column: Column,\n valueType: ValueTypeUnion,\n value: unknown,\n insensitive?: boolean | undefined,\n contains?: boolean | undefined,\n isBackwards?: boolean | undefined\n ): Promise<number> {\n throw new Error('Method not implemented.');\n }\n\n export(): Promise<Table> {\n throw new Error('Method not implemented.');\n }\n\n columnStatistics(column: Column): Promise<ColumnStatistics> {\n throw new Error('Method not implemented.');\n }\n\n get customColumns(): ColumnName[] {\n return [];\n }\n\n set customColumns(customColumns: ColumnName[]) {\n throw new Error('Method not implemented.');\n }\n\n get formatColumns(): CustomColumn[] {\n return [];\n }\n\n set formatColumns(formatColumns: CustomColumn[]) {\n throw new Error('Method not implemented.');\n }\n\n updateFrozenColumns(columns: ColumnName[]): void {\n throw new Error('Method not implemented.');\n }\n\n get rollupConfig(): RollupConfig | null {\n throw new Error('Method not implemented.');\n }\n\n set rollupConfig(rollupConfig: RollupConfig | null) {\n throw new Error('Method not implemented.');\n }\n\n get selectDistinctColumns(): ColumnName[] {\n throw new Error('Method not implemented.');\n }\n\n set selectDistinctColumns(names: ColumnName[]) {\n throw new Error('Method not implemented.');\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(): Column[] {\n return this.table.columns;\n }\n\n dh: DhType;\n\n irisGridUtils: IrisGridUtils;\n\n tableUtils: TableUtils;\n\n private irisFormatter: Formatter;\n\n inputTable: InputTable | null;\n\n private subscription: TableViewportSubscription | null;\n\n table: T;\n\n viewport: {\n top: VisibleIndex;\n bottom: VisibleIndex;\n columns: Column[];\n } | null;\n\n viewportData: UIViewportData<R> | null;\n\n formattedStringData: (string | null)[][];\n\n private pendingStringData: (string | null)[][];\n\n private isSaveInProgress: boolean;\n\n private totalsTable: TotalsTable | null;\n\n totalsTablePromise: CancelablePromise<TotalsTable> | null;\n\n totals: UITotalsTableConfig | null;\n\n private totalsDataMap: Map<string, R> | null;\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 private pendingNewDataMap: PendingDataMap<R>;\n\n private pendingNewRowCount = 0;\n\n private _columnHeaderGroupMap: Map<string, ColumnHeaderGroup> = new Map();\n\n private columnHeaderParentMap: Map<string, ColumnHeaderGroup> = new Map();\n\n private _columnHeaderMaxDepth: number | null = null;\n\n private _columnHeaderGroups: ColumnHeaderGroup[] = [];\n\n private _movedColumns: MoveOperation[] | null = null;\n\n /**\n * @param dh JSAPI instance\n * @param table Iris data table to be used in the model\n * @param formatter The formatter to use when getting formats\n * @param inputTable Iris input table associated with this table\n */\n constructor(\n dh: DhType,\n table: T,\n formatter = new Formatter(dh),\n inputTable: InputTable | null = null\n ) {\n super(dh);\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\n this.dh = dh;\n this.irisFormatter = formatter;\n this.irisGridUtils = new IrisGridUtils(dh);\n this.inputTable = inputTable;\n this.subscription = null;\n this.table = table;\n this.tableUtils = new TableUtils(dh);\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 // 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.columnHeaderGroups = IrisGridUtils.parseColumnHeaderGroups(\n this,\n this.layoutHints?.columnGroups ?? []\n ).groups;\n }\n\n close(): void {\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(): void {\n super.startListening();\n\n const { dh } = this;\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(): void {\n super.stopListening();\n\n const { dh } = this;\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: TotalsTable): void {\n const { dh } = this;\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: TotalsTable): void {\n const { dh } = this;\n totalsTable.removeEventListener(\n dh.Table.EVENT_UPDATED,\n this.handleTotalsUpdate\n );\n }\n\n handleTableDisconnect(): void {\n this.dispatchEvent(\n new EventShimCustomEvent(IrisGridModel.EVENT.DISCONNECT)\n );\n }\n\n handleTableReconnect(): void {\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.RECONNECT));\n }\n\n handleTableUpdate(event: CustomEvent): void {\n this.copyViewportData(event.detail);\n\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.UPDATED));\n }\n\n handleTotalsUpdate(event: CustomEvent): void {\n this.copyTotalsData(event.detail);\n\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.UPDATED));\n }\n\n handleRequestFailed(event: CustomEvent): void {\n this.dispatchEvent(\n new EventShimCustomEvent(IrisGridModel.EVENT.REQUEST_FAILED, event)\n );\n }\n\n handleCustomColumnsChanged(): void {\n this.dispatchEvent(\n new EventShimCustomEvent(IrisGridModel.EVENT.COLUMNS_CHANGED, {\n detail: this.columns,\n })\n );\n }\n\n get rowCount(): number {\n return (\n this.table.size +\n this.pendingNewRowCount +\n (this.totals?.operationOrder?.length ?? 0)\n );\n }\n\n get pendingDataErrors(): PendingDataErrorMap {\n return this.getCachedPendingErrors(\n this.pendingNewDataMap,\n this.columns,\n this.inputTable?.keyColumns.length ?? 0\n );\n }\n\n get pendingDataMap(): PendingDataMap<R> {\n return this.pendingNewDataMap;\n }\n\n set pendingDataMap(map: PendingDataMap<R>) {\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 EventShimCustomEvent(IrisGridModel.EVENT.PENDING_DATA_UPDATED)\n );\n }\n\n get pendingRowCount(): number {\n return this.pendingNewRowCount;\n }\n\n set pendingRowCount(count: number) {\n if (count === this.pendingNewRowCount) {\n return;\n }\n\n this.pendingNewRowCount = Math.max(0, count, this.maxPendingDataRow);\n\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.UPDATED));\n }\n\n get maxPendingDataRow(): number {\n return this.pendingNewDataMap.size > 0\n ? Math.max(...this.pendingNewDataMap.keys()) + 1\n : 0;\n }\n\n get columnCount(): number {\n return this.columns.length;\n }\n\n get floatingBottomRowCount(): number {\n return this.totals != null && this.totals.showOnTop\n ? 0\n : this.totals?.operationOrder?.length ?? 0;\n }\n\n get floatingTopRowCount(): number {\n return this.totals != null && this.totals.showOnTop\n ? this.totals?.operationOrder?.length ?? 0\n : 0;\n }\n\n get isChartBuilderAvailable(): boolean {\n return true;\n }\n\n get isTotalsAvailable(): boolean {\n return this.table.getTotalsTable != null;\n }\n\n get isEditable(): boolean {\n return !this.isSaveInProgress && this.inputTable != null;\n }\n\n cacheFormattedValue(x: ModelIndex, y: ModelIndex, text: string | null): void {\n if (this.formattedStringData[x] == null) {\n this.formattedStringData[x] = [];\n }\n this.formattedStringData[x][y] = text;\n }\n\n cachePendingValue(x: ModelIndex, y: ModelIndex, text: string | null): void {\n if (this.pendingStringData[x] == null) {\n this.pendingStringData[x] = [];\n }\n this.pendingStringData[x][y] = text;\n }\n\n clearPendingValue(x: ModelIndex, y: ModelIndex): void {\n const column = this.pendingStringData[x];\n if (column != null) {\n delete column[y];\n }\n }\n\n textValueForCell(x: ModelIndex, y: ModelIndex): string | null {\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;\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: ModelIndex, y: ModelIndex): string {\n const text = this.textValueForCell(x, y);\n if (text == null && this.isKeyColumn(x)) {\n const pendingRow = this.pendingRow(y);\n if (pendingRow != null && 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: ModelIndex): '#' | undefined {\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: 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 && format.color) {\n return format.color;\n }\n\n if (this.isPendingRow(y)) {\n // Data entered in a pending row\n assertNotNull(theme.pendingTextColor);\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 assertNotNull(theme.dateColor);\n return theme.dateColor;\n }\n if (TableUtils.isNumberType(column.type)) {\n if ((value as number) > 0) {\n assertNotNull(theme.positiveNumberColor);\n return theme.positiveNumberColor;\n }\n if ((value as number) < 0) {\n assertNotNull(theme.negativeNumberColor);\n return theme.negativeNumberColor;\n }\n assertNotNull(theme.zeroNumberColor);\n return theme.zeroNumberColor;\n }\n }\n } else if (this.isPendingRow(y) && this.isKeyColumn(x)) {\n assertNotNull(theme.errorTextColor);\n return theme.errorTextColor;\n }\n\n return theme.textColor;\n }\n\n backgroundColorForCell(x: ModelIndex, y: ModelIndex): string | null {\n return this.formatForCell(x, y)?.backgroundColor ?? null;\n }\n\n textAlignForCell(x: ModelIndex): CanvasTextAlign {\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: ModelIndex, depth = 0): string | undefined {\n const header = this.columnAtDepth(x, depth);\n if (isColumnHeaderGroup(header)) {\n return header.isNew ? '' : header.name;\n }\n return header?.name;\n }\n\n colorForColumnHeader(x: ModelIndex, depth = 0): string | null {\n const column = this.columnAtDepth(x, depth);\n if (isColumnHeaderGroup(column)) {\n return column.color ?? null;\n }\n return null;\n }\n\n getColumnHeaderGroup(\n modelIndex: ModelIndex,\n depth: number\n ): ColumnHeaderGroup | undefined {\n const group = this.columnAtDepth(modelIndex, depth);\n if (isColumnHeaderGroup(group)) {\n return group;\n }\n return undefined;\n }\n\n getColumnHeaderParentGroup(\n modelIndex: ModelIndex,\n depth: number\n ): ColumnHeaderGroup | undefined {\n return this.columnHeaderParentMap.get(\n this.columnAtDepth(modelIndex, depth)?.name ?? ''\n );\n }\n\n columnAtDepth(\n x: ModelIndex,\n depth = 0\n ): ColumnHeaderGroup | Column | undefined {\n if (depth === 0) {\n return this.columns[x];\n }\n\n const columnName = this.columns[x]?.name;\n let group = this.columnHeaderParentMap.get(columnName);\n\n if (!group) {\n return undefined;\n }\n\n let currentDepth = group.depth;\n while (currentDepth < depth) {\n group = this.columnHeaderParentMap.get(group.name);\n if (!group) {\n return undefined;\n }\n currentDepth = group.depth;\n }\n\n if (group.depth === depth) {\n return group;\n }\n\n return undefined;\n }\n\n textForRowFooter(y: ModelIndex): string {\n const totalsRow = this.totalsRow(y);\n if (totalsRow != null && this.totals) {\n return this.totals.operationOrder[totalsRow];\n }\n return '';\n }\n\n private getMemoizedInitialMovedColumns = memoize(\n (layoutHints?: LayoutHints): readonly MoveOperation[] => {\n if (!layoutHints) {\n return [];\n }\n let movedColumns: MoveOperation[] = [];\n const { groupMap } = IrisGridUtils.parseColumnHeaderGroups(\n this,\n layoutHints?.columnGroups ?? []\n );\n\n const moveColumn = (name: string, toIndex: VisibleIndex) => {\n const modelIndex = this.getColumnIndexByName(name);\n if (modelIndex == null) {\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, toIndex, movedColumns);\n };\n\n const moveGroup = (name: string, toIndex: VisibleIndex) => {\n const group = groupMap.get(name);\n if (group == null) {\n throw new Error(`Unknown layout hint group: ${name}`);\n }\n const visibleRange = group.getVisibleRange(movedColumns);\n movedColumns = GridUtils.moveRange(visibleRange, toIndex, movedColumns);\n };\n\n const {\n frontColumns = [],\n backColumns = [],\n frozenColumns = [],\n } = layoutHints;\n\n if (frontColumns.length || backColumns.length || frozenColumns.length) {\n const usedColumns = new Set();\n\n let frontIndex = 0;\n frozenColumns.forEach(name => {\n if (usedColumns.has(name)) {\n throw new Error(\n `Column specified in multiple layout hints: ${name}`\n );\n }\n moveColumn(name, frontIndex);\n frontIndex += 1;\n });\n frontColumns.forEach(name => {\n if (usedColumns.has(name)) {\n throw new Error(\n `Column specified in multiple layout hints: ${name}`\n );\n }\n moveColumn(name, frontIndex);\n frontIndex += 1;\n });\n\n let backIndex = this.columnMap.size - 1;\n backColumns.forEach(name => {\n if (usedColumns.has(name)) {\n throw new Error(\n `Column specified in multiple layout hints: ${name}`\n );\n }\n moveColumn(name, backIndex);\n backIndex -= 1;\n });\n }\n\n const layoutHintColumnGroups = layoutHints?.columnGroups;\n if (layoutHintColumnGroups) {\n const columnGroups = [...groupMap.values()];\n columnGroups.sort((a, b) => a.depth - b.depth);\n\n columnGroups.forEach(group => {\n const firstChildName = group.children[0];\n const rightModelIndex = this.getColumnIndexByName(firstChildName);\n\n let rightVisibleIndex: number;\n\n if (rightModelIndex != null) {\n rightVisibleIndex = GridUtils.getVisibleIndex(\n rightModelIndex,\n movedColumns\n );\n } else {\n const firstChildGroup = groupMap.get(firstChildName);\n if (!firstChildGroup) {\n throw new Error(\n `Unknown column ${firstChildName} in group ${group.name}`\n );\n }\n\n const visibleRange = firstChildGroup.getVisibleRange(movedColumns);\n // Columns will be moved to start at the end of the first child group\n [, rightVisibleIndex] = visibleRange;\n }\n\n for (let i = 1; i < group.children.length; i += 1) {\n const childName = group.children[i];\n const childGroup = groupMap.get(childName);\n const childColumn = this.getColumnIndexByName(childName);\n\n if (childGroup) {\n // All columns in the group will be before or after the start index\n // Lower level groups are re-arranged first, so they will be contiguous\n const isBeforeGroup =\n childGroup.getVisibleRange(movedColumns)[0] < rightVisibleIndex;\n\n const moveToIndex = isBeforeGroup\n ? rightVisibleIndex - childGroup.childIndexes.length + 1\n : rightVisibleIndex + 1;\n\n moveGroup(childName, moveToIndex);\n rightVisibleIndex =\n moveToIndex + childGroup.childIndexes.length - 1;\n } else if (childColumn != null) {\n const isBeforeGroup =\n GridUtils.getVisibleIndex(childColumn, movedColumns) <\n rightVisibleIndex;\n\n const moveToIndex = isBeforeGroup\n ? rightVisibleIndex\n : rightVisibleIndex + 1;\n moveColumn(childName, moveToIndex);\n rightVisibleIndex = moveToIndex;\n }\n }\n });\n }\n\n this._movedColumns = movedColumns;\n return movedColumns;\n }\n );\n\n /**\n * Used to get the initial moved columns based on layout hints\n */\n get initialMovedColumns(): readonly MoveOperation[] {\n return this.getMemoizedInitialMovedColumns(this.layoutHints ?? undefined);\n }\n\n /**\n * Not currently used by anything.\n */\n get initialMovedRows(): MoveOperation[] {\n return EMPTY_ARRAY as MoveOperation[];\n }\n\n getMemoizedInitialColumnHeaderGroups = memoize(\n (layoutHints?: LayoutHints) =>\n IrisGridUtils.parseColumnHeaderGroups(\n this,\n layoutHints?.columnGroups ?? []\n ).groups\n );\n\n get initialColumnHeaderGroups(): ColumnHeaderGroup[] {\n return this.getMemoizedInitialColumnHeaderGroups(\n this.layoutHints ?? undefined\n );\n }\n\n getMemoizedColumnMap = memoize(\n (tableColumns: Column[]): Map<string, Column> => {\n const columnMap = new Map();\n tableColumns.forEach(col => columnMap.set(col.name, col));\n return columnMap;\n }\n );\n\n get columnMap(): Map<ColumnName, Column> {\n return this.getMemoizedColumnMap(this.table.columns);\n }\n\n get columnHeaderMaxDepth(): number {\n return this._columnHeaderMaxDepth ?? 1;\n }\n\n private set columnHeaderMaxDepth(depth: number) {\n this._columnHeaderMaxDepth = depth;\n }\n\n get columnHeaderGroupMap(): Map<string, ColumnHeaderGroup> {\n return this._columnHeaderGroupMap;\n }\n\n get columnHeaderGroups(): ColumnHeaderGroup[] {\n return this._columnHeaderGroups;\n }\n\n set columnHeaderGroups(groups: ColumnHeaderGroup[]) {\n if (groups === this._columnHeaderGroups) {\n return;\n }\n\n const {\n groups: newGroups,\n maxDepth,\n parentMap,\n groupMap,\n } = IrisGridUtils.parseColumnHeaderGroups(\n this,\n groups ?? this.initialColumnHeaderGroups\n );\n\n this._columnHeaderGroups = newGroups;\n this.columnHeaderMaxDepth = maxDepth;\n this.columnHeaderParentMap = parentMap;\n this._columnHeaderGroupMap = groupMap;\n }\n\n get groupedColumns(): Column[] {\n return [];\n }\n\n row(y: ModelIndex): R | null {\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 assertNotNull(operation);\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 x Column index to get the totals column from\n * @param y Row index to get the totals column from\n */\n totalsColumn(x: ModelIndex, y: ModelIndex): Column | undefined | null {\n const totalsRow = this.totalsRow(y);\n if (totalsRow == null) return null;\n\n const operation = this.totals?.operationOrder[totalsRow];\n const defaultOperation =\n this.totals?.defaultOperation ?? AggregationOperation.SUM;\n const tableColumn = this.columns[x];\n\n // Find the matching totals table column for the operation\n // When there are multiple aggregations, the column name will be the original name of the column with the operation appended afterward\n // When the the operation is the default operation OR there is only one operation, then the totals column name is just the original column name\n return this.totalsTable?.columns.find(\n column =>\n column.name === `${tableColumn.name}__${operation}` ||\n ((operation === defaultOperation ||\n this.totals?.operationOrder.length === 1) &&\n column.name === tableColumn.name)\n );\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 y The row in the model to get the totals row for\n * @returns The row within the totals table if it's a totals row, null otherwise\n */\n totalsRow(y: ModelIndex): ModelIndex | null {\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 y The row in the model to get the pending row for\n * @returns The row within the pending input rows if it's a pending row, null otherwise\n */\n pendingRow(y: ModelIndex): ModelIndex | null {\n const pendingRow = y - this.floatingTopRowCount - this.table.size;\n if (pendingRow >= 0 && pendingRow < this.pendingNewRowCount) {\n return pendingRow;\n }\n\n return null;\n }\n\n /**\n * Check if a row is a totals table row\n * @param y The row in the model to check if it's a totals table row\n * @returns True if the row is a totals row, false if not\n */\n isTotalsRow(y: ModelIndex): boolean {\n return this.totalsRow(y) != null;\n }\n\n /**\n * Check if a row is a pending input row\n * @param y The row in the model to check if it's a pending new row\n * @returns True if the row is a pending new row, false if not\n */\n isPendingRow(y: ModelIndex): boolean {\n return this.pendingRow(y) != null;\n }\n\n dataForCell(x: ModelIndex, y: ModelIndex): CellData | undefined {\n return this.row(y)?.data.get(x);\n }\n\n formatForCell(x: ModelIndex, y: ModelIndex): Format | undefined {\n return this.dataForCell(x, y)?.format;\n }\n\n valueForCell(x: ModelIndex, y: ModelIndex): unknown {\n const data = this.dataForCell(x, y);\n\n /* JS API current sets null values as undefined in some instances. This means \n we need to nullish coaelesce so all undefined values from the API return null \n since the data has been fetched. undefined is used to indicate the API has not \n fetched data yet */\n if (data) {\n return data.value ?? null;\n }\n return undefined;\n }\n\n copyViewportData(data: ViewportData): void {\n if (data == null) {\n log.warn('invalid data!');\n return;\n }\n\n this.viewportData = this.extractViewportData(data);\n this.formattedStringData = [];\n }\n\n copyTotalsData(totalsData: ViewportData): void {\n if (totalsData == null) {\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 * Use this as the canonical column index since things like layoutHints could have\n * changed the column order.\n */\n getColumnIndexByName(name: ColumnName): number | undefined {\n return this.getColumnIndicesByNameMap(this.columns).get(name);\n }\n\n getColumnIndicesByNameMap = memoize(\n (columns: Column[]): Map<ColumnName, ModelIndex> => {\n const indices = new Map();\n columns.forEach(({ name }, i) => indices.set(name, i));\n return indices;\n }\n );\n\n /**\n * Copies all the viewport data into an object that we can reference later.\n * @param data The data to copy from\n */\n extractViewportData(data: ViewportData): UIViewportData<R> {\n const newData: UIViewportData<R> = {\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: Row, columns: Column[]): R {\n const data = new Map<ModelIndex, CellData>();\n for (let c = 0; c < columns.length; c += 1) {\n const column = columns[c];\n\n const index = this.getColumnIndexByName(column.name);\n assertNotNull(index);\n data.set(index, {\n value: row.get(column),\n format: row.getFormat(column),\n });\n }\n\n return { data } as R;\n }\n\n closeSubscription(): void {\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(): FilterCondition[] {\n return this.table.filter;\n }\n\n set filter(filter: FilterCondition[]) {\n this.closeSubscription();\n this.table.applyFilter(filter);\n this.applyViewport();\n }\n\n get formatter(): Formatter {\n return this.irisFormatter;\n }\n\n set formatter(formatter: Formatter) {\n this.irisFormatter = formatter;\n this.formattedStringData = [];\n this.dispatchEvent(\n new EventShimCustomEvent(IrisGridModel.EVENT.FORMATTER_UPDATED)\n );\n }\n\n displayString(\n value: unknown,\n columnType: string,\n columnName = '',\n formatOverride?: { formatString: string }\n ): string {\n return this.getCachedFormattedString(\n this.formatter,\n value,\n columnType,\n columnName,\n formatOverride\n );\n }\n\n get sort(): Sort[] {\n return this.table.sort;\n }\n\n set sort(sort: Sort[]) {\n this.closeSubscription();\n this.table.applySort(sort);\n this.applyViewport();\n }\n\n set totalsConfig(totalsConfig: UITotalsTableConfig | null) {\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 EventShimCustomEvent(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 EventShimCustomEvent(IrisGridModel.EVENT.REQUEST_FAILED, {\n detail: err,\n })\n );\n });\n }\n\n setTotalsTable(totalsTable: TotalsTable | null): void {\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(this.totalsTable);\n }\n }\n\n setViewport = throttle(\n (top: VisibleIndex, bottom: VisibleIndex, columns: Column[]) => {\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 SET_VIEWPORT_THROTTLE\n );\n\n /**\n * Applies the current viewport to the underlying table.\n */\n applyViewport = throttle(\n (): void => {\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 APPLY_VIEWPORT_THROTTLE,\n { leading: false }\n );\n\n applyBufferedViewport(\n viewportTop: number,\n viewportBottom: number,\n columns: Column[]\n ): void {\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(\n ranges: GridRange[],\n includeHeaders = false,\n formatValue: (value: unknown, column: Column) => unknown = value => value,\n consolidateRanges = true\n ): Promise<unknown[][]> {\n if (this.subscription == null) {\n throw new Error('No subscription available');\n }\n\n const consolidated = consolidateRanges\n ? GridRange.consolidate(ranges)\n : 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<number>();\n const tableRanges: GridRange[] = [];\n const bottomFloatingRowsSet = new Set<number>();\n for (let i = 0; i < consolidated.length; i += 1) {\n const range = consolidated[i];\n assertNotNull(range.endRow);\n assertNotNull(range.startRow);\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 // 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 const index = this.getColumnIndexByName(column.name);\n assertNotNull(index);\n return formatValue(this.valueForCell(index, row), column);\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 = this.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 const index = this.getColumnIndexByName(column.name);\n assertNotNull(index);\n return formatValue(this.valueForCell(index, row), column);\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 ranges The ranges to get the snapshot for\n * @param includeHeaders Whether to include the headers in the snapshot or not\n * @param formatValue Function for formatting the raw value into a string\n * @returns A formatted string of all the data, columns separated by `\\t` and rows separated by `\\n`\n */\n async textSnapshot(\n ranges: GridRange[],\n includeHeaders = false,\n formatValue: (\n value: unknown,\n column: Column,\n row?: Row\n ) => string = value => `${value}`\n ): Promise<string> {\n log.debug2('textSnapshot', ranges, includeHeaders);\n\n const data = await this.snapshot(\n ranges,\n includeHeaders,\n formatValue,\n false\n );\n return data.map(row => row.join('\\t')).join('\\n');\n }\n\n async valuesTable(column: Column): Promise<Table> {\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 getCachedFormattedString = memoizeClear(\n (\n formatter: Formatter,\n value: unknown,\n columnType: string,\n columnName: ColumnName,\n formatOverride?: { formatString: string }\n ): string =>\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: number, bottom: number): [\n number,\n number\n ] => {\n const viewHeight = bottom - top;\n const viewportTop = Math.max(\n 0,\n top - viewHeight * IrisGridTableModelTemplate.ROW_BUFFER_PAGES\n );\n const viewportBottom =\n bottom + viewHeight * IrisGridTableModelTemplate.ROW_BUFFER_PAGES;\n return [viewportTop, viewportBottom];\n });\n\n getCachedPendingErrors = memoize(\n (\n pendingDataMap: PendingDataMap,\n columns: Column[],\n keyColumnCount: number\n ) => {\n const map = new Map<ModelIndex, MissingKeyError[]>();\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: ModelIndex, depth: number): boolean {\n if (modelIndex < 0 || modelIndex >= this.columnCount) {\n return false;\n }\n\n // All groups are movable\n if (depth > 0) {\n return true;\n }\n\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 !columnName\n ) {\n return false;\n }\n return !this.isKeyColumn(modelIndex);\n }\n\n isKeyColumn(x: ModelIndex): boolean {\n return x < (this.inputTable?.keyColumns.length ?? 0);\n }\n\n isRowMovable(): boolean {\n return false;\n }\n\n isEditableRange(range: GridRange): boolean {\n // Make sure we have an input table and a valid range\n if (this.inputTable == null || !GridRange.isBounded(range)) {\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 if (\n !(\n isPendingRange ||\n (this.inputTable.keyColumns.length !== 0 &&\n range.startColumn >= this.inputTable.keyColumns.length &&\n range.endColumn >= this.inputTable.keyColumns.length)\n )\n ) {\n return false;\n }\n\n // Editing the aggregations/totals which are floating above/below is not allowed\n if (\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 return false;\n }\n\n return true;\n }\n\n isDeletableRange(range: GridRange): boolean {\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: GridRange[]): boolean {\n return ranges.every(range => this.isEditableRange(range));\n }\n\n isDeletableRanges(ranges: GridRange[]): boolean {\n return ranges.every(range => this.isDeletableRange(range));\n }\n\n /**\n * @returns A range corresponding to the underlying table\n */\n getTableAreaRange(): GridRange {\n return new GridRange(\n null,\n this.floatingTopRowCount,\n null,\n this.floatingTopRowCount + this.table.size - 1\n );\n }\n\n /**\n * @returns A range corresponding to the pending new rows\n */\n getPendingAreaRange(): GridRange {\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 x The column to set\n * @param y The row to set\n * @param value The value to set\n * @returns A promise that resolves successfully when the operation is complete, or rejects if there's an error\n */\n async setValueForCell(\n x: ModelIndex,\n y: ModelIndex,\n text: string\n ): Promise<void> {\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 ranges The ranges to set\n * @param value The values to set\n * @returns A promise that resolves successfully when the operation is complete, or rejects if there's an error\n */\n async setValueForRanges(ranges: GridRange[], text: string): Promise<void> {\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<Column>();\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: (string | null)[] = [];\n GridRange.forEachCell(ranges, (x, y) => {\n const column = this.columns[x];\n columnSet.add(column);\n if (formattedText[x] === undefined) {\n const value = this.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 assertNotNull(range);\n return 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() } as R);\n }\n const column = this.columns[columnIndex];\n const row = newDataMap.get(rowIndex);\n assertNotNull(row);\n const { data: rowData } = row;\n const newRowData = new Map(rowData);\n const value = this.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 EventShimCustomEvent(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 =>\n new GridRange(\n null,\n range?.startRow ?? null,\n null,\n range?.endRow ?? null\n )\n )\n );\n const newRows = data.map(row => {\n const newRow: Record<ColumnName, unknown> = {};\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] = this.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 const cellText = formattedText[x];\n assertNotNull(cellText);\n this.cacheFormattedValue(x, y, cellText);\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: EditOperation[] = []): Promise<void> {\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 = this.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() } as R);\n }\n\n const row = newDataMap.get(pendingRow);\n assertNotNull(row);\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 EventShimCustomEvent(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<ModelIndex, EditOperation[]>());\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(range => {\n assertNotNull(range);\n return 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 assertNotNull(range);\n const rangeRowCount = GridRange.rowCount([range]);\n if (r < rangeRowCount) {\n assertNotNull(range.startRow);\n rowIndex = range.startRow + r;\n break;\n }\n r -= rangeRowCount;\n }\n\n const newRow: Record<ColumnName, unknown> = {};\n for (let c = 0; c < this.columns.length; c += 1) {\n newRow[this.columns[c].name] = row[c];\n }\n assertNotNull(rowIndex);\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] = this.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 = this.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\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(): Promise<void> {\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: Record<ColumnName, unknown>[] = [];\n this.pendingNewDataMap.forEach(row => {\n const newRow: Record<ColumnName, unknown> = {};\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.pendingNewRowCount = Math.max(\n 0,\n (this.viewport?.bottom ?? 0) - this.table.size\n );\n this.formattedStringData = [];\n\n this.dispatchEvent(\n new EventShimCustomEvent(IrisGridModel.EVENT.PENDING_DATA_UPDATED)\n );\n } finally {\n this.isSaveInProgress = false;\n }\n }\n\n editValueForCell(x: ModelIndex, y: ModelIndex): string | null {\n return this.textValueForCell(x, y);\n }\n\n async delete(ranges: GridRange[]): Promise<void> {\n if (!this.isDeletableRanges(ranges)) {\n throw new Error(`Undeletable ranges ${ranges}`);\n }\n\n assertNotNull(this.inputTable);\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 assertNotNull(range);\n\n return 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 assertNotNull(pendingRange.startRow);\n assertNotNull(pendingRange.endRow);\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 EventShimCustomEvent(IrisGridModel.EVENT.PENDING_DATA_UPDATED)\n );\n\n this.dispatchEvent(new EventShimCustomEvent(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;\n }\n const [data, deleteTable] = await Promise.all([\n // Need to get the key values of each row\n this.snapshot(\n tableRanges.map(range => {\n assertNotNull(range);\n return 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 = this.tableUtils.makeFilterRawValue(\n column.type,\n value\n );\n const filter = column.filter().eq(filterValue);\n columnFilters.push(filter);\n }\n return columnFilters.reduce((agg, curr) => agg?.and(curr) ?? curr);\n });\n\n const filter = filters.reduce((agg, curr) => agg?.or(curr) ?? curr);\n deleteTable.applyFilter([filter]);\n\n // await this.inputTable?.deleteTable(deleteTable);\n deleteTable.close();\n }\n\n isValidForCell(x: ModelIndex, y: ModelIndex, value: string): boolean {\n try {\n const column = this.columns[x];\n this.tableUtils.makeValue(column.type, value, this.formatter.timeZone);\n return true;\n } catch (e) {\n return false;\n }\n }\n}\n\nexport default IrisGridTableModelTemplate;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"IrisGridTableModelTemplate.js","names":["memoize","throttle","GridRange","GridUtils","memoizeClear","Log","EventShimCustomEvent","PromiseUtils","assertNotNull","TableUtils","Formatter","FormatterUtils","IrisGridModel","AggregationOperation","IrisGridUtils","MissingKeyError","isColumnHeaderGroup","log","module","SET_VIEWPORT_THROTTLE","APPLY_VIEWPORT_THROTTLE","EMPTY_ARRAY","isIrisGridTableModelTemplate","model","table","undefined","IrisGridTableModelTemplate","seekRow","startRow","column","valueType","value","insensitive","contains","isBackwards","Error","export","columnStatistics","customColumns","formatColumns","updateFrozenColumns","columns","rollupConfig","selectDistinctColumns","names","constructor","dh","formatter","inputTable","Map","layoutHints","movedColumns","groupMap","parseColumnHeaderGroups","columnGroups","moveColumn","name","toIndex","modelIndex","getColumnIndexByName","visibleIndex","getVisibleIndex","moveItem","moveGroup","group","get","visibleRange","getVisibleRange","moveRange","frontColumns","backColumns","frozenColumns","length","usedColumns","Set","frontIndex","forEach","has","backIndex","columnMap","size","layoutHintColumnGroups","values","sort","a","b","depth","firstChildName","children","rightModelIndex","rightVisibleIndex","firstChildGroup","i","childName","childGroup","childColumn","isBeforeGroup","moveToIndex","childIndexes","_movedColumns","groups","tableColumns","col","set","indices","top","bottom","error","viewport","debug2","applyViewport","viewportTop","viewportBottom","getCachedViewportRowRange","applyBufferedViewport","leading","columnType","columnName","formatOverride","getFormattedString","max","isCustomColumnFormatDefined","viewHeight","Math","ROW_BUFFER_PAGES","pendingDataMap","keyColumnCount","map","row","rowIndex","data","rowData","push","handleTableDisconnect","bind","handleTableReconnect","handleTableUpdate","handleTotalsUpdate","handleRequestFailed","handleCustomColumnsChanged","irisFormatter","irisGridUtils","subscription","tableUtils","viewportData","formattedStringData","pendingStringData","isSaveInProgress","totalsTable","totalsTablePromise","totals","totalsDataMap","pendingNewDataMap","pendingNewRowCount","columnHeaderGroups","close","cancel","startListening","addEventListener","Table","EVENT_DISCONNECT","EVENT_RECONNECT","EVENT_UPDATED","Client","EVENT_REQUEST_FAILED","EVENT_CUSTOMCOLUMNSCHANGED","addTotalsListeners","stopListening","removeEventListener","removeTotalsListeners","closeSubscription","setViewport","dispatchEvent","EVENT","DISCONNECT","RECONNECT","event","copyViewportData","detail","UPDATED","copyTotalsData","REQUEST_FAILED","COLUMNS_CHANGED","rowCount","operationOrder","pendingDataErrors","getCachedPendingErrors","keyColumns","isValidIndex","columnIndex","maxPendingDataRow","PENDING_DATA_UPDATED","pendingRowCount","count","keys","columnCount","floatingBottomRowCount","showOnTop","floatingTopRowCount","isChartBuilderAvailable","isTotalsAvailable","getTotalsTable","isEditable","cacheFormattedValue","x","y","text","cachePendingValue","clearPendingValue","textValueForCell","valueForCell","totalsColumn","hasCustomColumnFormat","getCachedCustomColumnFormatFlag","type","formatForCell","formatString","displayString","textForCell","isKeyColumn","pendingRow","isTextType","truncationCharForCell","isNumberType","truncateNumbersWithPound","colorForCell","theme","dataForCell","format","nullStringColor","color","isPendingRow","pendingTextColor","isDateType","dateColor","positiveNumberColor","negativeNumberColor","zeroNumberColor","errorTextColor","textColor","backgroundColorForCell","backgroundColor","textAlignForCell","textForColumnHeader","header","columnAtDepth","isNew","colorForColumnHeader","getColumnHeaderGroup","getColumnHeaderParentGroup","columnHeaderParentMap","currentDepth","textForRowFooter","totalsRow","initialMovedColumns","getMemoizedInitialMovedColumns","initialMovedRows","initialColumnHeaderGroups","getMemoizedInitialColumnHeaderGroups","getMemoizedColumnMap","columnHeaderMaxDepth","_columnHeaderMaxDepth","columnHeaderGroupMap","_columnHeaderGroupMap","_columnHeaderGroups","newGroups","maxDepth","parentMap","groupedColumns","totalsRowCount","operation","offset","viewportY","rows","defaultOperation","SUM","tableColumn","find","isTotalsRow","warn","extractViewportData","totalsData","dataMap","operationMap","c","split","findIndex","getFormat","getColumnIndicesByNameMap","newData","r","newRow","extractViewportRow","index","filter","applyFilter","FORMATTER_UPDATED","getCachedFormattedString","applySort","totalsConfig","debug","setTotalsTable","makeCancelable","then","catch","err","isCanceled","listenerCount","snapshot","ranges","includeHeaders","formatValue","consolidateRanges","consolidated","consolidate","isValidSnapshotRanges","topFloatingRowsSet","tableRanges","bottomFloatingRowsSet","range","endRow","add","startColumn","min","endColumn","columnsFromRanges","result","topFloatingRows","rangeSet","rangeSetFromRanges","bottomFloatingRows","textSnapshot","join","valuesTable","copy","selectDistinct","isColumnMovable","includes","isRowMovable","isEditableRange","isBounded","isPendingRange","isDeletableRange","isEditableRanges","every","isDeletableRanges","getTableAreaRange","getPendingAreaRange","setValueForCell","setValueForRanges","columnSet","formattedText","forEachCell","makeValue","timeZone","pendingAreaRange","pendingRanges","intersection","newDataMap","newRowData","delete","tableAreaRange","newRows","addRows","cellText","setValues","edits","edit","makeCell","rowEditMap","reduce","rowMap","dataIndex","rangeRowCount","rowEdits","info","commitPending","editValueForCell","pendingRange","deleteTable","Promise","all","filters","columnFilters","filterValue","makeFilterRawValue","eq","agg","curr","and","or","isValidForCell","e"],"sources":["../src/IrisGridTableModelTemplate.ts"],"sourcesContent":["/* eslint-disable no-underscore-dangle */\n/* eslint class-methods-use-this: \"off\" */\nimport memoize from 'memoize-one';\nimport throttle from 'lodash.throttle';\nimport {\n EditOperation,\n GridRange,\n GridUtils,\n memoizeClear,\n ModelIndex,\n MoveOperation,\n VisibleIndex,\n} from '@deephaven/grid';\nimport type {\n Column,\n ColumnStatistics,\n CustomColumn,\n dh as DhType,\n FilterCondition,\n Format,\n InputTable,\n LayoutHints,\n RollupConfig,\n Row,\n Sort,\n Table,\n TableTemplate,\n TableViewportSubscription,\n TotalsTable,\n ValueTypeUnion,\n ViewportData,\n} from '@deephaven/jsapi-types';\nimport Log from '@deephaven/log';\nimport {\n CancelablePromise,\n EventShimCustomEvent,\n PromiseUtils,\n assertNotNull,\n} from '@deephaven/utils';\nimport { TableUtils, Formatter, FormatterUtils } from '@deephaven/jsapi-utils';\nimport IrisGridModel from './IrisGridModel';\nimport AggregationOperation from './sidebar/aggregations/AggregationOperation';\nimport IrisGridUtils from './IrisGridUtils';\nimport MissingKeyError from './MissingKeyError';\nimport {\n ColumnName,\n UITotalsTableConfig,\n UIRow,\n PendingDataMap,\n CellData,\n UIViewportData,\n PendingDataErrorMap,\n} from './CommonTypes';\nimport { IrisGridThemeType } from './IrisGridTheme';\nimport ColumnHeaderGroup, { isColumnHeaderGroup } from './ColumnHeaderGroup';\n\nconst log = Log.module('IrisGridTableModel');\n\nconst SET_VIEWPORT_THROTTLE = 150;\nconst APPLY_VIEWPORT_THROTTLE = 0;\n\nconst EMPTY_ARRAY: unknown[] = [];\n\nexport function isIrisGridTableModelTemplate(\n model: IrisGridModel\n): model is IrisGridTableModelTemplate {\n return (model as IrisGridTableModelTemplate).table !== undefined;\n}\n\n/**\n * Template model for a grid\n */\n\nclass IrisGridTableModelTemplate<\n T extends TableTemplate<T> = Table,\n R extends UIRow = UIRow\n> extends IrisGridModel {\n static ROW_BUFFER_PAGES = 1;\n\n seekRow(\n startRow: number,\n column: Column,\n valueType: ValueTypeUnion,\n value: unknown,\n insensitive?: boolean | undefined,\n contains?: boolean | undefined,\n isBackwards?: boolean | undefined\n ): Promise<number> {\n throw new Error('Method not implemented.');\n }\n\n export(): Promise<Table> {\n throw new Error('Method not implemented.');\n }\n\n columnStatistics(column: Column): Promise<ColumnStatistics> {\n throw new Error('Method not implemented.');\n }\n\n get customColumns(): ColumnName[] {\n return [];\n }\n\n set customColumns(customColumns: ColumnName[]) {\n throw new Error('Method not implemented.');\n }\n\n get formatColumns(): CustomColumn[] {\n return [];\n }\n\n set formatColumns(formatColumns: CustomColumn[]) {\n throw new Error('Method not implemented.');\n }\n\n updateFrozenColumns(columns: ColumnName[]): void {\n throw new Error('Method not implemented.');\n }\n\n get rollupConfig(): RollupConfig | null {\n throw new Error('Method not implemented.');\n }\n\n set rollupConfig(rollupConfig: RollupConfig | null) {\n throw new Error('Method not implemented.');\n }\n\n get selectDistinctColumns(): ColumnName[] {\n throw new Error('Method not implemented.');\n }\n\n set selectDistinctColumns(names: ColumnName[]) {\n throw new Error('Method not implemented.');\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(): Column[] {\n return this.table.columns;\n }\n\n dh: DhType;\n\n irisGridUtils: IrisGridUtils;\n\n tableUtils: TableUtils;\n\n private irisFormatter: Formatter;\n\n inputTable: InputTable | null;\n\n private subscription: TableViewportSubscription | null;\n\n table: T;\n\n viewport: {\n top: VisibleIndex;\n bottom: VisibleIndex;\n columns: Column[];\n } | null;\n\n viewportData: UIViewportData<R> | null;\n\n formattedStringData: (string | null)[][];\n\n private pendingStringData: (string | null)[][];\n\n private isSaveInProgress: boolean;\n\n private totalsTable: TotalsTable | null;\n\n totalsTablePromise: CancelablePromise<TotalsTable> | null;\n\n totals: UITotalsTableConfig | null;\n\n private totalsDataMap: Map<string, R> | null;\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 private pendingNewDataMap: PendingDataMap<R>;\n\n private pendingNewRowCount = 0;\n\n private _columnHeaderGroupMap: Map<string, ColumnHeaderGroup> = new Map();\n\n private columnHeaderParentMap: Map<string, ColumnHeaderGroup> = new Map();\n\n private _columnHeaderMaxDepth: number | null = null;\n\n private _columnHeaderGroups: ColumnHeaderGroup[] = [];\n\n private _movedColumns: MoveOperation[] | null = null;\n\n /**\n * @param dh JSAPI instance\n * @param table Iris data table to be used in the model\n * @param formatter The formatter to use when getting formats\n * @param inputTable Iris input table associated with this table\n */\n constructor(\n dh: DhType,\n table: T,\n formatter = new Formatter(dh),\n inputTable: InputTable | null = null\n ) {\n super(dh);\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\n this.dh = dh;\n this.irisFormatter = formatter;\n this.irisGridUtils = new IrisGridUtils(dh);\n this.inputTable = inputTable;\n this.subscription = null;\n this.table = table;\n this.tableUtils = new TableUtils(dh);\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 // 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.columnHeaderGroups = IrisGridUtils.parseColumnHeaderGroups(\n this,\n this.layoutHints?.columnGroups ?? []\n ).groups;\n }\n\n close(): void {\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(): void {\n super.startListening();\n\n const { dh } = this;\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(): void {\n super.stopListening();\n\n const { dh } = this;\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: TotalsTable): void {\n const { dh } = this;\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: TotalsTable): void {\n const { dh } = this;\n totalsTable.removeEventListener(\n dh.Table.EVENT_UPDATED,\n this.handleTotalsUpdate\n );\n }\n\n handleTableDisconnect(): void {\n this.dispatchEvent(\n new EventShimCustomEvent(IrisGridModel.EVENT.DISCONNECT)\n );\n }\n\n handleTableReconnect(): void {\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.RECONNECT));\n }\n\n handleTableUpdate(event: CustomEvent): void {\n this.copyViewportData(event.detail);\n\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.UPDATED));\n }\n\n handleTotalsUpdate(event: CustomEvent): void {\n this.copyTotalsData(event.detail);\n\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.UPDATED));\n }\n\n handleRequestFailed(event: CustomEvent): void {\n this.dispatchEvent(\n new EventShimCustomEvent(IrisGridModel.EVENT.REQUEST_FAILED, event)\n );\n }\n\n handleCustomColumnsChanged(): void {\n this.dispatchEvent(\n new EventShimCustomEvent(IrisGridModel.EVENT.COLUMNS_CHANGED, {\n detail: this.columns,\n })\n );\n }\n\n get rowCount(): number {\n return (\n this.table.size +\n this.pendingNewRowCount +\n (this.totals?.operationOrder?.length ?? 0)\n );\n }\n\n get pendingDataErrors(): PendingDataErrorMap {\n return this.getCachedPendingErrors(\n this.pendingNewDataMap,\n this.columns,\n this.inputTable?.keyColumns.length ?? 0\n );\n }\n\n get pendingDataMap(): PendingDataMap<R> {\n return this.pendingNewDataMap;\n }\n\n set pendingDataMap(map: PendingDataMap<R>) {\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 EventShimCustomEvent(IrisGridModel.EVENT.PENDING_DATA_UPDATED)\n );\n }\n\n get pendingRowCount(): number {\n return this.pendingNewRowCount;\n }\n\n set pendingRowCount(count: number) {\n if (count === this.pendingNewRowCount) {\n return;\n }\n\n this.pendingNewRowCount = Math.max(0, count, this.maxPendingDataRow);\n\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.UPDATED));\n }\n\n get maxPendingDataRow(): number {\n return this.pendingNewDataMap.size > 0\n ? Math.max(...this.pendingNewDataMap.keys()) + 1\n : 0;\n }\n\n get columnCount(): number {\n return this.columns.length;\n }\n\n get floatingBottomRowCount(): number {\n return this.totals != null && this.totals.showOnTop\n ? 0\n : this.totals?.operationOrder?.length ?? 0;\n }\n\n get floatingTopRowCount(): number {\n return this.totals != null && this.totals.showOnTop\n ? this.totals?.operationOrder?.length ?? 0\n : 0;\n }\n\n get isChartBuilderAvailable(): boolean {\n return true;\n }\n\n get isTotalsAvailable(): boolean {\n return this.table.getTotalsTable != null;\n }\n\n get isEditable(): boolean {\n return !this.isSaveInProgress && this.inputTable != null;\n }\n\n cacheFormattedValue(x: ModelIndex, y: ModelIndex, text: string | null): void {\n if (this.formattedStringData[x] == null) {\n this.formattedStringData[x] = [];\n }\n this.formattedStringData[x][y] = text;\n }\n\n cachePendingValue(x: ModelIndex, y: ModelIndex, text: string | null): void {\n if (this.pendingStringData[x] == null) {\n this.pendingStringData[x] = [];\n }\n this.pendingStringData[x][y] = text;\n }\n\n clearPendingValue(x: ModelIndex, y: ModelIndex): void {\n const column = this.pendingStringData[x];\n if (column != null) {\n delete column[y];\n }\n }\n\n textValueForCell(x: ModelIndex, y: ModelIndex): string | null | undefined {\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 if (value === undefined) {\n return undefined;\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;\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: ModelIndex, y: ModelIndex): string {\n const text = this.textValueForCell(x, y);\n if (text == null && this.isKeyColumn(x)) {\n const pendingRow = this.pendingRow(y);\n if (pendingRow != null && 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\n if (TableUtils.isTextType(this.columns[x]?.type)) {\n if (text === null) {\n return 'null';\n }\n\n if (text === '') {\n return 'empty';\n }\n }\n\n return text ?? '';\n }\n\n truncationCharForCell(x: ModelIndex): '#' | undefined {\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: 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 && format.color) {\n return format.color;\n }\n\n if (this.isPendingRow(y)) {\n // Data entered in a pending row\n assertNotNull(theme.pendingTextColor);\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 assertNotNull(theme.dateColor);\n return theme.dateColor;\n }\n if (TableUtils.isNumberType(column.type)) {\n if ((value as number) > 0) {\n assertNotNull(theme.positiveNumberColor);\n return theme.positiveNumberColor;\n }\n if ((value as number) < 0) {\n assertNotNull(theme.negativeNumberColor);\n return theme.negativeNumberColor;\n }\n assertNotNull(theme.zeroNumberColor);\n return theme.zeroNumberColor;\n }\n }\n } else if (this.isPendingRow(y) && this.isKeyColumn(x)) {\n assertNotNull(theme.errorTextColor);\n return theme.errorTextColor;\n }\n\n return theme.textColor;\n }\n\n backgroundColorForCell(x: ModelIndex, y: ModelIndex): string | null {\n return this.formatForCell(x, y)?.backgroundColor ?? null;\n }\n\n textAlignForCell(x: ModelIndex): CanvasTextAlign {\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: ModelIndex, depth = 0): string | undefined {\n const header = this.columnAtDepth(x, depth);\n if (isColumnHeaderGroup(header)) {\n return header.isNew ? '' : header.name;\n }\n return header?.name;\n }\n\n colorForColumnHeader(x: ModelIndex, depth = 0): string | null {\n const column = this.columnAtDepth(x, depth);\n if (isColumnHeaderGroup(column)) {\n return column.color ?? null;\n }\n return null;\n }\n\n getColumnHeaderGroup(\n modelIndex: ModelIndex,\n depth: number\n ): ColumnHeaderGroup | undefined {\n const group = this.columnAtDepth(modelIndex, depth);\n if (isColumnHeaderGroup(group)) {\n return group;\n }\n return undefined;\n }\n\n getColumnHeaderParentGroup(\n modelIndex: ModelIndex,\n depth: number\n ): ColumnHeaderGroup | undefined {\n return this.columnHeaderParentMap.get(\n this.columnAtDepth(modelIndex, depth)?.name ?? ''\n );\n }\n\n columnAtDepth(\n x: ModelIndex,\n depth = 0\n ): ColumnHeaderGroup | Column | undefined {\n if (depth === 0) {\n return this.columns[x];\n }\n\n const columnName = this.columns[x]?.name;\n let group = this.columnHeaderParentMap.get(columnName);\n\n if (!group) {\n return undefined;\n }\n\n let currentDepth = group.depth;\n while (currentDepth < depth) {\n group = this.columnHeaderParentMap.get(group.name);\n if (!group) {\n return undefined;\n }\n currentDepth = group.depth;\n }\n\n if (group.depth === depth) {\n return group;\n }\n\n return undefined;\n }\n\n textForRowFooter(y: ModelIndex): string {\n const totalsRow = this.totalsRow(y);\n if (totalsRow != null && this.totals) {\n return this.totals.operationOrder[totalsRow];\n }\n return '';\n }\n\n private getMemoizedInitialMovedColumns = memoize(\n (layoutHints?: LayoutHints): readonly MoveOperation[] => {\n if (!layoutHints) {\n return [];\n }\n let movedColumns: MoveOperation[] = [];\n const { groupMap } = IrisGridUtils.parseColumnHeaderGroups(\n this,\n layoutHints?.columnGroups ?? []\n );\n\n const moveColumn = (name: string, toIndex: VisibleIndex) => {\n const modelIndex = this.getColumnIndexByName(name);\n if (modelIndex == null) {\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, toIndex, movedColumns);\n };\n\n const moveGroup = (name: string, toIndex: VisibleIndex) => {\n const group = groupMap.get(name);\n if (group == null) {\n throw new Error(`Unknown layout hint group: ${name}`);\n }\n const visibleRange = group.getVisibleRange(movedColumns);\n movedColumns = GridUtils.moveRange(visibleRange, toIndex, movedColumns);\n };\n\n const {\n frontColumns = [],\n backColumns = [],\n frozenColumns = [],\n } = layoutHints;\n\n if (frontColumns.length || backColumns.length || frozenColumns.length) {\n const usedColumns = new Set();\n\n let frontIndex = 0;\n frozenColumns.forEach(name => {\n if (usedColumns.has(name)) {\n throw new Error(\n `Column specified in multiple layout hints: ${name}`\n );\n }\n moveColumn(name, frontIndex);\n frontIndex += 1;\n });\n frontColumns.forEach(name => {\n if (usedColumns.has(name)) {\n throw new Error(\n `Column specified in multiple layout hints: ${name}`\n );\n }\n moveColumn(name, frontIndex);\n frontIndex += 1;\n });\n\n let backIndex = this.columnMap.size - 1;\n backColumns.forEach(name => {\n if (usedColumns.has(name)) {\n throw new Error(\n `Column specified in multiple layout hints: ${name}`\n );\n }\n moveColumn(name, backIndex);\n backIndex -= 1;\n });\n }\n\n const layoutHintColumnGroups = layoutHints?.columnGroups;\n if (layoutHintColumnGroups) {\n const columnGroups = [...groupMap.values()];\n columnGroups.sort((a, b) => a.depth - b.depth);\n\n columnGroups.forEach(group => {\n const firstChildName = group.children[0];\n const rightModelIndex = this.getColumnIndexByName(firstChildName);\n\n let rightVisibleIndex: number;\n\n if (rightModelIndex != null) {\n rightVisibleIndex = GridUtils.getVisibleIndex(\n rightModelIndex,\n movedColumns\n );\n } else {\n const firstChildGroup = groupMap.get(firstChildName);\n if (!firstChildGroup) {\n throw new Error(\n `Unknown column ${firstChildName} in group ${group.name}`\n );\n }\n\n const visibleRange = firstChildGroup.getVisibleRange(movedColumns);\n // Columns will be moved to start at the end of the first child group\n [, rightVisibleIndex] = visibleRange;\n }\n\n for (let i = 1; i < group.children.length; i += 1) {\n const childName = group.children[i];\n const childGroup = groupMap.get(childName);\n const childColumn = this.getColumnIndexByName(childName);\n\n if (childGroup) {\n // All columns in the group will be before or after the start index\n // Lower level groups are re-arranged first, so they will be contiguous\n const isBeforeGroup =\n childGroup.getVisibleRange(movedColumns)[0] < rightVisibleIndex;\n\n const moveToIndex = isBeforeGroup\n ? rightVisibleIndex - childGroup.childIndexes.length + 1\n : rightVisibleIndex + 1;\n\n moveGroup(childName, moveToIndex);\n rightVisibleIndex =\n moveToIndex + childGroup.childIndexes.length - 1;\n } else if (childColumn != null) {\n const isBeforeGroup =\n GridUtils.getVisibleIndex(childColumn, movedColumns) <\n rightVisibleIndex;\n\n const moveToIndex = isBeforeGroup\n ? rightVisibleIndex\n : rightVisibleIndex + 1;\n moveColumn(childName, moveToIndex);\n rightVisibleIndex = moveToIndex;\n }\n }\n });\n }\n\n this._movedColumns = movedColumns;\n return movedColumns;\n }\n );\n\n /**\n * Used to get the initial moved columns based on layout hints\n */\n get initialMovedColumns(): readonly MoveOperation[] {\n return this.getMemoizedInitialMovedColumns(this.layoutHints ?? undefined);\n }\n\n /**\n * Not currently used by anything.\n */\n get initialMovedRows(): MoveOperation[] {\n return EMPTY_ARRAY as MoveOperation[];\n }\n\n getMemoizedInitialColumnHeaderGroups = memoize(\n (layoutHints?: LayoutHints) =>\n IrisGridUtils.parseColumnHeaderGroups(\n this,\n layoutHints?.columnGroups ?? []\n ).groups\n );\n\n get initialColumnHeaderGroups(): ColumnHeaderGroup[] {\n return this.getMemoizedInitialColumnHeaderGroups(\n this.layoutHints ?? undefined\n );\n }\n\n getMemoizedColumnMap = memoize(\n (tableColumns: Column[]): Map<string, Column> => {\n const columnMap = new Map();\n tableColumns.forEach(col => columnMap.set(col.name, col));\n return columnMap;\n }\n );\n\n get columnMap(): Map<ColumnName, Column> {\n return this.getMemoizedColumnMap(this.table.columns);\n }\n\n get columnHeaderMaxDepth(): number {\n return this._columnHeaderMaxDepth ?? 1;\n }\n\n private set columnHeaderMaxDepth(depth: number) {\n this._columnHeaderMaxDepth = depth;\n }\n\n get columnHeaderGroupMap(): Map<string, ColumnHeaderGroup> {\n return this._columnHeaderGroupMap;\n }\n\n get columnHeaderGroups(): ColumnHeaderGroup[] {\n return this._columnHeaderGroups;\n }\n\n set columnHeaderGroups(groups: ColumnHeaderGroup[]) {\n if (groups === this._columnHeaderGroups) {\n return;\n }\n\n const {\n groups: newGroups,\n maxDepth,\n parentMap,\n groupMap,\n } = IrisGridUtils.parseColumnHeaderGroups(\n this,\n groups ?? this.initialColumnHeaderGroups\n );\n\n this._columnHeaderGroups = newGroups;\n this.columnHeaderMaxDepth = maxDepth;\n this.columnHeaderParentMap = parentMap;\n this._columnHeaderGroupMap = groupMap;\n }\n\n get groupedColumns(): Column[] {\n return [];\n }\n\n row(y: ModelIndex): R | null {\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 assertNotNull(operation);\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 x Column index to get the totals column from\n * @param y Row index to get the totals column from\n */\n totalsColumn(x: ModelIndex, y: ModelIndex): Column | undefined | null {\n const totalsRow = this.totalsRow(y);\n if (totalsRow == null) return null;\n\n const operation = this.totals?.operationOrder[totalsRow];\n const defaultOperation =\n this.totals?.defaultOperation ?? AggregationOperation.SUM;\n const tableColumn = this.columns[x];\n\n // Find the matching totals table column for the operation\n // When there are multiple aggregations, the column name will be the original name of the column with the operation appended afterward\n // When the the operation is the default operation OR there is only one operation, then the totals column name is just the original column name\n return this.totalsTable?.columns.find(\n column =>\n column.name === `${tableColumn.name}__${operation}` ||\n ((operation === defaultOperation ||\n this.totals?.operationOrder.length === 1) &&\n column.name === tableColumn.name)\n );\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 y The row in the model to get the totals row for\n * @returns The row within the totals table if it's a totals row, null otherwise\n */\n totalsRow(y: ModelIndex): ModelIndex | null {\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 y The row in the model to get the pending row for\n * @returns The row within the pending input rows if it's a pending row, null otherwise\n */\n pendingRow(y: ModelIndex): ModelIndex | null {\n const pendingRow = y - this.floatingTopRowCount - this.table.size;\n if (pendingRow >= 0 && pendingRow < this.pendingNewRowCount) {\n return pendingRow;\n }\n\n return null;\n }\n\n /**\n * Check if a row is a totals table row\n * @param y The row in the model to check if it's a totals table row\n * @returns True if the row is a totals row, false if not\n */\n isTotalsRow(y: ModelIndex): boolean {\n return this.totalsRow(y) != null;\n }\n\n /**\n * Check if a row is a pending input row\n * @param y The row in the model to check if it's a pending new row\n * @returns True if the row is a pending new row, false if not\n */\n isPendingRow(y: ModelIndex): boolean {\n return this.pendingRow(y) != null;\n }\n\n dataForCell(x: ModelIndex, y: ModelIndex): CellData | undefined {\n return this.row(y)?.data.get(x);\n }\n\n formatForCell(x: ModelIndex, y: ModelIndex): Format | undefined {\n return this.dataForCell(x, y)?.format;\n }\n\n valueForCell(x: ModelIndex, y: ModelIndex): unknown {\n const data = this.dataForCell(x, y);\n\n /* JS API current sets null values as undefined in some instances. This means \n we need to nullish coaelesce so all undefined values from the API return null \n since the data has been fetched. undefined is used to indicate the API has not \n fetched data yet */\n if (data) {\n return data.value ?? null;\n }\n return undefined;\n }\n\n copyViewportData(data: ViewportData): void {\n if (data == null) {\n log.warn('invalid data!');\n return;\n }\n\n this.viewportData = this.extractViewportData(data);\n this.formattedStringData = [];\n }\n\n copyTotalsData(totalsData: ViewportData): void {\n if (totalsData == null) {\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 * Use this as the canonical column index since things like layoutHints could have\n * changed the column order.\n */\n getColumnIndexByName(name: ColumnName): number | undefined {\n return this.getColumnIndicesByNameMap(this.columns).get(name);\n }\n\n getColumnIndicesByNameMap = memoize(\n (columns: Column[]): Map<ColumnName, ModelIndex> => {\n const indices = new Map();\n columns.forEach(({ name }, i) => indices.set(name, i));\n return indices;\n }\n );\n\n /**\n * Copies all the viewport data into an object that we can reference later.\n * @param data The data to copy from\n */\n extractViewportData(data: ViewportData): UIViewportData<R> {\n const newData: UIViewportData<R> = {\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: Row, columns: Column[]): R {\n const data = new Map<ModelIndex, CellData>();\n for (let c = 0; c < columns.length; c += 1) {\n const column = columns[c];\n\n const index = this.getColumnIndexByName(column.name);\n assertNotNull(index);\n data.set(index, {\n value: row.get(column),\n format: row.getFormat(column),\n });\n }\n\n return { data } as R;\n }\n\n closeSubscription(): void {\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(): FilterCondition[] {\n return this.table.filter;\n }\n\n set filter(filter: FilterCondition[]) {\n this.closeSubscription();\n this.table.applyFilter(filter);\n this.applyViewport();\n }\n\n get formatter(): Formatter {\n return this.irisFormatter;\n }\n\n set formatter(formatter: Formatter) {\n this.irisFormatter = formatter;\n this.formattedStringData = [];\n this.dispatchEvent(\n new EventShimCustomEvent(IrisGridModel.EVENT.FORMATTER_UPDATED)\n );\n }\n\n displayString(\n value: unknown,\n columnType: string,\n columnName = '',\n formatOverride?: { formatString: string }\n ): string {\n return this.getCachedFormattedString(\n this.formatter,\n value,\n columnType,\n columnName,\n formatOverride\n );\n }\n\n get sort(): Sort[] {\n return this.table.sort;\n }\n\n set sort(sort: Sort[]) {\n this.closeSubscription();\n this.table.applySort(sort);\n this.applyViewport();\n }\n\n set totalsConfig(totalsConfig: UITotalsTableConfig | null) {\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 EventShimCustomEvent(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 EventShimCustomEvent(IrisGridModel.EVENT.REQUEST_FAILED, {\n detail: err,\n })\n );\n });\n }\n\n setTotalsTable(totalsTable: TotalsTable | null): void {\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(this.totalsTable);\n }\n }\n\n setViewport = throttle(\n (top: VisibleIndex, bottom: VisibleIndex, columns: Column[]) => {\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 SET_VIEWPORT_THROTTLE\n );\n\n /**\n * Applies the current viewport to the underlying table.\n */\n applyViewport = throttle(\n (): void => {\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 APPLY_VIEWPORT_THROTTLE,\n { leading: false }\n );\n\n applyBufferedViewport(\n viewportTop: number,\n viewportBottom: number,\n columns: Column[]\n ): void {\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(\n ranges: GridRange[],\n includeHeaders = false,\n formatValue: (value: unknown, column: Column) => unknown = value => value,\n consolidateRanges = true\n ): Promise<unknown[][]> {\n if (this.subscription == null) {\n throw new Error('No subscription available');\n }\n\n const consolidated = consolidateRanges\n ? GridRange.consolidate(ranges)\n : 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<number>();\n const tableRanges: GridRange[] = [];\n const bottomFloatingRowsSet = new Set<number>();\n for (let i = 0; i < consolidated.length; i += 1) {\n const range = consolidated[i];\n assertNotNull(range.endRow);\n assertNotNull(range.startRow);\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 // 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 const index = this.getColumnIndexByName(column.name);\n assertNotNull(index);\n return formatValue(this.valueForCell(index, row), column);\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 = this.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 const index = this.getColumnIndexByName(column.name);\n assertNotNull(index);\n return formatValue(this.valueForCell(index, row), column);\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 ranges The ranges to get the snapshot for\n * @param includeHeaders Whether to include the headers in the snapshot or not\n * @param formatValue Function for formatting the raw value into a string\n * @returns A formatted string of all the data, columns separated by `\\t` and rows separated by `\\n`\n */\n async textSnapshot(\n ranges: GridRange[],\n includeHeaders = false,\n formatValue: (\n value: unknown,\n column: Column,\n row?: Row\n ) => string = value => `${value}`\n ): Promise<string> {\n log.debug2('textSnapshot', ranges, includeHeaders);\n\n const data = await this.snapshot(\n ranges,\n includeHeaders,\n formatValue,\n false\n );\n return data.map(row => row.join('\\t')).join('\\n');\n }\n\n async valuesTable(column: Column): Promise<Table> {\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 getCachedFormattedString = memoizeClear(\n (\n formatter: Formatter,\n value: unknown,\n columnType: string,\n columnName: ColumnName,\n formatOverride?: { formatString: string }\n ): string =>\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: number, bottom: number): [\n number,\n number\n ] => {\n const viewHeight = bottom - top;\n const viewportTop = Math.max(\n 0,\n top - viewHeight * IrisGridTableModelTemplate.ROW_BUFFER_PAGES\n );\n const viewportBottom =\n bottom + viewHeight * IrisGridTableModelTemplate.ROW_BUFFER_PAGES;\n return [viewportTop, viewportBottom];\n });\n\n getCachedPendingErrors = memoize(\n (\n pendingDataMap: PendingDataMap,\n columns: Column[],\n keyColumnCount: number\n ) => {\n const map = new Map<ModelIndex, MissingKeyError[]>();\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: ModelIndex, depth: number): boolean {\n if (modelIndex < 0 || modelIndex >= this.columnCount) {\n return false;\n }\n\n // All groups are movable\n if (depth > 0) {\n return true;\n }\n\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 !columnName\n ) {\n return false;\n }\n return !this.isKeyColumn(modelIndex);\n }\n\n isKeyColumn(x: ModelIndex): boolean {\n return x < (this.inputTable?.keyColumns.length ?? 0);\n }\n\n isRowMovable(): boolean {\n return false;\n }\n\n isEditableRange(range: GridRange): boolean {\n // Make sure we have an input table and a valid range\n if (this.inputTable == null || !GridRange.isBounded(range)) {\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 if (\n !(\n isPendingRange ||\n (this.inputTable.keyColumns.length !== 0 &&\n range.startColumn >= this.inputTable.keyColumns.length &&\n range.endColumn >= this.inputTable.keyColumns.length)\n )\n ) {\n return false;\n }\n\n // Editing the aggregations/totals which are floating above/below is not allowed\n if (\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 return false;\n }\n\n return true;\n }\n\n isDeletableRange(range: GridRange): boolean {\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: GridRange[]): boolean {\n return ranges.every(range => this.isEditableRange(range));\n }\n\n isDeletableRanges(ranges: GridRange[]): boolean {\n return ranges.every(range => this.isDeletableRange(range));\n }\n\n /**\n * @returns A range corresponding to the underlying table\n */\n getTableAreaRange(): GridRange {\n return new GridRange(\n null,\n this.floatingTopRowCount,\n null,\n this.floatingTopRowCount + this.table.size - 1\n );\n }\n\n /**\n * @returns A range corresponding to the pending new rows\n */\n getPendingAreaRange(): GridRange {\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 x The column to set\n * @param y The row to set\n * @param value The value to set\n * @returns A promise that resolves successfully when the operation is complete, or rejects if there's an error\n */\n async setValueForCell(\n x: ModelIndex,\n y: ModelIndex,\n text: string\n ): Promise<void> {\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 ranges The ranges to set\n * @param value The values to set\n * @returns A promise that resolves successfully when the operation is complete, or rejects if there's an error\n */\n async setValueForRanges(ranges: GridRange[], text: string): Promise<void> {\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<Column>();\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: (string | null)[] = [];\n GridRange.forEachCell(ranges, (x, y) => {\n const column = this.columns[x];\n columnSet.add(column);\n if (formattedText[x] === undefined) {\n const value = this.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 assertNotNull(range);\n return 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() } as R);\n }\n const column = this.columns[columnIndex];\n const row = newDataMap.get(rowIndex);\n assertNotNull(row);\n const { data: rowData } = row;\n const newRowData = new Map(rowData);\n const value = this.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 EventShimCustomEvent(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 =>\n new GridRange(\n null,\n range?.startRow ?? null,\n null,\n range?.endRow ?? null\n )\n )\n );\n const newRows = data.map(row => {\n const newRow: Record<ColumnName, unknown> = {};\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] = this.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 const cellText = formattedText[x];\n assertNotNull(cellText);\n this.cacheFormattedValue(x, y, cellText);\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: EditOperation[] = []): Promise<void> {\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 = this.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() } as R);\n }\n\n const row = newDataMap.get(pendingRow);\n assertNotNull(row);\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 EventShimCustomEvent(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<ModelIndex, EditOperation[]>());\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(range => {\n assertNotNull(range);\n return 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 assertNotNull(range);\n const rangeRowCount = GridRange.rowCount([range]);\n if (r < rangeRowCount) {\n assertNotNull(range.startRow);\n rowIndex = range.startRow + r;\n break;\n }\n r -= rangeRowCount;\n }\n\n const newRow: Record<ColumnName, unknown> = {};\n for (let c = 0; c < this.columns.length; c += 1) {\n newRow[this.columns[c].name] = row[c];\n }\n assertNotNull(rowIndex);\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] = this.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 = this.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\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(): Promise<void> {\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: Record<ColumnName, unknown>[] = [];\n this.pendingNewDataMap.forEach(row => {\n const newRow: Record<ColumnName, unknown> = {};\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.pendingNewRowCount = Math.max(\n 0,\n (this.viewport?.bottom ?? 0) - this.table.size\n );\n this.formattedStringData = [];\n\n this.dispatchEvent(\n new EventShimCustomEvent(IrisGridModel.EVENT.PENDING_DATA_UPDATED)\n );\n } finally {\n this.isSaveInProgress = false;\n }\n }\n\n editValueForCell(x: ModelIndex, y: ModelIndex): string | null | undefined {\n return this.textValueForCell(x, y);\n }\n\n async delete(ranges: GridRange[]): Promise<void> {\n if (!this.isDeletableRanges(ranges)) {\n throw new Error(`Undeletable ranges ${ranges}`);\n }\n\n assertNotNull(this.inputTable);\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 assertNotNull(range);\n\n return 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 assertNotNull(pendingRange.startRow);\n assertNotNull(pendingRange.endRow);\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 EventShimCustomEvent(IrisGridModel.EVENT.PENDING_DATA_UPDATED)\n );\n\n this.dispatchEvent(new EventShimCustomEvent(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;\n }\n const [data, deleteTable] = await Promise.all([\n // Need to get the key values of each row\n this.snapshot(\n tableRanges.map(range => {\n assertNotNull(range);\n return 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 = this.tableUtils.makeFilterRawValue(\n column.type,\n value\n );\n const filter = column.filter().eq(filterValue);\n columnFilters.push(filter);\n }\n return columnFilters.reduce((agg, curr) => agg?.and(curr) ?? curr);\n });\n\n const filter = filters.reduce((agg, curr) => agg?.or(curr) ?? curr);\n deleteTable.applyFilter([filter]);\n\n // await this.inputTable?.deleteTable(deleteTable);\n deleteTable.close();\n }\n\n isValidForCell(x: ModelIndex, y: ModelIndex, value: string): boolean {\n try {\n const column = this.columns[x];\n this.tableUtils.makeValue(column.type, value, this.formatter.timeZone);\n return true;\n } catch (e) {\n return false;\n }\n }\n}\n\nexport default IrisGridTableModelTemplate;\n"],"mappings":"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"}
|
|
@@ -27,6 +27,7 @@ declare class IrisGridTreeTableModel extends IrisGridTableModelTemplate<TreeTabl
|
|
|
27
27
|
collapseAll(): void;
|
|
28
28
|
depthForRow(y: ModelIndex): ModelIndex;
|
|
29
29
|
getCachedFilterableColumnSet: (columns: Column[], groupedColumns: Column[]) => Set<number>;
|
|
30
|
+
getCachedGroupedColumnSet: (groupedColumns: readonly Column[]) => Set<number>;
|
|
30
31
|
updateFrozenColumns(columns: ColumnName[]): void;
|
|
31
32
|
}
|
|
32
33
|
export default IrisGridTreeTableModel;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IrisGridTreeTableModel.d.ts","sourceRoot":"","sources":["../src/IrisGridTreeTableModel.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEzE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,0BAA0B,MAAM,8BAA8B,CAAC;AAEtE,MAAM,WAAW,SAAU,SAAQ,KAAK;IACtC,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;CACf;AACD,cAAM,sBAAuB,SAAQ,0BAA0B,CAC7D,SAAS,EACT,SAAS,CACV;IAGC,qBAAqB,CACnB,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,MAAM,EAAE,GAChB,IAAI;IAIP,WAAW,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,GAAG,MAAM;
|
|
1
|
+
{"version":3,"file":"IrisGridTreeTableModel.d.ts","sourceRoot":"","sources":["../src/IrisGridTreeTableModel.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEzE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,0BAA0B,MAAM,8BAA8B,CAAC;AAEtE,MAAM,WAAW,SAAU,SAAQ,KAAK;IACtC,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;CACf;AACD,cAAM,sBAAuB,SAAQ,0BAA0B,CAC7D,SAAS,EACT,SAAS,CACV;IAGC,qBAAqB,CACnB,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,MAAM,EAAE,GAChB,IAAI;IAIP,WAAW,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,GAAG,MAAM;IAsBjD,kBAAkB,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,SAAS;IAUxD,QAAQ,CACZ,MAAM,EAAE,SAAS,EAAE,EACnB,cAAc,CAAC,EAAE,OAAO,EACxB,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,GACxD,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;IAgDvB,IAAI,cAAc,IAAI,MAAM,EAAE,CAE7B;IAED,IAAI,iBAAiB,IAAI,OAAO,CAE/B;IAED,IAAI,oBAAoB,IAAI,OAAO,CAElC;IAED,IAAI,uBAAuB,IAAI,OAAO,CAErC;IAED,IAAI,yBAAyB,IAAI,OAAO,CAEvC;IAED,IAAI,YAAY,IAAI,OAAO,CAE1B;IAED,YAAY,CAAC,WAAW,EAAE,UAAU,GAAG,OAAO;IAO9C,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,4BAA4B,YAChB,MAAM,EAAE,kBAAkB,MAAM,EAAE,iBAM5C;IAEF,yBAAyB,mBACN,SAAS,MAAM,EAAE,iBAMlC;IAEF,mBAAmB,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,IAAI;CAKjD;AAED,eAAe,sBAAsB,CAAC"}
|
|
@@ -14,6 +14,7 @@ class IrisGridTreeTableModel extends IrisGridTableModelTemplate {
|
|
|
14
14
|
constructor() {
|
|
15
15
|
super(...arguments);
|
|
16
16
|
_defineProperty(this, "getCachedFilterableColumnSet", memoize((columns, groupedColumns) => new Set(((groupedColumns === null || groupedColumns === void 0 ? void 0 : groupedColumns.length) > 0 ? groupedColumns : columns).map(c1 => columns.findIndex(c2 => c1.name === c2.name)))));
|
|
17
|
+
_defineProperty(this, "getCachedGroupedColumnSet", memoize(groupedColumns => new Set(groupedColumns.map(c1 => this.columns.findIndex(c2 => c1.name === c2.name)))));
|
|
17
18
|
}
|
|
18
19
|
// table: TreeTable
|
|
19
20
|
|
|
@@ -28,6 +29,10 @@ class IrisGridTreeTableModel extends IrisGridTableModelTemplate {
|
|
|
28
29
|
var _value = this.valueForCell(x, y);
|
|
29
30
|
return this.displayString(_value, column.constituentType, column.name);
|
|
30
31
|
}
|
|
32
|
+
// Show empty string instead of null in rollup grouping columns (issue #1483)
|
|
33
|
+
if (row.hasChildren && row.depth <= x + 1 && this.valueForCell(x, y) === null && this.getCachedGroupedColumnSet(this.groupedColumns).has(x)) {
|
|
34
|
+
return '';
|
|
35
|
+
}
|
|
31
36
|
}
|
|
32
37
|
return super.textForCell(x, y);
|
|
33
38
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IrisGridTreeTableModel.js","names":["memoize","GridRange","assertNotNull","IrisGridTableModelTemplate","IrisGridTreeTableModel","columns","groupedColumns","Set","length","map","c1","findIndex","c2","name","applyBufferedViewport","viewportTop","viewportBottom","table","setViewport","textForCell","x","y","column","row","hasChildren","constituentType","value","valueForCell","displayString","extractViewportRow","isExpanded","depth","snapshot","ranges","includeHeaders","formatValue","viewport","viewportData","result","push","c","viewportRange","offset","rows","i","intersection","startRow","endRow","r","resultRow","viewportRow","startColumn","endColumn","data","get","hasExpandableRows","isExpandAllAvailable","expandAll","undefined","isChartBuilderAvailable","isSelectDistinctAvailable","isReversible","isFilterable","columnIndex","getCachedFilterableColumnSet","has","isColumnMovable","isRowExpandable","isRowExpanded","setRowExpanded","expandDescendants","setExpanded","collapseAll","depthForRow","updateFrozenColumns","Error"],"sources":["../src/IrisGridTreeTableModel.ts"],"sourcesContent":["/* eslint class-methods-use-this: \"off\" */\nimport memoize from 'memoize-one';\nimport { GridRange, ModelIndex } from '@deephaven/grid';\nimport type { Column, TreeRow, TreeTable } from '@deephaven/jsapi-types';\nimport { assertNotNull } from '@deephaven/utils';\nimport { UIRow, ColumnName } from './CommonTypes';\nimport IrisGridTableModelTemplate from './IrisGridTableModelTemplate';\n\nexport interface UITreeRow extends UIRow {\n isExpanded: boolean;\n hasChildren: boolean;\n depth: number;\n}\nclass IrisGridTreeTableModel extends IrisGridTableModelTemplate<\n TreeTable,\n UITreeRow\n> {\n // table: TreeTable\n\n applyBufferedViewport(\n viewportTop: number,\n viewportBottom: number,\n columns: Column[]\n ): void {\n this.table.setViewport(viewportTop, viewportBottom, columns);\n }\n\n textForCell(x: ModelIndex, y: ModelIndex): string {\n const column = this.columns[x];\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 return this.displayString(value, column.constituentType, column.name);\n }\n }\n\n return super.textForCell(x, y);\n }\n\n extractViewportRow(row: TreeRow, columns: Column[]): UITreeRow {\n const { isExpanded, hasChildren, depth } = row;\n return {\n ...super.extractViewportRow(row, columns),\n isExpanded,\n hasChildren,\n depth,\n };\n }\n\n async snapshot(\n ranges: GridRange[],\n includeHeaders?: boolean,\n formatValue?: (value: unknown, column: Column) => unknown\n ): Promise<unknown[][]> {\n assertNotNull(this.viewport);\n assertNotNull(this.viewportData);\n const { columns } = this.viewport;\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\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 = this.viewportData.rows[\n r - this.viewportData.offset\n ];\n assertNotNull(intersection.startColumn);\n assertNotNull(intersection.endColumn);\n for (\n let c = intersection.startColumn;\n c <= intersection.endColumn;\n c += 1\n ) {\n assertNotNull(formatValue);\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 groupedColumns(): Column[] {\n return this.table.groupedColumns;\n }\n\n get hasExpandableRows(): boolean {\n return true;\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 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.groupedColumns\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) {\n this.table.expandAll();\n }\n }\n\n collapseAll(): void {\n if (this.table.collapseAll) {\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 getCachedFilterableColumnSet = memoize(\n (columns: Column[], groupedColumns: Column[]) =>\n new Set(\n (groupedColumns?.length > 0 ? groupedColumns : columns).map(c1 =>\n 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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"}
|
|
1
|
+
{"version":3,"file":"IrisGridTreeTableModel.js","names":["memoize","GridRange","assertNotNull","IrisGridTableModelTemplate","IrisGridTreeTableModel","columns","groupedColumns","Set","length","map","c1","findIndex","c2","name","applyBufferedViewport","viewportTop","viewportBottom","table","setViewport","textForCell","x","y","column","row","hasChildren","constituentType","value","valueForCell","displayString","depth","getCachedGroupedColumnSet","has","extractViewportRow","isExpanded","snapshot","ranges","includeHeaders","formatValue","viewport","viewportData","result","push","c","viewportRange","offset","rows","i","intersection","startRow","endRow","r","resultRow","viewportRow","startColumn","endColumn","data","get","hasExpandableRows","isExpandAllAvailable","expandAll","undefined","isChartBuilderAvailable","isSelectDistinctAvailable","isReversible","isFilterable","columnIndex","getCachedFilterableColumnSet","isColumnMovable","isRowExpandable","isRowExpanded","setRowExpanded","expandDescendants","setExpanded","collapseAll","depthForRow","updateFrozenColumns","Error"],"sources":["../src/IrisGridTreeTableModel.ts"],"sourcesContent":["/* eslint class-methods-use-this: \"off\" */\nimport memoize from 'memoize-one';\nimport { GridRange, ModelIndex } from '@deephaven/grid';\nimport type { Column, TreeRow, TreeTable } from '@deephaven/jsapi-types';\nimport { assertNotNull } from '@deephaven/utils';\nimport { UIRow, ColumnName } from './CommonTypes';\nimport IrisGridTableModelTemplate from './IrisGridTableModelTemplate';\n\nexport interface UITreeRow extends UIRow {\n isExpanded: boolean;\n hasChildren: boolean;\n depth: number;\n}\nclass IrisGridTreeTableModel extends IrisGridTableModelTemplate<\n TreeTable,\n UITreeRow\n> {\n // table: TreeTable\n\n applyBufferedViewport(\n viewportTop: number,\n viewportBottom: number,\n columns: Column[]\n ): void {\n this.table.setViewport(viewportTop, viewportBottom, columns);\n }\n\n textForCell(x: ModelIndex, y: ModelIndex): string {\n const column = this.columns[x];\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 return this.displayString(value, column.constituentType, column.name);\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 extractViewportRow(row: TreeRow, columns: Column[]): UITreeRow {\n const { isExpanded, hasChildren, depth } = row;\n return {\n ...super.extractViewportRow(row, columns),\n isExpanded,\n hasChildren,\n depth,\n };\n }\n\n async snapshot(\n ranges: GridRange[],\n includeHeaders?: boolean,\n formatValue?: (value: unknown, column: Column) => unknown\n ): Promise<unknown[][]> {\n assertNotNull(this.viewport);\n assertNotNull(this.viewportData);\n const { columns } = this.viewport;\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\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 = this.viewportData.rows[\n r - this.viewportData.offset\n ];\n assertNotNull(intersection.startColumn);\n assertNotNull(intersection.endColumn);\n for (\n let c = intersection.startColumn;\n c <= intersection.endColumn;\n c += 1\n ) {\n assertNotNull(formatValue);\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 groupedColumns(): Column[] {\n return this.table.groupedColumns;\n }\n\n get hasExpandableRows(): boolean {\n return true;\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 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.groupedColumns\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) {\n this.table.expandAll();\n }\n }\n\n collapseAll(): void {\n if (this.table.collapseAll) {\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 getCachedFilterableColumnSet = memoize(\n (columns: Column[], groupedColumns: Column[]) =>\n new Set(\n (groupedColumns?.length > 0 ? groupedColumns : columns).map(c1 =>\n columns.findIndex(c2 => c1.name === c2.name)\n )\n )\n );\n\n getCachedGroupedColumnSet = memoize(\n (groupedColumns: readonly 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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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@deephaven/iris-grid",
|
|
3
|
-
"version": "0.41.
|
|
3
|
+
"version": "0.41.4",
|
|
4
4
|
"description": "Deephaven Iris Grid",
|
|
5
5
|
"author": "Deephaven Data Labs LLC",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -69,5 +69,5 @@
|
|
|
69
69
|
"publishConfig": {
|
|
70
70
|
"access": "public"
|
|
71
71
|
},
|
|
72
|
-
"gitHead": "
|
|
72
|
+
"gitHead": "78f6869e66c32e53ff88754b7be00d8cd89c5cfb"
|
|
73
73
|
}
|