@deephaven/iris-grid 0.32.1-table-plugins.9 → 0.33.1-auth-plugins.25
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/IrisGrid.d.ts +11 -13
- package/dist/IrisGrid.d.ts.map +1 -1
- package/dist/IrisGrid.js +5 -5
- package/dist/IrisGrid.js.map +1 -1
- package/dist/IrisGridRenderer.d.ts.map +1 -1
- package/dist/IrisGridRenderer.js +4 -4
- package/dist/IrisGridRenderer.js.map +1 -1
- package/dist/IrisGridTreeTableModel.d.ts +2 -1
- package/dist/IrisGridTreeTableModel.d.ts.map +1 -1
- package/dist/IrisGridTreeTableModel.js +5 -0
- package/dist/IrisGridTreeTableModel.js.map +1 -1
- package/dist/mousehandlers/IrisGridContextMenuHandler.d.ts.map +1 -1
- package/dist/mousehandlers/IrisGridContextMenuHandler.js +3 -3
- package/dist/mousehandlers/IrisGridContextMenuHandler.js.map +1 -1
- package/dist/sidebar/TableSaver.d.ts +0 -4
- package/dist/sidebar/TableSaver.d.ts.map +1 -1
- package/dist/sidebar/TableSaver.js +1 -7
- package/dist/sidebar/TableSaver.js.map +1 -1
- package/package.json +17 -18
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IrisGridRenderer.d.ts","sourceRoot":"","sources":["../src/IrisGridRenderer.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"IrisGridRenderer.d.ts","sourceRoot":"","sources":["../src/IrisGridRenderer.ts"],"names":[],"mappings":"AAGA,OAAO,EAML,cAAc,EACf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,UAAU,EACV,WAAW,EACX,cAAc,EACd,YAAY,EACZ,eAAe,EACf,aAAa,EAEb,YAAY,EACb,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAC7C,OAAO,EAAc,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAEjE,OAAO,EACL,yBAAyB,EACzB,sBAAsB,EACtB,cAAc,EACd,WAAW,EACZ,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAa5C,MAAM,MAAM,mBAAmB,GAAG,eAAe,GAAG;IAClD,KAAK,EAAE,aAAa,CAAC;IACrB,KAAK,EAAE,iBAAiB,CAAC;IACzB,iBAAiB,EAAE,cAAc,CAAC;IAClC,iBAAiB,EAAE,OAAO,CAAC;IAC3B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,WAAW,EAAE,WAAW,CAAC;IACzB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,eAAe,EAAE,yBAAyB,CAAC;IAC3C,YAAY,EAAE,sBAAsB,CAAC;IACrC,WAAW,EAAE,OAAO,CAAC;CACtB,CAAC;AACF;;KAEK;AACL,cAAM,gBAAiB,SAAQ,YAAY;IACzC,MAAM,CAAC,aAAa,CAClB,cAAc,EAAE,cAAc,GAAG,SAAS,GAAG,IAAI,EACjD,WAAW,EAAE,WAAW,GAAG,SAAS,GAAG,IAAI,GAC1C,OAAO;;IAeV,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE9B,SAAS,IAAI,IAAI;IASjB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,GAAG,IAAI;IAcnD,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAI7B,WAAW,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI;IAa7C,UAAU,CAAC,KAAK,EAAE,mBAAmB,GAAG,IAAI;IAM5C,QAAQ,CACN,OAAO,EAAE,wBAAwB,EACjC,KAAK,EAAE,mBAAmB,GACzB,IAAI;IAKP,aAAa,CACX,OAAO,EAAE,wBAAwB,EACjC,KAAK,EAAE,mBAAmB,GACzB,IAAI;IAQP,eAAe,CACb,OAAO,EAAE,wBAAwB,EACjC,KAAK,EAAE,mBAAmB,EAC1B,MAAM,EAAE,YAAY,EACpB,GAAG,EAAE,YAAY,GAChB,IAAI;IAsBP,qBAAqB,CACnB,OAAO,EAAE,wBAAwB,EACjC,KAAK,EAAE,mBAAmB,GACzB,IAAI;IAmCP,kBAAkB,CAChB,OAAO,EAAE,wBAAwB,EACjC,KAAK,EAAE,mBAAmB,GACzB,IAAI;IA4BP,oBAAoB,CAClB,OAAO,EAAE,wBAAwB,EACjC,KAAK,EAAE,mBAAmB,GACzB,IAAI;IAkBP,iBAAiB,CACf,OAAO,EAAE,wBAAwB,EACjC,KAAK,EAAE,mBAAmB,GACzB,IAAI;IAOP,SAAS,CAAC,KAAK,EAAE,mBAAmB,GAAG,IAAI;IA4C3C,iBAAiB,CACf,OAAO,EAAE,wBAAwB,EACjC,KAAK,EAAE,mBAAmB,GACzB,IAAI;IAqDP,aAAa,CACX,OAAO,EAAE,wBAAwB,EACjC,KAAK,EAAE,mBAAmB,EAC1B,KAAK,EAAE,MAAM,GAAG,cAAc,GAAG,aAAa,EAC9C,SAAS,EAAE,MAAM,EACjB,QAAQ,UAAO,GACd,IAAI;IA2BP,wBAAwB,CACtB,OAAO,EAAE,wBAAwB,EACjC,KAAK,EAAE,mBAAmB,EAC1B,KAAK,EAAE,gBAAgB,EACvB,UAAU,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAC1C,KAAK,EAAE,MAAM,GACZ,IAAI;IAcP,uBAAuB,CACrB,OAAO,EAAE,wBAAwB,EACjC,KAAK,EAAE,mBAAmB,EAC1B,KAAK,EAAE,YAAY,EACnB,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GACrC,IAAI;IAuEP,iBAAiB,CACf,OAAO,EAAE,wBAAwB,EACjC,KAAK,EAAE,mBAAmB,GACzB,IAAI;IAaP,yBAAyB,CACvB,OAAO,EAAE,wBAAwB,EACjC,KAAK,EAAE,mBAAmB,GACzB,IAAI;IAwEP,wBAAwB,CACtB,OAAO,EAAE,wBAAwB,EACjC,KAAK,EAAE,mBAAmB,EAC1B,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,UAAU,EACnB,WAAW,EAAE,MAAM,GAClB,IAAI;IA0FP,0BAA0B,CACxB,OAAO,EAAE,wBAAwB,EACjC,KAAK,EAAE,mBAAmB,GACzB,IAAI;IAsCP,yBAAyB,CACvB,OAAO,EAAE,wBAAwB,EACjC,KAAK,EAAE,mBAAmB,EAC1B,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,UAAU,EACnB,WAAW,EAAE,MAAM,GAClB,IAAI;IAgDP,cAAc,CACZ,OAAO,EAAE,wBAAwB,EACjC,KAAK,EAAE,mBAAmB,EAC1B,OAAO,EAAE,UAAU,EACnB,IAAI,EAAE,UAAU,EAChB,OAAO,EAAE,cAAc,EACvB,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,OAAO,GAClB,IAAI;IAgBP,cAAc,CACZ,OAAO,EAAE,wBAAwB,EACjC,KAAK,EAAE,mBAAmB,GACzB,IAAI;IAwGP,oBAAoB,CAClB,KAAK,EAAE,mBAAmB,EAC1B,MAAM,EAAE,YAAY,EACpB,GAAG,EAAE,YAAY,GAChB;QACD,KAAK,EAAE,MAAM,CAAC;QACd,CAAC,EAAE,UAAU,CAAC;QACd,CAAC,EAAE,UAAU,CAAC;KACf;IAwBD,0BAA0B,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO;IA0C/D,6BAA6B,CAAC,EAC5B,MAAM,EACN,MAAM,EACN,OAAO,EACP,KAAK,GACN,EAAE;QACD,MAAM,EAAE,UAAU,GAAG,IAAI,CAAC;QAC1B,MAAM,EAAE,UAAU,GAAG,IAAI,CAAC;QAC1B,OAAO,EAAE,WAAW,GAAG,SAAS,CAAC;QACjC,KAAK,EAAE,aAAa,CAAC;KACtB,GAAG;QACF,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC;QACxB,GAAG,EAAE,UAAU,GAAG,IAAI,CAAC;QACvB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;QACrB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;KACvB;IA+BD,sBAAsB,CAAC,KAAK,EAAE,mBAAmB,GAAG,IAAI;IA8CxD,uBAAuB,CACrB,EACE,MAAM,EACN,MAAM,EACN,OAAO,EACP,KAAK,GACN,EAAE;QACD,MAAM,EAAE,UAAU,GAAG,IAAI,CAAC;QAC1B,MAAM,EAAE,UAAU,GAAG,IAAI,CAAC;QAC1B,OAAO,EAAE,WAAW,GAAG,SAAS,CAAC;QACjC,KAAK,EAAE,aAAa,CAAC;KACtB,EACD,KAAK,EAAE,MAAM,GAAG,IAAI,GACnB;QACD,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC;QACxB,GAAG,EAAE,UAAU,GAAG,IAAI,CAAC;QACvB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;QACrB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;KACvB;CA4BF;AAED,eAAe,gBAAgB,CAAC"}
|
package/dist/IrisGridRenderer.js
CHANGED
|
@@ -811,7 +811,7 @@ class IrisGridRenderer extends GridRenderer {
|
|
|
811
811
|
width: null,
|
|
812
812
|
height: null
|
|
813
813
|
};
|
|
814
|
-
if (mouseX == null || mouseY == null ||
|
|
814
|
+
if (mouseX == null || mouseY == null || metrics == null) {
|
|
815
815
|
return NULL_POSITION;
|
|
816
816
|
}
|
|
817
817
|
var {
|
|
@@ -820,9 +820,9 @@ class IrisGridRenderer extends GridRenderer {
|
|
|
820
820
|
left,
|
|
821
821
|
top
|
|
822
822
|
} = GridUtils.getCellInfoFromXY(mouseX, mouseY, metrics);
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
823
|
+
if (left == null || columnWidth == null || top == null) {
|
|
824
|
+
return NULL_POSITION;
|
|
825
|
+
}
|
|
826
826
|
var {
|
|
827
827
|
width: gridWidth,
|
|
828
828
|
verticalBarWidth
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IrisGridRenderer.js","names":["dhSortDown","dhSortUp","vsTriangleDown","vsTriangleRight","vsLinkExternal","GridRenderer","GridUtils","TableUtils","assertNotNull","getOrThrow","ICON_NAMES","Object","freeze","SORT_UP","SORT_DOWN","CARET_DOWN","CARET_RIGHT","CELL_OVERFLOW","EXPAND_ICON_SIZE","ICON_SIZE","IrisGridRenderer","isFilterValid","advancedFilter","quickFilter","isAdvancedFilterValid","filter","isQuickFilterValid","constructor","icons","initIcons","setIcon","name","faIcon","path","Array","isArray","icon","Path2D","scaledIcon","scaleMatrix","a","d","addPath","getIcon","getSortIcon","sort","direction","sortDirection","ascending","descending","drawCanvas","state","drawScrim","drawGrid","context","drawCellOverflowButton","drawGridLines","drawGroupedColumnLine","drawPendingRowLine","drawCellContent","column","row","metrics","model","modelColumns","modelRows","modelRow","modelColumn","get","undefined","value","valueForCell","isTextType","columns","type","originalFont","font","displayValue","theme","groupedColumns","maxY","allColumnWidths","allColumnXs","length","groupedColumnDividerColor","lastVisibleGroupColumnIndex","columnX","columnWidth","x","strokeStyle","lineWidth","beginPath","moveTo","lineTo","stroke","allRowYs","maxX","pendingRowCount","firstPendingRow","rowCount","floatingBottomRowCount","y","save","setLineDash","pendingTextColor","restore","drawMouseColumnHover","hoverSelectColumn","linkerColumnHoverBackgroundColor","fillStyle","fillRect","drawMouseRowHover","isSelectingColumn","loadingScrimProgress","width","height","gridY","scrimBlurSize","scrimColor","globalCompositeOperation","rect","clip","drawColumnHeaders","reverseType","columnHeaderHeight","drawFilterHeaders","hasReverse","REVERSE_TYPE","NONE","color","headerReverseBarColor","headerSortBarColor","drawHeaderBar","reverseHeaderBarHeight","sortHeaderBarHeight","barHeight","interior","offset","headerBarCasingColor","columnHeaderMaxDepth","drawColumnHeadersAtDepth","range","boundsProp","depth","isMenuShown","bounds","drawColumnHeaderAtIndex","index","gridX","fontWidths","headerHorizontalPadding","columnName","getSortForColumn","text","textForColumnHeader","fontWidth","DEFAULT_FONT_WIDTH","textWidth","textRight","defaultX","Math","min","yOffset","translate","fill","isFilterBarShown","quickFilters","advancedFilters","drawExpandedFilterHeaders","size","drawCollapsedFilterHeaders","filterBarHeight","visibleColumns","textAlign","filterBarExpandedActiveBackgroundColor","filterBarExpandedBackgroundColor","y1","filterBarSeparatorColor","i","isFilterable","x1","drawExpandedFilterHeader","filterBarExpandedActiveCellBackgroundColor","filterBarErrorColor","filterBarHorizontalPadding","headerColor","filterText","getFilterText","measureText","maxLength","substring","rectLeft","rectTop","rectWidth","rectHeight","strokeRect","textX","textY","fillText","headerSeparatorColor","filterBarCollapsedHeight","drawCollapsedFilterHeader","filterBarActiveColor","filterBarActiveBackgroundColor","drawTreeMarker","rowY","treeBox","isExpanded","markerIcon","iconX","iconY","drawRowFooters","mouseX","mouseY","floatingTopHeight","floatingBottomHeight","floatingRows","rowFooterWidth","horizontalBarHeight","verticalBarWidth","allRowHeights","cellHorizontalPadding","floatingGridRowColor","floatingRowBackgroundColors","rowHoverBackgroundColor","mouseRow","getRowAtY","includes","rowHeight","textForRowFooter","getTextRenderMetrics","textMetrics","mouseColumn","getGridPointFromXY","left","getCellOverflowButtonPosition","shouldRenderOverflowButton","getCellInfoFromXY","isStringType","textForCell","truncatedText","getCachedTruncatedString","truncationCharForCell","NULL_POSITION","top","gridWidth","right","buttonLeft","buttonTop","buttonWidth","buttonHeight","overflowButtonColor","overflowButtonHoverColor","getExpandButtonPosition","max"],"sources":["../src/IrisGridRenderer.ts"],"sourcesContent":["/* eslint react/destructuring-assignment: \"off\" */\n/* eslint class-methods-use-this: \"off\" */\n/* eslint no-param-reassign: \"off\" */\nimport {\n dhSortDown,\n dhSortUp,\n vsTriangleDown,\n vsTriangleRight,\n vsLinkExternal,\n IconDefinition,\n} from '@deephaven/icons';\nimport {\n BoundedAxisRange,\n BoxCoordinates,\n Coordinate,\n GridMetrics,\n GridRangeIndex,\n GridRenderer,\n GridRenderState,\n GridThemeType,\n GridUtils,\n VisibleIndex,\n} from '@deephaven/grid';\nimport { Sort } from '@deephaven/jsapi-shim';\nimport { TableUtils, ReverseType } from '@deephaven/jsapi-utils';\nimport { assertNotNull, getOrThrow } from '@deephaven/utils';\nimport {\n ReadonlyAdvancedFilterMap,\n ReadonlyQuickFilterMap,\n AdvancedFilter,\n QuickFilter,\n} from './CommonTypes';\nimport { IrisGridThemeType } from './IrisGridTheme';\nimport IrisGridModel from './IrisGridModel';\n\nconst ICON_NAMES = Object.freeze({\n SORT_UP: 'sortUp',\n SORT_DOWN: 'sortDown',\n CARET_DOWN: 'caretDown',\n CARET_RIGHT: 'caretRight',\n CELL_OVERFLOW: 'cellOverflow',\n});\n\nconst EXPAND_ICON_SIZE = 10;\nconst ICON_SIZE = 16;\n\nexport type IrisGridRenderState = GridRenderState & {\n model: IrisGridModel;\n theme: IrisGridThemeType;\n hoverSelectColumn: GridRangeIndex;\n isSelectingColumn: boolean;\n loadingScrimProgress: number;\n reverseType: ReverseType;\n isFilterBarShown: boolean;\n advancedFilters: ReadonlyAdvancedFilterMap;\n quickFilters: ReadonlyQuickFilterMap;\n isMenuShown: boolean;\n};\n/**\n * Handles rendering some of the Iris specific features, such as sorting icons, sort bar display\n * */\nclass IrisGridRenderer extends GridRenderer {\n static isFilterValid(\n advancedFilter: AdvancedFilter | undefined | null,\n quickFilter: QuickFilter | undefined | null\n ): boolean {\n const isAdvancedFilterValid =\n advancedFilter == null || advancedFilter.filter != null;\n const isQuickFilterValid =\n quickFilter == null || quickFilter.filter != null;\n return isAdvancedFilterValid && isQuickFilterValid;\n }\n\n constructor() {\n super();\n this.icons = {};\n\n this.initIcons();\n }\n\n icons: Record<string, Path2D>;\n\n initIcons(): void {\n this.setIcon(ICON_NAMES.SORT_UP, dhSortUp);\n this.setIcon(ICON_NAMES.SORT_DOWN, dhSortDown);\n this.setIcon(ICON_NAMES.CARET_DOWN, vsTriangleDown);\n this.setIcon(ICON_NAMES.CARET_RIGHT, vsTriangleRight);\n this.setIcon(ICON_NAMES.CELL_OVERFLOW, vsLinkExternal);\n }\n\n // Scales the icon to be square and match the global ICON_SIZE\n setIcon(name: string, faIcon: IconDefinition): void {\n const path = Array.isArray(faIcon.icon[4])\n ? faIcon.icon[4][0]\n : faIcon.icon[4];\n const icon = new Path2D(path);\n const scaledIcon = new Path2D();\n const scaleMatrix = {\n a: ICON_SIZE / faIcon.icon[0],\n d: ICON_SIZE / faIcon.icon[1],\n };\n scaledIcon.addPath(icon, scaleMatrix);\n this.icons[name] = scaledIcon;\n }\n\n getIcon(name: string): Path2D {\n return this.icons[name];\n }\n\n getSortIcon(sort: Sort | null): Path2D | null {\n if (!sort) {\n return null;\n }\n if (sort.direction === TableUtils.sortDirection.ascending) {\n return this.getIcon(ICON_NAMES.SORT_UP);\n }\n if (sort.direction === TableUtils.sortDirection.descending) {\n return this.getIcon(ICON_NAMES.SORT_DOWN);\n }\n return null;\n }\n\n drawCanvas(state: IrisGridRenderState): void {\n super.drawCanvas(state);\n\n this.drawScrim(state);\n }\n\n drawGrid(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n super.drawGrid(context, state);\n this.drawCellOverflowButton(state);\n }\n\n drawGridLines(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n super.drawGridLines(context, state);\n\n this.drawGroupedColumnLine(context, state);\n\n this.drawPendingRowLine(context, state);\n }\n\n drawCellContent(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState,\n column: VisibleIndex,\n row: VisibleIndex\n ): void {\n const { metrics, model } = state;\n const { modelColumns, modelRows } = metrics;\n const modelRow = getOrThrow(modelRows, row);\n const modelColumn = modelColumns.get(column);\n if (modelColumn === undefined) {\n return;\n }\n const value = model.valueForCell(modelColumn, modelRow);\n if (TableUtils.isTextType(model.columns[modelColumn]?.type)) {\n if (value === null || value === '') {\n const originalFont = context.font;\n context.font = `italic ${originalFont}`;\n const displayValue = value === null ? 'null' : 'empty';\n super.drawCellContent(context, state, column, row, displayValue);\n context.font = originalFont;\n return;\n }\n }\n super.drawCellContent(context, state, column, row);\n }\n\n drawGroupedColumnLine(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n const { metrics, model, theme } = state;\n const { groupedColumns } = model;\n const { maxY, allColumnWidths, allColumnXs } = metrics;\n if (\n groupedColumns.length === 0 ||\n theme.groupedColumnDividerColor == null\n ) {\n return;\n }\n\n // This assumes that the engine puts the grouped columns at the start of the\n // model, so model and visible index match for grouped columns. If we ever\n // add freeze support for tree tables or allow moving the grouped columns,\n // this assumption may no longer hold true. If such a change occurs, we'll\n // need to revisit this since a single vertical divider may no longer make\n // sense.\n const lastVisibleGroupColumnIndex = groupedColumns.length - 1;\n\n const columnX = allColumnXs.get(lastVisibleGroupColumnIndex);\n const columnWidth = allColumnWidths.get(lastVisibleGroupColumnIndex);\n if (columnX == null || columnWidth == null) {\n return;\n }\n\n const x = columnX + columnWidth + 0.5;\n\n context.strokeStyle = theme.groupedColumnDividerColor;\n context.lineWidth = 1;\n context.beginPath();\n context.moveTo(x, 0);\n context.lineTo(x, maxY);\n context.stroke();\n }\n\n drawPendingRowLine(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n const { metrics, model, theme } = state;\n const { allRowYs, maxX } = metrics;\n const { pendingRowCount } = model;\n if (pendingRowCount <= 0) {\n return;\n }\n\n const firstPendingRow =\n model.rowCount - model.pendingRowCount - model.floatingBottomRowCount;\n let y = allRowYs.get(firstPendingRow);\n if (y == null) {\n return;\n }\n\n y -= 0.5;\n context.save();\n context.setLineDash([4, 2]);\n context.strokeStyle = theme.pendingTextColor;\n\n context.lineWidth = 1;\n context.beginPath();\n context.moveTo(0, y);\n context.lineTo(maxX, y);\n context.stroke();\n context.restore();\n }\n\n drawMouseColumnHover(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n const { theme, metrics, hoverSelectColumn } = state;\n if (\n hoverSelectColumn == null ||\n theme.linkerColumnHoverBackgroundColor == null\n ) {\n return;\n }\n\n const { allColumnWidths, allColumnXs, maxY } = metrics;\n\n const x = getOrThrow(allColumnXs, hoverSelectColumn);\n const columnWidth = getOrThrow(allColumnWidths, hoverSelectColumn);\n\n context.fillStyle = theme.linkerColumnHoverBackgroundColor;\n context.fillRect(x, 0, columnWidth, maxY);\n }\n\n drawMouseRowHover(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n const { isSelectingColumn } = state;\n if (!isSelectingColumn) {\n super.drawMouseRowHover(context, state);\n }\n }\n\n drawScrim(state: IrisGridRenderState): void {\n const { context, loadingScrimProgress, metrics, theme } = state;\n if (loadingScrimProgress == null) {\n return;\n }\n\n const { width, height, gridY } = metrics;\n const { scrimBlurSize, scrimColor } = theme;\n\n context.save();\n\n // Use global composite so we can change the underlying layer to grayscale\n context.globalCompositeOperation = 'color';\n context.filter = `blur(${scrimBlurSize}px)`;\n if (scrimColor != null) {\n context.fillStyle = scrimColor;\n }\n\n // Clip the path so the top edge is hard edge, bottom edge is soft/blurry\n context.beginPath();\n context.rect(0, gridY, width, height - gridY);\n context.clip();\n\n // Extend the edges beyond the clip area so they're hard edges\n context.fillRect(\n -scrimBlurSize,\n -scrimBlurSize + gridY,\n scrimBlurSize * 2 + width,\n (scrimBlurSize * 2 + (height - gridY)) * loadingScrimProgress\n );\n\n // add an overlay of the scrim color to darken things a bit\n context.globalCompositeOperation = 'overlay';\n context.filter = `blur(${scrimBlurSize}px) opacity(15%)`;\n context.fillRect(\n -scrimBlurSize,\n -scrimBlurSize + gridY,\n scrimBlurSize * 2 + width,\n (scrimBlurSize * 2 + (height - gridY)) * loadingScrimProgress\n );\n\n context.restore();\n }\n\n drawColumnHeaders(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n super.drawColumnHeaders(context, state);\n\n const { theme, metrics, model, reverseType } = state;\n const { columnHeaderHeight } = metrics;\n\n this.drawFilterHeaders(context, state);\n\n if (columnHeaderHeight <= 0) {\n return;\n }\n\n const { sort } = model;\n // if there is only one sort bar, it is interior to the header to save space\n if (sort.length === 1) {\n const hasReverse = reverseType !== TableUtils.REVERSE_TYPE.NONE;\n\n let color;\n if (hasReverse) {\n color = theme.headerReverseBarColor;\n } else {\n color = theme.headerSortBarColor;\n }\n this.drawHeaderBar(\n context,\n state,\n color,\n hasReverse ? theme.reverseHeaderBarHeight : theme.sortHeaderBarHeight\n );\n } else if (sort.length > 1) {\n // if there's multiple bars, the sort is interior to header\n // and the reverse claims space in the table\n if (\n // has table reverse\n reverseType !== TableUtils.REVERSE_TYPE.NONE\n ) {\n this.drawHeaderBar(\n context,\n state,\n theme.headerReverseBarColor,\n theme.reverseHeaderBarHeight,\n false\n );\n }\n this.drawHeaderBar(\n context,\n state,\n theme.headerSortBarColor,\n theme.sortHeaderBarHeight\n );\n }\n }\n\n drawHeaderBar(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState,\n color: string | CanvasGradient | CanvasPattern,\n barHeight: number,\n interior = true\n ): void {\n const { theme, metrics, model } = state;\n const { columnHeaderHeight, width } = metrics;\n // Draw casing with 1 pixel above and below the bar,\n // 1px falls on the existing split between grid/headers\n // so don't need to be accounnted for in math elsewhere\n let offset = 0;\n if (!interior) {\n offset = barHeight;\n }\n context.fillStyle = theme.headerBarCasingColor;\n context.fillRect(\n 0,\n model.columnHeaderMaxDepth * columnHeaderHeight - barHeight - 2 + offset,\n width,\n barHeight + 2\n );\n\n context.fillStyle = color;\n context.fillRect(\n 0,\n model.columnHeaderMaxDepth * columnHeaderHeight - barHeight - 1 + offset,\n width,\n barHeight\n );\n }\n\n drawColumnHeadersAtDepth(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState,\n range: BoundedAxisRange,\n boundsProp: { minX: number; maxX: number },\n depth: number\n ): void {\n const { metrics, model, isMenuShown } = state;\n const { columnHeaderMaxDepth } = model;\n const { width } = metrics;\n const bounds = {\n ...boundsProp,\n maxX:\n depth === columnHeaderMaxDepth - 1 && boundsProp.maxX === width\n ? width - (isMenuShown ? 0 : 30) // Account for the menu button\n : boundsProp.maxX,\n };\n super.drawColumnHeadersAtDepth(context, state, range, bounds, depth);\n }\n\n drawColumnHeaderAtIndex(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState,\n index: VisibleIndex,\n bounds: { minX: number; maxX: number }\n ): void {\n super.drawColumnHeaderAtIndex(context, state, index, bounds);\n const { metrics, model, theme } = state;\n const {\n modelColumns,\n allColumnWidths,\n allColumnXs,\n gridX,\n columnHeaderHeight,\n fontWidths,\n } = metrics;\n\n const { headerHorizontalPadding } = theme;\n const columnWidth = getOrThrow(allColumnWidths, index, 0);\n const columnX = getOrThrow(allColumnXs, index) + gridX;\n const modelColumn = modelColumns.get(index);\n\n if (modelColumn == null) {\n return;\n }\n\n const columnName = model.columns[modelColumn]?.name;\n\n if (columnName == null) {\n return;\n }\n\n const sort = TableUtils.getSortForColumn(model.sort, columnName);\n\n if (!sort) {\n return;\n }\n\n const icon = this.getSortIcon(sort);\n if (!icon) {\n return;\n }\n\n const text = model.textForColumnHeader(modelColumn);\n if (text === undefined) {\n return;\n }\n\n const fontWidth =\n fontWidths.get(context.font) ?? GridRenderer.DEFAULT_FONT_WIDTH;\n assertNotNull(fontWidth);\n const textWidth = text.length * fontWidth;\n const textRight = gridX + columnX + textWidth + headerHorizontalPadding;\n let { maxX } = bounds;\n maxX -= headerHorizontalPadding;\n const defaultX =\n gridX + columnX + columnWidth - headerHorizontalPadding - 1;\n\n const x = textRight > maxX ? textRight + 1 : Math.min(maxX, defaultX);\n const yOffset =\n sort.direction === TableUtils.sortDirection.ascending ? -6 : -12;\n const y = columnHeaderHeight * 0.5 + yOffset;\n\n context.save();\n\n context.beginPath();\n context.rect(columnX, 0, columnWidth, columnHeaderHeight);\n context.clip();\n\n context.fillStyle = theme.headerSortBarColor;\n context.translate(x, y);\n context.fill(icon);\n\n context.restore();\n }\n\n drawFilterHeaders(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n const { isFilterBarShown, quickFilters, advancedFilters } = state;\n\n if (isFilterBarShown) {\n this.drawExpandedFilterHeaders(context, state);\n } else if (\n (quickFilters != null && quickFilters.size > 0) ||\n (advancedFilters != null && advancedFilters.size > 0)\n ) {\n this.drawCollapsedFilterHeaders(context, state);\n }\n }\n\n drawExpandedFilterHeaders(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n const { metrics, model, theme, quickFilters, advancedFilters } = state;\n const { filterBarHeight } = theme;\n\n if (filterBarHeight <= 0) {\n return;\n }\n\n const {\n gridX,\n gridY,\n maxX,\n modelColumns,\n visibleColumns,\n allColumnWidths,\n allColumnXs,\n } = metrics;\n\n const columnHeaderHeight = gridY - filterBarHeight;\n\n context.save();\n\n context.font = theme.font;\n context.textAlign = 'left';\n\n if (\n (quickFilters != null && quickFilters.size > 0) ||\n (advancedFilters != null && advancedFilters.size > 0)\n ) {\n // fill style if a fiter is set on any column\n context.fillStyle = theme.filterBarExpandedActiveBackgroundColor;\n } else {\n // fill style with no filters set\n context.fillStyle = theme.filterBarExpandedBackgroundColor;\n }\n\n // Draw the background\n context.fillRect(gridX, columnHeaderHeight, maxX, filterBarHeight - 1);\n\n // Draw the bottom border\n context.fillStyle = theme.headerBarCasingColor;\n\n context.fillRect(gridX, columnHeaderHeight + filterBarHeight - 1, maxX, 1);\n\n // Draw the filter input boxes\n const y1 = columnHeaderHeight;\n context.strokeStyle = theme.filterBarSeparatorColor;\n context.beginPath();\n\n for (let i = 0; i < visibleColumns.length; i += 1) {\n const column = visibleColumns[i];\n const modelColumn = getOrThrow(modelColumns, column);\n const columnX = getOrThrow(allColumnXs, column);\n const columnWidth = getOrThrow(allColumnWidths, column);\n if (model.isFilterable(modelColumn) && columnWidth > 0) {\n const x1 = gridX + (columnX ?? 0);\n context.rect(x1 + 0.5, y1 + 0.5, columnWidth, filterBarHeight - 2); // 1 for the border, 1 for the casing\n }\n }\n context.stroke();\n\n for (let i = 0; i < visibleColumns.length; i += 1) {\n const column = visibleColumns[i];\n const columnWidth = getOrThrow(allColumnWidths, column);\n const columnX = getOrThrow(allColumnXs, column);\n const x = columnX + gridX;\n this.drawExpandedFilterHeader(context, state, column, x, columnWidth);\n }\n\n context.restore();\n }\n\n drawExpandedFilterHeader(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState,\n column: VisibleIndex,\n columnX: Coordinate,\n columnWidth: number\n ): void {\n if (columnWidth <= 0) {\n return;\n }\n\n const { metrics, theme, quickFilters, advancedFilters } = state;\n const { modelColumns, gridY } = metrics;\n const {\n filterBarHeight,\n filterBarExpandedActiveCellBackgroundColor,\n filterBarErrorColor,\n filterBarHorizontalPadding,\n headerColor,\n } = theme;\n const columnHeaderHeight = gridY - filterBarHeight;\n const modelColumn = modelColumns.get(column);\n if (modelColumn === undefined) return;\n const quickFilter = quickFilters.get(modelColumn);\n const advancedFilter = advancedFilters.get(modelColumn);\n if (quickFilter == null && advancedFilter == null) {\n return;\n }\n\n let text = null;\n if (quickFilter != null) {\n const { text: filterText } = quickFilter;\n text = filterText;\n if (!text) {\n text = TableUtils.getFilterText(quickFilter.filter);\n }\n\n if (text != null) {\n const { fontWidths } = metrics;\n let fontWidth = fontWidths.get(context.font);\n if (fontWidth == null || fontWidth === 0) {\n fontWidth = context.measureText('8').width;\n if (!fontWidth) {\n fontWidth = 10;\n }\n }\n\n const maxLength =\n (columnWidth - filterBarHorizontalPadding * 2) / fontWidth;\n if (maxLength <= 0) {\n text = '';\n } else if (text.length > maxLength) {\n text = `${text.substring(0, maxLength - 1)}…`;\n }\n }\n }\n\n context.save();\n\n const isFilterValid = IrisGridRenderer.isFilterValid(\n advancedFilter,\n quickFilter\n );\n if (isFilterValid && filterBarExpandedActiveCellBackgroundColor != null) {\n // draw active filter background inside cell\n context.fillStyle = filterBarExpandedActiveCellBackgroundColor;\n context.fillRect(\n columnX + 1, // +1 left border\n columnHeaderHeight + 1, // +1 top border\n columnWidth - 1, // -1 right border\n filterBarHeight - 3 // -3 top, bottom border and bottom casing\n );\n } else if (filterBarErrorColor != null) {\n // draw error box inside cell\n context.fillStyle = filterBarErrorColor;\n context.lineWidth = 2;\n context.strokeStyle = filterBarErrorColor;\n // Because this is drawn with a strokeRect, we have to add/subtract half the,\n // linewidth from each side to make interior, in addition to accounting for any borders/casings\n const rectLeft = columnX + 2; // 1 for strokeRect, 1 for border\n const rectTop = columnHeaderHeight + 2; // 1 for strokeRect, 1 for border\n const rectWidth = columnWidth - 3; // for 2 border and 1 for strokeRect\n const rectHeight = filterBarHeight - 5; // -2 for strokeRect, -3 for top, bottom border and bottom casing\n context.strokeRect(rectLeft, rectTop, rectWidth, rectHeight);\n }\n\n if (text != null && text !== '') {\n const textX = columnX + filterBarHorizontalPadding;\n const textY = columnHeaderHeight + filterBarHeight * 0.5 + 1; // + 1 for border\n context.fillStyle = headerColor;\n context.fillText(text, textX, textY);\n }\n\n context.restore();\n }\n\n drawCollapsedFilterHeaders(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n const { metrics, theme } = state;\n const { headerSeparatorColor, filterBarCollapsedHeight } = theme;\n\n if (filterBarCollapsedHeight <= 0) {\n return;\n }\n\n const {\n gridX,\n gridY,\n maxX,\n visibleColumns,\n allColumnWidths,\n allColumnXs,\n } = metrics;\n const columnHeaderHeight = gridY - filterBarCollapsedHeight;\n\n context.save();\n\n // Draw the background of the collapsed filter bar\n context.fillStyle = headerSeparatorColor;\n context.fillRect(gridX, columnHeaderHeight, maxX, filterBarCollapsedHeight);\n\n for (let i = 0; i < visibleColumns.length; i += 1) {\n const column = visibleColumns[i];\n const columnWidth = allColumnWidths.get(column);\n const columnX = allColumnXs.get(column);\n if (columnX != null && columnWidth != null) {\n const x = columnX + gridX;\n // draw the collapsed cells\n this.drawCollapsedFilterHeader(context, state, column, x, columnWidth);\n }\n }\n\n context.restore();\n }\n\n drawCollapsedFilterHeader(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState,\n column: VisibleIndex,\n columnX: Coordinate,\n columnWidth: number\n ): void {\n if (columnWidth <= 0) {\n return;\n }\n\n const { metrics, theme, quickFilters, advancedFilters } = state;\n const { modelColumns, gridY } = metrics;\n const modelColumn = modelColumns.get(column);\n\n if (modelColumn === undefined) return;\n const quickFilter = quickFilters.get(modelColumn);\n const advancedFilter = advancedFilters.get(modelColumn);\n\n const {\n filterBarCollapsedHeight,\n filterBarActiveColor,\n filterBarActiveBackgroundColor,\n filterBarErrorColor,\n } = theme;\n\n context.save();\n\n const isFilterValid = IrisGridRenderer.isFilterValid(\n advancedFilter,\n quickFilter\n );\n\n if (\n filterBarActiveBackgroundColor != null &&\n quickFilter == null &&\n advancedFilter == null\n ) {\n context.fillStyle = filterBarActiveBackgroundColor;\n } else if (filterBarActiveColor != null && isFilterValid) {\n context.fillStyle = filterBarActiveColor;\n } else if (filterBarErrorColor != null) {\n context.fillStyle = filterBarErrorColor;\n }\n\n const x = columnX + 1; // for gap between columns\n const y = gridY - filterBarCollapsedHeight;\n const rectWidth = columnWidth - 1; // for gap between columns\n const rectHeight = filterBarCollapsedHeight - 1; // for casing bottom\n context.fillRect(x, y, rectWidth, rectHeight);\n\n context.restore();\n }\n\n drawTreeMarker(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState,\n columnX: Coordinate,\n rowY: Coordinate,\n treeBox: BoxCoordinates,\n color: string,\n isExpanded: boolean\n ): void {\n context.save();\n const { x1, y1 } = treeBox;\n const markerIcon = isExpanded\n ? this.getIcon(ICON_NAMES.CARET_DOWN)\n : this.getIcon(ICON_NAMES.CARET_RIGHT);\n const iconX = columnX + x1 - 2;\n const iconY = rowY + y1 + 2.5;\n\n context.fillStyle = color;\n context.textAlign = 'center';\n context.translate(iconX, iconY);\n context.fill(markerIcon);\n context.restore();\n }\n\n drawRowFooters(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n const { metrics, model, mouseX, mouseY, theme } = state;\n const {\n gridY,\n gridX,\n maxX,\n modelRows,\n floatingTopHeight,\n floatingBottomHeight,\n floatingRows,\n rowFooterWidth,\n height,\n horizontalBarHeight,\n verticalBarWidth,\n allRowHeights,\n allRowYs,\n width,\n } = metrics;\n // Only draw the footers on the floating rows\n if (rowFooterWidth <= 0 || floatingRows.length === 0) {\n return;\n }\n\n const {\n cellHorizontalPadding,\n floatingGridRowColor,\n floatingRowBackgroundColors,\n headerColor,\n rowHoverBackgroundColor,\n } = theme;\n\n context.translate(gridX, gridY);\n\n context.beginPath();\n const x = Math.min(maxX, width - rowFooterWidth - verticalBarWidth - gridX);\n context.fillStyle = floatingRowBackgroundColors;\n if (floatingTopHeight > 0) {\n context.rect(x, 0, rowFooterWidth, floatingTopHeight);\n }\n if (floatingBottomHeight > 0) {\n context.rect(\n x,\n height - gridY - horizontalBarHeight - floatingBottomHeight,\n rowFooterWidth,\n floatingBottomHeight\n );\n }\n context.fill();\n\n const mouseRow =\n mouseX != null &&\n mouseY != null &&\n mouseX >= gridX &&\n mouseX <= maxX + rowFooterWidth\n ? GridUtils.getRowAtY(mouseY, metrics)\n : null;\n if (\n rowHoverBackgroundColor != null &&\n mouseRow !== null &&\n floatingRows.includes(mouseRow)\n ) {\n context.fillStyle = rowHoverBackgroundColor;\n const y = allRowYs.get(mouseRow);\n const rowHeight = allRowHeights.get(mouseRow);\n assertNotNull(y);\n assertNotNull(rowHeight);\n context.fillRect(x, y, rowFooterWidth, rowHeight);\n }\n\n context.beginPath();\n if (floatingGridRowColor != null) {\n context.strokeStyle = floatingGridRowColor;\n }\n if (floatingTopHeight > 0) {\n context.moveTo(x + 0.5, 0.5);\n context.lineTo(x + 0.5, floatingTopHeight - 0.5);\n }\n if (floatingBottomHeight > 0) {\n const y = height - gridY - horizontalBarHeight - floatingBottomHeight;\n context.moveTo(x - 0.5, y + 0.5);\n context.lineTo(x - 0.5, y + floatingBottomHeight - 0.5);\n }\n context.stroke();\n\n context.fillStyle = headerColor;\n context.textAlign = 'left';\n\n const textX = x + cellHorizontalPadding;\n for (let i = 0; i < floatingRows.length; i += 1) {\n const row = floatingRows[i];\n const rowHeight = allRowHeights.get(row);\n const rowY = allRowYs.get(row);\n const modelRow = modelRows.get(row);\n if (rowY != null && rowHeight != null && modelRow != null) {\n const textY = rowY + rowHeight * 0.5;\n context.fillText(model.textForRowFooter(modelRow), textX, textY);\n }\n }\n\n context.translate(-gridX, -gridY);\n }\n\n // This will shrink the size the text may take when the overflow button is rendered\n // The text will truncate to a smaller width and won't overlap the button\n getTextRenderMetrics(\n state: IrisGridRenderState,\n column: VisibleIndex,\n row: VisibleIndex\n ): {\n width: number;\n x: Coordinate;\n y: Coordinate;\n } {\n const textMetrics = super.getTextRenderMetrics(state, column, row);\n\n const { mouseX, mouseY, metrics } = state;\n\n if (mouseX == null || mouseY == null) {\n return textMetrics;\n }\n\n const { column: mouseColumn, row: mouseRow } = GridUtils.getGridPointFromXY(\n mouseX,\n mouseY,\n metrics\n );\n\n if (column === mouseColumn && row === mouseRow) {\n const { left } = this.getCellOverflowButtonPosition(state);\n if (this.shouldRenderOverflowButton(state) && left != null) {\n textMetrics.width = left - metrics.gridX - textMetrics.x;\n }\n }\n return textMetrics;\n }\n\n shouldRenderOverflowButton(state: IrisGridRenderState): boolean {\n const { context, mouseX, mouseY, metrics, model, theme } = state;\n if (mouseX == null || mouseY == null) {\n return false;\n }\n\n const { row, column, modelRow, modelColumn } = GridUtils.getCellInfoFromXY(\n mouseX,\n mouseY,\n metrics\n );\n\n if (\n row == null ||\n column == null ||\n modelRow == null ||\n modelColumn == null ||\n !TableUtils.isStringType(model.columns[modelColumn].type)\n ) {\n return false;\n }\n\n const text = model.textForCell(modelColumn, modelRow) ?? '';\n const { width: textWidth } = super.getTextRenderMetrics(state, column, row);\n const fontWidth =\n metrics.fontWidths.get(theme.font) ?? IrisGridRenderer.DEFAULT_FONT_WIDTH;\n\n context.save();\n context.font = theme.font;\n\n const truncatedText = this.getCachedTruncatedString(\n context,\n text,\n textWidth,\n fontWidth,\n model.truncationCharForCell(modelColumn, modelRow)\n );\n context.restore();\n\n return text !== '' && truncatedText !== text;\n }\n\n getCellOverflowButtonPosition({\n mouseX,\n mouseY,\n metrics,\n theme,\n }: {\n mouseX: Coordinate | null;\n mouseY: Coordinate | null;\n metrics: GridMetrics | undefined;\n theme: GridThemeType;\n }): {\n left: Coordinate | null;\n top: Coordinate | null;\n width: number | null;\n height: number | null;\n } {\n const NULL_POSITION = { left: null, top: null, width: null, height: null };\n if (mouseX == null || mouseY == null || !metrics) {\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 getExpandButtonPosition(\n {\n mouseX,\n mouseY,\n metrics,\n theme,\n }: {\n mouseX: Coordinate | null;\n mouseY: Coordinate | null;\n metrics: GridMetrics | undefined;\n theme: GridThemeType;\n },\n depth: number | null\n ): {\n left: Coordinate | null;\n top: Coordinate | null;\n width: number | null;\n height: number | null;\n } {\n const NULL_POSITION = { left: null, top: null, width: null, height: null };\n if (mouseX == null || mouseY == null || depth == null || !metrics) {\n return NULL_POSITION;\n }\n const { rowHeight, left, top } = GridUtils.getCellInfoFromXY(\n mouseX,\n mouseY,\n metrics\n );\n\n assertNotNull(left);\n assertNotNull(rowHeight);\n assertNotNull(top);\n const { cellHorizontalPadding } = theme;\n\n const width = EXPAND_ICON_SIZE + 2 * cellHorizontalPadding;\n\n const buttonLeft = Math.max(left + EXPAND_ICON_SIZE * depth, metrics.gridX);\n const buttonTop = metrics.gridY + top;\n\n return {\n left: buttonLeft,\n top: buttonTop,\n width,\n height: rowHeight,\n };\n }\n}\n\nexport default IrisGridRenderer;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"IrisGridRenderer.js","names":["dhSortDown","dhSortUp","vsTriangleDown","vsTriangleRight","vsLinkExternal","GridRenderer","GridUtils","TableUtils","assertNotNull","getOrThrow","ICON_NAMES","Object","freeze","SORT_UP","SORT_DOWN","CARET_DOWN","CARET_RIGHT","CELL_OVERFLOW","EXPAND_ICON_SIZE","ICON_SIZE","IrisGridRenderer","isFilterValid","advancedFilter","quickFilter","isAdvancedFilterValid","filter","isQuickFilterValid","constructor","icons","initIcons","setIcon","name","faIcon","path","Array","isArray","icon","Path2D","scaledIcon","scaleMatrix","a","d","addPath","getIcon","getSortIcon","sort","direction","sortDirection","ascending","descending","drawCanvas","state","drawScrim","drawGrid","context","drawCellOverflowButton","drawGridLines","drawGroupedColumnLine","drawPendingRowLine","drawCellContent","column","row","metrics","model","modelColumns","modelRows","modelRow","modelColumn","get","undefined","value","valueForCell","isTextType","columns","type","originalFont","font","displayValue","theme","groupedColumns","maxY","allColumnWidths","allColumnXs","length","groupedColumnDividerColor","lastVisibleGroupColumnIndex","columnX","columnWidth","x","strokeStyle","lineWidth","beginPath","moveTo","lineTo","stroke","allRowYs","maxX","pendingRowCount","firstPendingRow","rowCount","floatingBottomRowCount","y","save","setLineDash","pendingTextColor","restore","drawMouseColumnHover","hoverSelectColumn","linkerColumnHoverBackgroundColor","fillStyle","fillRect","drawMouseRowHover","isSelectingColumn","loadingScrimProgress","width","height","gridY","scrimBlurSize","scrimColor","globalCompositeOperation","rect","clip","drawColumnHeaders","reverseType","columnHeaderHeight","drawFilterHeaders","hasReverse","REVERSE_TYPE","NONE","color","headerReverseBarColor","headerSortBarColor","drawHeaderBar","reverseHeaderBarHeight","sortHeaderBarHeight","barHeight","interior","offset","headerBarCasingColor","columnHeaderMaxDepth","drawColumnHeadersAtDepth","range","boundsProp","depth","isMenuShown","bounds","drawColumnHeaderAtIndex","index","gridX","fontWidths","headerHorizontalPadding","columnName","getSortForColumn","text","textForColumnHeader","fontWidth","DEFAULT_FONT_WIDTH","textWidth","textRight","defaultX","Math","min","yOffset","translate","fill","isFilterBarShown","quickFilters","advancedFilters","drawExpandedFilterHeaders","size","drawCollapsedFilterHeaders","filterBarHeight","visibleColumns","textAlign","filterBarExpandedActiveBackgroundColor","filterBarExpandedBackgroundColor","y1","filterBarSeparatorColor","i","isFilterable","x1","drawExpandedFilterHeader","filterBarExpandedActiveCellBackgroundColor","filterBarErrorColor","filterBarHorizontalPadding","headerColor","filterText","getFilterText","measureText","maxLength","substring","rectLeft","rectTop","rectWidth","rectHeight","strokeRect","textX","textY","fillText","headerSeparatorColor","filterBarCollapsedHeight","drawCollapsedFilterHeader","filterBarActiveColor","filterBarActiveBackgroundColor","drawTreeMarker","rowY","treeBox","isExpanded","markerIcon","iconX","iconY","drawRowFooters","mouseX","mouseY","floatingTopHeight","floatingBottomHeight","floatingRows","rowFooterWidth","horizontalBarHeight","verticalBarWidth","allRowHeights","cellHorizontalPadding","floatingGridRowColor","floatingRowBackgroundColors","rowHoverBackgroundColor","mouseRow","getRowAtY","includes","rowHeight","textForRowFooter","getTextRenderMetrics","textMetrics","mouseColumn","getGridPointFromXY","left","getCellOverflowButtonPosition","shouldRenderOverflowButton","getCellInfoFromXY","isStringType","textForCell","truncatedText","getCachedTruncatedString","truncationCharForCell","NULL_POSITION","top","gridWidth","right","buttonLeft","buttonTop","buttonWidth","buttonHeight","overflowButtonColor","overflowButtonHoverColor","getExpandButtonPosition","max"],"sources":["../src/IrisGridRenderer.ts"],"sourcesContent":["/* eslint react/destructuring-assignment: \"off\" */\n/* eslint class-methods-use-this: \"off\" */\n/* eslint no-param-reassign: \"off\" */\nimport {\n dhSortDown,\n dhSortUp,\n vsTriangleDown,\n vsTriangleRight,\n vsLinkExternal,\n IconDefinition,\n} from '@deephaven/icons';\nimport {\n BoundedAxisRange,\n BoxCoordinates,\n Coordinate,\n GridMetrics,\n GridRangeIndex,\n GridRenderer,\n GridRenderState,\n GridThemeType,\n GridUtils,\n VisibleIndex,\n} from '@deephaven/grid';\nimport { Sort } from '@deephaven/jsapi-shim';\nimport { TableUtils, ReverseType } from '@deephaven/jsapi-utils';\nimport { assertNotNull, getOrThrow } from '@deephaven/utils';\nimport {\n ReadonlyAdvancedFilterMap,\n ReadonlyQuickFilterMap,\n AdvancedFilter,\n QuickFilter,\n} from './CommonTypes';\nimport { IrisGridThemeType } from './IrisGridTheme';\nimport IrisGridModel from './IrisGridModel';\n\nconst ICON_NAMES = Object.freeze({\n SORT_UP: 'sortUp',\n SORT_DOWN: 'sortDown',\n CARET_DOWN: 'caretDown',\n CARET_RIGHT: 'caretRight',\n CELL_OVERFLOW: 'cellOverflow',\n});\n\nconst EXPAND_ICON_SIZE = 10;\nconst ICON_SIZE = 16;\n\nexport type IrisGridRenderState = GridRenderState & {\n model: IrisGridModel;\n theme: IrisGridThemeType;\n hoverSelectColumn: GridRangeIndex;\n isSelectingColumn: boolean;\n loadingScrimProgress: number;\n reverseType: ReverseType;\n isFilterBarShown: boolean;\n advancedFilters: ReadonlyAdvancedFilterMap;\n quickFilters: ReadonlyQuickFilterMap;\n isMenuShown: boolean;\n};\n/**\n * Handles rendering some of the Iris specific features, such as sorting icons, sort bar display\n * */\nclass IrisGridRenderer extends GridRenderer {\n static isFilterValid(\n advancedFilter: AdvancedFilter | undefined | null,\n quickFilter: QuickFilter | undefined | null\n ): boolean {\n const isAdvancedFilterValid =\n advancedFilter == null || advancedFilter.filter != null;\n const isQuickFilterValid =\n quickFilter == null || quickFilter.filter != null;\n return isAdvancedFilterValid && isQuickFilterValid;\n }\n\n constructor() {\n super();\n this.icons = {};\n\n this.initIcons();\n }\n\n icons: Record<string, Path2D>;\n\n initIcons(): void {\n this.setIcon(ICON_NAMES.SORT_UP, dhSortUp);\n this.setIcon(ICON_NAMES.SORT_DOWN, dhSortDown);\n this.setIcon(ICON_NAMES.CARET_DOWN, vsTriangleDown);\n this.setIcon(ICON_NAMES.CARET_RIGHT, vsTriangleRight);\n this.setIcon(ICON_NAMES.CELL_OVERFLOW, vsLinkExternal);\n }\n\n // Scales the icon to be square and match the global ICON_SIZE\n setIcon(name: string, faIcon: IconDefinition): void {\n const path = Array.isArray(faIcon.icon[4])\n ? faIcon.icon[4][0]\n : faIcon.icon[4];\n const icon = new Path2D(path);\n const scaledIcon = new Path2D();\n const scaleMatrix = {\n a: ICON_SIZE / faIcon.icon[0],\n d: ICON_SIZE / faIcon.icon[1],\n };\n scaledIcon.addPath(icon, scaleMatrix);\n this.icons[name] = scaledIcon;\n }\n\n getIcon(name: string): Path2D {\n return this.icons[name];\n }\n\n getSortIcon(sort: Sort | null): Path2D | null {\n if (!sort) {\n return null;\n }\n if (sort.direction === TableUtils.sortDirection.ascending) {\n return this.getIcon(ICON_NAMES.SORT_UP);\n }\n if (sort.direction === TableUtils.sortDirection.descending) {\n return this.getIcon(ICON_NAMES.SORT_DOWN);\n }\n return null;\n }\n\n drawCanvas(state: IrisGridRenderState): void {\n super.drawCanvas(state);\n\n this.drawScrim(state);\n }\n\n drawGrid(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n super.drawGrid(context, state);\n this.drawCellOverflowButton(state);\n }\n\n drawGridLines(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n super.drawGridLines(context, state);\n\n this.drawGroupedColumnLine(context, state);\n\n this.drawPendingRowLine(context, state);\n }\n\n drawCellContent(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState,\n column: VisibleIndex,\n row: VisibleIndex\n ): void {\n const { metrics, model } = state;\n const { modelColumns, modelRows } = metrics;\n const modelRow = getOrThrow(modelRows, row);\n const modelColumn = modelColumns.get(column);\n if (modelColumn === undefined) {\n return;\n }\n const value = model.valueForCell(modelColumn, modelRow);\n if (TableUtils.isTextType(model.columns[modelColumn]?.type)) {\n if (value === null || value === '') {\n const originalFont = context.font;\n context.font = `italic ${originalFont}`;\n const displayValue = value === null ? 'null' : 'empty';\n super.drawCellContent(context, state, column, row, displayValue);\n context.font = originalFont;\n return;\n }\n }\n super.drawCellContent(context, state, column, row);\n }\n\n drawGroupedColumnLine(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n const { metrics, model, theme } = state;\n const { groupedColumns } = model;\n const { maxY, allColumnWidths, allColumnXs } = metrics;\n if (\n groupedColumns.length === 0 ||\n theme.groupedColumnDividerColor == null\n ) {\n return;\n }\n\n // This assumes that the engine puts the grouped columns at the start of the\n // model, so model and visible index match for grouped columns. If we ever\n // add freeze support for tree tables or allow moving the grouped columns,\n // this assumption may no longer hold true. If such a change occurs, we'll\n // need to revisit this since a single vertical divider may no longer make\n // sense.\n const lastVisibleGroupColumnIndex = groupedColumns.length - 1;\n\n const columnX = allColumnXs.get(lastVisibleGroupColumnIndex);\n const columnWidth = allColumnWidths.get(lastVisibleGroupColumnIndex);\n if (columnX == null || columnWidth == null) {\n return;\n }\n\n const x = columnX + columnWidth + 0.5;\n\n context.strokeStyle = theme.groupedColumnDividerColor;\n context.lineWidth = 1;\n context.beginPath();\n context.moveTo(x, 0);\n context.lineTo(x, maxY);\n context.stroke();\n }\n\n drawPendingRowLine(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n const { metrics, model, theme } = state;\n const { allRowYs, maxX } = metrics;\n const { pendingRowCount } = model;\n if (pendingRowCount <= 0) {\n return;\n }\n\n const firstPendingRow =\n model.rowCount - model.pendingRowCount - model.floatingBottomRowCount;\n let y = allRowYs.get(firstPendingRow);\n if (y == null) {\n return;\n }\n\n y -= 0.5;\n context.save();\n context.setLineDash([4, 2]);\n context.strokeStyle = theme.pendingTextColor;\n\n context.lineWidth = 1;\n context.beginPath();\n context.moveTo(0, y);\n context.lineTo(maxX, y);\n context.stroke();\n context.restore();\n }\n\n drawMouseColumnHover(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n const { theme, metrics, hoverSelectColumn } = state;\n if (\n hoverSelectColumn == null ||\n theme.linkerColumnHoverBackgroundColor == null\n ) {\n return;\n }\n\n const { allColumnWidths, allColumnXs, maxY } = metrics;\n\n const x = getOrThrow(allColumnXs, hoverSelectColumn);\n const columnWidth = getOrThrow(allColumnWidths, hoverSelectColumn);\n\n context.fillStyle = theme.linkerColumnHoverBackgroundColor;\n context.fillRect(x, 0, columnWidth, maxY);\n }\n\n drawMouseRowHover(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n const { isSelectingColumn } = state;\n if (!isSelectingColumn) {\n super.drawMouseRowHover(context, state);\n }\n }\n\n drawScrim(state: IrisGridRenderState): void {\n const { context, loadingScrimProgress, metrics, theme } = state;\n if (loadingScrimProgress == null) {\n return;\n }\n\n const { width, height, gridY } = metrics;\n const { scrimBlurSize, scrimColor } = theme;\n\n context.save();\n\n // Use global composite so we can change the underlying layer to grayscale\n context.globalCompositeOperation = 'color';\n context.filter = `blur(${scrimBlurSize}px)`;\n if (scrimColor != null) {\n context.fillStyle = scrimColor;\n }\n\n // Clip the path so the top edge is hard edge, bottom edge is soft/blurry\n context.beginPath();\n context.rect(0, gridY, width, height - gridY);\n context.clip();\n\n // Extend the edges beyond the clip area so they're hard edges\n context.fillRect(\n -scrimBlurSize,\n -scrimBlurSize + gridY,\n scrimBlurSize * 2 + width,\n (scrimBlurSize * 2 + (height - gridY)) * loadingScrimProgress\n );\n\n // add an overlay of the scrim color to darken things a bit\n context.globalCompositeOperation = 'overlay';\n context.filter = `blur(${scrimBlurSize}px) opacity(15%)`;\n context.fillRect(\n -scrimBlurSize,\n -scrimBlurSize + gridY,\n scrimBlurSize * 2 + width,\n (scrimBlurSize * 2 + (height - gridY)) * loadingScrimProgress\n );\n\n context.restore();\n }\n\n drawColumnHeaders(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n super.drawColumnHeaders(context, state);\n\n const { theme, metrics, model, reverseType } = state;\n const { columnHeaderHeight } = metrics;\n\n this.drawFilterHeaders(context, state);\n\n if (columnHeaderHeight <= 0) {\n return;\n }\n\n const { sort } = model;\n // if there is only one sort bar, it is interior to the header to save space\n if (sort.length === 1) {\n const hasReverse = reverseType !== TableUtils.REVERSE_TYPE.NONE;\n\n let color;\n if (hasReverse) {\n color = theme.headerReverseBarColor;\n } else {\n color = theme.headerSortBarColor;\n }\n this.drawHeaderBar(\n context,\n state,\n color,\n hasReverse ? theme.reverseHeaderBarHeight : theme.sortHeaderBarHeight\n );\n } else if (sort.length > 1) {\n // if there's multiple bars, the sort is interior to header\n // and the reverse claims space in the table\n if (\n // has table reverse\n reverseType !== TableUtils.REVERSE_TYPE.NONE\n ) {\n this.drawHeaderBar(\n context,\n state,\n theme.headerReverseBarColor,\n theme.reverseHeaderBarHeight,\n false\n );\n }\n this.drawHeaderBar(\n context,\n state,\n theme.headerSortBarColor,\n theme.sortHeaderBarHeight\n );\n }\n }\n\n drawHeaderBar(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState,\n color: string | CanvasGradient | CanvasPattern,\n barHeight: number,\n interior = true\n ): void {\n const { theme, metrics, model } = state;\n const { columnHeaderHeight, width } = metrics;\n // Draw casing with 1 pixel above and below the bar,\n // 1px falls on the existing split between grid/headers\n // so don't need to be accounnted for in math elsewhere\n let offset = 0;\n if (!interior) {\n offset = barHeight;\n }\n context.fillStyle = theme.headerBarCasingColor;\n context.fillRect(\n 0,\n model.columnHeaderMaxDepth * columnHeaderHeight - barHeight - 2 + offset,\n width,\n barHeight + 2\n );\n\n context.fillStyle = color;\n context.fillRect(\n 0,\n model.columnHeaderMaxDepth * columnHeaderHeight - barHeight - 1 + offset,\n width,\n barHeight\n );\n }\n\n drawColumnHeadersAtDepth(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState,\n range: BoundedAxisRange,\n boundsProp: { minX: number; maxX: number },\n depth: number\n ): void {\n const { metrics, model, isMenuShown } = state;\n const { columnHeaderMaxDepth } = model;\n const { width } = metrics;\n const bounds = {\n ...boundsProp,\n maxX:\n depth === columnHeaderMaxDepth - 1 && boundsProp.maxX === width\n ? width - (isMenuShown ? 0 : 30) // Account for the menu button\n : boundsProp.maxX,\n };\n super.drawColumnHeadersAtDepth(context, state, range, bounds, depth);\n }\n\n drawColumnHeaderAtIndex(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState,\n index: VisibleIndex,\n bounds: { minX: number; maxX: number }\n ): void {\n super.drawColumnHeaderAtIndex(context, state, index, bounds);\n const { metrics, model, theme } = state;\n const {\n modelColumns,\n allColumnWidths,\n allColumnXs,\n gridX,\n columnHeaderHeight,\n fontWidths,\n } = metrics;\n\n const { headerHorizontalPadding } = theme;\n const columnWidth = getOrThrow(allColumnWidths, index, 0);\n const columnX = getOrThrow(allColumnXs, index) + gridX;\n const modelColumn = modelColumns.get(index);\n\n if (modelColumn == null) {\n return;\n }\n\n const columnName = model.columns[modelColumn]?.name;\n\n if (columnName == null) {\n return;\n }\n\n const sort = TableUtils.getSortForColumn(model.sort, columnName);\n\n if (!sort) {\n return;\n }\n\n const icon = this.getSortIcon(sort);\n if (!icon) {\n return;\n }\n\n const text = model.textForColumnHeader(modelColumn);\n if (text === undefined) {\n return;\n }\n\n const fontWidth =\n fontWidths.get(context.font) ?? GridRenderer.DEFAULT_FONT_WIDTH;\n assertNotNull(fontWidth);\n const textWidth = text.length * fontWidth;\n const textRight = gridX + columnX + textWidth + headerHorizontalPadding;\n let { maxX } = bounds;\n maxX -= headerHorizontalPadding;\n const defaultX =\n gridX + columnX + columnWidth - headerHorizontalPadding - 1;\n\n const x = textRight > maxX ? textRight + 1 : Math.min(maxX, defaultX);\n const yOffset =\n sort.direction === TableUtils.sortDirection.ascending ? -6 : -12;\n const y = columnHeaderHeight * 0.5 + yOffset;\n\n context.save();\n\n context.beginPath();\n context.rect(columnX, 0, columnWidth, columnHeaderHeight);\n context.clip();\n\n context.fillStyle = theme.headerSortBarColor;\n context.translate(x, y);\n context.fill(icon);\n\n context.restore();\n }\n\n drawFilterHeaders(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n const { isFilterBarShown, quickFilters, advancedFilters } = state;\n\n if (isFilterBarShown) {\n this.drawExpandedFilterHeaders(context, state);\n } else if (\n (quickFilters != null && quickFilters.size > 0) ||\n (advancedFilters != null && advancedFilters.size > 0)\n ) {\n this.drawCollapsedFilterHeaders(context, state);\n }\n }\n\n drawExpandedFilterHeaders(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n const { metrics, model, theme, quickFilters, advancedFilters } = state;\n const { filterBarHeight } = theme;\n\n if (filterBarHeight <= 0) {\n return;\n }\n\n const {\n gridX,\n gridY,\n maxX,\n modelColumns,\n visibleColumns,\n allColumnWidths,\n allColumnXs,\n } = metrics;\n\n const columnHeaderHeight = gridY - filterBarHeight;\n\n context.save();\n\n context.font = theme.font;\n context.textAlign = 'left';\n\n if (\n (quickFilters != null && quickFilters.size > 0) ||\n (advancedFilters != null && advancedFilters.size > 0)\n ) {\n // fill style if a fiter is set on any column\n context.fillStyle = theme.filterBarExpandedActiveBackgroundColor;\n } else {\n // fill style with no filters set\n context.fillStyle = theme.filterBarExpandedBackgroundColor;\n }\n\n // Draw the background\n context.fillRect(gridX, columnHeaderHeight, maxX, filterBarHeight - 1);\n\n // Draw the bottom border\n context.fillStyle = theme.headerBarCasingColor;\n\n context.fillRect(gridX, columnHeaderHeight + filterBarHeight - 1, maxX, 1);\n\n // Draw the filter input boxes\n const y1 = columnHeaderHeight;\n context.strokeStyle = theme.filterBarSeparatorColor;\n context.beginPath();\n\n for (let i = 0; i < visibleColumns.length; i += 1) {\n const column = visibleColumns[i];\n const modelColumn = getOrThrow(modelColumns, column);\n const columnX = getOrThrow(allColumnXs, column);\n const columnWidth = getOrThrow(allColumnWidths, column);\n if (model.isFilterable(modelColumn) && columnWidth > 0) {\n const x1 = gridX + (columnX ?? 0);\n context.rect(x1 + 0.5, y1 + 0.5, columnWidth, filterBarHeight - 2); // 1 for the border, 1 for the casing\n }\n }\n context.stroke();\n\n for (let i = 0; i < visibleColumns.length; i += 1) {\n const column = visibleColumns[i];\n const columnWidth = getOrThrow(allColumnWidths, column);\n const columnX = getOrThrow(allColumnXs, column);\n const x = columnX + gridX;\n this.drawExpandedFilterHeader(context, state, column, x, columnWidth);\n }\n\n context.restore();\n }\n\n drawExpandedFilterHeader(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState,\n column: VisibleIndex,\n columnX: Coordinate,\n columnWidth: number\n ): void {\n if (columnWidth <= 0) {\n return;\n }\n\n const { metrics, theme, quickFilters, advancedFilters } = state;\n const { modelColumns, gridY } = metrics;\n const {\n filterBarHeight,\n filterBarExpandedActiveCellBackgroundColor,\n filterBarErrorColor,\n filterBarHorizontalPadding,\n headerColor,\n } = theme;\n const columnHeaderHeight = gridY - filterBarHeight;\n const modelColumn = modelColumns.get(column);\n if (modelColumn === undefined) return;\n const quickFilter = quickFilters.get(modelColumn);\n const advancedFilter = advancedFilters.get(modelColumn);\n if (quickFilter == null && advancedFilter == null) {\n return;\n }\n\n let text = null;\n if (quickFilter != null) {\n const { text: filterText } = quickFilter;\n text = filterText;\n if (!text) {\n text = TableUtils.getFilterText(quickFilter.filter);\n }\n\n if (text != null) {\n const { fontWidths } = metrics;\n let fontWidth = fontWidths.get(context.font);\n if (fontWidth == null || fontWidth === 0) {\n fontWidth = context.measureText('8').width;\n if (!fontWidth) {\n fontWidth = 10;\n }\n }\n\n const maxLength =\n (columnWidth - filterBarHorizontalPadding * 2) / fontWidth;\n if (maxLength <= 0) {\n text = '';\n } else if (text.length > maxLength) {\n text = `${text.substring(0, maxLength - 1)}…`;\n }\n }\n }\n\n context.save();\n\n const isFilterValid = IrisGridRenderer.isFilterValid(\n advancedFilter,\n quickFilter\n );\n if (isFilterValid && filterBarExpandedActiveCellBackgroundColor != null) {\n // draw active filter background inside cell\n context.fillStyle = filterBarExpandedActiveCellBackgroundColor;\n context.fillRect(\n columnX + 1, // +1 left border\n columnHeaderHeight + 1, // +1 top border\n columnWidth - 1, // -1 right border\n filterBarHeight - 3 // -3 top, bottom border and bottom casing\n );\n } else if (filterBarErrorColor != null) {\n // draw error box inside cell\n context.fillStyle = filterBarErrorColor;\n context.lineWidth = 2;\n context.strokeStyle = filterBarErrorColor;\n // Because this is drawn with a strokeRect, we have to add/subtract half the,\n // linewidth from each side to make interior, in addition to accounting for any borders/casings\n const rectLeft = columnX + 2; // 1 for strokeRect, 1 for border\n const rectTop = columnHeaderHeight + 2; // 1 for strokeRect, 1 for border\n const rectWidth = columnWidth - 3; // for 2 border and 1 for strokeRect\n const rectHeight = filterBarHeight - 5; // -2 for strokeRect, -3 for top, bottom border and bottom casing\n context.strokeRect(rectLeft, rectTop, rectWidth, rectHeight);\n }\n\n if (text != null && text !== '') {\n const textX = columnX + filterBarHorizontalPadding;\n const textY = columnHeaderHeight + filterBarHeight * 0.5 + 1; // + 1 for border\n context.fillStyle = headerColor;\n context.fillText(text, textX, textY);\n }\n\n context.restore();\n }\n\n drawCollapsedFilterHeaders(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n const { metrics, theme } = state;\n const { headerSeparatorColor, filterBarCollapsedHeight } = theme;\n\n if (filterBarCollapsedHeight <= 0) {\n return;\n }\n\n const {\n gridX,\n gridY,\n maxX,\n visibleColumns,\n allColumnWidths,\n allColumnXs,\n } = metrics;\n const columnHeaderHeight = gridY - filterBarCollapsedHeight;\n\n context.save();\n\n // Draw the background of the collapsed filter bar\n context.fillStyle = headerSeparatorColor;\n context.fillRect(gridX, columnHeaderHeight, maxX, filterBarCollapsedHeight);\n\n for (let i = 0; i < visibleColumns.length; i += 1) {\n const column = visibleColumns[i];\n const columnWidth = allColumnWidths.get(column);\n const columnX = allColumnXs.get(column);\n if (columnX != null && columnWidth != null) {\n const x = columnX + gridX;\n // draw the collapsed cells\n this.drawCollapsedFilterHeader(context, state, column, x, columnWidth);\n }\n }\n\n context.restore();\n }\n\n drawCollapsedFilterHeader(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState,\n column: VisibleIndex,\n columnX: Coordinate,\n columnWidth: number\n ): void {\n if (columnWidth <= 0) {\n return;\n }\n\n const { metrics, theme, quickFilters, advancedFilters } = state;\n const { modelColumns, gridY } = metrics;\n const modelColumn = modelColumns.get(column);\n\n if (modelColumn === undefined) return;\n const quickFilter = quickFilters.get(modelColumn);\n const advancedFilter = advancedFilters.get(modelColumn);\n\n const {\n filterBarCollapsedHeight,\n filterBarActiveColor,\n filterBarActiveBackgroundColor,\n filterBarErrorColor,\n } = theme;\n\n context.save();\n\n const isFilterValid = IrisGridRenderer.isFilterValid(\n advancedFilter,\n quickFilter\n );\n\n if (\n filterBarActiveBackgroundColor != null &&\n quickFilter == null &&\n advancedFilter == null\n ) {\n context.fillStyle = filterBarActiveBackgroundColor;\n } else if (filterBarActiveColor != null && isFilterValid) {\n context.fillStyle = filterBarActiveColor;\n } else if (filterBarErrorColor != null) {\n context.fillStyle = filterBarErrorColor;\n }\n\n const x = columnX + 1; // for gap between columns\n const y = gridY - filterBarCollapsedHeight;\n const rectWidth = columnWidth - 1; // for gap between columns\n const rectHeight = filterBarCollapsedHeight - 1; // for casing bottom\n context.fillRect(x, y, rectWidth, rectHeight);\n\n context.restore();\n }\n\n drawTreeMarker(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState,\n columnX: Coordinate,\n rowY: Coordinate,\n treeBox: BoxCoordinates,\n color: string,\n isExpanded: boolean\n ): void {\n context.save();\n const { x1, y1 } = treeBox;\n const markerIcon = isExpanded\n ? this.getIcon(ICON_NAMES.CARET_DOWN)\n : this.getIcon(ICON_NAMES.CARET_RIGHT);\n const iconX = columnX + x1 - 2;\n const iconY = rowY + y1 + 2.5;\n\n context.fillStyle = color;\n context.textAlign = 'center';\n context.translate(iconX, iconY);\n context.fill(markerIcon);\n context.restore();\n }\n\n drawRowFooters(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n const { metrics, model, mouseX, mouseY, theme } = state;\n const {\n gridY,\n gridX,\n maxX,\n modelRows,\n floatingTopHeight,\n floatingBottomHeight,\n floatingRows,\n rowFooterWidth,\n height,\n horizontalBarHeight,\n verticalBarWidth,\n allRowHeights,\n allRowYs,\n width,\n } = metrics;\n // Only draw the footers on the floating rows\n if (rowFooterWidth <= 0 || floatingRows.length === 0) {\n return;\n }\n\n const {\n cellHorizontalPadding,\n floatingGridRowColor,\n floatingRowBackgroundColors,\n headerColor,\n rowHoverBackgroundColor,\n } = theme;\n\n context.translate(gridX, gridY);\n\n context.beginPath();\n const x = Math.min(maxX, width - rowFooterWidth - verticalBarWidth - gridX);\n context.fillStyle = floatingRowBackgroundColors;\n if (floatingTopHeight > 0) {\n context.rect(x, 0, rowFooterWidth, floatingTopHeight);\n }\n if (floatingBottomHeight > 0) {\n context.rect(\n x,\n height - gridY - horizontalBarHeight - floatingBottomHeight,\n rowFooterWidth,\n floatingBottomHeight\n );\n }\n context.fill();\n\n const mouseRow =\n mouseX != null &&\n mouseY != null &&\n mouseX >= gridX &&\n mouseX <= maxX + rowFooterWidth\n ? GridUtils.getRowAtY(mouseY, metrics)\n : null;\n if (\n rowHoverBackgroundColor != null &&\n mouseRow !== null &&\n floatingRows.includes(mouseRow)\n ) {\n context.fillStyle = rowHoverBackgroundColor;\n const y = allRowYs.get(mouseRow);\n const rowHeight = allRowHeights.get(mouseRow);\n assertNotNull(y);\n assertNotNull(rowHeight);\n context.fillRect(x, y, rowFooterWidth, rowHeight);\n }\n\n context.beginPath();\n if (floatingGridRowColor != null) {\n context.strokeStyle = floatingGridRowColor;\n }\n if (floatingTopHeight > 0) {\n context.moveTo(x + 0.5, 0.5);\n context.lineTo(x + 0.5, floatingTopHeight - 0.5);\n }\n if (floatingBottomHeight > 0) {\n const y = height - gridY - horizontalBarHeight - floatingBottomHeight;\n context.moveTo(x - 0.5, y + 0.5);\n context.lineTo(x - 0.5, y + floatingBottomHeight - 0.5);\n }\n context.stroke();\n\n context.fillStyle = headerColor;\n context.textAlign = 'left';\n\n const textX = x + cellHorizontalPadding;\n for (let i = 0; i < floatingRows.length; i += 1) {\n const row = floatingRows[i];\n const rowHeight = allRowHeights.get(row);\n const rowY = allRowYs.get(row);\n const modelRow = modelRows.get(row);\n if (rowY != null && rowHeight != null && modelRow != null) {\n const textY = rowY + rowHeight * 0.5;\n context.fillText(model.textForRowFooter(modelRow), textX, textY);\n }\n }\n\n context.translate(-gridX, -gridY);\n }\n\n // This will shrink the size the text may take when the overflow button is rendered\n // The text will truncate to a smaller width and won't overlap the button\n getTextRenderMetrics(\n state: IrisGridRenderState,\n column: VisibleIndex,\n row: VisibleIndex\n ): {\n width: number;\n x: Coordinate;\n y: Coordinate;\n } {\n const textMetrics = super.getTextRenderMetrics(state, column, row);\n\n const { mouseX, mouseY, metrics } = state;\n\n if (mouseX == null || mouseY == null) {\n return textMetrics;\n }\n\n const { column: mouseColumn, row: mouseRow } = GridUtils.getGridPointFromXY(\n mouseX,\n mouseY,\n metrics\n );\n\n if (column === mouseColumn && row === mouseRow) {\n const { left } = this.getCellOverflowButtonPosition(state);\n if (this.shouldRenderOverflowButton(state) && left != null) {\n textMetrics.width = left - metrics.gridX - textMetrics.x;\n }\n }\n return textMetrics;\n }\n\n shouldRenderOverflowButton(state: IrisGridRenderState): boolean {\n const { context, mouseX, mouseY, metrics, model, theme } = state;\n if (mouseX == null || mouseY == null) {\n return false;\n }\n\n const { row, column, modelRow, modelColumn } = GridUtils.getCellInfoFromXY(\n mouseX,\n mouseY,\n metrics\n );\n\n if (\n row == null ||\n column == null ||\n modelRow == null ||\n modelColumn == null ||\n !TableUtils.isStringType(model.columns[modelColumn].type)\n ) {\n return false;\n }\n\n const text = model.textForCell(modelColumn, modelRow) ?? '';\n const { width: textWidth } = super.getTextRenderMetrics(state, column, row);\n const fontWidth =\n metrics.fontWidths.get(theme.font) ?? IrisGridRenderer.DEFAULT_FONT_WIDTH;\n\n context.save();\n context.font = theme.font;\n\n const truncatedText = this.getCachedTruncatedString(\n context,\n text,\n textWidth,\n fontWidth,\n model.truncationCharForCell(modelColumn, modelRow)\n );\n context.restore();\n\n return text !== '' && truncatedText !== text;\n }\n\n getCellOverflowButtonPosition({\n mouseX,\n mouseY,\n metrics,\n theme,\n }: {\n mouseX: Coordinate | null;\n mouseY: Coordinate | null;\n metrics: GridMetrics | undefined;\n theme: GridThemeType;\n }): {\n left: Coordinate | null;\n top: Coordinate | null;\n width: number | null;\n height: number | null;\n } {\n const NULL_POSITION = { left: null, top: null, width: null, height: null };\n if (mouseX == null || mouseY == null || metrics == null) {\n return NULL_POSITION;\n }\n const { rowHeight, columnWidth, left, top } = GridUtils.getCellInfoFromXY(\n mouseX,\n mouseY,\n metrics\n );\n\n if (left == null || columnWidth == null || top == null) {\n return NULL_POSITION;\n }\n\n const { width: gridWidth, verticalBarWidth } = metrics;\n const { cellHorizontalPadding } = theme;\n\n const width = ICON_SIZE + 2 * cellHorizontalPadding;\n const height = rowHeight;\n // Right edge of column or of visible grid, whichever is smaller\n const right = Math.min(\n metrics.gridX + left + columnWidth,\n gridWidth - verticalBarWidth\n );\n const buttonLeft = right - width;\n const buttonTop = metrics.gridY + top;\n\n return { left: buttonLeft, top: buttonTop, width, height };\n }\n\n drawCellOverflowButton(state: IrisGridRenderState): void {\n const { context, mouseX, mouseY, theme } = state;\n if (mouseX == null || mouseY == null) return;\n\n if (!this.shouldRenderOverflowButton(state)) {\n return;\n }\n\n const {\n left: buttonLeft,\n top: buttonTop,\n width: buttonWidth,\n height: buttonHeight,\n } = this.getCellOverflowButtonPosition(state);\n\n const {\n cellHorizontalPadding,\n overflowButtonColor,\n overflowButtonHoverColor,\n } = theme;\n\n context.save();\n if (\n overflowButtonHoverColor != null &&\n buttonLeft != null &&\n buttonWidth != null &&\n buttonTop != null &&\n buttonHeight != null &&\n mouseX >= buttonLeft &&\n mouseX <= buttonLeft + buttonWidth &&\n mouseY >= buttonTop &&\n mouseY <= buttonTop + buttonHeight\n ) {\n context.fillStyle = overflowButtonHoverColor;\n } else if (overflowButtonColor != null) {\n context.fillStyle = overflowButtonColor;\n }\n const icon = this.getIcon(ICON_NAMES.CELL_OVERFLOW);\n if (buttonLeft != null && buttonTop != null) {\n context.translate(buttonLeft + cellHorizontalPadding, buttonTop + 2);\n }\n context.fill(icon);\n\n context.restore();\n }\n\n getExpandButtonPosition(\n {\n mouseX,\n mouseY,\n metrics,\n theme,\n }: {\n mouseX: Coordinate | null;\n mouseY: Coordinate | null;\n metrics: GridMetrics | undefined;\n theme: GridThemeType;\n },\n depth: number | null\n ): {\n left: Coordinate | null;\n top: Coordinate | null;\n width: number | null;\n height: number | null;\n } {\n const NULL_POSITION = { left: null, top: null, width: null, height: null };\n if (mouseX == null || mouseY == null || depth == null || !metrics) {\n return NULL_POSITION;\n }\n const { rowHeight, left, top } = GridUtils.getCellInfoFromXY(\n mouseX,\n mouseY,\n metrics\n );\n\n assertNotNull(left);\n assertNotNull(rowHeight);\n assertNotNull(top);\n const { cellHorizontalPadding } = theme;\n\n const width = EXPAND_ICON_SIZE + 2 * cellHorizontalPadding;\n\n const buttonLeft = Math.max(left + EXPAND_ICON_SIZE * depth, metrics.gridX);\n const buttonTop = metrics.gridY + top;\n\n return {\n left: buttonLeft,\n top: buttonTop,\n width,\n height: rowHeight,\n };\n }\n}\n\nexport default IrisGridRenderer;\n"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { GridRange, ModelIndex } from '@deephaven/grid';
|
|
2
2
|
import { Column, TreeRow, TreeTable } from '@deephaven/jsapi-shim';
|
|
3
|
-
import { UIRow } from './CommonTypes';
|
|
3
|
+
import { UIRow, ColumnName } from './CommonTypes';
|
|
4
4
|
import IrisGridTableModelTemplate from './IrisGridTableModelTemplate';
|
|
5
5
|
export interface UITreeRow extends UIRow {
|
|
6
6
|
isExpanded: boolean;
|
|
@@ -27,6 +27,7 @@ declare class IrisGridTreeTableModel extends IrisGridTableModelTemplate<TreeTabl
|
|
|
27
27
|
collapseAll(): void;
|
|
28
28
|
depthForRow(y: ModelIndex): ModelIndex;
|
|
29
29
|
getCachedFilterableColumnSet: (columns: Column[], groupedColumns: Column[]) => Set<number>;
|
|
30
|
+
updateFrozenColumns(columns: ColumnName[]): void;
|
|
30
31
|
}
|
|
31
32
|
export default IrisGridTreeTableModel;
|
|
32
33
|
//# sourceMappingURL=IrisGridTreeTableModel.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IrisGridTreeTableModel.d.ts","sourceRoot":"","sources":["../src/IrisGridTreeTableModel.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAEnE,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"IrisGridTreeTableModel.d.ts","sourceRoot":"","sources":["../src/IrisGridTreeTableModel.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAEnE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,0BAA0B,MAAM,8BAA8B,CAAC;AAEtE,MAAM,WAAW,SAAU,SAAQ,KAAK;IACtC,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;CACf;AACD,cAAM,sBAAuB,SAAQ,0BAA0B,CAC7D,SAAS,EACT,SAAS,CACV;IAGC,qBAAqB,CACnB,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,MAAM,EAAE,GAChB,IAAI;IAIP,WAAW,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,GAAG,MAAM;IAajD,kBAAkB,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,SAAS;IAUxD,QAAQ,CACZ,MAAM,EAAE,SAAS,EAAE,EACnB,cAAc,CAAC,EAAE,OAAO,EACxB,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,GACxD,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;IAgDvB,IAAI,cAAc,IAAI,MAAM,EAAE,CAE7B;IAED,IAAI,iBAAiB,IAAI,OAAO,CAE/B;IAED,IAAI,oBAAoB,IAAI,OAAO,CAElC;IAED,IAAI,uBAAuB,IAAI,OAAO,CAErC;IAED,IAAI,yBAAyB,IAAI,OAAO,CAEvC;IAED,IAAI,YAAY,IAAI,OAAO,CAE1B;IAED,YAAY,CAAC,WAAW,EAAE,UAAU,GAAG,OAAO;IAO9C,eAAe,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO;IAI5C,eAAe,CAAC,CAAC,EAAE,UAAU,GAAG,OAAO;IAKvC,aAAa,CAAC,CAAC,EAAE,UAAU,GAAG,OAAO;IAKrC,cAAc,CACZ,CAAC,EAAE,UAAU,EACb,UAAU,EAAE,OAAO,EACnB,iBAAiB,UAAQ,GACxB,IAAI;IAQP,SAAS,IAAI,IAAI;IAMjB,WAAW,IAAI,IAAI;IAMnB,WAAW,CAAC,CAAC,EAAE,UAAU,GAAG,UAAU;IAKtC,4BAA4B,YAChB,MAAM,EAAE,kBAAkB,MAAM,EAAE,iBAM5C;IAEF,mBAAmB,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,IAAI;CAKjD;AAED,eAAe,sBAAsB,CAAC"}
|
|
@@ -135,6 +135,11 @@ class IrisGridTreeTableModel extends IrisGridTableModelTemplate {
|
|
|
135
135
|
var row = this.row(y);
|
|
136
136
|
return ((_row$depth = row === null || row === void 0 ? void 0 : row.depth) !== null && _row$depth !== void 0 ? _row$depth : 1) - 1;
|
|
137
137
|
}
|
|
138
|
+
updateFrozenColumns(columns) {
|
|
139
|
+
if (columns.length > 0) {
|
|
140
|
+
throw new Error('Cannot freeze columns on a tree table');
|
|
141
|
+
}
|
|
142
|
+
}
|
|
138
143
|
}
|
|
139
144
|
export default IrisGridTreeTableModel;
|
|
140
145
|
//# sourceMappingURL=IrisGridTreeTableModel.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IrisGridTreeTableModel.js","names":["memoize","GridRange","assertNotNull","IrisGridTableModelTemplate","IrisGridTreeTableModel","columns","groupedColumns","Set","length","map","c1","findIndex","c2","name","applyBufferedViewport","viewportTop","viewportBottom","table","setViewport","textForCell","x","y","column","row","hasChildren","constituentType","value","valueForCell","displayString","extractViewportRow","isExpanded","depth","snapshot","ranges","includeHeaders","formatValue","viewport","viewportData","result","push","c","viewportRange","offset","rows","i","intersection","startRow","endRow","r","resultRow","viewportRow","startColumn","endColumn","data","get","hasExpandableRows","isExpandAllAvailable","expandAll","undefined","isChartBuilderAvailable","isSelectDistinctAvailable","isReversible","isFilterable","columnIndex","getCachedFilterableColumnSet","has","isColumnMovable","isRowExpandable","isRowExpanded","setRowExpanded","expandDescendants","setExpanded","collapseAll","depthForRow"],"sources":["../src/IrisGridTreeTableModel.ts"],"sourcesContent":["/* eslint class-methods-use-this: \"off\" */\nimport memoize from 'memoize-one';\nimport { GridRange, ModelIndex } from '@deephaven/grid';\nimport { Column, TreeRow, TreeTable } from '@deephaven/jsapi-shim';\nimport { assertNotNull } from '@deephaven/utils';\nimport { UIRow } from './CommonTypes';\nimport IrisGridTableModelTemplate from './IrisGridTableModelTemplate';\n\nexport interface UITreeRow extends UIRow {\n isExpanded: boolean;\n hasChildren: boolean;\n depth: number;\n}\nclass IrisGridTreeTableModel extends IrisGridTableModelTemplate<\n TreeTable,\n UITreeRow\n> {\n // table: TreeTable\n\n applyBufferedViewport(\n viewportTop: number,\n viewportBottom: number,\n columns: Column[]\n ): void {\n this.table.setViewport(viewportTop, viewportBottom, columns);\n }\n\n textForCell(x: ModelIndex, y: ModelIndex): string {\n const column = this.columns[x];\n const row = this.row(y);\n if (row != null && column != null) {\n if (!row.hasChildren && column.constituentType != null) {\n const value = this.valueForCell(x, y);\n return this.displayString(value, column.constituentType, column.name);\n }\n }\n\n return super.textForCell(x, y);\n }\n\n extractViewportRow(row: TreeRow, columns: Column[]): UITreeRow {\n const { isExpanded, hasChildren, depth } = row;\n return {\n ...super.extractViewportRow(row, columns),\n isExpanded,\n hasChildren,\n depth,\n };\n }\n\n async snapshot(\n ranges: GridRange[],\n includeHeaders?: boolean,\n formatValue?: (value: unknown, column: Column) => unknown\n ): Promise<unknown[][]> {\n assertNotNull(this.viewport);\n assertNotNull(this.viewportData);\n const { columns } = this.viewport;\n const result = [];\n\n if (includeHeaders != null && includeHeaders) {\n result.push(columns.map(c => c.name));\n }\n\n const viewportRange = new GridRange(\n 0,\n this.viewportData?.offset,\n columns.length,\n this.viewportData.offset + this.viewportData.rows.length\n );\n\n for (let i = 0; i < ranges.length; i += 1) {\n const intersection = GridRange.intersection(viewportRange, ranges[i]);\n\n assertNotNull(intersection);\n assertNotNull(intersection.startRow);\n assertNotNull(intersection.endRow);\n\n for (let r = intersection.startRow; r <= intersection.endRow; r += 1) {\n const resultRow = [];\n const viewportRow = this.viewportData.rows[\n r - this.viewportData.offset\n ];\n assertNotNull(intersection.startColumn);\n assertNotNull(intersection.endColumn);\n for (\n let c = intersection.startColumn;\n c <= intersection.endColumn;\n c += 1\n ) {\n assertNotNull(formatValue);\n resultRow.push(\n formatValue(viewportRow.data.get(c)?.value, this.columns[c])\n );\n }\n result.push(resultRow);\n }\n }\n\n return result;\n }\n\n get groupedColumns(): Column[] {\n return this.table.groupedColumns;\n }\n\n get hasExpandableRows(): boolean {\n return true;\n }\n\n get isExpandAllAvailable(): boolean {\n return this.table.expandAll !== undefined;\n }\n\n get isChartBuilderAvailable(): boolean {\n return false;\n }\n\n get isSelectDistinctAvailable(): boolean {\n return false;\n }\n\n get isReversible(): boolean {\n return false;\n }\n\n isFilterable(columnIndex: ModelIndex): boolean {\n return this.getCachedFilterableColumnSet(\n this.columns,\n this.groupedColumns\n ).has(columnIndex);\n }\n\n isColumnMovable(column: ModelIndex): boolean {\n return column >= this.groupedColumns.length;\n }\n\n isRowExpandable(y: ModelIndex): boolean {\n const row = this.row(y);\n return row?.hasChildren ?? false;\n }\n\n isRowExpanded(y: ModelIndex): boolean {\n const row = this.row(y);\n return row?.isExpanded ?? false;\n }\n\n setRowExpanded(\n y: ModelIndex,\n isExpanded: boolean,\n expandDescendants = false\n ): void {\n if (this.isExpandAllAvailable) {\n this.table.setExpanded(y, isExpanded, expandDescendants);\n } else {\n this.table.setExpanded(y, isExpanded);\n }\n }\n\n expandAll(): void {\n if (this.table.expandAll) {\n this.table.expandAll();\n }\n }\n\n collapseAll(): void {\n if (this.table.collapseAll) {\n this.table.collapseAll();\n }\n }\n\n depthForRow(y: ModelIndex): ModelIndex {\n const row = this.row(y);\n return (row?.depth ?? 1) - 1;\n }\n\n getCachedFilterableColumnSet = memoize(\n (columns: Column[], groupedColumns: Column[]) =>\n new Set(\n (groupedColumns?.length > 0 ? groupedColumns : columns).map(c1 =>\n columns.findIndex(c2 => c1.name === c2.name)\n )\n )\n );\n}\n\nexport default IrisGridTreeTableModel;\n"],"mappings":";;;;;;;AAAA;AACA,OAAOA,OAAO,MAAM,aAAa;AACjC,SAASC,SAAS,QAAoB,iBAAiB;AAEvD,SAASC,aAAa,QAAQ,kBAAkB;AAAC,OAE1CC,0BAA0B;AAOjC,MAAMC,sBAAsB,SAASD,0BAA0B,CAG7D;EAAA;IAAA;IAAA,sDAgK+BH,OAAO,CACpC,CAACK,OAAiB,EAAEC,cAAwB,KAC1C,IAAIC,GAAG,CACL,CAAC,CAAAD,cAAc,aAAdA,cAAc,uBAAdA,cAAc,CAAEE,MAAM,IAAG,CAAC,GAAGF,cAAc,GAAGD,OAAO,EAAEI,GAAG,CAACC,EAAE,IAC5DL,OAAO,CAACM,SAAS,CAACC,EAAE,IAAIF,EAAE,CAACG,IAAI,KAAKD,EAAE,CAACC,IAAI,CAAC,CAC7C,CACF,CACJ;EAAA;EAtKD;;EAEAC,qBAAqB,CACnBC,WAAmB,EACnBC,cAAsB,EACtBX,OAAiB,EACX;IACN,IAAI,CAACY,KAAK,CAACC,WAAW,CAACH,WAAW,EAAEC,cAAc,EAAEX,OAAO,CAAC;EAC9D;EAEAc,WAAW,CAACC,CAAa,EAAEC,CAAa,EAAU;IAChD,IAAMC,MAAM,GAAG,IAAI,CAACjB,OAAO,CAACe,CAAC,CAAC;IAC9B,IAAMG,GAAG,GAAG,IAAI,CAACA,GAAG,CAACF,CAAC,CAAC;IACvB,IAAIE,GAAG,IAAI,IAAI,IAAID,MAAM,IAAI,IAAI,EAAE;MACjC,IAAI,CAACC,GAAG,CAACC,WAAW,IAAIF,MAAM,CAACG,eAAe,IAAI,IAAI,EAAE;QACtD,IAAMC,MAAK,GAAG,IAAI,CAACC,YAAY,CAACP,CAAC,EAAEC,CAAC,CAAC;QACrC,OAAO,IAAI,CAACO,aAAa,CAACF,MAAK,EAAEJ,MAAM,CAACG,eAAe,EAAEH,MAAM,CAACT,IAAI,CAAC;MACvE;IACF;IAEA,OAAO,KAAK,CAACM,WAAW,CAACC,CAAC,EAAEC,CAAC,CAAC;EAChC;EAEAQ,kBAAkB,CAACN,GAAY,EAAElB,OAAiB,EAAa;IAC7D,IAAM;MAAEyB,UAAU;MAAEN,WAAW;MAAEO;IAAM,CAAC,GAAGR,GAAG;IAC9C,uCACK,KAAK,CAACM,kBAAkB,CAACN,GAAG,EAAElB,OAAO,CAAC;MACzCyB,UAAU;MACVN,WAAW;MACXO;IAAK;EAET;EAEMC,QAAQ,CACZC,MAAmB,EACnBC,cAAwB,EACxBC,WAAyD,EACnC;IAAA;IAAA;MAAA;MACtBjC,aAAa,CAAC,KAAI,CAACkC,QAAQ,CAAC;MAC5BlC,aAAa,CAAC,KAAI,CAACmC,YAAY,CAAC;MAChC,IAAM;QAAEhC;MAAQ,CAAC,GAAG,KAAI,CAAC+B,QAAQ;MACjC,IAAME,MAAM,GAAG,EAAE;MAEjB,IAAIJ,cAAc,IAAI,IAAI,IAAIA,cAAc,EAAE;QAC5CI,MAAM,CAACC,IAAI,CAAClC,OAAO,CAACI,GAAG,CAAC+B,CAAC,IAAIA,CAAC,CAAC3B,IAAI,CAAC,CAAC;MACvC;MAEA,IAAM4B,aAAa,GAAG,IAAIxC,SAAS,CACjC,CAAC,wBACD,KAAI,CAACoC,YAAY,uDAAjB,mBAAmBK,MAAM,EACzBrC,OAAO,CAACG,MAAM,EACd,KAAI,CAAC6B,YAAY,CAACK,MAAM,GAAG,KAAI,CAACL,YAAY,CAACM,IAAI,CAACnC,MAAM,CACzD;MAED,KAAK,IAAIoC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGX,MAAM,CAACzB,MAAM,EAAEoC,CAAC,IAAI,CAAC,EAAE;QACzC,IAAMC,YAAY,GAAG5C,SAAS,CAAC4C,YAAY,CAACJ,aAAa,EAAER,MAAM,CAACW,CAAC,CAAC,CAAC;QAErE1C,aAAa,CAAC2C,YAAY,CAAC;QAC3B3C,aAAa,CAAC2C,YAAY,CAACC,QAAQ,CAAC;QACpC5C,aAAa,CAAC2C,YAAY,CAACE,MAAM,CAAC;QAElC,KAAK,IAAIC,CAAC,GAAGH,YAAY,CAACC,QAAQ,EAAEE,CAAC,IAAIH,YAAY,CAACE,MAAM,EAAEC,CAAC,IAAI,CAAC,EAAE;UACpE,IAAMC,SAAS,GAAG,EAAE;UACpB,IAAMC,WAAW,GAAG,KAAI,CAACb,YAAY,CAACM,IAAI,CACxCK,CAAC,GAAG,KAAI,CAACX,YAAY,CAACK,MAAM,CAC7B;UACDxC,aAAa,CAAC2C,YAAY,CAACM,WAAW,CAAC;UACvCjD,aAAa,CAAC2C,YAAY,CAACO,SAAS,CAAC;UACrC,KACE,IAAIZ,CAAC,GAAGK,YAAY,CAACM,WAAW,EAChCX,CAAC,IAAIK,YAAY,CAACO,SAAS,EAC3BZ,CAAC,IAAI,CAAC,EACN;YAAA;YACAtC,aAAa,CAACiC,WAAW,CAAC;YAC1Bc,SAAS,CAACV,IAAI,CACZJ,WAAW,0BAACe,WAAW,CAACG,IAAI,CAACC,GAAG,CAACd,CAAC,CAAC,0DAAvB,sBAAyBd,KAAK,EAAE,KAAI,CAACrB,OAAO,CAACmC,CAAC,CAAC,CAAC,CAC7D;UACH;UACAF,MAAM,CAACC,IAAI,CAACU,SAAS,CAAC;QACxB;MACF;MAEA,OAAOX,MAAM;IAAC;EAChB;EAEA,IAAIhC,cAAc,GAAa;IAC7B,OAAO,IAAI,CAACW,KAAK,CAACX,cAAc;EAClC;EAEA,IAAIiD,iBAAiB,GAAY;IAC/B,OAAO,IAAI;EACb;EAEA,IAAIC,oBAAoB,GAAY;IAClC,OAAO,IAAI,CAACvC,KAAK,CAACwC,SAAS,KAAKC,SAAS;EAC3C;EAEA,IAAIC,uBAAuB,GAAY;IACrC,OAAO,KAAK;EACd;EAEA,IAAIC,yBAAyB,GAAY;IACvC,OAAO,KAAK;EACd;EAEA,IAAIC,YAAY,GAAY;IAC1B,OAAO,KAAK;EACd;EAEAC,YAAY,CAACC,WAAuB,EAAW;IAC7C,OAAO,IAAI,CAACC,4BAA4B,CACtC,IAAI,CAAC3D,OAAO,EACZ,IAAI,CAACC,cAAc,CACpB,CAAC2D,GAAG,CAACF,WAAW,CAAC;EACpB;EAEAG,eAAe,CAAC5C,MAAkB,EAAW;IAC3C,OAAOA,MAAM,IAAI,IAAI,CAAChB,cAAc,CAACE,MAAM;EAC7C;EAEA2D,eAAe,CAAC9C,CAAa,EAAW;IAAA;IACtC,IAAME,GAAG,GAAG,IAAI,CAACA,GAAG,CAACF,CAAC,CAAC;IACvB,2BAAOE,GAAG,aAAHA,GAAG,uBAAHA,GAAG,CAAEC,WAAW,+DAAI,KAAK;EAClC;EAEA4C,aAAa,CAAC/C,CAAa,EAAW;IAAA;IACpC,IAAME,GAAG,GAAG,IAAI,CAACA,GAAG,CAACF,CAAC,CAAC;IACvB,0BAAOE,GAAG,aAAHA,GAAG,uBAAHA,GAAG,CAAEO,UAAU,6DAAI,KAAK;EACjC;EAEAuC,cAAc,CACZhD,CAAa,EACbS,UAAmB,EAEb;IAAA,IADNwC,iBAAiB,uEAAG,KAAK;IAEzB,IAAI,IAAI,CAACd,oBAAoB,EAAE;MAC7B,IAAI,CAACvC,KAAK,CAACsD,WAAW,CAAClD,CAAC,EAAES,UAAU,EAAEwC,iBAAiB,CAAC;IAC1D,CAAC,MAAM;MACL,IAAI,CAACrD,KAAK,CAACsD,WAAW,CAAClD,CAAC,EAAES,UAAU,CAAC;IACvC;EACF;EAEA2B,SAAS,GAAS;IAChB,IAAI,IAAI,CAACxC,KAAK,CAACwC,SAAS,EAAE;MACxB,IAAI,CAACxC,KAAK,CAACwC,SAAS,EAAE;IACxB;EACF;EAEAe,WAAW,GAAS;IAClB,IAAI,IAAI,CAACvD,KAAK,CAACuD,WAAW,EAAE;MAC1B,IAAI,CAACvD,KAAK,CAACuD,WAAW,EAAE;IAC1B;EACF;EAEAC,WAAW,CAACpD,CAAa,EAAc;IAAA;IACrC,IAAME,GAAG,GAAG,IAAI,CAACA,GAAG,CAACF,CAAC,CAAC;IACvB,OAAO,eAACE,GAAG,aAAHA,GAAG,uBAAHA,GAAG,CAAEQ,KAAK,mDAAI,CAAC,IAAI,CAAC;EAC9B;AAUF;AAEA,eAAe3B,sBAAsB"}
|
|
1
|
+
{"version":3,"file":"IrisGridTreeTableModel.js","names":["memoize","GridRange","assertNotNull","IrisGridTableModelTemplate","IrisGridTreeTableModel","columns","groupedColumns","Set","length","map","c1","findIndex","c2","name","applyBufferedViewport","viewportTop","viewportBottom","table","setViewport","textForCell","x","y","column","row","hasChildren","constituentType","value","valueForCell","displayString","extractViewportRow","isExpanded","depth","snapshot","ranges","includeHeaders","formatValue","viewport","viewportData","result","push","c","viewportRange","offset","rows","i","intersection","startRow","endRow","r","resultRow","viewportRow","startColumn","endColumn","data","get","hasExpandableRows","isExpandAllAvailable","expandAll","undefined","isChartBuilderAvailable","isSelectDistinctAvailable","isReversible","isFilterable","columnIndex","getCachedFilterableColumnSet","has","isColumnMovable","isRowExpandable","isRowExpanded","setRowExpanded","expandDescendants","setExpanded","collapseAll","depthForRow","updateFrozenColumns","Error"],"sources":["../src/IrisGridTreeTableModel.ts"],"sourcesContent":["/* eslint class-methods-use-this: \"off\" */\nimport memoize from 'memoize-one';\nimport { GridRange, ModelIndex } from '@deephaven/grid';\nimport { Column, TreeRow, TreeTable } from '@deephaven/jsapi-shim';\nimport { assertNotNull } from '@deephaven/utils';\nimport { UIRow, ColumnName } from './CommonTypes';\nimport IrisGridTableModelTemplate from './IrisGridTableModelTemplate';\n\nexport interface UITreeRow extends UIRow {\n isExpanded: boolean;\n hasChildren: boolean;\n depth: number;\n}\nclass IrisGridTreeTableModel extends IrisGridTableModelTemplate<\n TreeTable,\n UITreeRow\n> {\n // table: TreeTable\n\n applyBufferedViewport(\n viewportTop: number,\n viewportBottom: number,\n columns: Column[]\n ): void {\n this.table.setViewport(viewportTop, viewportBottom, columns);\n }\n\n textForCell(x: ModelIndex, y: ModelIndex): string {\n const column = this.columns[x];\n const row = this.row(y);\n if (row != null && column != null) {\n if (!row.hasChildren && column.constituentType != null) {\n const value = this.valueForCell(x, y);\n return this.displayString(value, column.constituentType, column.name);\n }\n }\n\n return super.textForCell(x, y);\n }\n\n extractViewportRow(row: TreeRow, columns: Column[]): UITreeRow {\n const { isExpanded, hasChildren, depth } = row;\n return {\n ...super.extractViewportRow(row, columns),\n isExpanded,\n hasChildren,\n depth,\n };\n }\n\n async snapshot(\n ranges: GridRange[],\n includeHeaders?: boolean,\n formatValue?: (value: unknown, column: Column) => unknown\n ): Promise<unknown[][]> {\n assertNotNull(this.viewport);\n assertNotNull(this.viewportData);\n const { columns } = this.viewport;\n const result = [];\n\n if (includeHeaders != null && includeHeaders) {\n result.push(columns.map(c => c.name));\n }\n\n const viewportRange = new GridRange(\n 0,\n this.viewportData?.offset,\n columns.length,\n this.viewportData.offset + this.viewportData.rows.length\n );\n\n for (let i = 0; i < ranges.length; i += 1) {\n const intersection = GridRange.intersection(viewportRange, ranges[i]);\n\n assertNotNull(intersection);\n assertNotNull(intersection.startRow);\n assertNotNull(intersection.endRow);\n\n for (let r = intersection.startRow; r <= intersection.endRow; r += 1) {\n const resultRow = [];\n const viewportRow = this.viewportData.rows[\n r - this.viewportData.offset\n ];\n assertNotNull(intersection.startColumn);\n assertNotNull(intersection.endColumn);\n for (\n let c = intersection.startColumn;\n c <= intersection.endColumn;\n c += 1\n ) {\n assertNotNull(formatValue);\n resultRow.push(\n formatValue(viewportRow.data.get(c)?.value, this.columns[c])\n );\n }\n result.push(resultRow);\n }\n }\n\n return result;\n }\n\n get groupedColumns(): Column[] {\n return this.table.groupedColumns;\n }\n\n get hasExpandableRows(): boolean {\n return true;\n }\n\n get isExpandAllAvailable(): boolean {\n return this.table.expandAll !== undefined;\n }\n\n get isChartBuilderAvailable(): boolean {\n return false;\n }\n\n get isSelectDistinctAvailable(): boolean {\n return false;\n }\n\n get isReversible(): boolean {\n return false;\n }\n\n isFilterable(columnIndex: ModelIndex): boolean {\n return this.getCachedFilterableColumnSet(\n this.columns,\n this.groupedColumns\n ).has(columnIndex);\n }\n\n isColumnMovable(column: ModelIndex): boolean {\n return column >= this.groupedColumns.length;\n }\n\n isRowExpandable(y: ModelIndex): boolean {\n const row = this.row(y);\n return row?.hasChildren ?? false;\n }\n\n isRowExpanded(y: ModelIndex): boolean {\n const row = this.row(y);\n return row?.isExpanded ?? false;\n }\n\n setRowExpanded(\n y: ModelIndex,\n isExpanded: boolean,\n expandDescendants = false\n ): void {\n if (this.isExpandAllAvailable) {\n this.table.setExpanded(y, isExpanded, expandDescendants);\n } else {\n this.table.setExpanded(y, isExpanded);\n }\n }\n\n expandAll(): void {\n if (this.table.expandAll) {\n this.table.expandAll();\n }\n }\n\n collapseAll(): void {\n if (this.table.collapseAll) {\n this.table.collapseAll();\n }\n }\n\n depthForRow(y: ModelIndex): ModelIndex {\n const row = this.row(y);\n return (row?.depth ?? 1) - 1;\n }\n\n getCachedFilterableColumnSet = memoize(\n (columns: Column[], groupedColumns: Column[]) =>\n new Set(\n (groupedColumns?.length > 0 ? groupedColumns : columns).map(c1 =>\n columns.findIndex(c2 => c1.name === c2.name)\n )\n )\n );\n\n updateFrozenColumns(columns: ColumnName[]): void {\n if (columns.length > 0) {\n throw new Error('Cannot freeze columns on a tree table');\n }\n }\n}\n\nexport default IrisGridTreeTableModel;\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IrisGridContextMenuHandler.d.ts","sourceRoot":"","sources":["../../src/mousehandlers/IrisGridContextMenuHandler.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAU1B,OAAO,EACL,aAAa,
|
|
1
|
+
{"version":3,"file":"IrisGridContextMenuHandler.d.ts","sourceRoot":"","sources":["../../src/mousehandlers/IrisGridContextMenuHandler.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAU1B,OAAO,EACL,aAAa,EAId,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,kBAAkB,EAClB,IAAI,EACJ,gBAAgB,EAChB,SAAS,EAIT,UAAU,EACX,MAAM,iBAAiB,CAAC;AACzB,OAAW,EACT,MAAM,EACN,eAAe,EACf,WAAW,EACX,IAAI,EACL,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAIL,iBAAiB,EAEjB,aAAa,EACd,MAAM,wBAAwB,CAAC;AAEhC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAO5C,OAAO,mCAAmC,CAAC;AAE3C,OAAO,QAAQ,MAAM,aAAa,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAO7C;;GAEG;AACH,cAAM,0BAA2B,SAAQ,gBAAgB;IACvD,MAAM,CAAC,UAAU,SAAmC;IAEpD,MAAM,CAAC,kBAAkB,SAAmC;IAE5D,MAAM,CAAC,YAAY,SAAmC;IAEtD,MAAM,CAAC,qBAAqB,SAAmC;IAE/D,MAAM,CAAC,UAAU,SAAmC;IAEpD,MAAM,CAAC,UAAU,SAAmC;IAEpD,MAAM,CAAC,UAAU,SAAoC;IAErD,MAAM,CAAC,YAAY,SAAoC;IAEvD,MAAM,CAAC,qBAAqB;;;;MAIjB;IAEX;;;;;;OAMG;IACH,MAAM,CAAC,uBAAuB,CAC5B,YAAY,EAAE,eAAe,GAAG,IAAI,GAAG,SAAS,EAChD,eAAe,EAAE,eAAe,EAChC,QAAQ,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAC5B,eAAe;IAUlB;;;;;OAKG;IACH,MAAM,CAAC,kBAAkB,CACvB,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACrC,aAAa,EAAE,MAAM,EACrB,QAAQ,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAC5B,MAAM;IAMT;;OAEG;IACH,MAAM,CAAC,iBAAiB,CAAC,QAAQ,EAAE,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI;IAI7D;;;;OAIG;IACH,MAAM,CAAC,0BAA0B,CAC/B,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,GACZ,eAAe;IAuBlB,MAAM,CAAC,6BAA6B,CAClC,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,OAAO,GACb,WAAW;IAMd,MAAM,CAAC,qBAAqB,CAC1B,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,GAAG,SAAK,GACP,MAAM;IAOT,QAAQ,EAAE,QAAQ,CAAC;IAEnB,2BAA2B,EAAE,aAAa,CACxC,CAAC,UAAU,EAAE,MAAM,EAAE,cAAc,EAAE,iBAAiB,GAAG,IAAI,KAAK,IAAI,CACvE,CAAC;gBAEU,QAAQ,EAAE,QAAQ;IAW9B,oBAAoB,IAAI,IAAI;IAI5B,gBAAgB,CACd,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,SAAS,GACnB,aAAa,EAAE;IA4LlB,cAAc,CACZ,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,EACtC,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,SAAS,GACnB,aAAa,EAAE;IA8QlB,aAAa,CACX,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,GAC3C,kBAAkB;IAyIrB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,EAAE;IAgClD,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,EAAE,GAAG,IAAI;IAuD3D,mBAAmB,CACjB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,GAAG,IAAI,EACxB,KAAK,CAAC,EAAE,OAAO,EACf,WAAW,CAAC,EAAE,WAAW,EACzB,QAAQ,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAC5B,aAAa,EAAE;IAgKlB,mBAAmB,CACjB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,OAAO,EACd,WAAW,CAAC,EAAE,WAAW,GAAG,IAAI,EAChC,QAAQ,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAC5B,aAAa,EAAE;IA8KlB,oBAAoB,CAClB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,GAAG,IAAI,EACxB,WAAW,CAAC,EAAE,WAAW,GAAG,IAAI,EAChC,QAAQ,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAC5B,aAAa,EAAE;IA8GlB,iBAAiB,CACf,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,OAAO,EACrB,KAAK,EAAE,OAAO,EACd,WAAW,CAAC,EAAE,WAAW,GAAG,IAAI,EAChC,QAAQ,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAC5B,aAAa,EAAE;IA4JlB,iBAAiB,CACf,MAAM,EAAE,MAAM,EACd,WAAW,CAAC,EAAE,WAAW,EACzB,QAAQ,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAC5B,aAAa,EAAE;IAsElB,aAAa,CACX,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,UAAU,EACvB,UAAU,EAAE,IAAI,GAAG,IAAI,GACtB,aAAa,EAAE;IA+FlB,qBAAqB,CACnB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,UAAU,GACtB,aAAa,EAAE;IA4ElB,eAAe,CACb,UAAU,CAAC,EAAE,IAAI,GAAG,IAAI,EACxB,SAAS,GAAE,aAAoB,EAC/B,KAAK,UAAQ,GACZ,OAAO;CAMX;AAED,eAAe,0BAA0B,CAAC"}
|
|
@@ -133,7 +133,7 @@ class IrisGridContextMenuHandler extends GridMouseHandler {
|
|
|
133
133
|
userColumnWidths
|
|
134
134
|
} = metrics;
|
|
135
135
|
var isColumnHidden = [...userColumnWidths.values()].some(columnWidth => columnWidth === 0);
|
|
136
|
-
var isColumnFreezable = model.getColumnHeaderParentGroup(modelIndex, 0) === undefined;
|
|
136
|
+
var isColumnFreezable = model.getColumnHeaderParentGroup(modelIndex, 0) === undefined && !(isExpandableGridModel(model) && model.hasExpandableRows);
|
|
137
137
|
var isColumnFrozen = model.isColumnFrozen(modelIndex);
|
|
138
138
|
actions.push({
|
|
139
139
|
title: 'Hide Column',
|
|
@@ -505,7 +505,7 @@ class IrisGridContextMenuHandler extends GridMouseHandler {
|
|
|
505
505
|
onContextMenu
|
|
506
506
|
} = irisGrid.props;
|
|
507
507
|
if (column != null) {
|
|
508
|
-
actions.push(
|
|
508
|
+
actions.push(onContextMenu({
|
|
509
509
|
model,
|
|
510
510
|
value,
|
|
511
511
|
valueText,
|
|
@@ -576,7 +576,7 @@ class IrisGridContextMenuHandler extends GridMouseHandler {
|
|
|
576
576
|
return false;
|
|
577
577
|
}
|
|
578
578
|
assertNotNull(irisGrid.gridWrapper);
|
|
579
|
-
ContextActions.triggerMenu(irisGrid.gridWrapper, event.
|
|
579
|
+
ContextActions.triggerMenu(irisGrid.gridWrapper, event.clientX, event.clientY, actions);
|
|
580
580
|
return true;
|
|
581
581
|
}
|
|
582
582
|
dateFormatActions(column) {
|