@deephaven/iris-grid 0.19.2-beta.0 → 0.19.2-beta.5

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.
Files changed (86) hide show
  1. package/dist/AdvancedFilterCreator.js +1 -1
  2. package/dist/AdvancedFilterCreator.js.map +1 -1
  3. package/dist/AdvancedFilterCreatorSelectValueList.js +1 -1
  4. package/dist/AdvancedFilterCreatorSelectValueList.js.map +1 -1
  5. package/dist/ColumnStatistics.js +2 -2
  6. package/dist/ColumnStatistics.js.map +1 -1
  7. package/dist/FilterInputField.d.ts.map +1 -1
  8. package/dist/FilterInputField.js +2 -2
  9. package/dist/FilterInputField.js.map +1 -1
  10. package/dist/IrisGrid.d.ts +1 -1
  11. package/dist/IrisGrid.d.ts.map +1 -1
  12. package/dist/IrisGrid.js +8 -6
  13. package/dist/IrisGrid.js.map +1 -1
  14. package/dist/IrisGridCopyHandler.d.ts.map +1 -1
  15. package/dist/IrisGridCopyHandler.js +1 -1
  16. package/dist/IrisGridCopyHandler.js.map +1 -1
  17. package/dist/IrisGridMetricCalculator.js +2 -2
  18. package/dist/IrisGridMetricCalculator.js.map +1 -1
  19. package/dist/IrisGridRenderer.d.ts.map +1 -1
  20. package/dist/IrisGridRenderer.js +23 -20
  21. package/dist/IrisGridRenderer.js.map +1 -1
  22. package/dist/IrisGridTableModel.d.ts.map +1 -1
  23. package/dist/IrisGridTableModel.js +10 -2
  24. package/dist/IrisGridTableModel.js.map +1 -1
  25. package/dist/IrisGridTableModelTemplate.js +34 -26
  26. package/dist/IrisGridTableModelTemplate.js.map +1 -1
  27. package/dist/IrisGridTestUtils.d.ts.map +1 -1
  28. package/dist/IrisGridTestUtils.js +2 -1
  29. package/dist/IrisGridTestUtils.js.map +1 -1
  30. package/dist/IrisGridTreeTableModel.js +1 -1
  31. package/dist/IrisGridTreeTableModel.js.map +1 -1
  32. package/dist/IrisGridUtils.js +4 -4
  33. package/dist/IrisGridUtils.js.map +1 -1
  34. package/dist/PendingDataBottomBar.d.ts.map +1 -1
  35. package/dist/PendingDataBottomBar.js +3 -3
  36. package/dist/PendingDataBottomBar.js.map +1 -1
  37. package/dist/format-context-menus/CustomFormatAction.js +1 -1
  38. package/dist/format-context-menus/CustomFormatAction.js.map +1 -1
  39. package/dist/format-context-menus/DecimalFormatContextMenu.js +1 -1
  40. package/dist/format-context-menus/DecimalFormatContextMenu.js.map +1 -1
  41. package/dist/format-context-menus/FormatContextMenuUtils.js +1 -1
  42. package/dist/format-context-menus/FormatContextMenuUtils.js.map +1 -1
  43. package/dist/format-context-menus/IntegerFormatContextMenu.js +1 -1
  44. package/dist/format-context-menus/IntegerFormatContextMenu.js.map +1 -1
  45. package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.d.ts.map +1 -1
  46. package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.js +2 -2
  47. package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.js.map +1 -1
  48. package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js +2 -2
  49. package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js.map +1 -1
  50. package/dist/mousehandlers/IrisGridContextMenuHandler.js +3 -3
  51. package/dist/mousehandlers/IrisGridContextMenuHandler.js.map +1 -1
  52. package/dist/mousehandlers/IrisGridFilterMouseHandler.js +2 -2
  53. package/dist/mousehandlers/IrisGridFilterMouseHandler.js.map +1 -1
  54. package/dist/sidebar/CustomColumnBuilder.d.ts +0 -1
  55. package/dist/sidebar/CustomColumnBuilder.d.ts.map +1 -1
  56. package/dist/sidebar/CustomColumnBuilder.js +0 -6
  57. package/dist/sidebar/CustomColumnBuilder.js.map +1 -1
  58. package/dist/sidebar/CustomColumnInput.js +1 -1
  59. package/dist/sidebar/CustomColumnInput.js.map +1 -1
  60. package/dist/sidebar/InputEditor.js +2 -2
  61. package/dist/sidebar/InputEditor.js.map +1 -1
  62. package/dist/sidebar/RollupRows.d.ts.map +1 -1
  63. package/dist/sidebar/RollupRows.js +10 -10
  64. package/dist/sidebar/RollupRows.js.map +1 -1
  65. package/dist/sidebar/TableCsvExporter.d.ts +1 -1
  66. package/dist/sidebar/TableCsvExporter.d.ts.map +1 -1
  67. package/dist/sidebar/TableCsvExporter.js +51 -27
  68. package/dist/sidebar/TableCsvExporter.js.map +1 -1
  69. package/dist/sidebar/TableSaver.d.ts +4 -1
  70. package/dist/sidebar/TableSaver.d.ts.map +1 -1
  71. package/dist/sidebar/TableSaver.js +8 -6
  72. package/dist/sidebar/TableSaver.js.map +1 -1
  73. package/dist/sidebar/VisibilityOrderingBuilder.d.ts +3 -3
  74. package/dist/sidebar/VisibilityOrderingBuilder.d.ts.map +1 -1
  75. package/dist/sidebar/VisibilityOrderingBuilder.js +2 -2
  76. package/dist/sidebar/VisibilityOrderingBuilder.js.map +1 -1
  77. package/dist/sidebar/aggregations/Aggregations.js +1 -1
  78. package/dist/sidebar/aggregations/Aggregations.js.map +1 -1
  79. package/dist/sidebar/conditional-formatting/ConditionEditor.d.ts.map +1 -1
  80. package/dist/sidebar/conditional-formatting/ConditionEditor.js +2 -2
  81. package/dist/sidebar/conditional-formatting/ConditionEditor.js.map +1 -1
  82. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js.map +1 -1
  83. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.d.ts.map +1 -1
  84. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js +1 -1
  85. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js.map +1 -1
  86. package/package.json +15 -15
@@ -1 +1 @@
1
- {"version":3,"file":"IrisGridRenderer.js","names":["dhSortDown","dhSortUp","vsTriangleDown","vsTriangleRight","vsLinkExternal","getOrThrow","GridRenderer","GridUtils","TableUtils","assertNotNull","ICON_NAMES","Object","freeze","SORT_UP","SORT_DOWN","CARET_DOWN","CARET_RIGHT","CELL_OVERFLOW","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","visibleColumnWidths","visibleColumnXs","length","groupedColumnDividerColor","lastGroupedColumn","modelIndex","findIndex","c","columnX","columnWidth","x","strokeStyle","lineWidth","beginPath","moveTo","lineTo","stroke","visibleRowYs","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","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","visibleRowHeights","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"],"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 getOrThrow,\n GridMetrics,\n GridRangeIndex,\n GridRenderer,\n GridRenderState,\n GridThemeType,\n GridUtils,\n VisibleIndex,\n} from '@deephaven/grid';\nimport { Sort } from '@deephaven/jsapi-shim';\nimport { TableUtils, ReverseType } from '@deephaven/jsapi-utils';\nimport { assertNotNull } from '@deephaven/utils';\nimport {\n AdvancedFilterMap,\n QuickFilterMap,\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 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: AdvancedFilterMap;\n quickFilters: QuickFilterMap;\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, columns } = model;\n const { maxY, visibleColumnWidths, visibleColumnXs } = metrics;\n if (groupedColumns.length === 0 || !theme.groupedColumnDividerColor) {\n return;\n }\n\n const lastGroupedColumn = groupedColumns[groupedColumns.length - 1];\n const modelIndex = columns.findIndex(\n c => c.name === lastGroupedColumn.name\n );\n const columnX = visibleColumnXs.get(modelIndex);\n const columnWidth = visibleColumnWidths.get(modelIndex);\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 { visibleRowYs, 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 = visibleRowYs.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 (hoverSelectColumn == null || !theme.linkerColumnHoverBackgroundColor) {\n return;\n }\n\n const { visibleColumnWidths, visibleColumnXs, maxY } = metrics;\n\n const x = visibleColumnXs.get(hoverSelectColumn);\n const columnWidth = visibleColumnWidths.get(hoverSelectColumn);\n assertNotNull(x);\n assertNotNull(columnWidth);\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 just change the underlying layer to grayscale\n context.globalCompositeOperation = 'color';\n context.filter = `blur(${scrimBlurSize}px)`;\n if (scrimColor) {\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 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 visibleColumnWidths,\n visibleColumnXs,\n gridX,\n columnHeaderHeight,\n fontWidths,\n } = metrics;\n\n const { headerHorizontalPadding } = theme;\n const columnWidth = getOrThrow(visibleColumnWidths, index, 0);\n const columnX = getOrThrow(visibleColumnXs, index) + gridX;\n const modelColumn = modelColumns.get(index);\n\n if (modelColumn == null) {\n return;\n }\n\n const sort = TableUtils.getSortForColumn(model.sort, modelColumn);\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 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 && quickFilters.size > 0) ||\n (advancedFilters && 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 visibleColumnWidths,\n visibleColumnXs,\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 && quickFilters.size > 0) ||\n (advancedFilters && 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(visibleColumnXs, column);\n const columnWidth = getOrThrow(visibleColumnWidths, 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(visibleColumnWidths, column);\n const columnX = getOrThrow(visibleColumnXs, 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) {\n const { fontWidths } = metrics;\n let fontWidth = fontWidths.get(context.font);\n if (!fontWidth) {\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) {\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) {\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) {\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 visibleColumnWidths,\n visibleColumnXs,\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 = visibleColumnWidths.get(column);\n const columnX = visibleColumnXs.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 &&\n quickFilter == null &&\n advancedFilter == null\n ) {\n context.fillStyle = filterBarActiveBackgroundColor;\n } else if (filterBarActiveColor && isFilterValid) {\n context.fillStyle = filterBarActiveColor;\n } else if (filterBarErrorColor) {\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 visibleRowHeights,\n visibleRowYs,\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 && mouseY && mouseX >= gridX && mouseX <= maxX + rowFooterWidth\n ? GridUtils.getRowAtY(mouseY, metrics)\n : null;\n if (\n rowHoverBackgroundColor &&\n mouseRow !== null &&\n floatingRows.includes(mouseRow)\n ) {\n context.fillStyle = rowHoverBackgroundColor;\n const y = visibleRowYs.get(mouseRow);\n const rowHeight = visibleRowHeights.get(mouseRow);\n assertNotNull(y);\n assertNotNull(rowHeight);\n context.fillRect(x, y, rowFooterWidth, rowHeight);\n }\n\n context.beginPath();\n if (floatingGridRowColor) {\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 = visibleRowHeights.get(row);\n const rowY = visibleRowYs.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 context: CanvasRenderingContext2D,\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(context, 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) {\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(\n context,\n state,\n column,\n row\n );\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) {\n return NULL_POSITION;\n }\n const { rowHeight, columnWidth, left, top } = GridUtils.getCellInfoFromXY(\n mouseX,\n mouseY,\n metrics\n );\n\n assertNotNull(left);\n assertNotNull(columnWidth);\n assertNotNull(top);\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 &&\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) {\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\nexport default IrisGridRenderer;\n"],"mappings":"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"}
1
+ {"version":3,"file":"IrisGridRenderer.js","names":["dhSortDown","dhSortUp","vsTriangleDown","vsTriangleRight","vsLinkExternal","getOrThrow","GridRenderer","GridUtils","TableUtils","assertNotNull","ICON_NAMES","Object","freeze","SORT_UP","SORT_DOWN","CARET_DOWN","CARET_RIGHT","CELL_OVERFLOW","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","visibleColumnWidths","visibleColumnXs","length","groupedColumnDividerColor","lastGroupedColumn","modelIndex","findIndex","c","columnX","columnWidth","x","strokeStyle","lineWidth","beginPath","moveTo","lineTo","stroke","visibleRowYs","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","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","visibleRowHeights","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"],"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 getOrThrow,\n GridMetrics,\n GridRangeIndex,\n GridRenderer,\n GridRenderState,\n GridThemeType,\n GridUtils,\n VisibleIndex,\n} from '@deephaven/grid';\nimport { Sort } from '@deephaven/jsapi-shim';\nimport { TableUtils, ReverseType } from '@deephaven/jsapi-utils';\nimport { assertNotNull } from '@deephaven/utils';\nimport {\n AdvancedFilterMap,\n QuickFilterMap,\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 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: AdvancedFilterMap;\n quickFilters: QuickFilterMap;\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, columns } = model;\n const { maxY, visibleColumnWidths, visibleColumnXs } = metrics;\n if (\n groupedColumns.length === 0 ||\n theme.groupedColumnDividerColor == null\n ) {\n return;\n }\n\n const lastGroupedColumn = groupedColumns[groupedColumns.length - 1];\n const modelIndex = columns.findIndex(\n c => c.name === lastGroupedColumn.name\n );\n const columnX = visibleColumnXs.get(modelIndex);\n const columnWidth = visibleColumnWidths.get(modelIndex);\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 { visibleRowYs, 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 = visibleRowYs.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 { visibleColumnWidths, visibleColumnXs, maxY } = metrics;\n\n const x = visibleColumnXs.get(hoverSelectColumn);\n const columnWidth = visibleColumnWidths.get(hoverSelectColumn);\n assertNotNull(x);\n assertNotNull(columnWidth);\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 just 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 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 visibleColumnWidths,\n visibleColumnXs,\n gridX,\n columnHeaderHeight,\n fontWidths,\n } = metrics;\n\n const { headerHorizontalPadding } = theme;\n const columnWidth = getOrThrow(visibleColumnWidths, index, 0);\n const columnX = getOrThrow(visibleColumnXs, index) + gridX;\n const modelColumn = modelColumns.get(index);\n\n if (modelColumn == null) {\n return;\n }\n\n const sort = TableUtils.getSortForColumn(model.sort, modelColumn);\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 visibleColumnWidths,\n visibleColumnXs,\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(visibleColumnXs, column);\n const columnWidth = getOrThrow(visibleColumnWidths, 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(visibleColumnWidths, column);\n const columnX = getOrThrow(visibleColumnXs, 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 visibleColumnWidths,\n visibleColumnXs,\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 = visibleColumnWidths.get(column);\n const columnX = visibleColumnXs.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 visibleRowHeights,\n visibleRowYs,\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 = visibleRowYs.get(mouseRow);\n const rowHeight = visibleRowHeights.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 = visibleRowHeights.get(row);\n const rowY = visibleRowYs.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 context: CanvasRenderingContext2D,\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(context, 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(\n context,\n state,\n column,\n row\n );\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) {\n return NULL_POSITION;\n }\n const { rowHeight, columnWidth, left, top } = GridUtils.getCellInfoFromXY(\n mouseX,\n mouseY,\n metrics\n );\n\n assertNotNull(left);\n assertNotNull(columnWidth);\n assertNotNull(top);\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\nexport default IrisGridRenderer;\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"IrisGridTableModel.d.ts","sourceRoot":"","sources":["../src/IrisGridTableModel.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EACL,MAAM,EACN,gBAAgB,EAChB,YAAY,EACZ,UAAU,EACV,WAAW,EACX,KAAK,EACN,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,SAAS,EAAc,MAAM,wBAAwB,CAAC;AAO/D,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACvE,OAAO,0BAA0B,MAAM,8BAA8B,CAAC;AAMtE;;GAEG;AAEH,cAAM,kBAAmB,SAAQ,0BAA0B,CAAC,KAAK,EAAE,KAAK,CAAC;IACvE,iBAAiB,CAAC,EAAE,UAAU,EAAE,CAAC;IAEjC,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAE3B,gBAAgB,EAAE,YAAY,EAAE,CAAC;IAEjC;;;;OAIG;gBAED,KAAK,EAAE,KAAK,EACZ,SAAS,YAAkB,EAC3B,UAAU,GAAE,UAAU,GAAG,IAAW;IAQtC,IAAI,iBAAiB,IAAI,OAAO,CAE/B;IAED,IAAI,2BAA2B,IAAI,OAAO,CAEzC;IAED,IAAI,sBAAsB,IAAI,OAAO,CAEpC;IAED,IAAI,iBAAiB,IAAI,OAAO,CAE/B;IAED,IAAI,yBAAyB,IAAI,OAAO,CAEvC;IAED,IAAI,wBAAwB,IAAI,OAAO,CAEtC;IAED,IAAI,wBAAwB,IAAI,OAAO,CAEtC;IAED,uBAAuB,mDAErB;IAEF,IAAI,YAAY,IAAI,UAAU,EAAE,CAE/B;IAED,sBAAsB,kDAEpB;IAEF,IAAI,WAAW,IAAI,UAAU,EAAE,CAE9B;IAED,wBAAwB,6BAEM,UAAU,EAAE,+CAErC,UAAU,EAAE,CAEf;IAEF,IAAI,aAAa,IAAI,UAAU,EAAE,CAKhC;IAED,IAAI,WAAW,IAAI,WAAW,CAE7B;IAED,IAAI,uBAAuB,IAAI,MAAM,CAEpC;IAED,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,IAAI,aAAa,IAAI,UAAU,EAAE,CAEhC;IAED,IAAI,aAAa,CAAC,aAAa,EAAE,UAAU,EAAE,EAoB5C;IAED,IAAI,aAAa,IAAI,YAAY,EAAE,CAElC;IAED,IAAI,aAAa,CAAC,aAAa,EAAE,YAAY,EAAE,EAoB9C;IAED,mBAAmB,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,IAAI;IAShD,IAAI,YAAY,CAAC,YAAY,EAAE,mBAAmB,GAAG,IAAI,EA6CxD;IAED,IAAI,gBAAgB,IAAI,OAAO,CAE9B;IAED,YAAY,CAAC,WAAW,EAAE,UAAU,GAAG,OAAO;IAIxC,MAAM,IAAI,OAAO,CAAC,KAAK,CAAC;IAI9B,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAI3D,4BAA4B,YAChB,MAAM,EAAE,iBAElB;IAEF,eAAe,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO;IAYhD,cAAc,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO;IAIzC,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAwFjD;AAED,eAAe,kBAAkB,CAAC"}
1
+ {"version":3,"file":"IrisGridTableModel.d.ts","sourceRoot":"","sources":["../src/IrisGridTableModel.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EACL,MAAM,EACN,gBAAgB,EAChB,YAAY,EACZ,UAAU,EACV,WAAW,EACX,KAAK,EACN,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,SAAS,EAAc,MAAM,wBAAwB,CAAC;AAO/D,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACvE,OAAO,0BAA0B,MAAM,8BAA8B,CAAC;AAMtE;;GAEG;AAEH,cAAM,kBAAmB,SAAQ,0BAA0B,CAAC,KAAK,EAAE,KAAK,CAAC;IACvE,iBAAiB,CAAC,EAAE,UAAU,EAAE,CAAC;IAEjC,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAE3B,gBAAgB,EAAE,YAAY,EAAE,CAAC;IAEjC;;;;OAIG;gBAED,KAAK,EAAE,KAAK,EACZ,SAAS,YAAkB,EAC3B,UAAU,GAAE,UAAU,GAAG,IAAW;IAQtC,IAAI,iBAAiB,IAAI,OAAO,CAE/B;IAED,IAAI,2BAA2B,IAAI,OAAO,CAEzC;IAED,IAAI,sBAAsB,IAAI,OAAO,CAEpC;IAED,IAAI,iBAAiB,IAAI,OAAO,CAE/B;IAED,IAAI,yBAAyB,IAAI,OAAO,CAEvC;IAED,IAAI,wBAAwB,IAAI,OAAO,CAEtC;IAED,IAAI,wBAAwB,IAAI,OAAO,CAEtC;IAED,uBAAuB,mDAErB;IAEF,IAAI,YAAY,IAAI,UAAU,EAAE,CAE/B;IAED,sBAAsB,kDAEpB;IAEF,IAAI,WAAW,IAAI,UAAU,EAAE,CAE9B;IAED,wBAAwB,6BAEM,UAAU,EAAE,+CAErC,UAAU,EAAE,CAEf;IAEF,IAAI,aAAa,IAAI,UAAU,EAAE,CAKhC;IAED,IAAI,WAAW,IAAI,WAAW,CAE7B;IAED,IAAI,uBAAuB,IAAI,MAAM,CAEpC;IAED,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,IAAI,aAAa,IAAI,UAAU,EAAE,CAEhC;IAED,IAAI,aAAa,CAAC,aAAa,EAAE,UAAU,EAAE,EAoB5C;IAED,IAAI,aAAa,IAAI,YAAY,EAAE,CAElC;IAED,IAAI,aAAa,CAAC,aAAa,EAAE,YAAY,EAAE,EAoB9C;IAED,mBAAmB,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,IAAI;IAShD,IAAI,YAAY,CAAC,YAAY,EAAE,mBAAmB,GAAG,IAAI,EA6CxD;IAED,IAAI,gBAAgB,IAAI,OAAO,CAE9B;IAED,YAAY,CAAC,WAAW,EAAE,UAAU,GAAG,OAAO;IAIxC,MAAM,IAAI,OAAO,CAAC,KAAK,CAAC;IAI9B,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAI3D,4BAA4B,YAChB,MAAM,EAAE,iBAElB;IAEF,eAAe,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO;IAYhD,cAAc,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO;IAIzC,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAyFjD;AAED,eAAe,kBAAkB,CAAC"}
@@ -314,9 +314,17 @@ class IrisGridTableModel extends IrisGridTableModelTemplate {
314
314
  columnFilters.push(_filter);
315
315
  }
316
316
 
317
- return columnFilters.reduce((agg, curr) => agg ? agg.and(curr) : curr);
317
+ return columnFilters.reduce((agg, curr) => {
318
+ var _agg$and;
319
+
320
+ return (_agg$and = agg === null || agg === void 0 ? void 0 : agg.and(curr)) !== null && _agg$and !== void 0 ? _agg$and : curr;
321
+ });
322
+ });
323
+ var filter = filters.reduce((agg, curr) => {
324
+ var _agg$or;
325
+
326
+ return (_agg$or = agg === null || agg === void 0 ? void 0 : agg.or(curr)) !== null && _agg$or !== void 0 ? _agg$or : curr;
318
327
  });
319
- var filter = filters.reduce((agg, curr) => agg ? agg.or(curr) : curr);
320
328
  deleteTable.applyFilter([filter]);
321
329
  yield (_this2$inputTable = _this2.inputTable) === null || _this2$inputTable === void 0 ? void 0 : _this2$inputTable.deleteTable(deleteTable);
322
330
  deleteTable.close();
@@ -1 +1 @@
1
- {"version":3,"file":"IrisGridTableModel.js","names":["memoize","GridRange","Log","Formatter","TableUtils","EventShimCustomEvent","PromiseUtils","assertNotNull","IrisGridModel","IrisGridTableModelTemplate","log","module","EMPTY_ARRAY","Object","freeze","IrisGridTableModel","constructor","table","formatter","inputTable","layoutHintsFrontColumns","layoutHintsBackColumns","layoutHintsFrozenColumns","userFrozenColumns","columns","Set","map","_","index","customColumnList","formatColumnList","isExportAvailable","isColumnStatisticsAvailable","getColumnStatistics","isValuesTableAvailable","selectDistinct","copy","isRollupAvailable","rollup","isSelectDistinctAvailable","isCustomColumnsAvailable","applyCustomColumns","isFormatColumnsAvailable","frontColumns","getMemoizedFrontColumns","layoutHints","backColumns","getMemoizedBackColumns","frozenColumns","getMemoizedFrozenColumns","floatingLeftColumnCount","length","description","customColumns","debug2","debug","closeSubscription","formatColumns","applyViewport","updateFrozenColumns","dispatchEvent","EVENT","TABLE_CHANGED","detail","totalsConfig","totals","formattedStringData","totalsTablePromise","cancel","setTotalsTable","UPDATED","makeCancelable","getTotalsTable","close","then","totalsTable","catch","err","isCanceled","error","REQUEST_FAILED","isFilterRequired","isUncoalesced","isFilterable","columnIndex","getCachedFilterableColumnSet","has","export","columnStatistics","column","isColumnMovable","modelIndex","columnName","name","includes","isKeyColumn","isColumnFrozen","delete","ranges","isDeletableRanges","Error","keyColumns","pendingAreaRange","getPendingAreaRange","pendingRanges","range","intersection","filter","offset","floatingTopRowCount","size","newDataMap","Map","i","pendingRange","startRow","endRow","r","PENDING_DATA_UPDATED","tableAreaRange","getTableAreaRange","tableRanges","data","deleteTable","Promise","all","snapshot","filters","row","columnFilters","c","value","filterValue","makeFilterRawValue","type","eq","push","reduce","agg","curr","and","or","applyFilter"],"sources":["../src/IrisGridTableModel.ts"],"sourcesContent":["/* eslint class-methods-use-this: \"off\" */\nimport memoize from 'memoize-one';\nimport { GridRange, ModelIndex } from '@deephaven/grid';\nimport {\n Column,\n ColumnStatistics,\n CustomColumn,\n InputTable,\n LayoutHints,\n Table,\n} from '@deephaven/jsapi-shim';\nimport Log from '@deephaven/log';\nimport { Formatter, TableUtils } from '@deephaven/jsapi-utils';\nimport {\n EventShimCustomEvent,\n PromiseUtils,\n assertNotNull,\n} from '@deephaven/utils';\nimport IrisGridModel from './IrisGridModel';\nimport { ColumnName, UITotalsTableConfig, UIRow } from './CommonTypes';\nimport IrisGridTableModelTemplate from './IrisGridTableModelTemplate';\n\nconst log = Log.module('IrisGridTableModel');\n\nconst EMPTY_ARRAY = Object.freeze([]);\n\n/**\n * Model for a grid showing an iris data table\n */\n\nclass IrisGridTableModel extends IrisGridTableModelTemplate<Table, UIRow> {\n userFrozenColumns?: ColumnName[];\n\n customColumnList: string[];\n\n formatColumnList: CustomColumn[];\n\n /**\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 table: Table,\n formatter = new Formatter(),\n inputTable: InputTable | null = null\n ) {\n super(table, formatter, inputTable);\n\n this.customColumnList = [];\n this.formatColumnList = [];\n }\n\n get isExportAvailable(): boolean {\n return this.table.freeze != null;\n }\n\n get isColumnStatisticsAvailable(): boolean {\n return this.table.getColumnStatistics != null;\n }\n\n get isValuesTableAvailable(): boolean {\n return this.table.selectDistinct != null && this.table.copy != null;\n }\n\n get isRollupAvailable(): boolean {\n return this.table.rollup != null;\n }\n\n get isSelectDistinctAvailable(): boolean {\n return this.table.selectDistinct != null;\n }\n\n get isCustomColumnsAvailable(): boolean {\n return this.table.applyCustomColumns != null;\n }\n\n get isFormatColumnsAvailable(): boolean {\n return this.table.applyCustomColumns != null;\n }\n\n getMemoizedFrontColumns = memoize(\n layoutHintsFrontColumns => layoutHintsFrontColumns ?? EMPTY_ARRAY\n );\n\n get frontColumns(): ColumnName[] {\n return this.getMemoizedFrontColumns(this.layoutHints?.frontColumns);\n }\n\n getMemoizedBackColumns = memoize(\n layoutHintsBackColumns => layoutHintsBackColumns ?? EMPTY_ARRAY\n );\n\n get backColumns(): ColumnName[] {\n return this.getMemoizedBackColumns(this.layoutHints?.backColumns);\n }\n\n getMemoizedFrozenColumns = memoize(\n (\n layoutHintsFrozenColumns: ColumnName[],\n userFrozenColumns?: ColumnName[]\n ): ColumnName[] =>\n userFrozenColumns ?? layoutHintsFrozenColumns ?? EMPTY_ARRAY\n );\n\n get frozenColumns(): ColumnName[] {\n return this.getMemoizedFrozenColumns(\n this.layoutHints?.frozenColumns,\n this.userFrozenColumns\n );\n }\n\n get layoutHints(): LayoutHints {\n return this.table.layoutHints;\n }\n\n get floatingLeftColumnCount(): number {\n return this.frozenColumns.length;\n }\n\n get description(): string {\n return this.table.description;\n }\n\n get customColumns(): ColumnName[] {\n return this.customColumnList;\n }\n\n set customColumns(customColumns: ColumnName[]) {\n log.debug2(\n 'set customColumns',\n customColumns,\n this.customColumnList,\n customColumns === this.customColumnList\n );\n if (this.customColumnList.length === 0 && customColumns.length === 0) {\n log.debug('Ignore empty initial customColumns');\n this.customColumnList = customColumns;\n return;\n }\n if (this.customColumnList === customColumns) {\n log.debug('Ignore same customColumns');\n return;\n }\n this.closeSubscription();\n this.customColumnList = customColumns;\n this.table.applyCustomColumns([...customColumns, ...this.formatColumns]);\n this.applyViewport();\n }\n\n get formatColumns(): CustomColumn[] {\n return this.formatColumnList;\n }\n\n set formatColumns(formatColumns: CustomColumn[]) {\n log.debug2(\n 'set formatColumns',\n formatColumns,\n this.formatColumnList,\n formatColumns === this.formatColumnList\n );\n if (this.formatColumnList.length === 0 && formatColumns.length === 0) {\n log.debug('Ignore empty initial formatColumns');\n this.formatColumnList = formatColumns;\n return;\n }\n if (this.formatColumnList === formatColumns) {\n log.debug('Ignore same formatColumns');\n return;\n }\n this.closeSubscription();\n this.formatColumnList = formatColumns;\n this.table.applyCustomColumns([...this.customColumns, ...formatColumns]);\n this.applyViewport();\n }\n\n updateFrozenColumns(columns: ColumnName[]): void {\n this.userFrozenColumns = columns;\n this.dispatchEvent(\n new EventShimCustomEvent(IrisGridModel.EVENT.TABLE_CHANGED, {\n detail: this.table,\n })\n );\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 get isFilterRequired(): boolean {\n return this.table.isUncoalesced;\n }\n\n isFilterable(columnIndex: ModelIndex): boolean {\n return this.getCachedFilterableColumnSet(this.columns).has(columnIndex);\n }\n\n async export(): Promise<Table> {\n return this.table.freeze();\n }\n\n columnStatistics(column: Column): Promise<ColumnStatistics> {\n return this.table.getColumnStatistics(column);\n }\n\n getCachedFilterableColumnSet = memoize(\n (columns: Column[]) =>\n new Set(columns.map((_: Column, index: ModelIndex) => index))\n );\n\n isColumnMovable(modelIndex: ModelIndex): boolean {\n const columnName = this.columns[modelIndex].name;\n if (\n this.frontColumns.includes(columnName) ||\n this.backColumns.includes(columnName) ||\n this.frozenColumns.includes(columnName)\n ) {\n return false;\n }\n return !this.isKeyColumn(modelIndex);\n }\n\n isColumnFrozen(modelIndex: ModelIndex): boolean {\n return this.frozenColumns.includes(this.columns[modelIndex].name);\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(super.pendingDataMap);\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 super.pendingDataMap = 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 = TableUtils.makeFilterRawValue(column.type, value);\n const filter = column.filter().eq(filterValue);\n columnFilters.push(filter);\n }\n return columnFilters.reduce((agg, curr) => (agg ? agg.and(curr) : curr));\n });\n\n const filter = filters.reduce((agg, curr) => (agg ? agg.or(curr) : curr));\n deleteTable.applyFilter([filter]);\n\n await this.inputTable?.deleteTable(deleteTable);\n deleteTable.close();\n }\n}\n\nexport default IrisGridTableModel;\n"],"mappings":";;;;;;AAAA;AACA,OAAOA,OAAP,MAAoB,aAApB;AACA,SAASC,SAAT,QAAsC,iBAAtC;AASA,OAAOC,GAAP,MAAgB,gBAAhB;AACA,SAASC,SAAT,EAAoBC,UAApB,QAAsC,wBAAtC;AACA,SACEC,oBADF,EAEEC,YAFF,EAGEC,aAHF,QAIO,kBAJP;OAKOC,a;OAEAC,0B;AAEP,IAAMC,GAAG,GAAGR,GAAG,CAACS,MAAJ,CAAW,oBAAX,CAAZ;AAEA,IAAMC,WAAW,GAAGC,MAAM,CAACC,MAAP,CAAc,EAAd,CAApB;AAEA;AACA;AACA;;AAEA,MAAMC,kBAAN,SAAiCN,0BAAjC,CAA0E;EAOxE;AACF;AACA;AACA;AACA;EACEO,WAAW,CACTC,KADS,EAIT;IAAA,IAFAC,SAEA,uEAFY,IAAIf,SAAJ,EAEZ;IAAA,IADAgB,UACA,uEADgC,IAChC;IACA,MAAMF,KAAN,EAAaC,SAAb,EAAwBC,UAAxB;;IADA;;IAAA;;IAAA;;IAAA,iDAmCwBnB,OAAO,CAC/BoB,uBAAuB,IAAIA,uBAAJ,aAAIA,uBAAJ,cAAIA,uBAAJ,GAA+BR,WADvB,CAnC/B;;IAAA,gDA2CuBZ,OAAO,CAC9BqB,sBAAsB,IAAIA,sBAAJ,aAAIA,sBAAJ,cAAIA,sBAAJ,GAA8BT,WADtB,CA3C9B;;IAAA,kDAmDyBZ,OAAO,CAChC,CACEsB,wBADF,EAEEC,iBAFF;MAAA;;MAAA,eAIEA,iBAJF,aAIEA,iBAJF,cAIEA,iBAJF,GAIuBD,wBAJvB,uCAImDV,WAJnD;IAAA,CADgC,CAnDhC;;IAAA,sDA0M6BZ,OAAO,CACnCwB,OAAD,IACE,IAAIC,GAAJ,CAAQD,OAAO,CAACE,GAAR,CAAY,CAACC,CAAD,EAAYC,KAAZ,KAAkCA,KAA9C,CAAR,CAFkC,CA1MpC;;IAGA,KAAKC,gBAAL,GAAwB,EAAxB;IACA,KAAKC,gBAAL,GAAwB,EAAxB;EACD;;EAEoB,IAAjBC,iBAAiB,GAAY;IAC/B,OAAO,KAAKd,KAAL,CAAWH,MAAX,IAAqB,IAA5B;EACD;;EAE8B,IAA3BkB,2BAA2B,GAAY;IACzC,OAAO,KAAKf,KAAL,CAAWgB,mBAAX,IAAkC,IAAzC;EACD;;EAEyB,IAAtBC,sBAAsB,GAAY;IACpC,OAAO,KAAKjB,KAAL,CAAWkB,cAAX,IAA6B,IAA7B,IAAqC,KAAKlB,KAAL,CAAWmB,IAAX,IAAmB,IAA/D;EACD;;EAEoB,IAAjBC,iBAAiB,GAAY;IAC/B,OAAO,KAAKpB,KAAL,CAAWqB,MAAX,IAAqB,IAA5B;EACD;;EAE4B,IAAzBC,yBAAyB,GAAY;IACvC,OAAO,KAAKtB,KAAL,CAAWkB,cAAX,IAA6B,IAApC;EACD;;EAE2B,IAAxBK,wBAAwB,GAAY;IACtC,OAAO,KAAKvB,KAAL,CAAWwB,kBAAX,IAAiC,IAAxC;EACD;;EAE2B,IAAxBC,wBAAwB,GAAY;IACtC,OAAO,KAAKzB,KAAL,CAAWwB,kBAAX,IAAiC,IAAxC;EACD;;EAMe,IAAZE,YAAY,GAAiB;IAAA;;IAC/B,OAAO,KAAKC,uBAAL,sBAA6B,KAAKC,WAAlC,sDAA6B,kBAAkBF,YAA/C,CAAP;EACD;;EAMc,IAAXG,WAAW,GAAiB;IAAA;;IAC9B,OAAO,KAAKC,sBAAL,uBAA4B,KAAKF,WAAjC,uDAA4B,mBAAkBC,WAA9C,CAAP;EACD;;EAUgB,IAAbE,aAAa,GAAiB;IAAA;;IAChC,OAAO,KAAKC,wBAAL,uBACL,KAAKJ,WADA,uDACL,mBAAkBG,aADb,EAEL,KAAKzB,iBAFA,CAAP;EAID;;EAEc,IAAXsB,WAAW,GAAgB;IAC7B,OAAO,KAAK5B,KAAL,CAAW4B,WAAlB;EACD;;EAE0B,IAAvBK,uBAAuB,GAAW;IACpC,OAAO,KAAKF,aAAL,CAAmBG,MAA1B;EACD;;EAEc,IAAXC,WAAW,GAAW;IACxB,OAAO,KAAKnC,KAAL,CAAWmC,WAAlB;EACD;;EAEgB,IAAbC,aAAa,GAAiB;IAChC,OAAO,KAAKxB,gBAAZ;EACD;;EAEgB,IAAbwB,aAAa,CAACA,aAAD,EAA8B;IAC7C3C,GAAG,CAAC4C,MAAJ,CACE,mBADF,EAEED,aAFF,EAGE,KAAKxB,gBAHP,EAIEwB,aAAa,KAAK,KAAKxB,gBAJzB;;IAMA,IAAI,KAAKA,gBAAL,CAAsBsB,MAAtB,KAAiC,CAAjC,IAAsCE,aAAa,CAACF,MAAd,KAAyB,CAAnE,EAAsE;MACpEzC,GAAG,CAAC6C,KAAJ,CAAU,oCAAV;MACA,KAAK1B,gBAAL,GAAwBwB,aAAxB;MACA;IACD;;IACD,IAAI,KAAKxB,gBAAL,KAA0BwB,aAA9B,EAA6C;MAC3C3C,GAAG,CAAC6C,KAAJ,CAAU,2BAAV;MACA;IACD;;IACD,KAAKC,iBAAL;IACA,KAAK3B,gBAAL,GAAwBwB,aAAxB;IACA,KAAKpC,KAAL,CAAWwB,kBAAX,CAA8B,CAAC,GAAGY,aAAJ,EAAmB,GAAG,KAAKI,aAA3B,CAA9B;IACA,KAAKC,aAAL;EACD;;EAEgB,IAAbD,aAAa,GAAmB;IAClC,OAAO,KAAK3B,gBAAZ;EACD;;EAEgB,IAAb2B,aAAa,CAACA,aAAD,EAAgC;IAC/C/C,GAAG,CAAC4C,MAAJ,CACE,mBADF,EAEEG,aAFF,EAGE,KAAK3B,gBAHP,EAIE2B,aAAa,KAAK,KAAK3B,gBAJzB;;IAMA,IAAI,KAAKA,gBAAL,CAAsBqB,MAAtB,KAAiC,CAAjC,IAAsCM,aAAa,CAACN,MAAd,KAAyB,CAAnE,EAAsE;MACpEzC,GAAG,CAAC6C,KAAJ,CAAU,oCAAV;MACA,KAAKzB,gBAAL,GAAwB2B,aAAxB;MACA;IACD;;IACD,IAAI,KAAK3B,gBAAL,KAA0B2B,aAA9B,EAA6C;MAC3C/C,GAAG,CAAC6C,KAAJ,CAAU,2BAAV;MACA;IACD;;IACD,KAAKC,iBAAL;IACA,KAAK1B,gBAAL,GAAwB2B,aAAxB;IACA,KAAKxC,KAAL,CAAWwB,kBAAX,CAA8B,CAAC,GAAG,KAAKY,aAAT,EAAwB,GAAGI,aAA3B,CAA9B;IACA,KAAKC,aAAL;EACD;;EAEDC,mBAAmB,CAACnC,OAAD,EAA8B;IAC/C,KAAKD,iBAAL,GAAyBC,OAAzB;IACA,KAAKoC,aAAL,CACE,IAAIvD,oBAAJ,CAAyBG,aAAa,CAACqD,KAAd,CAAoBC,aAA7C,EAA4D;MAC1DC,MAAM,EAAE,KAAK9C;IAD6C,CAA5D,CADF;EAKD;;EAEe,IAAZ+C,YAAY,CAACA,YAAD,EAA2C;IACzDtD,GAAG,CAAC6C,KAAJ,CAAU,kBAAV,EAA8BS,YAA9B;;IAEA,IAAIA,YAAY,KAAK,KAAKC,MAA1B,EAAkC;MAChC;MACA;IACD;;IAED,KAAKA,MAAL,GAAcD,YAAd;IACA,KAAKE,mBAAL,GAA2B,EAA3B;;IAEA,IAAI,KAAKC,kBAAL,IAA2B,IAA/B,EAAqC;MACnC,KAAKA,kBAAL,CAAwBC,MAAxB;IACD;;IAED,KAAKC,cAAL,CAAoB,IAApB;;IAEA,IAAIL,YAAY,IAAI,IAApB,EAA0B;MACxB,KAAKJ,aAAL,CAAmB,IAAIvD,oBAAJ,CAAyBG,aAAa,CAACqD,KAAd,CAAoBS,OAA7C,CAAnB;MACA;IACD;;IAED,KAAKH,kBAAL,GAA0B7D,YAAY,CAACiE,cAAb,CACxB,KAAKtD,KAAL,CAAWuD,cAAX,CAA0BR,YAA1B,CADwB,EAExB/C,KAAK,IAAIA,KAAK,CAACwD,KAAN,EAFe,CAA1B;IAIA,KAAKN,kBAAL,CACGO,IADH,CACQC,WAAW,IAAI;MACnB,KAAKR,kBAAL,GAA0B,IAA1B;MACA,KAAKE,cAAL,CAAoBM,WAApB;IACD,CAJH,EAKGC,KALH,CAKSC,GAAG,IAAI;MACZ,IAAIvE,YAAY,CAACwE,UAAb,CAAwBD,GAAxB,CAAJ,EAAkC;QAChC;MACD;;MAEDnE,GAAG,CAACqE,KAAJ,CAAU,gCAAV,EAA4CF,GAA5C;MACA,KAAKV,kBAAL,GAA0B,IAA1B;MAEA,KAAKP,aAAL,CACE,IAAIvD,oBAAJ,CAAyBG,aAAa,CAACqD,KAAd,CAAoBmB,cAA7C,EAA6D;QAC3DjB,MAAM,EAAEc;MADmD,CAA7D,CADF;IAKD,CAlBH;EAmBD;;EAEmB,IAAhBI,gBAAgB,GAAY;IAC9B,OAAO,KAAKhE,KAAL,CAAWiE,aAAlB;EACD;;EAEDC,YAAY,CAACC,WAAD,EAAmC;IAC7C,OAAO,KAAKC,4BAAL,CAAkC,KAAK7D,OAAvC,EAAgD8D,GAAhD,CAAoDF,WAApD,CAAP;EACD;;EAEKG,MAAM,GAAmB;IAAA;;IAAA;MAC7B,OAAO,KAAI,CAACtE,KAAL,CAAWH,MAAX,EAAP;IAD6B;EAE9B;;EAED0E,gBAAgB,CAACC,MAAD,EAA4C;IAC1D,OAAO,KAAKxE,KAAL,CAAWgB,mBAAX,CAA+BwD,MAA/B,CAAP;EACD;;EAODC,eAAe,CAACC,UAAD,EAAkC;IAC/C,IAAMC,UAAU,GAAG,KAAKpE,OAAL,CAAamE,UAAb,EAAyBE,IAA5C;;IACA,IACE,KAAKlD,YAAL,CAAkBmD,QAAlB,CAA2BF,UAA3B,KACA,KAAK9C,WAAL,CAAiBgD,QAAjB,CAA0BF,UAA1B,CADA,IAEA,KAAK5C,aAAL,CAAmB8C,QAAnB,CAA4BF,UAA5B,CAHF,EAIE;MACA,OAAO,KAAP;IACD;;IACD,OAAO,CAAC,KAAKG,WAAL,CAAiBJ,UAAjB,CAAR;EACD;;EAEDK,cAAc,CAACL,UAAD,EAAkC;IAC9C,OAAO,KAAK3C,aAAL,CAAmB8C,QAAnB,CAA4B,KAAKtE,OAAL,CAAamE,UAAb,EAAyBE,IAArD,CAAP;EACD;;EAEKI,MAAM,CAACC,MAAD,EAAqC;IAAA;IAAA;IAAA;;IAAA;MAAA;;MAC/C,IAAI,CAAC,MAAI,CAACC,iBAAL,CAAuBD,MAAvB,CAAL,EAAqC;QACnC,MAAM,IAAIE,KAAJ,8BAAgCF,MAAhC,EAAN;MACD;;MAED3F,aAAa,CAAC,MAAI,CAACY,UAAN,CAAb;MACA,IAAM;QAAEkF;MAAF,IAAiB,MAAI,CAAClF,UAA5B;;MACA,IAAIkF,UAAU,CAAClD,MAAX,KAAsB,CAA1B,EAA6B;QAC3B,MAAM,IAAIiD,KAAJ,CAAU,kCAAV,CAAN;MACD;;MAED,IAAME,gBAAgB,GAAG,MAAI,CAACC,mBAAL,EAAzB;;MACA,IAAMC,aAAa,GAAGN,MAAM,CACzBxE,GADmB,CACf+E,KAAK,IAAIxG,SAAS,CAACyG,YAAV,CAAuBJ,gBAAvB,EAAyCG,KAAzC,CADM,EAEnBE,MAFmB,CAEZF,KAAK,IAAIA,KAAK,IAAI,IAFN,EAGnB/E,GAHmB,CAGf+E,KAAK,IAAI;QACZlG,aAAa,CAACkG,KAAD,CAAb;QAEA,OAAOxG,SAAS,CAAC2G,MAAV,CACLH,KADK,EAEL,CAFK,EAGL,EAAE,MAAI,CAACI,mBAAL,GAA2B,MAAI,CAAC5F,KAAL,CAAW6F,IAAxC,CAHK,CAAP;MAKD,CAXmB,CAAtB;;MAaA,IAAIN,aAAa,CAACrD,MAAd,GAAuB,CAA3B,EAA8B;QAC5B,IAAM4D,UAAU,GAAG,IAAIC,GAAJ,gCAAnB;;QACA,KAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGT,aAAa,CAACrD,MAAlC,EAA0C8D,CAAC,IAAI,CAA/C,EAAkD;UAChD,IAAMC,YAAY,GAAGV,aAAa,CAACS,CAAD,CAAlC;UACA1G,aAAa,CAAC2G,YAAY,CAACC,QAAd,CAAb;UACA5G,aAAa,CAAC2G,YAAY,CAACE,MAAd,CAAb;;UACA,KAAK,IAAIC,CAAC,GAAGH,YAAY,CAACC,QAA1B,EAAoCE,CAAC,IAAIH,YAAY,CAACE,MAAtD,EAA8DC,CAAC,IAAI,CAAnE,EAAsE;YACpEN,UAAU,CAACd,MAAX,CAAkBoB,CAAlB;UACD;QACF;;QACD,6BAAuBN,UAAvB;;QAEA,MAAI,CAAC7C,mBAAL,GAA2B,EAA3B;;QAEA,MAAI,CAACN,aAAL,CACE,IAAIvD,oBAAJ,CAAyBG,aAAa,CAACqD,KAAd,CAAoByD,oBAA7C,CADF;;QAIA,MAAI,CAAC1D,aAAL,CAAmB,IAAIvD,oBAAJ,CAAyBG,aAAa,CAACqD,KAAd,CAAoBS,OAA7C,CAAnB;MACD;;MAED,IAAMiD,cAAc,GAAG,MAAI,CAACC,iBAAL,EAAvB;;MACA,IAAMC,WAAW,GAAGvB,MAAM,CACvBxE,GADiB,CACb+E,KAAK,IAAIxG,SAAS,CAACyG,YAAV,CAAuBa,cAAvB,EAAuCd,KAAvC,CADI,EAEjBE,MAFiB,CAEVF,KAAK,IAAIA,KAAK,IAAI,IAFR,CAApB;;MAGA,IAAIgB,WAAW,CAACtE,MAAZ,IAAsB,CAA1B,EAA6B;QAC3B;MACD;;MACD,IAAM,CAACuE,IAAD,EAAOC,WAAP,UAA4BC,OAAO,CAACC,GAAR,CAAY,CAC5C;MACA,MAAI,CAACC,QAAL,CACEL,WAAW,CAAC/F,GAAZ,CAAgB+E,KAAK,IAAI;QACvBlG,aAAa,CAACkG,KAAD,CAAb;QACA,OAAO,IAAIxG,SAAJ,CACL,CADK,EAELwG,KAAK,CAACU,QAFD,EAGLd,UAAU,CAAClD,MAAX,GAAoB,CAHf,EAILsD,KAAK,CAACW,MAJD,CAAP;MAMD,CARD,CADF,CAF4C,EAa5C,MAAI,CAACnG,KAAL,CAAWmB,IAAX,EAb4C,CAAZ,CAAlC,CArD+C,CAqE/C;;MACA,IAAM2F,OAAO,GAAGL,IAAI,CAAChG,GAAL,CAASsG,GAAG,IAAI;QAC9B,IAAMC,aAAa,GAAG,EAAtB;;QACA,KAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG7B,UAAU,CAAClD,MAA/B,EAAuC+E,CAAC,IAAI,CAA5C,EAA+C;UAC7C,IAAMzC,MAAM,GAAGY,UAAU,CAAC6B,CAAD,CAAzB;UACA,IAAMC,KAAK,GAAGH,GAAG,CAACE,CAAD,CAAjB;UACA,IAAME,WAAW,GAAGhI,UAAU,CAACiI,kBAAX,CAA8B5C,MAAM,CAAC6C,IAArC,EAA2CH,KAA3C,CAApB;;UACA,IAAMxB,OAAM,GAAGlB,MAAM,CAACkB,MAAP,GAAgB4B,EAAhB,CAAmBH,WAAnB,CAAf;;UACAH,aAAa,CAACO,IAAd,CAAmB7B,OAAnB;QACD;;QACD,OAAOsB,aAAa,CAACQ,MAAd,CAAqB,CAACC,GAAD,EAAMC,IAAN,KAAgBD,GAAG,GAAGA,GAAG,CAACE,GAAJ,CAAQD,IAAR,CAAH,GAAmBA,IAA3D,CAAP;MACD,CAVe,CAAhB;MAYA,IAAMhC,MAAM,GAAGoB,OAAO,CAACU,MAAR,CAAe,CAACC,GAAD,EAAMC,IAAN,KAAgBD,GAAG,GAAGA,GAAG,CAACG,EAAJ,CAAOF,IAAP,CAAH,GAAkBA,IAApD,CAAf;MACAhB,WAAW,CAACmB,WAAZ,CAAwB,CAACnC,MAAD,CAAxB;MAEA,2BAAM,MAAI,CAACxF,UAAX,sDAAM,kBAAiBwG,WAAjB,CAA6BA,WAA7B,CAAN;MACAA,WAAW,CAAClD,KAAZ;IAtF+C;EAuFhD;;AAtUuE;;AAyU1E,eAAe1D,kBAAf"}
1
+ {"version":3,"file":"IrisGridTableModel.js","names":["memoize","GridRange","Log","Formatter","TableUtils","EventShimCustomEvent","PromiseUtils","assertNotNull","IrisGridModel","IrisGridTableModelTemplate","log","module","EMPTY_ARRAY","Object","freeze","IrisGridTableModel","constructor","table","formatter","inputTable","layoutHintsFrontColumns","layoutHintsBackColumns","layoutHintsFrozenColumns","userFrozenColumns","columns","Set","map","_","index","customColumnList","formatColumnList","isExportAvailable","isColumnStatisticsAvailable","getColumnStatistics","isValuesTableAvailable","selectDistinct","copy","isRollupAvailable","rollup","isSelectDistinctAvailable","isCustomColumnsAvailable","applyCustomColumns","isFormatColumnsAvailable","frontColumns","getMemoizedFrontColumns","layoutHints","backColumns","getMemoizedBackColumns","frozenColumns","getMemoizedFrozenColumns","floatingLeftColumnCount","length","description","customColumns","debug2","debug","closeSubscription","formatColumns","applyViewport","updateFrozenColumns","dispatchEvent","EVENT","TABLE_CHANGED","detail","totalsConfig","totals","formattedStringData","totalsTablePromise","cancel","setTotalsTable","UPDATED","makeCancelable","getTotalsTable","close","then","totalsTable","catch","err","isCanceled","error","REQUEST_FAILED","isFilterRequired","isUncoalesced","isFilterable","columnIndex","getCachedFilterableColumnSet","has","export","columnStatistics","column","isColumnMovable","modelIndex","columnName","name","includes","isKeyColumn","isColumnFrozen","delete","ranges","isDeletableRanges","Error","keyColumns","pendingAreaRange","getPendingAreaRange","pendingRanges","range","intersection","filter","offset","floatingTopRowCount","size","newDataMap","Map","i","pendingRange","startRow","endRow","r","PENDING_DATA_UPDATED","tableAreaRange","getTableAreaRange","tableRanges","data","deleteTable","Promise","all","snapshot","filters","row","columnFilters","c","value","filterValue","makeFilterRawValue","type","eq","push","reduce","agg","curr","and","or","applyFilter"],"sources":["../src/IrisGridTableModel.ts"],"sourcesContent":["/* eslint class-methods-use-this: \"off\" */\nimport memoize from 'memoize-one';\nimport { GridRange, ModelIndex } from '@deephaven/grid';\nimport {\n Column,\n ColumnStatistics,\n CustomColumn,\n InputTable,\n LayoutHints,\n Table,\n} from '@deephaven/jsapi-shim';\nimport Log from '@deephaven/log';\nimport { Formatter, TableUtils } from '@deephaven/jsapi-utils';\nimport {\n EventShimCustomEvent,\n PromiseUtils,\n assertNotNull,\n} from '@deephaven/utils';\nimport IrisGridModel from './IrisGridModel';\nimport { ColumnName, UITotalsTableConfig, UIRow } from './CommonTypes';\nimport IrisGridTableModelTemplate from './IrisGridTableModelTemplate';\n\nconst log = Log.module('IrisGridTableModel');\n\nconst EMPTY_ARRAY = Object.freeze([]);\n\n/**\n * Model for a grid showing an iris data table\n */\n\nclass IrisGridTableModel extends IrisGridTableModelTemplate<Table, UIRow> {\n userFrozenColumns?: ColumnName[];\n\n customColumnList: string[];\n\n formatColumnList: CustomColumn[];\n\n /**\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 table: Table,\n formatter = new Formatter(),\n inputTable: InputTable | null = null\n ) {\n super(table, formatter, inputTable);\n\n this.customColumnList = [];\n this.formatColumnList = [];\n }\n\n get isExportAvailable(): boolean {\n return this.table.freeze != null;\n }\n\n get isColumnStatisticsAvailable(): boolean {\n return this.table.getColumnStatistics != null;\n }\n\n get isValuesTableAvailable(): boolean {\n return this.table.selectDistinct != null && this.table.copy != null;\n }\n\n get isRollupAvailable(): boolean {\n return this.table.rollup != null;\n }\n\n get isSelectDistinctAvailable(): boolean {\n return this.table.selectDistinct != null;\n }\n\n get isCustomColumnsAvailable(): boolean {\n return this.table.applyCustomColumns != null;\n }\n\n get isFormatColumnsAvailable(): boolean {\n return this.table.applyCustomColumns != null;\n }\n\n getMemoizedFrontColumns = memoize(\n layoutHintsFrontColumns => layoutHintsFrontColumns ?? EMPTY_ARRAY\n );\n\n get frontColumns(): ColumnName[] {\n return this.getMemoizedFrontColumns(this.layoutHints?.frontColumns);\n }\n\n getMemoizedBackColumns = memoize(\n layoutHintsBackColumns => layoutHintsBackColumns ?? EMPTY_ARRAY\n );\n\n get backColumns(): ColumnName[] {\n return this.getMemoizedBackColumns(this.layoutHints?.backColumns);\n }\n\n getMemoizedFrozenColumns = memoize(\n (\n layoutHintsFrozenColumns: ColumnName[],\n userFrozenColumns?: ColumnName[]\n ): ColumnName[] =>\n userFrozenColumns ?? layoutHintsFrozenColumns ?? EMPTY_ARRAY\n );\n\n get frozenColumns(): ColumnName[] {\n return this.getMemoizedFrozenColumns(\n this.layoutHints?.frozenColumns,\n this.userFrozenColumns\n );\n }\n\n get layoutHints(): LayoutHints {\n return this.table.layoutHints;\n }\n\n get floatingLeftColumnCount(): number {\n return this.frozenColumns.length;\n }\n\n get description(): string {\n return this.table.description;\n }\n\n get customColumns(): ColumnName[] {\n return this.customColumnList;\n }\n\n set customColumns(customColumns: ColumnName[]) {\n log.debug2(\n 'set customColumns',\n customColumns,\n this.customColumnList,\n customColumns === this.customColumnList\n );\n if (this.customColumnList.length === 0 && customColumns.length === 0) {\n log.debug('Ignore empty initial customColumns');\n this.customColumnList = customColumns;\n return;\n }\n if (this.customColumnList === customColumns) {\n log.debug('Ignore same customColumns');\n return;\n }\n this.closeSubscription();\n this.customColumnList = customColumns;\n this.table.applyCustomColumns([...customColumns, ...this.formatColumns]);\n this.applyViewport();\n }\n\n get formatColumns(): CustomColumn[] {\n return this.formatColumnList;\n }\n\n set formatColumns(formatColumns: CustomColumn[]) {\n log.debug2(\n 'set formatColumns',\n formatColumns,\n this.formatColumnList,\n formatColumns === this.formatColumnList\n );\n if (this.formatColumnList.length === 0 && formatColumns.length === 0) {\n log.debug('Ignore empty initial formatColumns');\n this.formatColumnList = formatColumns;\n return;\n }\n if (this.formatColumnList === formatColumns) {\n log.debug('Ignore same formatColumns');\n return;\n }\n this.closeSubscription();\n this.formatColumnList = formatColumns;\n this.table.applyCustomColumns([...this.customColumns, ...formatColumns]);\n this.applyViewport();\n }\n\n updateFrozenColumns(columns: ColumnName[]): void {\n this.userFrozenColumns = columns;\n this.dispatchEvent(\n new EventShimCustomEvent(IrisGridModel.EVENT.TABLE_CHANGED, {\n detail: this.table,\n })\n );\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 get isFilterRequired(): boolean {\n return this.table.isUncoalesced;\n }\n\n isFilterable(columnIndex: ModelIndex): boolean {\n return this.getCachedFilterableColumnSet(this.columns).has(columnIndex);\n }\n\n async export(): Promise<Table> {\n return this.table.freeze();\n }\n\n columnStatistics(column: Column): Promise<ColumnStatistics> {\n return this.table.getColumnStatistics(column);\n }\n\n getCachedFilterableColumnSet = memoize(\n (columns: Column[]) =>\n new Set(columns.map((_: Column, index: ModelIndex) => index))\n );\n\n isColumnMovable(modelIndex: ModelIndex): boolean {\n const columnName = this.columns[modelIndex].name;\n if (\n this.frontColumns.includes(columnName) ||\n this.backColumns.includes(columnName) ||\n this.frozenColumns.includes(columnName)\n ) {\n return false;\n }\n return !this.isKeyColumn(modelIndex);\n }\n\n isColumnFrozen(modelIndex: ModelIndex): boolean {\n return this.frozenColumns.includes(this.columns[modelIndex].name);\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(super.pendingDataMap);\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 super.pendingDataMap = 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 = TableUtils.makeFilterRawValue(column.type, value);\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\n deleteTable.applyFilter([filter]);\n\n await this.inputTable?.deleteTable(deleteTable);\n deleteTable.close();\n }\n}\n\nexport default IrisGridTableModel;\n"],"mappings":"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"}
@@ -403,15 +403,15 @@ class IrisGridTableModelTemplate extends IrisGridModel {
403
403
  }
404
404
 
405
405
  get floatingBottomRowCount() {
406
- var _this$totals2, _this$totals$operatio3, _this$totals3, _this$totals3$operati;
406
+ var _this$totals$operatio3, _this$totals2, _this$totals2$operati;
407
407
 
408
- return (_this$totals2 = this.totals) !== null && _this$totals2 !== void 0 && _this$totals2.showOnTop ? 0 : (_this$totals$operatio3 = (_this$totals3 = this.totals) === null || _this$totals3 === void 0 ? void 0 : (_this$totals3$operati = _this$totals3.operationOrder) === null || _this$totals3$operati === void 0 ? void 0 : _this$totals3$operati.length) !== null && _this$totals$operatio3 !== void 0 ? _this$totals$operatio3 : 0;
408
+ return this.totals != null && this.totals.showOnTop ? 0 : (_this$totals$operatio3 = (_this$totals2 = this.totals) === null || _this$totals2 === void 0 ? void 0 : (_this$totals2$operati = _this$totals2.operationOrder) === null || _this$totals2$operati === void 0 ? void 0 : _this$totals2$operati.length) !== null && _this$totals$operatio3 !== void 0 ? _this$totals$operatio3 : 0;
409
409
  }
410
410
 
411
411
  get floatingTopRowCount() {
412
- var _this$totals4, _this$totals$operatio4, _this$totals5, _this$totals5$operati;
412
+ var _this$totals$operatio4, _this$totals3, _this$totals3$operati;
413
413
 
414
- return (_this$totals4 = this.totals) !== null && _this$totals4 !== void 0 && _this$totals4.showOnTop ? (_this$totals$operatio4 = (_this$totals5 = this.totals) === null || _this$totals5 === void 0 ? void 0 : (_this$totals5$operati = _this$totals5.operationOrder) === null || _this$totals5$operati === void 0 ? void 0 : _this$totals5$operati.length) !== null && _this$totals$operatio4 !== void 0 ? _this$totals$operatio4 : 0 : 0;
414
+ return this.totals != null && this.totals.showOnTop ? (_this$totals$operatio4 = (_this$totals3 = this.totals) === null || _this$totals3 === void 0 ? void 0 : (_this$totals3$operati = _this$totals3.operationOrder) === null || _this$totals3$operati === void 0 ? void 0 : _this$totals3$operati.length) !== null && _this$totals$operatio4 !== void 0 ? _this$totals$operatio4 : 0 : 0;
415
415
  }
416
416
 
417
417
  get isChartBuilderAvailable() {
@@ -776,7 +776,7 @@ class IrisGridTableModelTemplate extends IrisGridModel {
776
776
  var moveToIndex = isBeforeGroup ? rightVisibleIndex - childGroup.childIndexes.length + 1 : rightVisibleIndex + 1;
777
777
  moveGroup(childName, moveToIndex);
778
778
  rightVisibleIndex = moveToIndex + childGroup.childIndexes.length - 1;
779
- } else if (childColumn) {
779
+ } else if (childColumn != null) {
780
780
  var _isBeforeGroup = GridUtils.getVisibleIndex(childColumn, movedColumns) < rightVisibleIndex;
781
781
 
782
782
  var _moveToIndex = _isBeforeGroup ? rightVisibleIndex : rightVisibleIndex + 1;
@@ -897,16 +897,16 @@ class IrisGridTableModelTemplate extends IrisGridModel {
897
897
  }
898
898
 
899
899
  row(y) {
900
- var _this$totals$operatio5, _this$totals6, _this$totals6$operati, _this$totals$showOnTo, _this$totals7, _this$viewportData$of, _this$viewportData, _this$viewportData$ro, _this$viewportData2, _this$viewportData2$r;
900
+ var _this$totals$operatio5, _this$totals4, _this$totals4$operati, _this$totals$showOnTo, _this$totals5, _this$viewportData$of, _this$viewportData, _this$viewportData$ro, _this$viewportData2, _this$viewportData2$r;
901
901
 
902
- var totalsRowCount = (_this$totals$operatio5 = (_this$totals6 = this.totals) === null || _this$totals6 === void 0 ? void 0 : (_this$totals6$operati = _this$totals6.operationOrder) === null || _this$totals6$operati === void 0 ? void 0 : _this$totals6$operati.length) !== null && _this$totals$operatio5 !== void 0 ? _this$totals$operatio5 : 0;
903
- var showOnTop = (_this$totals$showOnTo = (_this$totals7 = this.totals) === null || _this$totals7 === void 0 ? void 0 : _this$totals7.showOnTop) !== null && _this$totals$showOnTo !== void 0 ? _this$totals$showOnTo : false;
902
+ var totalsRowCount = (_this$totals$operatio5 = (_this$totals4 = this.totals) === null || _this$totals4 === void 0 ? void 0 : (_this$totals4$operati = _this$totals4.operationOrder) === null || _this$totals4$operati === void 0 ? void 0 : _this$totals4$operati.length) !== null && _this$totals$operatio5 !== void 0 ? _this$totals$operatio5 : 0;
903
+ var showOnTop = (_this$totals$showOnTo = (_this$totals5 = this.totals) === null || _this$totals5 === void 0 ? void 0 : _this$totals5.showOnTop) !== null && _this$totals$showOnTo !== void 0 ? _this$totals$showOnTo : false;
904
904
  var totalsRow = this.totalsRow(y);
905
905
 
906
906
  if (totalsRow != null) {
907
- var _this$totals8, _this$totalsDataMap$g, _this$totalsDataMap;
907
+ var _this$totals6, _this$totalsDataMap$g, _this$totalsDataMap;
908
908
 
909
- var operation = (_this$totals8 = this.totals) === null || _this$totals8 === void 0 ? void 0 : _this$totals8.operationOrder[totalsRow];
909
+ var operation = (_this$totals6 = this.totals) === null || _this$totals6 === void 0 ? void 0 : _this$totals6.operationOrder[totalsRow];
910
910
  assertNotNull(operation);
911
911
  return (_this$totalsDataMap$g = (_this$totalsDataMap = this.totalsDataMap) === null || _this$totalsDataMap === void 0 ? void 0 : _this$totalsDataMap.get(operation)) !== null && _this$totalsDataMap$g !== void 0 ? _this$totalsDataMap$g : null;
912
912
  }
@@ -931,20 +931,20 @@ class IrisGridTableModelTemplate extends IrisGridModel {
931
931
 
932
932
 
933
933
  totalsColumn(x, y) {
934
- var _this$totals9, _this$totals$defaultO, _this$totals10, _this$totalsTable;
934
+ var _this$totals7, _this$totals$defaultO, _this$totals8, _this$totalsTable;
935
935
 
936
936
  var totalsRow = this.totalsRow(y);
937
937
  if (totalsRow == null) return null;
938
- var operation = (_this$totals9 = this.totals) === null || _this$totals9 === void 0 ? void 0 : _this$totals9.operationOrder[totalsRow];
939
- var defaultOperation = (_this$totals$defaultO = (_this$totals10 = this.totals) === null || _this$totals10 === void 0 ? void 0 : _this$totals10.defaultOperation) !== null && _this$totals$defaultO !== void 0 ? _this$totals$defaultO : AggregationOperation.SUM;
938
+ var operation = (_this$totals7 = this.totals) === null || _this$totals7 === void 0 ? void 0 : _this$totals7.operationOrder[totalsRow];
939
+ var defaultOperation = (_this$totals$defaultO = (_this$totals8 = this.totals) === null || _this$totals8 === void 0 ? void 0 : _this$totals8.defaultOperation) !== null && _this$totals$defaultO !== void 0 ? _this$totals$defaultO : AggregationOperation.SUM;
940
940
  var tableColumn = this.columns[x]; // Find the matching totals table column for the operation
941
941
  // When there are multiple aggregations, the column name will be the original name of the column with the operation appended afterward
942
942
  // 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
943
943
 
944
944
  return (_this$totalsTable = this.totalsTable) === null || _this$totalsTable === void 0 ? void 0 : _this$totalsTable.columns.find(column => {
945
- var _this$totals11;
945
+ var _this$totals9;
946
946
 
947
- return column.name === "".concat(tableColumn.name, "__").concat(operation) || (operation === defaultOperation || ((_this$totals11 = this.totals) === null || _this$totals11 === void 0 ? void 0 : _this$totals11.operationOrder.length) === 1) && column.name === tableColumn.name;
947
+ return column.name === "".concat(tableColumn.name, "__").concat(operation) || (operation === defaultOperation || ((_this$totals9 = this.totals) === null || _this$totals9 === void 0 ? void 0 : _this$totals9.operationOrder.length) === 1) && column.name === tableColumn.name;
948
948
  });
949
949
  }
950
950
  /**
@@ -956,10 +956,10 @@ class IrisGridTableModelTemplate extends IrisGridModel {
956
956
 
957
957
 
958
958
  totalsRow(y) {
959
- var _this$totals$operatio6, _this$totals12, _this$totals12$operat, _this$totals$showOnTo2, _this$totals13;
959
+ var _this$totals$operatio6, _this$totals10, _this$totals10$operat, _this$totals$showOnTo2, _this$totals11;
960
960
 
961
- var totalsRowCount = (_this$totals$operatio6 = (_this$totals12 = this.totals) === null || _this$totals12 === void 0 ? void 0 : (_this$totals12$operat = _this$totals12.operationOrder) === null || _this$totals12$operat === void 0 ? void 0 : _this$totals12$operat.length) !== null && _this$totals$operatio6 !== void 0 ? _this$totals$operatio6 : 0;
962
- var showOnTop = (_this$totals$showOnTo2 = (_this$totals13 = this.totals) === null || _this$totals13 === void 0 ? void 0 : _this$totals13.showOnTop) !== null && _this$totals$showOnTo2 !== void 0 ? _this$totals$showOnTo2 : false;
961
+ var totalsRowCount = (_this$totals$operatio6 = (_this$totals10 = this.totals) === null || _this$totals10 === void 0 ? void 0 : (_this$totals10$operat = _this$totals10.operationOrder) === null || _this$totals10$operat === void 0 ? void 0 : _this$totals10$operat.length) !== null && _this$totals$operatio6 !== void 0 ? _this$totals$operatio6 : 0;
962
+ var showOnTop = (_this$totals$showOnTo2 = (_this$totals11 = this.totals) === null || _this$totals11 === void 0 ? void 0 : _this$totals11.showOnTop) !== null && _this$totals$showOnTo2 !== void 0 ? _this$totals$showOnTo2 : false;
963
963
  var totalsRow = showOnTop ? y : y - this.table.size;
964
964
 
965
965
  if (totalsRow >= 0 && totalsRow < totalsRowCount) {
@@ -1035,7 +1035,7 @@ class IrisGridTableModelTemplate extends IrisGridModel {
1035
1035
  }
1036
1036
 
1037
1037
  copyViewportData(data) {
1038
- if (!data) {
1038
+ if (data == null) {
1039
1039
  log.warn('invalid data!');
1040
1040
  return;
1041
1041
  }
@@ -1046,11 +1046,11 @@ class IrisGridTableModelTemplate extends IrisGridModel {
1046
1046
 
1047
1047
  copyTotalsData(totalsData) {
1048
1048
  var _this$totals$defaultO2,
1049
- _this$totals14,
1050
- _this$totals15,
1049
+ _this$totals12,
1050
+ _this$totals13,
1051
1051
  _this = this;
1052
1052
 
1053
- if (!totalsData) {
1053
+ if (totalsData == null) {
1054
1054
  log.warn('invalid data!');
1055
1055
  return;
1056
1056
  }
@@ -1067,8 +1067,8 @@ class IrisGridTableModelTemplate extends IrisGridModel {
1067
1067
 
1068
1068
  var dataMap = new Map();
1069
1069
  var row = rows[0];
1070
- var defaultOperation = (_this$totals$defaultO2 = (_this$totals14 = this.totals) === null || _this$totals14 === void 0 ? void 0 : _this$totals14.defaultOperation) !== null && _this$totals$defaultO2 !== void 0 ? _this$totals$defaultO2 : AggregationOperation.SUM;
1071
- var operationMap = (_this$totals15 = this.totals) === null || _this$totals15 === void 0 ? void 0 : _this$totals15.operationMap;
1070
+ var defaultOperation = (_this$totals$defaultO2 = (_this$totals12 = this.totals) === null || _this$totals12 === void 0 ? void 0 : _this$totals12.defaultOperation) !== null && _this$totals$defaultO2 !== void 0 ? _this$totals$defaultO2 : AggregationOperation.SUM;
1071
+ var operationMap = (_this$totals13 = this.totals) === null || _this$totals13 === void 0 ? void 0 : _this$totals13.operationMap;
1072
1072
 
1073
1073
  var _loop = function _loop(c) {
1074
1074
  var _operationMap$name$, _operationMap$name;
@@ -1908,9 +1908,17 @@ class IrisGridTableModelTemplate extends IrisGridModel {
1908
1908
  columnFilters.push(_filter);
1909
1909
  }
1910
1910
 
1911
- return columnFilters.reduce((agg, curr) => agg ? agg.and(curr) : curr);
1911
+ return columnFilters.reduce((agg, curr) => {
1912
+ var _agg$and;
1913
+
1914
+ return (_agg$and = agg === null || agg === void 0 ? void 0 : agg.and(curr)) !== null && _agg$and !== void 0 ? _agg$and : curr;
1915
+ });
1916
+ });
1917
+ var filter = filters.reduce((agg, curr) => {
1918
+ var _agg$or;
1919
+
1920
+ return (_agg$or = agg === null || agg === void 0 ? void 0 : agg.or(curr)) !== null && _agg$or !== void 0 ? _agg$or : curr;
1912
1921
  });
1913
- var filter = filters.reduce((agg, curr) => agg ? agg.or(curr) : curr);
1914
1922
  deleteTable.applyFilter([filter]); // await this.inputTable?.deleteTable(deleteTable);
1915
1923
 
1916
1924
  deleteTable.close();