@deephaven/iris-grid 0.26.2-beta.0 → 0.26.2-beta.1

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 (123) hide show
  1. package/dist/AdvancedFilterCreator.js +3 -1
  2. package/dist/AdvancedFilterCreator.js.map +1 -1
  3. package/dist/AdvancedFilterCreatorFilterItem.js +3 -1
  4. package/dist/AdvancedFilterCreatorFilterItem.js.map +1 -1
  5. package/dist/AdvancedFilterCreatorSelectValue.js +3 -1
  6. package/dist/AdvancedFilterCreatorSelectValue.js.map +1 -1
  7. package/dist/AdvancedFilterCreatorSelectValueList.js +3 -1
  8. package/dist/AdvancedFilterCreatorSelectValueList.js.map +1 -1
  9. package/dist/ColumnHeaderGroup.js +3 -1
  10. package/dist/ColumnHeaderGroup.js.map +1 -1
  11. package/dist/ColumnStatistics.js +3 -1
  12. package/dist/ColumnStatistics.js.map +1 -1
  13. package/dist/CrossColumnSearch.js +3 -1
  14. package/dist/CrossColumnSearch.js.map +1 -1
  15. package/dist/FilterInputField.js +3 -1
  16. package/dist/FilterInputField.js.map +1 -1
  17. package/dist/GotoRow.js.map +1 -1
  18. package/dist/IrisGrid.js +9 -7
  19. package/dist/IrisGrid.js.map +1 -1
  20. package/dist/IrisGridCellOverflowModal.js.map +1 -1
  21. package/dist/IrisGridCopyHandler.js +3 -1
  22. package/dist/IrisGridCopyHandler.js.map +1 -1
  23. package/dist/IrisGridModel.js +3 -1
  24. package/dist/IrisGridModel.js.map +1 -1
  25. package/dist/IrisGridPartitionSelector.js +3 -1
  26. package/dist/IrisGridPartitionSelector.js.map +1 -1
  27. package/dist/IrisGridProxyModel.js +3 -1
  28. package/dist/IrisGridProxyModel.js.map +1 -1
  29. package/dist/IrisGridRenderer.js +3 -1
  30. package/dist/IrisGridRenderer.js.map +1 -1
  31. package/dist/IrisGridTableModel.js +3 -1
  32. package/dist/IrisGridTableModel.js.map +1 -1
  33. package/dist/IrisGridTableModelTemplate.js +9 -7
  34. package/dist/IrisGridTableModelTemplate.js.map +1 -1
  35. package/dist/IrisGridTestUtils.js +3 -1
  36. package/dist/IrisGridTestUtils.js.map +1 -1
  37. package/dist/IrisGridTreeTableModel.js +3 -1
  38. package/dist/IrisGridTreeTableModel.js.map +1 -1
  39. package/dist/IrisGridUtils.js +5 -3
  40. package/dist/IrisGridUtils.js.map +1 -1
  41. package/dist/MissingKeyError.js +3 -1
  42. package/dist/MissingKeyError.js.map +1 -1
  43. package/dist/PartitionSelectorSearch.js +3 -1
  44. package/dist/PartitionSelectorSearch.js.map +1 -1
  45. package/dist/PendingDataBottomBar.js.map +1 -1
  46. package/dist/TableViewportUpdater.js +3 -1
  47. package/dist/TableViewportUpdater.js.map +1 -1
  48. package/dist/TreeTableViewportUpdater.js +3 -1
  49. package/dist/TreeTableViewportUpdater.js.map +1 -1
  50. package/dist/format-context-menus/CustomFormatAction.js +3 -1
  51. package/dist/format-context-menus/CustomFormatAction.js.map +1 -1
  52. package/dist/format-context-menus/DateTimeFormatContextMenu.js +3 -1
  53. package/dist/format-context-menus/DateTimeFormatContextMenu.js.map +1 -1
  54. package/dist/format-context-menus/DecimalFormatContextMenu.js +3 -1
  55. package/dist/format-context-menus/DecimalFormatContextMenu.js.map +1 -1
  56. package/dist/format-context-menus/IntegerFormatContextMenu.js +3 -1
  57. package/dist/format-context-menus/IntegerFormatContextMenu.js.map +1 -1
  58. package/dist/key-handlers/ClearFilterKeyHandler.js +3 -1
  59. package/dist/key-handlers/ClearFilterKeyHandler.js.map +1 -1
  60. package/dist/key-handlers/CopyKeyHandler.js +3 -1
  61. package/dist/key-handlers/CopyKeyHandler.js.map +1 -1
  62. package/dist/key-handlers/ReverseKeyHandler.js +3 -1
  63. package/dist/key-handlers/ReverseKeyHandler.js.map +1 -1
  64. package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.js +3 -1
  65. package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.js.map +1 -1
  66. package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js +3 -1
  67. package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js.map +1 -1
  68. package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js +3 -1
  69. package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js.map +1 -1
  70. package/dist/mousehandlers/IrisGridContextMenuHandler.js +7 -5
  71. package/dist/mousehandlers/IrisGridContextMenuHandler.js.map +1 -1
  72. package/dist/mousehandlers/IrisGridDataSelectMouseHandler.js +3 -1
  73. package/dist/mousehandlers/IrisGridDataSelectMouseHandler.js.map +1 -1
  74. package/dist/mousehandlers/IrisGridFilterMouseHandler.js +3 -1
  75. package/dist/mousehandlers/IrisGridFilterMouseHandler.js.map +1 -1
  76. package/dist/mousehandlers/IrisGridSortMouseHandler.js +3 -1
  77. package/dist/mousehandlers/IrisGridSortMouseHandler.js.map +1 -1
  78. package/dist/sidebar/ChartBuilder.js +3 -1
  79. package/dist/sidebar/ChartBuilder.js.map +1 -1
  80. package/dist/sidebar/CustomColumnBuilder.js +3 -1
  81. package/dist/sidebar/CustomColumnBuilder.js.map +1 -1
  82. package/dist/sidebar/CustomColumnInput.js +3 -1
  83. package/dist/sidebar/CustomColumnInput.js.map +1 -1
  84. package/dist/sidebar/InputEditor.js +3 -1
  85. package/dist/sidebar/InputEditor.js.map +1 -1
  86. package/dist/sidebar/RollupRows.js +3 -1
  87. package/dist/sidebar/RollupRows.js.map +1 -1
  88. package/dist/sidebar/SelectDistinctBuilder.js +3 -1
  89. package/dist/sidebar/SelectDistinctBuilder.js.map +1 -1
  90. package/dist/sidebar/TableCsvExporter.js +3 -1
  91. package/dist/sidebar/TableCsvExporter.js.map +1 -1
  92. package/dist/sidebar/TableSaver.js +3 -1
  93. package/dist/sidebar/TableSaver.js.map +1 -1
  94. package/dist/sidebar/aggregations/AggregationEdit.js +3 -1
  95. package/dist/sidebar/aggregations/AggregationEdit.js.map +1 -1
  96. package/dist/sidebar/aggregations/Aggregations.js +3 -1
  97. package/dist/sidebar/aggregations/Aggregations.js.map +1 -1
  98. package/dist/sidebar/conditional-formatting/ColumnFormatEditor.js +3 -1
  99. package/dist/sidebar/conditional-formatting/ColumnFormatEditor.js.map +1 -1
  100. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js.map +1 -1
  101. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js.map +1 -1
  102. package/dist/sidebar/conditional-formatting/RowFormatEditor.js +3 -1
  103. package/dist/sidebar/conditional-formatting/RowFormatEditor.js.map +1 -1
  104. package/dist/sidebar/conditional-formatting/StyleEditor.js +2 -2
  105. package/dist/sidebar/conditional-formatting/StyleEditor.js.map +1 -1
  106. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.js +5 -3
  107. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.js.map +1 -1
  108. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilderUtils.js +3 -1
  109. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilderUtils.js.map +1 -1
  110. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingItem.js.map +1 -1
  111. package/dist/sidebar/visibility-ordering-builder/sortable-tree/PointerSensorWithInteraction.js +3 -1
  112. package/dist/sidebar/visibility-ordering-builder/sortable-tree/PointerSensorWithInteraction.js.map +1 -1
  113. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.js +3 -1
  114. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.js.map +1 -1
  115. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeInner.js +3 -1
  116. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeInner.js.map +1 -1
  117. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeItem.js +3 -1
  118. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeItem.js.map +1 -1
  119. package/dist/sidebar/visibility-ordering-builder/sortable-tree/keyboardCoordinates.js +3 -1
  120. package/dist/sidebar/visibility-ordering-builder/sortable-tree/keyboardCoordinates.js.map +1 -1
  121. package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.js +3 -1
  122. package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.js.map +1 -1
  123. 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","allColumnWidths","allColumnXs","length","groupedColumnDividerColor","lastGroupedColumn","modelIndex","findIndex","c","columnX","columnWidth","x","strokeStyle","lineWidth","beginPath","moveTo","lineTo","stroke","allRowYs","maxX","pendingRowCount","firstPendingRow","rowCount","floatingBottomRowCount","y","save","setLineDash","pendingTextColor","restore","drawMouseColumnHover","hoverSelectColumn","linkerColumnHoverBackgroundColor","fillStyle","fillRect","drawMouseRowHover","isSelectingColumn","loadingScrimProgress","width","height","gridY","scrimBlurSize","scrimColor","globalCompositeOperation","rect","clip","drawColumnHeaders","reverseType","columnHeaderHeight","drawFilterHeaders","hasReverse","REVERSE_TYPE","NONE","color","headerReverseBarColor","headerSortBarColor","drawHeaderBar","reverseHeaderBarHeight","sortHeaderBarHeight","barHeight","interior","offset","headerBarCasingColor","columnHeaderMaxDepth","drawColumnHeadersAtDepth","range","boundsProp","depth","isMenuShown","bounds","drawColumnHeaderAtIndex","index","gridX","fontWidths","headerHorizontalPadding","getSortForColumn","text","textForColumnHeader","fontWidth","DEFAULT_FONT_WIDTH","textWidth","textRight","defaultX","Math","min","yOffset","translate","fill","isFilterBarShown","quickFilters","advancedFilters","drawExpandedFilterHeaders","size","drawCollapsedFilterHeaders","filterBarHeight","visibleColumns","textAlign","filterBarExpandedActiveBackgroundColor","filterBarExpandedBackgroundColor","y1","filterBarSeparatorColor","i","isFilterable","x1","drawExpandedFilterHeader","filterBarExpandedActiveCellBackgroundColor","filterBarErrorColor","filterBarHorizontalPadding","headerColor","filterText","getFilterText","measureText","maxLength","substring","rectLeft","rectTop","rectWidth","rectHeight","strokeRect","textX","textY","fillText","headerSeparatorColor","filterBarCollapsedHeight","drawCollapsedFilterHeader","filterBarActiveColor","filterBarActiveBackgroundColor","drawTreeMarker","rowY","treeBox","isExpanded","markerIcon","iconX","iconY","drawRowFooters","mouseX","mouseY","floatingTopHeight","floatingBottomHeight","floatingRows","rowFooterWidth","horizontalBarHeight","verticalBarWidth","allRowHeights","cellHorizontalPadding","floatingGridRowColor","floatingRowBackgroundColors","rowHoverBackgroundColor","mouseRow","getRowAtY","includes","rowHeight","textForRowFooter","getTextRenderMetrics","textMetrics","mouseColumn","getGridPointFromXY","left","getCellOverflowButtonPosition","shouldRenderOverflowButton","getCellInfoFromXY","isStringType","textForCell","truncatedText","getCachedTruncatedString","truncationCharForCell","NULL_POSITION","top","gridWidth","right","buttonLeft","buttonTop","buttonWidth","buttonHeight","overflowButtonColor","overflowButtonHoverColor"],"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, allColumnWidths, allColumnXs } = 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 = allColumnXs.get(modelIndex);\n const columnWidth = allColumnWidths.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 { allRowYs, maxX } = metrics;\n const { pendingRowCount } = model;\n if (pendingRowCount <= 0) {\n return;\n }\n\n const firstPendingRow =\n model.rowCount - model.pendingRowCount - model.floatingBottomRowCount;\n let y = allRowYs.get(firstPendingRow);\n if (y == null) {\n return;\n }\n\n y -= 0.5;\n context.save();\n context.setLineDash([4, 2]);\n context.strokeStyle = theme.pendingTextColor;\n\n context.lineWidth = 1;\n context.beginPath();\n context.moveTo(0, y);\n context.lineTo(maxX, y);\n context.stroke();\n context.restore();\n }\n\n drawMouseColumnHover(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n const { theme, metrics, hoverSelectColumn } = state;\n if (\n hoverSelectColumn == null ||\n theme.linkerColumnHoverBackgroundColor == null\n ) {\n return;\n }\n\n const { allColumnWidths, allColumnXs, maxY } = metrics;\n\n const x = allColumnXs.get(hoverSelectColumn);\n const columnWidth = allColumnWidths.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 change the underlying layer to grayscale\n context.globalCompositeOperation = 'color';\n context.filter = `blur(${scrimBlurSize}px)`;\n if (scrimColor != null) {\n context.fillStyle = scrimColor;\n }\n\n // Clip the path so the top edge is hard edge, bottom edge is soft/blurry\n context.beginPath();\n context.rect(0, gridY, width, height - gridY);\n context.clip();\n\n // Extend the edges beyond the clip area so they're hard edges\n context.fillRect(\n -scrimBlurSize,\n -scrimBlurSize + gridY,\n scrimBlurSize * 2 + width,\n (scrimBlurSize * 2 + (height - gridY)) * loadingScrimProgress\n );\n\n // add an overlay of the scrim color to darken things a bit\n context.globalCompositeOperation = 'overlay';\n context.filter = `blur(${scrimBlurSize}px) opacity(15%)`;\n context.fillRect(\n -scrimBlurSize,\n -scrimBlurSize + gridY,\n scrimBlurSize * 2 + width,\n (scrimBlurSize * 2 + (height - gridY)) * loadingScrimProgress\n );\n\n context.restore();\n }\n\n drawColumnHeaders(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n super.drawColumnHeaders(context, state);\n\n const { theme, metrics, model, reverseType } = state;\n const { columnHeaderHeight } = metrics;\n\n this.drawFilterHeaders(context, state);\n\n if (columnHeaderHeight <= 0) {\n return;\n }\n\n const { sort } = model;\n // if there is only one sort bar, it is interior to the header to save space\n if (sort.length === 1) {\n const hasReverse = reverseType !== TableUtils.REVERSE_TYPE.NONE;\n\n let color;\n if (hasReverse) {\n color = theme.headerReverseBarColor;\n } else {\n color = theme.headerSortBarColor;\n }\n this.drawHeaderBar(\n context,\n state,\n color,\n hasReverse ? theme.reverseHeaderBarHeight : theme.sortHeaderBarHeight\n );\n } else if (sort.length > 1) {\n // if there's multiple bars, the sort is interior to header\n // and the reverse claims space in the table\n if (\n // has table reverse\n reverseType !== TableUtils.REVERSE_TYPE.NONE\n ) {\n this.drawHeaderBar(\n context,\n state,\n theme.headerReverseBarColor,\n theme.reverseHeaderBarHeight,\n false\n );\n }\n this.drawHeaderBar(\n context,\n state,\n theme.headerSortBarColor,\n theme.sortHeaderBarHeight\n );\n }\n }\n\n drawHeaderBar(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState,\n color: string | CanvasGradient | CanvasPattern,\n barHeight: number,\n interior = true\n ): void {\n const { theme, metrics, model } = state;\n const { columnHeaderHeight, width } = metrics;\n // Draw casing with 1 pixel above and below the bar,\n // 1px falls on the existing split between grid/headers\n // so don't need to be accounnted for in math elsewhere\n let offset = 0;\n if (!interior) {\n offset = barHeight;\n }\n context.fillStyle = theme.headerBarCasingColor;\n context.fillRect(\n 0,\n model.columnHeaderMaxDepth * columnHeaderHeight - barHeight - 2 + offset,\n width,\n barHeight + 2\n );\n\n context.fillStyle = color;\n context.fillRect(\n 0,\n model.columnHeaderMaxDepth * columnHeaderHeight - barHeight - 1 + offset,\n width,\n barHeight\n );\n }\n\n drawColumnHeadersAtDepth(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState,\n range: BoundedAxisRange,\n boundsProp: { minX: number; maxX: number },\n depth: number\n ): void {\n const { metrics, model, isMenuShown } = state;\n const { columnHeaderMaxDepth } = model;\n const { width } = metrics;\n const bounds = {\n ...boundsProp,\n maxX:\n depth === columnHeaderMaxDepth - 1 && boundsProp.maxX === width\n ? width - (isMenuShown ? 0 : 30) // Account for the menu button\n : boundsProp.maxX,\n };\n super.drawColumnHeadersAtDepth(context, state, range, bounds, depth);\n }\n\n drawColumnHeaderAtIndex(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState,\n index: VisibleIndex,\n bounds: { minX: number; maxX: number }\n ): void {\n super.drawColumnHeaderAtIndex(context, state, index, bounds);\n const { metrics, model, theme } = state;\n const {\n modelColumns,\n allColumnWidths,\n allColumnXs,\n gridX,\n columnHeaderHeight,\n fontWidths,\n } = metrics;\n\n const { headerHorizontalPadding } = theme;\n const columnWidth = getOrThrow(allColumnWidths, index, 0);\n const columnX = getOrThrow(allColumnXs, index) + gridX;\n const modelColumn = modelColumns.get(index);\n\n if (modelColumn == null) {\n return;\n }\n\n const 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 allColumnWidths,\n allColumnXs,\n } = metrics;\n\n const columnHeaderHeight = gridY - filterBarHeight;\n\n context.save();\n\n context.font = theme.font;\n context.textAlign = 'left';\n\n if (\n (quickFilters != null && quickFilters.size > 0) ||\n (advancedFilters != null && advancedFilters.size > 0)\n ) {\n // fill style if a fiter is set on any column\n context.fillStyle = theme.filterBarExpandedActiveBackgroundColor;\n } else {\n // fill style with no filters set\n context.fillStyle = theme.filterBarExpandedBackgroundColor;\n }\n\n // Draw the background\n context.fillRect(gridX, columnHeaderHeight, maxX, filterBarHeight - 1);\n\n // Draw the bottom border\n context.fillStyle = theme.headerBarCasingColor;\n\n context.fillRect(gridX, columnHeaderHeight + filterBarHeight - 1, maxX, 1);\n\n // Draw the filter input boxes\n const y1 = columnHeaderHeight;\n context.strokeStyle = theme.filterBarSeparatorColor;\n context.beginPath();\n\n for (let i = 0; i < visibleColumns.length; i += 1) {\n const column = visibleColumns[i];\n const modelColumn = getOrThrow(modelColumns, column);\n const columnX = getOrThrow(allColumnXs, column);\n const columnWidth = getOrThrow(allColumnWidths, column);\n if (model.isFilterable(modelColumn) && columnWidth > 0) {\n const x1 = gridX + (columnX ?? 0);\n context.rect(x1 + 0.5, y1 + 0.5, columnWidth, filterBarHeight - 2); // 1 for the border, 1 for the casing\n }\n }\n context.stroke();\n\n for (let i = 0; i < visibleColumns.length; i += 1) {\n const column = visibleColumns[i];\n const columnWidth = getOrThrow(allColumnWidths, column);\n const columnX = getOrThrow(allColumnXs, column);\n const x = columnX + gridX;\n this.drawExpandedFilterHeader(context, state, column, x, columnWidth);\n }\n\n context.restore();\n }\n\n drawExpandedFilterHeader(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState,\n column: VisibleIndex,\n columnX: Coordinate,\n columnWidth: number\n ): void {\n if (columnWidth <= 0) {\n return;\n }\n\n const { metrics, theme, quickFilters, advancedFilters } = state;\n const { modelColumns, gridY } = metrics;\n const {\n filterBarHeight,\n filterBarExpandedActiveCellBackgroundColor,\n filterBarErrorColor,\n filterBarHorizontalPadding,\n headerColor,\n } = theme;\n const columnHeaderHeight = gridY - filterBarHeight;\n const modelColumn = modelColumns.get(column);\n if (modelColumn === undefined) return;\n const quickFilter = quickFilters.get(modelColumn);\n const advancedFilter = advancedFilters.get(modelColumn);\n if (quickFilter == null && advancedFilter == null) {\n return;\n }\n\n let text = null;\n if (quickFilter != null) {\n const { text: filterText } = quickFilter;\n text = filterText;\n if (!text) {\n text = TableUtils.getFilterText(quickFilter.filter);\n }\n\n if (text != null) {\n const { fontWidths } = metrics;\n let fontWidth = fontWidths.get(context.font);\n if (fontWidth == null || fontWidth === 0) {\n fontWidth = context.measureText('8').width;\n if (!fontWidth) {\n fontWidth = 10;\n }\n }\n\n const maxLength =\n (columnWidth - filterBarHorizontalPadding * 2) / fontWidth;\n if (maxLength <= 0) {\n text = '';\n } else if (text.length > maxLength) {\n text = `${text.substring(0, maxLength - 1)}…`;\n }\n }\n }\n\n context.save();\n\n const isFilterValid = IrisGridRenderer.isFilterValid(\n advancedFilter,\n quickFilter\n );\n if (isFilterValid && filterBarExpandedActiveCellBackgroundColor != null) {\n // draw active filter background inside cell\n context.fillStyle = filterBarExpandedActiveCellBackgroundColor;\n context.fillRect(\n columnX + 1, // +1 left border\n columnHeaderHeight + 1, // +1 top border\n columnWidth - 1, // -1 right border\n filterBarHeight - 3 // -3 top, bottom border and bottom casing\n );\n } else if (filterBarErrorColor != null) {\n // draw error box inside cell\n context.fillStyle = filterBarErrorColor;\n context.lineWidth = 2;\n context.strokeStyle = filterBarErrorColor;\n // Because this is drawn with a strokeRect, we have to add/subtract half the,\n // linewidth from each side to make interior, in addition to accounting for any borders/casings\n const rectLeft = columnX + 2; // 1 for strokeRect, 1 for border\n const rectTop = columnHeaderHeight + 2; // 1 for strokeRect, 1 for border\n const rectWidth = columnWidth - 3; // for 2 border and 1 for strokeRect\n const rectHeight = filterBarHeight - 5; // -2 for strokeRect, -3 for top, bottom border and bottom casing\n context.strokeRect(rectLeft, rectTop, rectWidth, rectHeight);\n }\n\n if (text != null && text !== '') {\n const textX = columnX + filterBarHorizontalPadding;\n const textY = columnHeaderHeight + filterBarHeight * 0.5 + 1; // + 1 for border\n context.fillStyle = headerColor;\n context.fillText(text, textX, textY);\n }\n\n context.restore();\n }\n\n drawCollapsedFilterHeaders(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n const { metrics, theme } = state;\n const { headerSeparatorColor, filterBarCollapsedHeight } = theme;\n\n if (filterBarCollapsedHeight <= 0) {\n return;\n }\n\n const {\n gridX,\n gridY,\n maxX,\n visibleColumns,\n allColumnWidths,\n allColumnXs,\n } = metrics;\n const columnHeaderHeight = gridY - filterBarCollapsedHeight;\n\n context.save();\n\n // Draw the background of the collapsed filter bar\n context.fillStyle = headerSeparatorColor;\n context.fillRect(gridX, columnHeaderHeight, maxX, filterBarCollapsedHeight);\n\n for (let i = 0; i < visibleColumns.length; i += 1) {\n const column = visibleColumns[i];\n const columnWidth = allColumnWidths.get(column);\n const columnX = allColumnXs.get(column);\n if (columnX != null && columnWidth != null) {\n const x = columnX + gridX;\n // draw the collapsed cells\n this.drawCollapsedFilterHeader(context, state, column, x, columnWidth);\n }\n }\n\n context.restore();\n }\n\n drawCollapsedFilterHeader(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState,\n column: VisibleIndex,\n columnX: Coordinate,\n columnWidth: number\n ): void {\n if (columnWidth <= 0) {\n return;\n }\n\n const { metrics, theme, quickFilters, advancedFilters } = state;\n const { modelColumns, gridY } = metrics;\n const modelColumn = modelColumns.get(column);\n\n if (modelColumn === undefined) return;\n const quickFilter = quickFilters.get(modelColumn);\n const advancedFilter = advancedFilters.get(modelColumn);\n\n const {\n filterBarCollapsedHeight,\n filterBarActiveColor,\n filterBarActiveBackgroundColor,\n filterBarErrorColor,\n } = theme;\n\n context.save();\n\n const isFilterValid = IrisGridRenderer.isFilterValid(\n advancedFilter,\n quickFilter\n );\n\n if (\n filterBarActiveBackgroundColor != null &&\n quickFilter == null &&\n advancedFilter == null\n ) {\n context.fillStyle = filterBarActiveBackgroundColor;\n } else if (filterBarActiveColor != null && isFilterValid) {\n context.fillStyle = filterBarActiveColor;\n } else if (filterBarErrorColor != null) {\n context.fillStyle = filterBarErrorColor;\n }\n\n const x = columnX + 1; // for gap between columns\n const y = gridY - filterBarCollapsedHeight;\n const rectWidth = columnWidth - 1; // for gap between columns\n const rectHeight = filterBarCollapsedHeight - 1; // for casing bottom\n context.fillRect(x, y, rectWidth, rectHeight);\n\n context.restore();\n }\n\n drawTreeMarker(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState,\n columnX: Coordinate,\n rowY: Coordinate,\n treeBox: BoxCoordinates,\n color: string,\n isExpanded: boolean\n ): void {\n context.save();\n const { x1, y1 } = treeBox;\n const markerIcon = isExpanded\n ? this.getIcon(ICON_NAMES.CARET_DOWN)\n : this.getIcon(ICON_NAMES.CARET_RIGHT);\n const iconX = columnX + x1 - 2;\n const iconY = rowY + y1 + 2.5;\n\n context.fillStyle = color;\n context.textAlign = 'center';\n context.translate(iconX, iconY);\n context.fill(markerIcon);\n context.restore();\n }\n\n drawRowFooters(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n const { metrics, model, mouseX, mouseY, theme } = state;\n const {\n gridY,\n gridX,\n maxX,\n modelRows,\n floatingTopHeight,\n floatingBottomHeight,\n floatingRows,\n rowFooterWidth,\n height,\n horizontalBarHeight,\n verticalBarWidth,\n allRowHeights,\n allRowYs,\n width,\n } = metrics;\n // Only draw the footers on the floating rows\n if (rowFooterWidth <= 0 || floatingRows.length === 0) {\n return;\n }\n\n const {\n cellHorizontalPadding,\n floatingGridRowColor,\n floatingRowBackgroundColors,\n headerColor,\n rowHoverBackgroundColor,\n } = theme;\n\n context.translate(gridX, gridY);\n\n context.beginPath();\n const x = Math.min(maxX, width - rowFooterWidth - verticalBarWidth - gridX);\n context.fillStyle = floatingRowBackgroundColors;\n if (floatingTopHeight > 0) {\n context.rect(x, 0, rowFooterWidth, floatingTopHeight);\n }\n if (floatingBottomHeight > 0) {\n context.rect(\n x,\n height - gridY - horizontalBarHeight - floatingBottomHeight,\n rowFooterWidth,\n floatingBottomHeight\n );\n }\n context.fill();\n\n const mouseRow =\n mouseX != null &&\n mouseY != null &&\n mouseX >= gridX &&\n mouseX <= maxX + rowFooterWidth\n ? GridUtils.getRowAtY(mouseY, metrics)\n : null;\n if (\n rowHoverBackgroundColor != null &&\n mouseRow !== null &&\n floatingRows.includes(mouseRow)\n ) {\n context.fillStyle = rowHoverBackgroundColor;\n const y = allRowYs.get(mouseRow);\n const rowHeight = allRowHeights.get(mouseRow);\n assertNotNull(y);\n assertNotNull(rowHeight);\n context.fillRect(x, y, rowFooterWidth, rowHeight);\n }\n\n context.beginPath();\n if (floatingGridRowColor != null) {\n context.strokeStyle = floatingGridRowColor;\n }\n if (floatingTopHeight > 0) {\n context.moveTo(x + 0.5, 0.5);\n context.lineTo(x + 0.5, floatingTopHeight - 0.5);\n }\n if (floatingBottomHeight > 0) {\n const y = height - gridY - horizontalBarHeight - floatingBottomHeight;\n context.moveTo(x - 0.5, y + 0.5);\n context.lineTo(x - 0.5, y + floatingBottomHeight - 0.5);\n }\n context.stroke();\n\n context.fillStyle = headerColor;\n context.textAlign = 'left';\n\n const textX = x + cellHorizontalPadding;\n for (let i = 0; i < floatingRows.length; i += 1) {\n const row = floatingRows[i];\n const rowHeight = allRowHeights.get(row);\n const rowY = allRowYs.get(row);\n const modelRow = modelRows.get(row);\n if (rowY != null && rowHeight != null && modelRow != null) {\n const textY = rowY + rowHeight * 0.5;\n context.fillText(model.textForRowFooter(modelRow), textX, textY);\n }\n }\n\n context.translate(-gridX, -gridY);\n }\n\n // This will shrink the size the text may take when the overflow button is rendered\n // The text will truncate to a smaller width and won't overlap the button\n getTextRenderMetrics(\n 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
+ {"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","allColumnWidths","allColumnXs","length","groupedColumnDividerColor","lastGroupedColumn","modelIndex","findIndex","c","columnX","columnWidth","x","strokeStyle","lineWidth","beginPath","moveTo","lineTo","stroke","allRowYs","maxX","pendingRowCount","firstPendingRow","rowCount","floatingBottomRowCount","y","save","setLineDash","pendingTextColor","restore","drawMouseColumnHover","hoverSelectColumn","linkerColumnHoverBackgroundColor","fillStyle","fillRect","drawMouseRowHover","isSelectingColumn","loadingScrimProgress","width","height","gridY","scrimBlurSize","scrimColor","globalCompositeOperation","rect","clip","drawColumnHeaders","reverseType","columnHeaderHeight","drawFilterHeaders","hasReverse","REVERSE_TYPE","NONE","color","headerReverseBarColor","headerSortBarColor","drawHeaderBar","reverseHeaderBarHeight","sortHeaderBarHeight","barHeight","interior","offset","headerBarCasingColor","columnHeaderMaxDepth","drawColumnHeadersAtDepth","range","boundsProp","depth","isMenuShown","bounds","drawColumnHeaderAtIndex","index","gridX","fontWidths","headerHorizontalPadding","getSortForColumn","text","textForColumnHeader","fontWidth","DEFAULT_FONT_WIDTH","textWidth","textRight","defaultX","Math","min","yOffset","translate","fill","isFilterBarShown","quickFilters","advancedFilters","drawExpandedFilterHeaders","size","drawCollapsedFilterHeaders","filterBarHeight","visibleColumns","textAlign","filterBarExpandedActiveBackgroundColor","filterBarExpandedBackgroundColor","y1","filterBarSeparatorColor","i","isFilterable","x1","drawExpandedFilterHeader","filterBarExpandedActiveCellBackgroundColor","filterBarErrorColor","filterBarHorizontalPadding","headerColor","filterText","getFilterText","measureText","maxLength","substring","rectLeft","rectTop","rectWidth","rectHeight","strokeRect","textX","textY","fillText","headerSeparatorColor","filterBarCollapsedHeight","drawCollapsedFilterHeader","filterBarActiveColor","filterBarActiveBackgroundColor","drawTreeMarker","rowY","treeBox","isExpanded","markerIcon","iconX","iconY","drawRowFooters","mouseX","mouseY","floatingTopHeight","floatingBottomHeight","floatingRows","rowFooterWidth","horizontalBarHeight","verticalBarWidth","allRowHeights","cellHorizontalPadding","floatingGridRowColor","floatingRowBackgroundColors","rowHoverBackgroundColor","mouseRow","getRowAtY","includes","rowHeight","textForRowFooter","getTextRenderMetrics","textMetrics","mouseColumn","getGridPointFromXY","left","getCellOverflowButtonPosition","shouldRenderOverflowButton","getCellInfoFromXY","isStringType","textForCell","truncatedText","getCachedTruncatedString","truncationCharForCell","NULL_POSITION","top","gridWidth","right","buttonLeft","buttonTop","buttonWidth","buttonHeight","overflowButtonColor","overflowButtonHoverColor"],"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, allColumnWidths, allColumnXs } = 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 = allColumnXs.get(modelIndex);\n const columnWidth = allColumnWidths.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 { allRowYs, maxX } = metrics;\n const { pendingRowCount } = model;\n if (pendingRowCount <= 0) {\n return;\n }\n\n const firstPendingRow =\n model.rowCount - model.pendingRowCount - model.floatingBottomRowCount;\n let y = allRowYs.get(firstPendingRow);\n if (y == null) {\n return;\n }\n\n y -= 0.5;\n context.save();\n context.setLineDash([4, 2]);\n context.strokeStyle = theme.pendingTextColor;\n\n context.lineWidth = 1;\n context.beginPath();\n context.moveTo(0, y);\n context.lineTo(maxX, y);\n context.stroke();\n context.restore();\n }\n\n drawMouseColumnHover(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n const { theme, metrics, hoverSelectColumn } = state;\n if (\n hoverSelectColumn == null ||\n theme.linkerColumnHoverBackgroundColor == null\n ) {\n return;\n }\n\n const { allColumnWidths, allColumnXs, maxY } = metrics;\n\n const x = allColumnXs.get(hoverSelectColumn);\n const columnWidth = allColumnWidths.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 change the underlying layer to grayscale\n context.globalCompositeOperation = 'color';\n context.filter = `blur(${scrimBlurSize}px)`;\n if (scrimColor != null) {\n context.fillStyle = scrimColor;\n }\n\n // Clip the path so the top edge is hard edge, bottom edge is soft/blurry\n context.beginPath();\n context.rect(0, gridY, width, height - gridY);\n context.clip();\n\n // Extend the edges beyond the clip area so they're hard edges\n context.fillRect(\n -scrimBlurSize,\n -scrimBlurSize + gridY,\n scrimBlurSize * 2 + width,\n (scrimBlurSize * 2 + (height - gridY)) * loadingScrimProgress\n );\n\n // add an overlay of the scrim color to darken things a bit\n context.globalCompositeOperation = 'overlay';\n context.filter = `blur(${scrimBlurSize}px) opacity(15%)`;\n context.fillRect(\n -scrimBlurSize,\n -scrimBlurSize + gridY,\n scrimBlurSize * 2 + width,\n (scrimBlurSize * 2 + (height - gridY)) * loadingScrimProgress\n );\n\n context.restore();\n }\n\n drawColumnHeaders(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n super.drawColumnHeaders(context, state);\n\n const { theme, metrics, model, reverseType } = state;\n const { columnHeaderHeight } = metrics;\n\n this.drawFilterHeaders(context, state);\n\n if (columnHeaderHeight <= 0) {\n return;\n }\n\n const { sort } = model;\n // if there is only one sort bar, it is interior to the header to save space\n if (sort.length === 1) {\n const hasReverse = reverseType !== TableUtils.REVERSE_TYPE.NONE;\n\n let color;\n if (hasReverse) {\n color = theme.headerReverseBarColor;\n } else {\n color = theme.headerSortBarColor;\n }\n this.drawHeaderBar(\n context,\n state,\n color,\n hasReverse ? theme.reverseHeaderBarHeight : theme.sortHeaderBarHeight\n );\n } else if (sort.length > 1) {\n // if there's multiple bars, the sort is interior to header\n // and the reverse claims space in the table\n if (\n // has table reverse\n reverseType !== TableUtils.REVERSE_TYPE.NONE\n ) {\n this.drawHeaderBar(\n context,\n state,\n theme.headerReverseBarColor,\n theme.reverseHeaderBarHeight,\n false\n );\n }\n this.drawHeaderBar(\n context,\n state,\n theme.headerSortBarColor,\n theme.sortHeaderBarHeight\n );\n }\n }\n\n drawHeaderBar(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState,\n color: string | CanvasGradient | CanvasPattern,\n barHeight: number,\n interior = true\n ): void {\n const { theme, metrics, model } = state;\n const { columnHeaderHeight, width } = metrics;\n // Draw casing with 1 pixel above and below the bar,\n // 1px falls on the existing split between grid/headers\n // so don't need to be accounnted for in math elsewhere\n let offset = 0;\n if (!interior) {\n offset = barHeight;\n }\n context.fillStyle = theme.headerBarCasingColor;\n context.fillRect(\n 0,\n model.columnHeaderMaxDepth * columnHeaderHeight - barHeight - 2 + offset,\n width,\n barHeight + 2\n );\n\n context.fillStyle = color;\n context.fillRect(\n 0,\n model.columnHeaderMaxDepth * columnHeaderHeight - barHeight - 1 + offset,\n width,\n barHeight\n );\n }\n\n drawColumnHeadersAtDepth(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState,\n range: BoundedAxisRange,\n boundsProp: { minX: number; maxX: number },\n depth: number\n ): void {\n const { metrics, model, isMenuShown } = state;\n const { columnHeaderMaxDepth } = model;\n const { width } = metrics;\n const bounds = {\n ...boundsProp,\n maxX:\n depth === columnHeaderMaxDepth - 1 && boundsProp.maxX === width\n ? width - (isMenuShown ? 0 : 30) // Account for the menu button\n : boundsProp.maxX,\n };\n super.drawColumnHeadersAtDepth(context, state, range, bounds, depth);\n }\n\n drawColumnHeaderAtIndex(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState,\n index: VisibleIndex,\n bounds: { minX: number; maxX: number }\n ): void {\n super.drawColumnHeaderAtIndex(context, state, index, bounds);\n const { metrics, model, theme } = state;\n const {\n modelColumns,\n allColumnWidths,\n allColumnXs,\n gridX,\n columnHeaderHeight,\n fontWidths,\n } = metrics;\n\n const { headerHorizontalPadding } = theme;\n const columnWidth = getOrThrow(allColumnWidths, index, 0);\n const columnX = getOrThrow(allColumnXs, index) + gridX;\n const modelColumn = modelColumns.get(index);\n\n if (modelColumn == null) {\n return;\n }\n\n const 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 allColumnWidths,\n allColumnXs,\n } = metrics;\n\n const columnHeaderHeight = gridY - filterBarHeight;\n\n context.save();\n\n context.font = theme.font;\n context.textAlign = 'left';\n\n if (\n (quickFilters != null && quickFilters.size > 0) ||\n (advancedFilters != null && advancedFilters.size > 0)\n ) {\n // fill style if a fiter is set on any column\n context.fillStyle = theme.filterBarExpandedActiveBackgroundColor;\n } else {\n // fill style with no filters set\n context.fillStyle = theme.filterBarExpandedBackgroundColor;\n }\n\n // Draw the background\n context.fillRect(gridX, columnHeaderHeight, maxX, filterBarHeight - 1);\n\n // Draw the bottom border\n context.fillStyle = theme.headerBarCasingColor;\n\n context.fillRect(gridX, columnHeaderHeight + filterBarHeight - 1, maxX, 1);\n\n // Draw the filter input boxes\n const y1 = columnHeaderHeight;\n context.strokeStyle = theme.filterBarSeparatorColor;\n context.beginPath();\n\n for (let i = 0; i < visibleColumns.length; i += 1) {\n const column = visibleColumns[i];\n const modelColumn = getOrThrow(modelColumns, column);\n const columnX = getOrThrow(allColumnXs, column);\n const columnWidth = getOrThrow(allColumnWidths, column);\n if (model.isFilterable(modelColumn) && columnWidth > 0) {\n const x1 = gridX + (columnX ?? 0);\n context.rect(x1 + 0.5, y1 + 0.5, columnWidth, filterBarHeight - 2); // 1 for the border, 1 for the casing\n }\n }\n context.stroke();\n\n for (let i = 0; i < visibleColumns.length; i += 1) {\n const column = visibleColumns[i];\n const columnWidth = getOrThrow(allColumnWidths, column);\n const columnX = getOrThrow(allColumnXs, column);\n const x = columnX + gridX;\n this.drawExpandedFilterHeader(context, state, column, x, columnWidth);\n }\n\n context.restore();\n }\n\n drawExpandedFilterHeader(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState,\n column: VisibleIndex,\n columnX: Coordinate,\n columnWidth: number\n ): void {\n if (columnWidth <= 0) {\n return;\n }\n\n const { metrics, theme, quickFilters, advancedFilters } = state;\n const { modelColumns, gridY } = metrics;\n const {\n filterBarHeight,\n filterBarExpandedActiveCellBackgroundColor,\n filterBarErrorColor,\n filterBarHorizontalPadding,\n headerColor,\n } = theme;\n const columnHeaderHeight = gridY - filterBarHeight;\n const modelColumn = modelColumns.get(column);\n if (modelColumn === undefined) return;\n const quickFilter = quickFilters.get(modelColumn);\n const advancedFilter = advancedFilters.get(modelColumn);\n if (quickFilter == null && advancedFilter == null) {\n return;\n }\n\n let text = null;\n if (quickFilter != null) {\n const { text: filterText } = quickFilter;\n text = filterText;\n if (!text) {\n text = TableUtils.getFilterText(quickFilter.filter);\n }\n\n if (text != null) {\n const { fontWidths } = metrics;\n let fontWidth = fontWidths.get(context.font);\n if (fontWidth == null || fontWidth === 0) {\n fontWidth = context.measureText('8').width;\n if (!fontWidth) {\n fontWidth = 10;\n }\n }\n\n const maxLength =\n (columnWidth - filterBarHorizontalPadding * 2) / fontWidth;\n if (maxLength <= 0) {\n text = '';\n } else if (text.length > maxLength) {\n text = `${text.substring(0, maxLength - 1)}…`;\n }\n }\n }\n\n context.save();\n\n const isFilterValid = IrisGridRenderer.isFilterValid(\n advancedFilter,\n quickFilter\n );\n if (isFilterValid && filterBarExpandedActiveCellBackgroundColor != null) {\n // draw active filter background inside cell\n context.fillStyle = filterBarExpandedActiveCellBackgroundColor;\n context.fillRect(\n columnX + 1, // +1 left border\n columnHeaderHeight + 1, // +1 top border\n columnWidth - 1, // -1 right border\n filterBarHeight - 3 // -3 top, bottom border and bottom casing\n );\n } else if (filterBarErrorColor != null) {\n // draw error box inside cell\n context.fillStyle = filterBarErrorColor;\n context.lineWidth = 2;\n context.strokeStyle = filterBarErrorColor;\n // Because this is drawn with a strokeRect, we have to add/subtract half the,\n // linewidth from each side to make interior, in addition to accounting for any borders/casings\n const rectLeft = columnX + 2; // 1 for strokeRect, 1 for border\n const rectTop = columnHeaderHeight + 2; // 1 for strokeRect, 1 for border\n const rectWidth = columnWidth - 3; // for 2 border and 1 for strokeRect\n const rectHeight = filterBarHeight - 5; // -2 for strokeRect, -3 for top, bottom border and bottom casing\n context.strokeRect(rectLeft, rectTop, rectWidth, rectHeight);\n }\n\n if (text != null && text !== '') {\n const textX = columnX + filterBarHorizontalPadding;\n const textY = columnHeaderHeight + filterBarHeight * 0.5 + 1; // + 1 for border\n context.fillStyle = headerColor;\n context.fillText(text, textX, textY);\n }\n\n context.restore();\n }\n\n drawCollapsedFilterHeaders(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n const { metrics, theme } = state;\n const { headerSeparatorColor, filterBarCollapsedHeight } = theme;\n\n if (filterBarCollapsedHeight <= 0) {\n return;\n }\n\n const {\n gridX,\n gridY,\n maxX,\n visibleColumns,\n allColumnWidths,\n allColumnXs,\n } = metrics;\n const columnHeaderHeight = gridY - filterBarCollapsedHeight;\n\n context.save();\n\n // Draw the background of the collapsed filter bar\n context.fillStyle = headerSeparatorColor;\n context.fillRect(gridX, columnHeaderHeight, maxX, filterBarCollapsedHeight);\n\n for (let i = 0; i < visibleColumns.length; i += 1) {\n const column = visibleColumns[i];\n const columnWidth = allColumnWidths.get(column);\n const columnX = allColumnXs.get(column);\n if (columnX != null && columnWidth != null) {\n const x = columnX + gridX;\n // draw the collapsed cells\n this.drawCollapsedFilterHeader(context, state, column, x, columnWidth);\n }\n }\n\n context.restore();\n }\n\n drawCollapsedFilterHeader(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState,\n column: VisibleIndex,\n columnX: Coordinate,\n columnWidth: number\n ): void {\n if (columnWidth <= 0) {\n return;\n }\n\n const { metrics, theme, quickFilters, advancedFilters } = state;\n const { modelColumns, gridY } = metrics;\n const modelColumn = modelColumns.get(column);\n\n if (modelColumn === undefined) return;\n const quickFilter = quickFilters.get(modelColumn);\n const advancedFilter = advancedFilters.get(modelColumn);\n\n const {\n filterBarCollapsedHeight,\n filterBarActiveColor,\n filterBarActiveBackgroundColor,\n filterBarErrorColor,\n } = theme;\n\n context.save();\n\n const isFilterValid = IrisGridRenderer.isFilterValid(\n advancedFilter,\n quickFilter\n );\n\n if (\n filterBarActiveBackgroundColor != null &&\n quickFilter == null &&\n advancedFilter == null\n ) {\n context.fillStyle = filterBarActiveBackgroundColor;\n } else if (filterBarActiveColor != null && isFilterValid) {\n context.fillStyle = filterBarActiveColor;\n } else if (filterBarErrorColor != null) {\n context.fillStyle = filterBarErrorColor;\n }\n\n const x = columnX + 1; // for gap between columns\n const y = gridY - filterBarCollapsedHeight;\n const rectWidth = columnWidth - 1; // for gap between columns\n const rectHeight = filterBarCollapsedHeight - 1; // for casing bottom\n context.fillRect(x, y, rectWidth, rectHeight);\n\n context.restore();\n }\n\n drawTreeMarker(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState,\n columnX: Coordinate,\n rowY: Coordinate,\n treeBox: BoxCoordinates,\n color: string,\n isExpanded: boolean\n ): void {\n context.save();\n const { x1, y1 } = treeBox;\n const markerIcon = isExpanded\n ? this.getIcon(ICON_NAMES.CARET_DOWN)\n : this.getIcon(ICON_NAMES.CARET_RIGHT);\n const iconX = columnX + x1 - 2;\n const iconY = rowY + y1 + 2.5;\n\n context.fillStyle = color;\n context.textAlign = 'center';\n context.translate(iconX, iconY);\n context.fill(markerIcon);\n context.restore();\n }\n\n drawRowFooters(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n const { metrics, model, mouseX, mouseY, theme } = state;\n const {\n gridY,\n gridX,\n maxX,\n modelRows,\n floatingTopHeight,\n floatingBottomHeight,\n floatingRows,\n rowFooterWidth,\n height,\n horizontalBarHeight,\n verticalBarWidth,\n allRowHeights,\n allRowYs,\n width,\n } = metrics;\n // Only draw the footers on the floating rows\n if (rowFooterWidth <= 0 || floatingRows.length === 0) {\n return;\n }\n\n const {\n cellHorizontalPadding,\n floatingGridRowColor,\n floatingRowBackgroundColors,\n headerColor,\n rowHoverBackgroundColor,\n } = theme;\n\n context.translate(gridX, gridY);\n\n context.beginPath();\n const x = Math.min(maxX, width - rowFooterWidth - verticalBarWidth - gridX);\n context.fillStyle = floatingRowBackgroundColors;\n if (floatingTopHeight > 0) {\n context.rect(x, 0, rowFooterWidth, floatingTopHeight);\n }\n if (floatingBottomHeight > 0) {\n context.rect(\n x,\n height - gridY - horizontalBarHeight - floatingBottomHeight,\n rowFooterWidth,\n floatingBottomHeight\n );\n }\n context.fill();\n\n const mouseRow =\n mouseX != null &&\n mouseY != null &&\n mouseX >= gridX &&\n mouseX <= maxX + rowFooterWidth\n ? GridUtils.getRowAtY(mouseY, metrics)\n : null;\n if (\n rowHoverBackgroundColor != null &&\n mouseRow !== null &&\n floatingRows.includes(mouseRow)\n ) {\n context.fillStyle = rowHoverBackgroundColor;\n const y = allRowYs.get(mouseRow);\n const rowHeight = allRowHeights.get(mouseRow);\n assertNotNull(y);\n assertNotNull(rowHeight);\n context.fillRect(x, y, rowFooterWidth, rowHeight);\n }\n\n context.beginPath();\n if (floatingGridRowColor != null) {\n context.strokeStyle = floatingGridRowColor;\n }\n if (floatingTopHeight > 0) {\n context.moveTo(x + 0.5, 0.5);\n context.lineTo(x + 0.5, floatingTopHeight - 0.5);\n }\n if (floatingBottomHeight > 0) {\n const y = height - gridY - horizontalBarHeight - floatingBottomHeight;\n context.moveTo(x - 0.5, y + 0.5);\n context.lineTo(x - 0.5, y + floatingBottomHeight - 0.5);\n }\n context.stroke();\n\n context.fillStyle = headerColor;\n context.textAlign = 'left';\n\n const textX = x + cellHorizontalPadding;\n for (let i = 0; i < floatingRows.length; i += 1) {\n const row = floatingRows[i];\n const rowHeight = allRowHeights.get(row);\n const rowY = allRowYs.get(row);\n const modelRow = modelRows.get(row);\n if (rowY != null && rowHeight != null && modelRow != null) {\n const textY = rowY + rowHeight * 0.5;\n context.fillText(model.textForRowFooter(modelRow), textX, textY);\n }\n }\n\n context.translate(-gridX, -gridY);\n }\n\n // This will shrink the size the text may take when the overflow button is rendered\n // The text will truncate to a smaller width and won't overlap the button\n getTextRenderMetrics(\n 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,6 +1,8 @@
1
1
  function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
2
2
  function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
3
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
3
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
4
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
5
+ function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
4
6
  /* eslint class-methods-use-this: "off" */
5
7
  import memoize from 'memoize-one';
6
8
  import { GridRange } from '@deephaven/grid';
@@ -1 +1 @@
1
- {"version":3,"file":"IrisGridTableModel.js","names":["memoize","GridRange","Log","Formatter","TableUtils","EventShimCustomEvent","PromiseUtils","assertNotNull","IrisGridModel","IrisGridTableModelTemplate","log","module","IrisGridTableModel","constructor","table","formatter","inputTable","layoutHintsFrontColumns","layoutHintsBackColumns","layoutHintsFrozenColumns","userFrozenColumns","columns","Set","map","_","index","customColumnList","formatColumnList","isExportAvailable","freeze","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\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: ColumnName[] | undefined) =>\n layoutHintsFrontColumns ?? []\n );\n\n get frontColumns(): ColumnName[] {\n return this.getMemoizedFrontColumns(this.layoutHints?.frontColumns);\n }\n\n getMemoizedBackColumns = memoize(\n (layoutHintsBackColumns: ColumnName[] | undefined) =>\n layoutHintsBackColumns ?? []\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[] => userFrozenColumns ?? layoutHintsFrozenColumns ?? []\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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"}
1
+ {"version":3,"file":"IrisGridTableModel.js","names":["memoize","GridRange","Log","Formatter","TableUtils","EventShimCustomEvent","PromiseUtils","assertNotNull","IrisGridModel","IrisGridTableModelTemplate","log","module","IrisGridTableModel","constructor","table","formatter","inputTable","layoutHintsFrontColumns","layoutHintsBackColumns","layoutHintsFrozenColumns","userFrozenColumns","columns","Set","map","_","index","customColumnList","formatColumnList","isExportAvailable","freeze","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\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: ColumnName[] | undefined) =>\n layoutHintsFrontColumns ?? []\n );\n\n get frontColumns(): ColumnName[] {\n return this.getMemoizedFrontColumns(this.layoutHints?.frontColumns);\n }\n\n getMemoizedBackColumns = memoize(\n (layoutHintsBackColumns: ColumnName[] | undefined) =>\n layoutHintsBackColumns ?? []\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[] => userFrozenColumns ?? layoutHintsFrozenColumns ?? []\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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"}
@@ -2,7 +2,9 @@ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (O
2
2
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
3
3
  function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
4
4
  function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
5
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
5
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
6
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
7
+ function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
6
8
  /* eslint-disable no-underscore-dangle */
7
9
  /* eslint class-methods-use-this: "off" */
8
10
  import memoize from 'memoize-one';
@@ -818,7 +820,7 @@ class IrisGridTableModelTemplate extends IrisGridModel {
818
820
  var row = rows[0];
819
821
  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;
820
822
  var operationMap = (_this$totals13 = this.totals) === null || _this$totals13 === void 0 ? void 0 : _this$totals13.operationMap;
821
- var _loop = function _loop(c) {
823
+ var _loop = function _loop() {
822
824
  var _operationMap$name$, _operationMap$name;
823
825
  var column = columns[c];
824
826
  var [name, operation = (_operationMap$name$ = operationMap === null || operationMap === void 0 ? void 0 : (_operationMap$name = operationMap[name]) === null || _operationMap$name === void 0 ? void 0 : _operationMap$name[0]) !== null && _operationMap$name$ !== void 0 ? _operationMap$name$ : defaultOperation] = column.name.split('__');
@@ -837,7 +839,7 @@ class IrisGridTableModelTemplate extends IrisGridModel {
837
839
  });
838
840
  };
839
841
  for (var c = 0; c < columns.length; c += 1) {
840
- _loop(c);
842
+ _loop();
841
843
  }
842
844
  log.debug2('copyTotalsData', dataMap);
843
845
  this.totalsDataMap = dataMap;
@@ -1021,7 +1023,7 @@ class IrisGridTableModelTemplate extends IrisGridModel {
1021
1023
  result.push(columns.map(c => c.name));
1022
1024
  }
1023
1025
  var topFloatingRows = [...topFloatingRowsSet].sort();
1024
- var _loop2 = function _loop2(_i) {
1026
+ var _loop2 = function* _loop2() {
1025
1027
  var row = topFloatingRows[_i];
1026
1028
  var rowData = columns.map(column => {
1027
1029
  var index = _this2.getColumnIndexByName(column.name);
@@ -1034,7 +1036,7 @@ class IrisGridTableModelTemplate extends IrisGridModel {
1034
1036
  result.push(rowData);
1035
1037
  };
1036
1038
  for (var _i = 0; _i < topFloatingRows.length; _i += 1) {
1037
- _loop2(_i);
1039
+ yield* _loop2();
1038
1040
  }
1039
1041
  if (tableRanges.length > 0) {
1040
1042
  var rangeSet = IrisGridUtils.rangeSetFromRanges(tableRanges);
@@ -1042,7 +1044,7 @@ class IrisGridTableModelTemplate extends IrisGridModel {
1042
1044
  result.push(...snapshot.rows.map(rowData => columns.map(column => formatValue(rowData.get(column), column))));
1043
1045
  }
1044
1046
  var bottomFloatingRows = [...bottomFloatingRowsSet].sort();
1045
- var _loop3 = function _loop3(_i2) {
1047
+ var _loop3 = function* _loop3() {
1046
1048
  var row = bottomFloatingRows[_i2];
1047
1049
  var rowData = columns.map(column => {
1048
1050
  var index = _this2.getColumnIndexByName(column.name);
@@ -1055,7 +1057,7 @@ class IrisGridTableModelTemplate extends IrisGridModel {
1055
1057
  result.push(rowData);
1056
1058
  };
1057
1059
  for (var _i2 = 0; _i2 < bottomFloatingRows.length; _i2 += 1) {
1058
- _loop3(_i2);
1060
+ yield* _loop3();
1059
1061
  }
1060
1062
  return result;
1061
1063
  })();