@deephaven/iris-grid 1.22.1 → 1.22.2-alpha-pivot-builder.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (195) hide show
  1. package/README.md +284 -1
  2. package/dist/AdvancedFilterCreator.js +65 -102
  3. package/dist/AdvancedFilterCreator.js.map +1 -1
  4. package/dist/AdvancedFilterCreatorFilterItem.js +22 -37
  5. package/dist/AdvancedFilterCreatorFilterItem.js.map +1 -1
  6. package/dist/AdvancedFilterCreatorSelectValue.js +37 -63
  7. package/dist/AdvancedFilterCreatorSelectValue.js.map +1 -1
  8. package/dist/AdvancedFilterCreatorSelectValueList.js +29 -59
  9. package/dist/AdvancedFilterCreatorSelectValueList.js.map +1 -1
  10. package/dist/ColumnHeaderGroup.js +6 -8
  11. package/dist/ColumnHeaderGroup.js.map +1 -1
  12. package/dist/ColumnStatistics.js +22 -28
  13. package/dist/ColumnStatistics.js.map +1 -1
  14. package/dist/CommonTypes.d.ts +62 -2
  15. package/dist/CommonTypes.d.ts.map +1 -1
  16. package/dist/CommonTypes.js.map +1 -1
  17. package/dist/CrossColumnSearch.js +20 -29
  18. package/dist/CrossColumnSearch.js.map +1 -1
  19. package/dist/FilterInputField.js +19 -46
  20. package/dist/FilterInputField.js.map +1 -1
  21. package/dist/GotoRow.js +32 -29
  22. package/dist/GotoRow.js.map +1 -1
  23. package/dist/IrisGrid.d.ts +85 -2
  24. package/dist/IrisGrid.d.ts.map +1 -1
  25. package/dist/IrisGrid.js +709 -861
  26. package/dist/IrisGrid.js.map +1 -1
  27. package/dist/IrisGridBottomBar.js +10 -11
  28. package/dist/IrisGridBottomBar.js.map +1 -1
  29. package/dist/IrisGridCacheUtils.js +28 -8
  30. package/dist/IrisGridCacheUtils.js.map +1 -1
  31. package/dist/IrisGridCellOverflowModal.js +30 -13
  32. package/dist/IrisGridCellOverflowModal.js.map +1 -1
  33. package/dist/IrisGridCellRendererUtils.js +6 -12
  34. package/dist/IrisGridCellRendererUtils.js.map +1 -1
  35. package/dist/IrisGridCopyHandler.js +28 -47
  36. package/dist/IrisGridCopyHandler.js.map +1 -1
  37. package/dist/IrisGridMetricCalculator.js +28 -51
  38. package/dist/IrisGridMetricCalculator.js.map +1 -1
  39. package/dist/IrisGridModel.d.ts +30 -1
  40. package/dist/IrisGridModel.d.ts.map +1 -1
  41. package/dist/IrisGridModel.js +36 -1
  42. package/dist/IrisGridModel.js.map +1 -1
  43. package/dist/IrisGridModelUpdater.js +32 -30
  44. package/dist/IrisGridModelUpdater.js.map +1 -1
  45. package/dist/IrisGridModelWidgetProps.d.ts +26 -0
  46. package/dist/IrisGridModelWidgetProps.d.ts.map +1 -0
  47. package/dist/IrisGridModelWidgetProps.js +2 -0
  48. package/dist/IrisGridModelWidgetProps.js.map +1 -0
  49. package/dist/IrisGridPartitionSelector.js +28 -62
  50. package/dist/IrisGridPartitionSelector.js.map +1 -1
  51. package/dist/IrisGridProxyModel.d.ts.map +1 -1
  52. package/dist/IrisGridProxyModel.js +41 -14
  53. package/dist/IrisGridProxyModel.js.map +1 -1
  54. package/dist/IrisGridRenderer.js +162 -264
  55. package/dist/IrisGridRenderer.js.map +1 -1
  56. package/dist/IrisGridTableModel.js +23 -16
  57. package/dist/IrisGridTableModel.js.map +1 -1
  58. package/dist/IrisGridTableModelTemplate.js +49 -73
  59. package/dist/IrisGridTableModelTemplate.js.map +1 -1
  60. package/dist/IrisGridTestUtils.js +19 -19
  61. package/dist/IrisGridTestUtils.js.map +1 -1
  62. package/dist/IrisGridTextCellRenderer.d.ts.map +1 -1
  63. package/dist/IrisGridTextCellRenderer.js +36 -53
  64. package/dist/IrisGridTextCellRenderer.js.map +1 -1
  65. package/dist/IrisGridTheme.js +9 -1
  66. package/dist/IrisGridTheme.js.map +1 -1
  67. package/dist/IrisGridThemeProvider.js +5 -7
  68. package/dist/IrisGridThemeProvider.js.map +1 -1
  69. package/dist/IrisGridTreeTableModel.js +5 -9
  70. package/dist/IrisGridTreeTableModel.js.map +1 -1
  71. package/dist/IrisGridUtils.d.ts +25 -2
  72. package/dist/IrisGridUtils.d.ts.map +1 -1
  73. package/dist/IrisGridUtils.js +297 -294
  74. package/dist/IrisGridUtils.js.map +1 -1
  75. package/dist/LazyIrisGrid.d.ts +1 -1
  76. package/dist/NoPastePermissionModal.js +3 -5
  77. package/dist/NoPastePermissionModal.js.map +1 -1
  78. package/dist/PendingDataBottomBar.js +27 -16
  79. package/dist/PendingDataBottomBar.js.map +1 -1
  80. package/dist/ToastBottomBar.js +16 -8
  81. package/dist/ToastBottomBar.js.map +1 -1
  82. package/dist/format-context-menus/CustomFormatAction.js +11 -24
  83. package/dist/format-context-menus/CustomFormatAction.js.map +1 -1
  84. package/dist/index.d.ts +1 -0
  85. package/dist/index.d.ts.map +1 -1
  86. package/dist/index.js +1 -0
  87. package/dist/index.js.map +1 -1
  88. package/dist/key-handlers/CopyCellKeyHandler.js +3 -4
  89. package/dist/key-handlers/CopyCellKeyHandler.js.map +1 -1
  90. package/dist/key-handlers/CopyKeyHandler.js +1 -3
  91. package/dist/key-handlers/CopyKeyHandler.js.map +1 -1
  92. package/dist/key-handlers/ReverseKeyHandler.js +1 -3
  93. package/dist/key-handlers/ReverseKeyHandler.js.map +1 -1
  94. package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.js +35 -59
  95. package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.js.map +1 -1
  96. package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js +13 -29
  97. package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js.map +1 -1
  98. package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js +8 -17
  99. package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js.map +1 -1
  100. package/dist/mousehandlers/IrisGridContextMenuHandler.js +96 -199
  101. package/dist/mousehandlers/IrisGridContextMenuHandler.js.map +1 -1
  102. package/dist/mousehandlers/IrisGridDataSelectMouseHandler.js +2 -4
  103. package/dist/mousehandlers/IrisGridDataSelectMouseHandler.js.map +1 -1
  104. package/dist/mousehandlers/IrisGridFilterMouseHandler.js +16 -30
  105. package/dist/mousehandlers/IrisGridFilterMouseHandler.js.map +1 -1
  106. package/dist/mousehandlers/IrisGridPartitionedTableMouseHandler.js +5 -13
  107. package/dist/mousehandlers/IrisGridPartitionedTableMouseHandler.js.map +1 -1
  108. package/dist/mousehandlers/IrisGridRowTreeMouseHandler.js +20 -36
  109. package/dist/mousehandlers/IrisGridRowTreeMouseHandler.js.map +1 -1
  110. package/dist/mousehandlers/IrisGridSortMouseHandler.js +3 -5
  111. package/dist/mousehandlers/IrisGridSortMouseHandler.js.map +1 -1
  112. package/dist/mousehandlers/IrisGridTokenMouseHandler.js +9 -18
  113. package/dist/mousehandlers/IrisGridTokenMouseHandler.js.map +1 -1
  114. package/dist/mousehandlers/PendingMouseHandler.js +10 -18
  115. package/dist/mousehandlers/PendingMouseHandler.js.map +1 -1
  116. package/dist/sidebar/AdvancedSettingsMenu.js +12 -5
  117. package/dist/sidebar/AdvancedSettingsMenu.js.map +1 -1
  118. package/dist/sidebar/ChartBuilder.js +45 -102
  119. package/dist/sidebar/ChartBuilder.js.map +1 -1
  120. package/dist/sidebar/CustomColumnBuilder.js +35 -77
  121. package/dist/sidebar/CustomColumnBuilder.js.map +1 -1
  122. package/dist/sidebar/CustomColumnInput.js +9 -11
  123. package/dist/sidebar/CustomColumnInput.js.map +1 -1
  124. package/dist/sidebar/InputEditor.js +17 -24
  125. package/dist/sidebar/InputEditor.js.map +1 -1
  126. package/dist/sidebar/IrisGridTableOptionsWidgetProps.d.ts +22 -0
  127. package/dist/sidebar/IrisGridTableOptionsWidgetProps.d.ts.map +1 -0
  128. package/dist/sidebar/IrisGridTableOptionsWidgetProps.js +2 -0
  129. package/dist/sidebar/IrisGridTableOptionsWidgetProps.js.map +1 -0
  130. package/dist/sidebar/OptionType.d.ts +8 -0
  131. package/dist/sidebar/OptionType.d.ts.map +1 -1
  132. package/dist/sidebar/OptionType.js +7 -0
  133. package/dist/sidebar/OptionType.js.map +1 -1
  134. package/dist/sidebar/PluginTableOptionsErrorBoundary.d.ts +30 -0
  135. package/dist/sidebar/PluginTableOptionsErrorBoundary.d.ts.map +1 -0
  136. package/dist/sidebar/PluginTableOptionsErrorBoundary.js +55 -0
  137. package/dist/sidebar/PluginTableOptionsErrorBoundary.js.map +1 -0
  138. package/dist/sidebar/RollupRows.js +72 -113
  139. package/dist/sidebar/RollupRows.js.map +1 -1
  140. package/dist/sidebar/SelectDistinctBuilder.js +16 -33
  141. package/dist/sidebar/SelectDistinctBuilder.js.map +1 -1
  142. package/dist/sidebar/TableCsvExporter.js +50 -74
  143. package/dist/sidebar/TableCsvExporter.js.map +1 -1
  144. package/dist/sidebar/TableSaver.js +18 -42
  145. package/dist/sidebar/TableSaver.js.map +1 -1
  146. package/dist/sidebar/aggregations/AggregationEdit.js +25 -18
  147. package/dist/sidebar/aggregations/AggregationEdit.js.map +1 -1
  148. package/dist/sidebar/aggregations/AggregationUtils.js +1 -3
  149. package/dist/sidebar/aggregations/AggregationUtils.js.map +1 -1
  150. package/dist/sidebar/aggregations/Aggregations.js +45 -34
  151. package/dist/sidebar/aggregations/Aggregations.js.map +1 -1
  152. package/dist/sidebar/conditional-formatting/ColumnFormatEditor.js +35 -24
  153. package/dist/sidebar/conditional-formatting/ColumnFormatEditor.js.map +1 -1
  154. package/dist/sidebar/conditional-formatting/ConditionEditor.js +38 -21
  155. package/dist/sidebar/conditional-formatting/ConditionEditor.js.map +1 -1
  156. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js +27 -11
  157. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js.map +1 -1
  158. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js +9 -11
  159. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js.map +1 -1
  160. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js +48 -57
  161. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js.map +1 -1
  162. package/dist/sidebar/conditional-formatting/RowFormatEditor.js +35 -24
  163. package/dist/sidebar/conditional-formatting/RowFormatEditor.js.map +1 -1
  164. package/dist/sidebar/conditional-formatting/StyleEditor.js +26 -11
  165. package/dist/sidebar/conditional-formatting/StyleEditor.js.map +1 -1
  166. package/dist/sidebar/index.d.ts +3 -2
  167. package/dist/sidebar/index.d.ts.map +1 -1
  168. package/dist/sidebar/index.js.map +1 -1
  169. package/dist/sidebar/visibility-ordering-builder/SearchItem.js +5 -7
  170. package/dist/sidebar/visibility-ordering-builder/SearchItem.js.map +1 -1
  171. package/dist/sidebar/visibility-ordering-builder/SearchWithModal.js +24 -18
  172. package/dist/sidebar/visibility-ordering-builder/SearchWithModal.js.map +1 -1
  173. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.js +166 -256
  174. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.js.map +1 -1
  175. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilderUtils.js +4 -11
  176. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilderUtils.js.map +1 -1
  177. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingGroup.js +28 -14
  178. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingGroup.js.map +1 -1
  179. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingItem.js +16 -19
  180. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingItem.js.map +1 -1
  181. package/dist/sidebar/visibility-ordering-builder/sortable-tree/PointerSensorWithInteraction.js +1 -3
  182. package/dist/sidebar/visibility-ordering-builder/sortable-tree/PointerSensorWithInteraction.js.map +1 -1
  183. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.js +19 -29
  184. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.js.map +1 -1
  185. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeDndContext.js +39 -52
  186. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeDndContext.js.map +1 -1
  187. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeItem.js +18 -23
  188. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeItem.js.map +1 -1
  189. package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.js +19 -15
  190. package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.js.map +1 -1
  191. package/dist/sidebar/visibility-ordering-builder/sortable-tree/keyboardCoordinates.js +16 -30
  192. package/dist/sidebar/visibility-ordering-builder/sortable-tree/keyboardCoordinates.js.map +1 -1
  193. package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.js +30 -39
  194. package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.js.map +1 -1
  195. package/package.json +16 -16
@@ -11,36 +11,38 @@ var COLUMN_BUFFER_PAGES = 1;
11
11
  * React component to keep IrisGridModel in sync
12
12
  */
13
13
  function IrisGridModelUpdater(_ref) {
14
- var {
15
- model,
16
- top,
17
- bottom,
18
- left,
19
- right,
20
- filter,
21
- formatter,
22
- columnAlignmentMap,
23
- reverse = false,
24
- sorts,
25
- customColumns,
26
- movedColumns,
27
- hiddenColumns,
28
- alwaysFetchColumns,
29
- rollupConfig = null,
30
- totalsConfig = null,
31
- selectDistinctColumns = EMPTY_ARRAY,
32
- pendingRowCount = 0,
33
- pendingDataMap = EMPTY_MAP,
34
- frozenColumns,
35
- formatColumns,
36
- columnHeaderGroups,
37
- partitionConfig,
38
- showExtraGroupColumn
39
- } = _ref;
40
- var {
41
- isTotalsAvailable,
42
- isRollupAvailable
43
- } = model;
14
+ var model = _ref.model,
15
+ top = _ref.top,
16
+ bottom = _ref.bottom,
17
+ left = _ref.left,
18
+ right = _ref.right,
19
+ filter = _ref.filter,
20
+ formatter = _ref.formatter,
21
+ columnAlignmentMap = _ref.columnAlignmentMap,
22
+ _ref$reverse = _ref.reverse,
23
+ reverse = _ref$reverse === void 0 ? false : _ref$reverse,
24
+ sorts = _ref.sorts,
25
+ customColumns = _ref.customColumns,
26
+ movedColumns = _ref.movedColumns,
27
+ hiddenColumns = _ref.hiddenColumns,
28
+ alwaysFetchColumns = _ref.alwaysFetchColumns,
29
+ _ref$rollupConfig = _ref.rollupConfig,
30
+ rollupConfig = _ref$rollupConfig === void 0 ? null : _ref$rollupConfig,
31
+ _ref$totalsConfig = _ref.totalsConfig,
32
+ totalsConfig = _ref$totalsConfig === void 0 ? null : _ref$totalsConfig,
33
+ _ref$selectDistinctCo = _ref.selectDistinctColumns,
34
+ selectDistinctColumns = _ref$selectDistinctCo === void 0 ? EMPTY_ARRAY : _ref$selectDistinctCo,
35
+ _ref$pendingRowCount = _ref.pendingRowCount,
36
+ pendingRowCount = _ref$pendingRowCount === void 0 ? 0 : _ref$pendingRowCount,
37
+ _ref$pendingDataMap = _ref.pendingDataMap,
38
+ pendingDataMap = _ref$pendingDataMap === void 0 ? EMPTY_MAP : _ref$pendingDataMap,
39
+ frozenColumns = _ref.frozenColumns,
40
+ formatColumns = _ref.formatColumns,
41
+ columnHeaderGroups = _ref.columnHeaderGroups,
42
+ partitionConfig = _ref.partitionConfig,
43
+ showExtraGroupColumn = _ref.showExtraGroupColumn;
44
+ var isTotalsAvailable = model.isTotalsAvailable,
45
+ isRollupAvailable = model.isRollupAvailable;
44
46
  // Check for showExtraGroupColumn before memoizing columns, since updating it will change the columns
45
47
  useOnChange(() => {
46
48
  if (isIrisGridTreeTableModel(model) && showExtraGroupColumn != null) {
@@ -1 +1 @@
1
- {"version":3,"file":"IrisGridModelUpdater.js","names":["useEffect","useMemo","EMPTY_ARRAY","EMPTY_MAP","useOnChange","IrisGridUtils","isPartitionedGridModel","isIrisGridTreeTableModel","COLUMN_BUFFER_PAGES","IrisGridModelUpdater","_ref","model","top","bottom","left","right","filter","formatter","columnAlignmentMap","reverse","sorts","customColumns","movedColumns","hiddenColumns","alwaysFetchColumns","rollupConfig","totalsConfig","selectDistinctColumns","pendingRowCount","pendingDataMap","frozenColumns","formatColumns","columnHeaderGroups","partitionConfig","showExtraGroupColumn","isTotalsAvailable","isRollupAvailable","columns","getModelViewportColumns","updateFilter","updateSorts","sortsForModel","push","dh","Table","sort","updateFormatter","updateColumnAlignmentMap","updateCustomColumns","isCustomColumnsAvailable","updateFormatColumns","isFormatColumnsAvailable","updateViewport","setViewport","updateRollupCOnfig","updateSelectDistinctColumns","isSelectDistinctAvailable","updateTotalsConfig","updateColumnHeaderGroups","updatePartitionConfig","updateFrozenColumns","updatePendingRowCount","updatePendingDataMap","displayName"],"sources":["../src/IrisGridModelUpdater.tsx"],"sourcesContent":["/* eslint-disable react/require-default-props */\n/* eslint-disable no-param-reassign */\nimport { useEffect, useMemo } from 'react';\nimport type { dh } from '@deephaven/jsapi-types';\nimport { type ModelIndex, type MoveOperation } from '@deephaven/grid';\nimport { type SortDescriptor, type Formatter } from '@deephaven/jsapi-utils';\nimport { EMPTY_ARRAY, EMPTY_MAP } from '@deephaven/utils';\nimport { useOnChange } from '@deephaven/react-hooks';\nimport IrisGridUtils from './IrisGridUtils';\nimport {\n type ColumnName,\n type UITotalsTableConfig,\n type PendingDataMap,\n} from './CommonTypes';\nimport type IrisGridModel from './IrisGridModel';\nimport type ColumnHeaderGroup from './ColumnHeaderGroup';\nimport {\n type PartitionConfig,\n isPartitionedGridModel,\n} from './PartitionedGridModel';\nimport { isIrisGridTreeTableModel } from './IrisGridTreeTableModel';\n\nconst COLUMN_BUFFER_PAGES = 1;\n\ninterface IrisGridModelUpdaterProps {\n model: IrisGridModel;\n top: number;\n bottom: number;\n left: number | null;\n right: number | null;\n filter: readonly dh.FilterCondition[];\n sorts: readonly SortDescriptor[];\n reverse?: boolean;\n customColumns: readonly ColumnName[];\n movedColumns: readonly MoveOperation[];\n hiddenColumns: readonly ModelIndex[];\n frozenColumns?: readonly ColumnName[];\n columnHeaderGroups: readonly ColumnHeaderGroup[];\n formatColumns: readonly dh.CustomColumn[];\n alwaysFetchColumns: readonly ColumnName[];\n formatter: Formatter;\n columnAlignmentMap: Map<string, CanvasTextAlign>;\n rollupConfig?: dh.RollupConfig | null;\n totalsConfig?: UITotalsTableConfig | null;\n selectDistinctColumns?: readonly ColumnName[];\n pendingRowCount?: number;\n pendingDataMap?: PendingDataMap;\n partitionConfig?: PartitionConfig;\n showExtraGroupColumn?: boolean;\n}\n\n/**\n * React component to keep IrisGridModel in sync\n */\nfunction IrisGridModelUpdater({\n model,\n top,\n bottom,\n left,\n right,\n filter,\n formatter,\n columnAlignmentMap,\n reverse = false,\n sorts,\n customColumns,\n movedColumns,\n hiddenColumns,\n alwaysFetchColumns,\n rollupConfig = null,\n totalsConfig = null,\n selectDistinctColumns = EMPTY_ARRAY,\n pendingRowCount = 0,\n pendingDataMap = EMPTY_MAP,\n frozenColumns,\n formatColumns,\n columnHeaderGroups,\n partitionConfig,\n showExtraGroupColumn,\n}: IrisGridModelUpdaterProps): JSX.Element | null {\n const { isTotalsAvailable, isRollupAvailable } = model;\n // Check for showExtraGroupColumn before memoizing columns, since updating it will change the columns\n useOnChange(() => {\n if (isIrisGridTreeTableModel(model) && showExtraGroupColumn != null) {\n model.showExtraGroupColumn = showExtraGroupColumn;\n }\n }, [model, showExtraGroupColumn]);\n\n const columns = useMemo(\n () =>\n IrisGridUtils.getModelViewportColumns(\n model.columns,\n left,\n right,\n movedColumns,\n hiddenColumns,\n alwaysFetchColumns,\n COLUMN_BUFFER_PAGES\n ),\n [\n model.columns,\n left,\n right,\n movedColumns,\n hiddenColumns,\n alwaysFetchColumns,\n ]\n );\n useOnChange(\n function updateFilter() {\n model.filter = filter;\n },\n [model, filter]\n );\n useOnChange(\n function updateSorts() {\n const sortsForModel = [...sorts];\n if (reverse) {\n sortsForModel.push(model.dh.Table.reverse());\n }\n model.sort = sortsForModel;\n },\n [model, sorts, reverse]\n );\n useOnChange(\n function updateFormatter() {\n model.formatter = formatter;\n },\n [model, formatter]\n );\n useOnChange(\n function updateColumnAlignmentMap() {\n model.columnAlignmentMap = columnAlignmentMap;\n },\n [model, columnAlignmentMap]\n );\n useOnChange(\n function updateCustomColumns() {\n if (model.isCustomColumnsAvailable) {\n model.customColumns = customColumns;\n }\n },\n [model, customColumns]\n );\n useOnChange(\n function updateFormatColumns() {\n if (model.isFormatColumnsAvailable) {\n model.formatColumns = formatColumns;\n }\n },\n [model, formatColumns]\n );\n useOnChange(\n function updateViewport() {\n model.setViewport(top, bottom, columns);\n },\n [model, top, bottom, columns]\n );\n useOnChange(\n function updateRollupCOnfig() {\n if (isRollupAvailable) {\n model.rollupConfig = rollupConfig;\n }\n },\n [model, isRollupAvailable, rollupConfig]\n );\n useOnChange(\n function updateSelectDistinctColumns() {\n if (model.isSelectDistinctAvailable) {\n model.selectDistinctColumns = selectDistinctColumns;\n }\n },\n [model, selectDistinctColumns]\n );\n useOnChange(\n function updateTotalsConfig() {\n if (isTotalsAvailable) {\n model.totalsConfig = totalsConfig;\n }\n },\n [model, isTotalsAvailable, totalsConfig]\n );\n useOnChange(\n function updateColumnHeaderGroups() {\n model.columnHeaderGroups = columnHeaderGroups;\n },\n [model, columnHeaderGroups]\n );\n useOnChange(\n function updatePartitionConfig() {\n if (partitionConfig && isPartitionedGridModel(model)) {\n model.partitionConfig = partitionConfig;\n }\n },\n [model, partitionConfig]\n );\n // These setters are wrapped in useEffect instead of useOnChange because they emit an event\n // that potentially causes side effects, violating the rule that render should be a pure function.\n useEffect(\n function updateFrozenColumns() {\n if (frozenColumns) {\n model.updateFrozenColumns(frozenColumns);\n }\n },\n [model, frozenColumns]\n );\n useEffect(\n function updatePendingRowCount() {\n model.pendingRowCount = pendingRowCount;\n },\n [model, pendingRowCount]\n );\n useEffect(\n function updatePendingDataMap() {\n model.pendingDataMap = pendingDataMap;\n },\n [model, pendingDataMap]\n );\n\n return null;\n}\n\nIrisGridModelUpdater.displayName = 'IrisGridModelUpdater';\n\nexport default IrisGridModelUpdater;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"IrisGridModelUpdater.js","names":["useEffect","useMemo","EMPTY_ARRAY","EMPTY_MAP","useOnChange","IrisGridUtils","isPartitionedGridModel","isIrisGridTreeTableModel","COLUMN_BUFFER_PAGES","IrisGridModelUpdater","_ref","model","top","bottom","left","right","filter","formatter","columnAlignmentMap","_ref$reverse","reverse","sorts","customColumns","movedColumns","hiddenColumns","alwaysFetchColumns","_ref$rollupConfig","rollupConfig","_ref$totalsConfig","totalsConfig","_ref$selectDistinctCo","selectDistinctColumns","_ref$pendingRowCount","pendingRowCount","_ref$pendingDataMap","pendingDataMap","frozenColumns","formatColumns","columnHeaderGroups","partitionConfig","showExtraGroupColumn","isTotalsAvailable","isRollupAvailable","columns","getModelViewportColumns","updateFilter","updateSorts","sortsForModel","push","dh","Table","sort","updateFormatter","updateColumnAlignmentMap","updateCustomColumns","isCustomColumnsAvailable","updateFormatColumns","isFormatColumnsAvailable","updateViewport","setViewport","updateRollupCOnfig","updateSelectDistinctColumns","isSelectDistinctAvailable","updateTotalsConfig","updateColumnHeaderGroups","updatePartitionConfig","updateFrozenColumns","updatePendingRowCount","updatePendingDataMap","displayName"],"sources":["../src/IrisGridModelUpdater.tsx"],"sourcesContent":["/* eslint-disable react/require-default-props */\n/* eslint-disable no-param-reassign */\nimport { useEffect, useMemo } from 'react';\nimport type { dh } from '@deephaven/jsapi-types';\nimport { type ModelIndex, type MoveOperation } from '@deephaven/grid';\nimport { type SortDescriptor, type Formatter } from '@deephaven/jsapi-utils';\nimport { EMPTY_ARRAY, EMPTY_MAP } from '@deephaven/utils';\nimport { useOnChange } from '@deephaven/react-hooks';\nimport IrisGridUtils from './IrisGridUtils';\nimport {\n type ColumnName,\n type UITotalsTableConfig,\n type PendingDataMap,\n} from './CommonTypes';\nimport type IrisGridModel from './IrisGridModel';\nimport type ColumnHeaderGroup from './ColumnHeaderGroup';\nimport {\n type PartitionConfig,\n isPartitionedGridModel,\n} from './PartitionedGridModel';\nimport { isIrisGridTreeTableModel } from './IrisGridTreeTableModel';\n\nconst COLUMN_BUFFER_PAGES = 1;\n\ninterface IrisGridModelUpdaterProps {\n model: IrisGridModel;\n top: number;\n bottom: number;\n left: number | null;\n right: number | null;\n filter: readonly dh.FilterCondition[];\n sorts: readonly SortDescriptor[];\n reverse?: boolean;\n customColumns: readonly ColumnName[];\n movedColumns: readonly MoveOperation[];\n hiddenColumns: readonly ModelIndex[];\n frozenColumns?: readonly ColumnName[];\n columnHeaderGroups: readonly ColumnHeaderGroup[];\n formatColumns: readonly dh.CustomColumn[];\n alwaysFetchColumns: readonly ColumnName[];\n formatter: Formatter;\n columnAlignmentMap: Map<string, CanvasTextAlign>;\n rollupConfig?: dh.RollupConfig | null;\n totalsConfig?: UITotalsTableConfig | null;\n selectDistinctColumns?: readonly ColumnName[];\n pendingRowCount?: number;\n pendingDataMap?: PendingDataMap;\n partitionConfig?: PartitionConfig;\n showExtraGroupColumn?: boolean;\n}\n\n/**\n * React component to keep IrisGridModel in sync\n */\nfunction IrisGridModelUpdater({\n model,\n top,\n bottom,\n left,\n right,\n filter,\n formatter,\n columnAlignmentMap,\n reverse = false,\n sorts,\n customColumns,\n movedColumns,\n hiddenColumns,\n alwaysFetchColumns,\n rollupConfig = null,\n totalsConfig = null,\n selectDistinctColumns = EMPTY_ARRAY,\n pendingRowCount = 0,\n pendingDataMap = EMPTY_MAP,\n frozenColumns,\n formatColumns,\n columnHeaderGroups,\n partitionConfig,\n showExtraGroupColumn,\n}: IrisGridModelUpdaterProps): JSX.Element | null {\n const { isTotalsAvailable, isRollupAvailable } = model;\n // Check for showExtraGroupColumn before memoizing columns, since updating it will change the columns\n useOnChange(() => {\n if (isIrisGridTreeTableModel(model) && showExtraGroupColumn != null) {\n model.showExtraGroupColumn = showExtraGroupColumn;\n }\n }, [model, showExtraGroupColumn]);\n\n const columns = useMemo(\n () =>\n IrisGridUtils.getModelViewportColumns(\n model.columns,\n left,\n right,\n movedColumns,\n hiddenColumns,\n alwaysFetchColumns,\n COLUMN_BUFFER_PAGES\n ),\n [\n model.columns,\n left,\n right,\n movedColumns,\n hiddenColumns,\n alwaysFetchColumns,\n ]\n );\n useOnChange(\n function updateFilter() {\n model.filter = filter;\n },\n [model, filter]\n );\n useOnChange(\n function updateSorts() {\n const sortsForModel = [...sorts];\n if (reverse) {\n sortsForModel.push(model.dh.Table.reverse());\n }\n model.sort = sortsForModel;\n },\n [model, sorts, reverse]\n );\n useOnChange(\n function updateFormatter() {\n model.formatter = formatter;\n },\n [model, formatter]\n );\n useOnChange(\n function updateColumnAlignmentMap() {\n model.columnAlignmentMap = columnAlignmentMap;\n },\n [model, columnAlignmentMap]\n );\n useOnChange(\n function updateCustomColumns() {\n if (model.isCustomColumnsAvailable) {\n model.customColumns = customColumns;\n }\n },\n [model, customColumns]\n );\n useOnChange(\n function updateFormatColumns() {\n if (model.isFormatColumnsAvailable) {\n model.formatColumns = formatColumns;\n }\n },\n [model, formatColumns]\n );\n useOnChange(\n function updateViewport() {\n model.setViewport(top, bottom, columns);\n },\n [model, top, bottom, columns]\n );\n useOnChange(\n function updateRollupCOnfig() {\n if (isRollupAvailable) {\n model.rollupConfig = rollupConfig;\n }\n },\n [model, isRollupAvailable, rollupConfig]\n );\n useOnChange(\n function updateSelectDistinctColumns() {\n if (model.isSelectDistinctAvailable) {\n model.selectDistinctColumns = selectDistinctColumns;\n }\n },\n [model, selectDistinctColumns]\n );\n useOnChange(\n function updateTotalsConfig() {\n if (isTotalsAvailable) {\n model.totalsConfig = totalsConfig;\n }\n },\n [model, isTotalsAvailable, totalsConfig]\n );\n useOnChange(\n function updateColumnHeaderGroups() {\n model.columnHeaderGroups = columnHeaderGroups;\n },\n [model, columnHeaderGroups]\n );\n useOnChange(\n function updatePartitionConfig() {\n if (partitionConfig && isPartitionedGridModel(model)) {\n model.partitionConfig = partitionConfig;\n }\n },\n [model, partitionConfig]\n );\n // These setters are wrapped in useEffect instead of useOnChange because they emit an event\n // that potentially causes side effects, violating the rule that render should be a pure function.\n useEffect(\n function updateFrozenColumns() {\n if (frozenColumns) {\n model.updateFrozenColumns(frozenColumns);\n }\n },\n [model, frozenColumns]\n );\n useEffect(\n function updatePendingRowCount() {\n model.pendingRowCount = pendingRowCount;\n },\n [model, pendingRowCount]\n );\n useEffect(\n function updatePendingDataMap() {\n model.pendingDataMap = pendingDataMap;\n },\n [model, pendingDataMap]\n );\n\n return null;\n}\n\nIrisGridModelUpdater.displayName = 'IrisGridModelUpdater';\n\nexport default IrisGridModelUpdater;\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,26 @@
1
+ import type IrisGridModel from './IrisGridModel';
2
+ /**
3
+ * Transform applied to the model an IrisGrid host (panel or widget) builds,
4
+ * before it is handed to `<IrisGrid>`. Lets middleware wrap or augment the
5
+ * host-built model (e.g. wrap it in a proxy that swaps its inner model) without
6
+ * taking over model construction, so the middleware can stay a chained layer
7
+ * instead of replacing the base component.
8
+ *
9
+ * The returned model must be a drop-in for the input — the host owns its
10
+ * lifecycle and will call `close()` on whatever this returns. May be async to
11
+ * allow the transform to await dependencies before returning.
12
+ */
13
+ export type IrisGridModelTransform = (model: IrisGridModel) => IrisGridModel | Promise<IrisGridModel>;
14
+ /**
15
+ * Opt-in prop for components that build an `IrisGridModel` from a `fetch`
16
+ * (e.g. `IrisGridPanel`, `GridWidgetPlugin`). Threaded down the middleware
17
+ * chain so IrisGrid-aware plugins can post-process the model without it being
18
+ * added to the generic widget/panel prop surface.
19
+ *
20
+ * The transform is applied when the model is (re)built, so it must be
21
+ * referentially stable — an unstable `transformModel` will rebuild the model.
22
+ */
23
+ export interface IrisGridModelWidgetProps {
24
+ transformModel?: IrisGridModelTransform;
25
+ }
26
+ //# sourceMappingURL=IrisGridModelWidgetProps.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IrisGridModelWidgetProps.d.ts","sourceRoot":"","sources":["../src/IrisGridModelWidgetProps.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,aAAa,MAAM,iBAAiB,CAAC;AAEjD;;;;;;;;;;GAUG;AACH,MAAM,MAAM,sBAAsB,GAAG,CACnC,KAAK,EAAE,aAAa,KACjB,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;AAE5C;;;;;;;;GAQG;AACH,MAAM,WAAW,wBAAwB;IACvC,cAAc,CAAC,EAAE,sBAAsB,CAAC;CACzC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=IrisGridModelWidgetProps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IrisGridModelWidgetProps.js","names":[],"sources":["../src/IrisGridModelWidgetProps.ts"],"sourcesContent":["import type IrisGridModel from './IrisGridModel';\n\n/**\n * Transform applied to the model an IrisGrid host (panel or widget) builds,\n * before it is handed to `<IrisGrid>`. Lets middleware wrap or augment the\n * host-built model (e.g. wrap it in a proxy that swaps its inner model) without\n * taking over model construction, so the middleware can stay a chained layer\n * instead of replacing the base component.\n *\n * The returned model must be a drop-in for the input — the host owns its\n * lifecycle and will call `close()` on whatever this returns. May be async to\n * allow the transform to await dependencies before returning.\n */\nexport type IrisGridModelTransform = (\n model: IrisGridModel\n) => IrisGridModel | Promise<IrisGridModel>;\n\n/**\n * Opt-in prop for components that build an `IrisGridModel` from a `fetch`\n * (e.g. `IrisGridPanel`, `GridWidgetPlugin`). Threaded down the middleware\n * chain so IrisGrid-aware plugins can post-process the model without it being\n * added to the generic widget/panel prop surface.\n *\n * The transform is applied when the model is (re)built, so it must be\n * referentially stable — an unstable `transformModel` will rebuild the model.\n */\nexport interface IrisGridModelWidgetProps {\n transformModel?: IrisGridModelTransform;\n}\n"],"mappings":"","ignoreList":[]}
@@ -31,9 +31,7 @@ class IrisGridPartitionSelector extends Component {
31
31
  this.handlePartitionTableClick = this.handlePartitionTableClick.bind(this);
32
32
  this.handleMergeClick = this.handleMergeClick.bind(this);
33
33
  this.handlePartitionSelect = this.handlePartitionSelect.bind(this);
34
- var {
35
- model
36
- } = props;
34
+ var model = props.model;
37
35
  this.tableUtils = new TableUtils(model.dh);
38
36
  this.pending = new Pending();
39
37
  this.state = {
@@ -47,9 +45,7 @@ class IrisGridPartitionSelector extends Component {
47
45
  componentDidMount() {
48
46
  var _this = this;
49
47
  return _asyncToGenerator(function* () {
50
- var {
51
- model
52
- } = _this.props;
48
+ var model = _this.props.model;
53
49
  try {
54
50
  var keysTable = yield _this.pending.add(model.partitionKeysTable().then(keyTable => keyTable), t => t.close());
55
51
  var baseTable = yield _this.pending.add(model.partitionBaseTable(), t => t.close());
@@ -67,32 +63,25 @@ class IrisGridPartitionSelector extends Component {
67
63
  })();
68
64
  }
69
65
  componentDidUpdate(prevProps) {
70
- var {
71
- partitionConfig: prevConfig
72
- } = prevProps;
73
- var {
74
- partitionConfig
75
- } = this.props;
66
+ var prevConfig = prevProps.partitionConfig;
67
+ var partitionConfig = this.props.partitionConfig;
76
68
  if (prevConfig !== partitionConfig) {
77
69
  this.updatePartitionOptions();
78
70
  }
79
71
  }
80
72
  componentWillUnmount() {
81
73
  this.pending.cancel();
82
- var {
83
- keysTable,
84
- baseTable,
85
- partitionTables
86
- } = this.state;
74
+ var _this$state = this.state,
75
+ keysTable = _this$state.keysTable,
76
+ baseTable = _this$state.baseTable,
77
+ partitionTables = _this$state.partitionTables;
87
78
  baseTable === null || baseTable === void 0 || baseTable.close();
88
79
  keysTable === null || keysTable === void 0 || keysTable.close();
89
80
  partitionTables === null || partitionTables === void 0 || partitionTables.forEach(table => table.close());
90
81
  }
91
82
  handlePartitionTableClick() {
92
83
  log.debug2('handlePartitionTableClick');
93
- var {
94
- partitionConfig
95
- } = this.props;
84
+ var partitionConfig = this.props.partitionConfig;
96
85
  assertNotNull(partitionConfig);
97
86
  var newPartitionConfig = _objectSpread({}, partitionConfig);
98
87
  // Toggle between Keys and Partition mode
@@ -101,9 +90,7 @@ class IrisGridPartitionSelector extends Component {
101
90
  }
102
91
  handleMergeClick() {
103
92
  log.debug2('handleMergeClick');
104
- var {
105
- partitionConfig
106
- } = this.props;
93
+ var partitionConfig = this.props.partitionConfig;
107
94
  assertNotNull(partitionConfig);
108
95
  var newPartitionConfig = _objectSpread({}, partitionConfig);
109
96
  // Toggle between Merged and Partition mode
@@ -119,19 +106,13 @@ class IrisGridPartitionSelector extends Component {
119
106
  handlePartitionSelect(index, selectedValue) {
120
107
  var _this2 = this;
121
108
  return _asyncToGenerator(function* () {
122
- var {
123
- partitionConfig: prevConfig
124
- } = _this2.props;
109
+ var prevConfig = _this2.props.partitionConfig;
125
110
  assertNotNull(prevConfig);
126
111
  log.debug('handlePartitionSelect', index, selectedValue, prevConfig);
127
112
  var newPartitions = [...prevConfig.partitions];
128
113
  newPartitions[index] = selectedValue;
129
- var {
130
- baseTable
131
- } = _this2.state;
132
- var {
133
- keysTable
134
- } = _this2.state;
114
+ var baseTable = _this2.state.baseTable;
115
+ var keysTable = _this2.state.keysTable;
135
116
  assertNotNull(baseTable);
136
117
  assertNotNull(keysTable);
137
118
  try {
@@ -170,9 +151,7 @@ class IrisGridPartitionSelector extends Component {
170
151
  }
171
152
  sendUpdate(partitionConfig) {
172
153
  log.debug2('sendUpdate', partitionConfig);
173
- var {
174
- onChange
175
- } = this.props;
154
+ var onChange = this.props.onChange;
176
155
  onChange(partitionConfig);
177
156
  }
178
157
 
@@ -182,9 +161,7 @@ class IrisGridPartitionSelector extends Component {
182
161
  * @param value The partition value to get the display value for
183
162
  */
184
163
  getDisplayValue(index, value) {
185
- var {
186
- model
187
- } = this.props;
164
+ var model = this.props.model;
188
165
  if (value === null) {
189
166
  return '(null)';
190
167
  }
@@ -204,18 +181,12 @@ class IrisGridPartitionSelector extends Component {
204
181
  updatePartitionOptions() {
205
182
  var _this3 = this;
206
183
  return _asyncToGenerator(function* () {
207
- var {
208
- model
209
- } = _this3.props;
210
- var {
211
- partitionConfig: prevConfig
212
- } = _this3.props;
184
+ var model = _this3.props.model;
185
+ var prevConfig = _this3.props.partitionConfig;
213
186
  if (prevConfig == null) {
214
187
  return;
215
188
  }
216
- var {
217
- keysTable
218
- } = _this3.state;
189
+ var keysTable = _this3.state.keysTable;
219
190
  assertNotNull(keysTable);
220
191
  var partitionFilters = [...prevConfig.partitions].map((partition, i) => {
221
192
  var partitionColumn = keysTable.columns[i];
@@ -236,14 +207,11 @@ class IrisGridPartitionSelector extends Component {
236
207
  })();
237
208
  }
238
209
  getPartitionFilters(partitionTables) {
239
- var {
240
- model,
241
- partitionConfig
242
- } = this.props;
210
+ var _this$props = this.props,
211
+ model = _this$props.model,
212
+ partitionConfig = _this$props.partitionConfig;
243
213
  assertNotNull(partitionConfig);
244
- var {
245
- partitions
246
- } = partitionConfig;
214
+ var partitions = partitionConfig.partitions;
247
215
  log.debug('getPartitionFilters', partitionConfig);
248
216
  if (partitions.length !== partitionTables.length) {
249
217
  throw new Error("Invalid partition config set. Expected ".concat(partitionTables.length, " partitions, but got ").concat(partitions.length));
@@ -266,14 +234,12 @@ class IrisGridPartitionSelector extends Component {
266
234
  return partitionFilters;
267
235
  }
268
236
  render() {
269
- var {
270
- model,
271
- partitionConfig
272
- } = this.props;
273
- var {
274
- isLoading,
275
- partitionTables
276
- } = this.state;
237
+ var _this$props2 = this.props,
238
+ model = _this$props2.model,
239
+ partitionConfig = _this$props2.partitionConfig;
240
+ var _this$state2 = this.state,
241
+ isLoading = _this$state2.isLoading,
242
+ partitionTables = _this$state2.partitionTables;
277
243
  var partitionSelectors = model.partitionColumns.map((column, index) => /*#__PURE__*/_jsxs("div", {
278
244
  className: "column-selector",
279
245
  children: [(partitionTables === null || partitionTables === void 0 ? void 0 : partitionTables[index]) && /*#__PURE__*/_jsx(Picker, {
@@ -1 +1 @@
1
- {"version":3,"file":"IrisGridPartitionSelector.js","names":["React","Component","memoizee","FontAwesomeIcon","Button","vsChevronRight","vsMerge","vsKey","Log","Picker","TableUtils","assertNotNull","Pending","PromiseUtils","jsx","_jsx","jsxs","_jsxs","log","module","IrisGridPartitionSelector","constructor","props","_defineProperty","index","value","handlePartitionSelect","max","getDisplayValue","handlePartitionTableClick","bind","handleMergeClick","model","tableUtils","dh","pending","state","isLoading","baseTable","keysTable","partitionTables","componentDidMount","_this","_asyncToGenerator","add","partitionKeysTable","then","keyTable","t","close","partitionBaseTable","setState","updatePartitionOptions","e","isCanceled","componentDidUpdate","prevProps","partitionConfig","prevConfig","componentWillUnmount","cancel","forEach","table","debug2","newPartitionConfig","_objectSpread","mode","sendUpdate","selectedValue","_this2","debug","newPartitions","partitions","copy","tCopy","partitionFilters","slice","map","partition","i","partitionColumn","columns","makeNullableEqFilter","applyFilter","setViewport","data","getViewportData","newConfig","column","rows","get","error","onChange","undefined","partitionColumns","isCharType","type","toString","length","String","fromCharCode","parseInt","displayString","name","_this3","Promise","all","_ref","_","selectDistinct","_x","_x2","apply","arguments","getPartitionFilters","Error","concat","push","previousFilter","previousPartition","previousColumn","partitionFilter","render","partitionSelectors","className","children","label","labelPosition","direction","shouldFlip","keyColumn","selectedKey","placeholder","labelColumn","getCachedChangeCallback","isDisabled","icon","onClick","kind","tooltip","isPartitionAwareSourceTable","active","disabled","rotation"],"sources":["../src/IrisGridPartitionSelector.tsx"],"sourcesContent":["import React, { Component } from 'react';\nimport memoizee from 'memoizee';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Button, type ItemKey } from '@deephaven/components';\nimport { vsChevronRight, vsMerge, vsKey } from '@deephaven/icons';\nimport Log from '@deephaven/log';\nimport { Picker } from '@deephaven/jsapi-components';\nimport type { dh } from '@deephaven/jsapi-types';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport { assertNotNull, Pending, PromiseUtils } from '@deephaven/utils';\nimport './IrisGridPartitionSelector.scss';\nimport {\n type PartitionConfig,\n type PartitionedGridModel,\n} from './PartitionedGridModel';\n\nconst log = Log.module('IrisGridPartitionSelector');\n\ninterface IrisGridPartitionSelectorProps {\n model: PartitionedGridModel;\n partitionConfig?: PartitionConfig;\n onChange: (partitionConfig: PartitionConfig) => void;\n}\ninterface IrisGridPartitionSelectorState {\n isLoading: boolean;\n\n baseTable: dh.Table | null;\n\n keysTable: dh.Table | null;\n\n partitionTables: dh.Table[] | null;\n}\nclass IrisGridPartitionSelector extends Component<\n IrisGridPartitionSelectorProps,\n IrisGridPartitionSelectorState\n> {\n constructor(props: IrisGridPartitionSelectorProps) {\n super(props);\n\n this.handlePartitionTableClick = this.handlePartitionTableClick.bind(this);\n this.handleMergeClick = this.handleMergeClick.bind(this);\n this.handlePartitionSelect = this.handlePartitionSelect.bind(this);\n\n const { model } = props;\n this.tableUtils = new TableUtils(model.dh);\n this.pending = new Pending();\n\n this.state = {\n // We start be loading the partition tables, so we should be in a loading state\n isLoading: true,\n\n baseTable: null,\n keysTable: null,\n partitionTables: null,\n };\n }\n\n async componentDidMount(): Promise<void> {\n const { model } = this.props;\n\n try {\n const keysTable = await this.pending.add(\n model.partitionKeysTable().then(keyTable => keyTable),\n t => t.close()\n );\n\n const baseTable = await this.pending.add(model.partitionBaseTable(), t =>\n t.close()\n );\n\n this.setState(\n {\n keysTable,\n baseTable,\n isLoading: false,\n },\n this.updatePartitionOptions\n );\n } catch (e) {\n if (!PromiseUtils.isCanceled(e)) {\n // Just re-throw the error if it's not a cancel\n throw e;\n }\n }\n }\n\n componentDidUpdate(prevProps: IrisGridPartitionSelectorProps): void {\n const { partitionConfig: prevConfig } = prevProps;\n\n const { partitionConfig } = this.props;\n\n if (prevConfig !== partitionConfig) {\n this.updatePartitionOptions();\n }\n }\n\n componentWillUnmount(): void {\n this.pending.cancel();\n\n const { keysTable, baseTable, partitionTables } = this.state;\n baseTable?.close();\n keysTable?.close();\n partitionTables?.forEach(table => table.close());\n }\n\n pending: Pending;\n\n tableUtils: TableUtils;\n\n handlePartitionTableClick(): void {\n log.debug2('handlePartitionTableClick');\n\n const { partitionConfig } = this.props;\n assertNotNull(partitionConfig);\n\n const newPartitionConfig = { ...partitionConfig };\n // Toggle between Keys and Partition mode\n newPartitionConfig.mode =\n partitionConfig.mode === 'keys' ? 'partition' : 'keys';\n this.sendUpdate(newPartitionConfig);\n }\n\n handleMergeClick(): void {\n log.debug2('handleMergeClick');\n\n const { partitionConfig } = this.props;\n assertNotNull(partitionConfig);\n const newPartitionConfig = { ...partitionConfig };\n // Toggle between Merged and Partition mode\n newPartitionConfig.mode =\n partitionConfig.mode === 'merged' ? 'partition' : 'merged';\n this.sendUpdate(newPartitionConfig);\n }\n\n /**\n * Handles when a partition dropdown selection is changed. Will send an update with the new partition config\n * @param index Index of the partition column that was changed\n * @param selectedValue Selected value of the partition column\n */\n async handlePartitionSelect(\n index: number,\n selectedValue: unknown\n ): Promise<void> {\n const { partitionConfig: prevConfig } = this.props;\n assertNotNull(prevConfig);\n\n log.debug('handlePartitionSelect', index, selectedValue, prevConfig);\n\n const newPartitions = [...prevConfig.partitions];\n newPartitions[index] = selectedValue;\n\n const { baseTable } = this.state;\n const { keysTable } = this.state;\n\n assertNotNull(baseTable);\n assertNotNull(keysTable);\n try {\n this.setState({ isLoading: true });\n\n const t = await this.pending.add(baseTable.copy(), tCopy =>\n tCopy.close()\n );\n\n // Apply our partition filters, and just get the first value\n const partitionFilters = newPartitions\n .slice(0, index + 1)\n .map((partition, i) => {\n const partitionColumn = t.columns[i];\n return this.tableUtils.makeNullableEqFilter(\n partitionColumn,\n partition\n );\n });\n t.applyFilter(partitionFilters);\n t.setViewport(0, 0, t.columns);\n const data = await this.pending.add(t.getViewportData());\n const newConfig: PartitionConfig = {\n // Core JSAPI returns undefined for null table values,\n // coalesce with null to differentiate null from no selection in the dropdown\n // https://github.com/deephaven/deephaven-core/issues/5400\n partitions: keysTable.columns.map(column => data.rows[0].get(column)),\n mode: 'partition',\n };\n t.close();\n this.sendUpdate(newConfig);\n } catch (e) {\n if (!PromiseUtils.isCanceled(e)) {\n log.error('Unable to get partition tables', e);\n }\n } finally {\n this.setState({ isLoading: false });\n }\n }\n\n sendUpdate(partitionConfig: PartitionConfig): void {\n log.debug2('sendUpdate', partitionConfig);\n\n const { onChange } = this.props;\n onChange(partitionConfig);\n }\n\n /**\n * Calls model.displayString with a special character case\n * @param index The index of the partition column to get the display value for\n * @param value The partition value to get the display value for\n */\n getDisplayValue(index: number, value: unknown): string {\n const { model } = this.props;\n\n if (value === null) {\n return '(null)';\n }\n\n if (value === undefined || value === '') {\n return '';\n }\n const column = model.partitionColumns[index];\n if (TableUtils.isCharType(column.type) && value.toString().length > 0) {\n return String.fromCharCode(parseInt(value.toString(), 10));\n }\n return model.displayString(value, column.type, column.name);\n }\n\n /**\n * Update the options on the partition dropdown tables\n */\n async updatePartitionOptions(): Promise<void> {\n const { model } = this.props;\n const { partitionConfig: prevConfig } = this.props;\n if (prevConfig == null) {\n return;\n }\n\n const { keysTable } = this.state;\n assertNotNull(keysTable);\n\n const partitionFilters = [...prevConfig.partitions].map((partition, i) => {\n const partitionColumn = keysTable.columns[i];\n return this.tableUtils.makeNullableEqFilter(partitionColumn, partition);\n });\n\n const partitionTables = await Promise.all(\n model.partitionColumns.map(async (_, i) => {\n keysTable.applyFilter(partitionFilters.slice(0, i));\n return keysTable.selectDistinct(model.partitionColumns.slice(0, i + 1));\n })\n );\n\n this.setState({ partitionTables });\n }\n\n getPartitionFilters(partitionTables: dh.Table[]): dh.FilterCondition[][] {\n const { model, partitionConfig } = this.props;\n assertNotNull(partitionConfig);\n const { partitions } = partitionConfig;\n log.debug('getPartitionFilters', partitionConfig);\n\n if (partitions.length !== partitionTables.length) {\n throw new Error(\n `Invalid partition config set. Expected ${partitionTables.length} partitions, but got ${partitions.length}`\n );\n }\n\n // The filters are applied in order, so we need to build up the filters for each partition\n const partitionFilters: dh.FilterCondition[][] = [];\n for (let i = 0; i < partitions.length; i += 1) {\n if (i === 0) {\n // There's no reason to ever filter the first table\n partitionFilters.push([]);\n } else {\n const previousFilter = partitionFilters[i - 1];\n const previousPartition = partitions[i - 1];\n const previousColumn = model.partitionColumns[i - 1];\n const partitionFilter = [\n ...previousFilter,\n this.tableUtils.makeNullableEqFilter(\n previousColumn,\n previousPartition\n ),\n ];\n partitionFilters.push(partitionFilter);\n }\n }\n return partitionFilters;\n }\n\n getCachedChangeCallback = memoizee(\n (index: number) => (value: unknown) =>\n this.handlePartitionSelect(index, value),\n { max: 100 }\n );\n\n getCachedFormatValueCallback = memoizee(\n (index: number) => (value: unknown) => this.getDisplayValue(index, value),\n { max: 100 }\n );\n\n render(): JSX.Element {\n const { model, partitionConfig } = this.props;\n const { isLoading, partitionTables } = this.state;\n\n const partitionSelectors = model.partitionColumns.map((column, index) => (\n <div key={`selector-${column.name}`} className=\"column-selector\">\n {partitionTables?.[index] && (\n <Picker\n label={column.name}\n labelPosition=\"side\"\n table={partitionTables[index]}\n direction=\"bottom\"\n shouldFlip={false}\n keyColumn={partitionTables[index].columns[index].name}\n selectedKey={\n partitionConfig?.mode === 'partition'\n ? (partitionConfig.partitions[index] as ItemKey)\n : null\n }\n placeholder=\"Select a key\"\n labelColumn={partitionTables[index].columns[index].name}\n onChange={this.getCachedChangeCallback(index)}\n isDisabled={isLoading || partitionConfig == null}\n />\n )}\n {model.partitionColumns.length - 1 === index || (\n <FontAwesomeIcon icon={vsChevronRight} />\n )}\n </div>\n ));\n return (\n <div className=\"iris-grid-partition-selector\">\n <div className=\"partition-button-group\">\n <Button\n onClick={this.handlePartitionTableClick}\n kind=\"inline\"\n tooltip={\n model.isPartitionAwareSourceTable\n ? 'View keys as table'\n : 'View underlying partition table'\n }\n icon={vsKey}\n active={partitionConfig?.mode === 'keys'}\n disabled={isLoading || partitionConfig == null}\n >\n Partitions\n </Button>\n <Button\n onClick={this.handleMergeClick}\n kind=\"inline\"\n tooltip=\"View all partitions as one merged table\"\n icon={<FontAwesomeIcon icon={vsMerge} rotation={90} />}\n active={partitionConfig?.mode === 'merged'}\n disabled={isLoading || partitionConfig == null}\n >\n {model.isPartitionAwareSourceTable ? 'Coalesce' : 'Merge'}\n </Button>\n </div>\n {partitionSelectors}\n </div>\n );\n }\n}\n\nexport default IrisGridPartitionSelector;\n"],"mappings":";;;;;;;AAAA,OAAOA,KAAK,IAAIC,SAAS,QAAQ,OAAO;AACxC,OAAOC,QAAQ,MAAM,UAAU;AAC/B,SAASC,eAAe,QAAQ,gCAAgC;AAChE,SAASC,MAAM,QAAsB,uBAAuB;AAC5D,SAASC,cAAc,EAAEC,OAAO,EAAEC,KAAK,QAAQ,kBAAkB;AACjE,OAAOC,GAAG,MAAM,gBAAgB;AAChC,SAASC,MAAM,QAAQ,6BAA6B;AAEpD,SAASC,UAAU,QAAQ,wBAAwB;AACnD,SAASC,aAAa,EAAEC,OAAO,EAAEC,YAAY,QAAQ,kBAAkB;AAAC;AAAA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAOxE,IAAMC,GAAG,GAAGV,GAAG,CAACW,MAAM,CAAC,2BAA2B,CAAC;AAgBnD,MAAMC,yBAAyB,SAASnB,SAAS,CAG/C;EACAoB,WAAWA,CAACC,KAAqC,EAAE;IACjD,KAAK,CAACA,KAAK,CAAC;IAACC,eAAA;IAAAA,eAAA;IAAAA,eAAA,kCAyPWrB,QAAQ,CAC/BsB,KAAa,IAAMC,KAAc,IAChC,IAAI,CAACC,qBAAqB,CAACF,KAAK,EAAEC,KAAK,CAAC,EAC1C;MAAEE,GAAG,EAAE;IAAI,CACb,CAAC;IAAAJ,eAAA,uCAE8BrB,QAAQ,CACpCsB,KAAa,IAAMC,KAAc,IAAK,IAAI,CAACG,eAAe,CAACJ,KAAK,EAAEC,KAAK,CAAC,EACzE;MAAEE,GAAG,EAAE;IAAI,CACb,CAAC;IAhQC,IAAI,CAACE,yBAAyB,GAAG,IAAI,CAACA,yBAAyB,CAACC,IAAI,CAAC,IAAI,CAAC;IAC1E,IAAI,CAACC,gBAAgB,GAAG,IAAI,CAACA,gBAAgB,CAACD,IAAI,CAAC,IAAI,CAAC;IACxD,IAAI,CAACJ,qBAAqB,GAAG,IAAI,CAACA,qBAAqB,CAACI,IAAI,CAAC,IAAI,CAAC;IAElE,IAAM;MAAEE;IAAM,CAAC,GAAGV,KAAK;IACvB,IAAI,CAACW,UAAU,GAAG,IAAIvB,UAAU,CAACsB,KAAK,CAACE,EAAE,CAAC;IAC1C,IAAI,CAACC,OAAO,GAAG,IAAIvB,OAAO,CAAC,CAAC;IAE5B,IAAI,CAACwB,KAAK,GAAG;MACX;MACAC,SAAS,EAAE,IAAI;MAEfC,SAAS,EAAE,IAAI;MACfC,SAAS,EAAE,IAAI;MACfC,eAAe,EAAE;IACnB,CAAC;EACH;EAEMC,iBAAiBA,CAAA,EAAkB;IAAA,IAAAC,KAAA;IAAA,OAAAC,iBAAA;MACvC,IAAM;QAAEX;MAAM,CAAC,GAAGU,KAAI,CAACpB,KAAK;MAE5B,IAAI;QACF,IAAMiB,SAAS,SAASG,KAAI,CAACP,OAAO,CAACS,GAAG,CACtCZ,KAAK,CAACa,kBAAkB,CAAC,CAAC,CAACC,IAAI,CAACC,QAAQ,IAAIA,QAAQ,CAAC,EACrDC,CAAC,IAAIA,CAAC,CAACC,KAAK,CAAC,CACf,CAAC;QAED,IAAMX,SAAS,SAASI,KAAI,CAACP,OAAO,CAACS,GAAG,CAACZ,KAAK,CAACkB,kBAAkB,CAAC,CAAC,EAAEF,CAAC,IACpEA,CAAC,CAACC,KAAK,CAAC,CACV,CAAC;QAEDP,KAAI,CAACS,QAAQ,CACX;UACEZ,SAAS;UACTD,SAAS;UACTD,SAAS,EAAE;QACb,CAAC,EACDK,KAAI,CAACU,sBACP,CAAC;MACH,CAAC,CAAC,OAAOC,CAAC,EAAE;QACV,IAAI,CAACxC,YAAY,CAACyC,UAAU,CAACD,CAAC,CAAC,EAAE;UAC/B;UACA,MAAMA,CAAC;QACT;MACF;IAAC;EACH;EAEAE,kBAAkBA,CAACC,SAAyC,EAAQ;IAClE,IAAM;MAAEC,eAAe,EAAEC;IAAW,CAAC,GAAGF,SAAS;IAEjD,IAAM;MAAEC;IAAgB,CAAC,GAAG,IAAI,CAACnC,KAAK;IAEtC,IAAIoC,UAAU,KAAKD,eAAe,EAAE;MAClC,IAAI,CAACL,sBAAsB,CAAC,CAAC;IAC/B;EACF;EAEAO,oBAAoBA,CAAA,EAAS;IAC3B,IAAI,CAACxB,OAAO,CAACyB,MAAM,CAAC,CAAC;IAErB,IAAM;MAAErB,SAAS;MAAED,SAAS;MAAEE;IAAgB,CAAC,GAAG,IAAI,CAACJ,KAAK;IAC5DE,SAAS,aAATA,SAAS,eAATA,SAAS,CAAEW,KAAK,CAAC,CAAC;IAClBV,SAAS,aAATA,SAAS,eAATA,SAAS,CAAEU,KAAK,CAAC,CAAC;IAClBT,eAAe,aAAfA,eAAe,eAAfA,eAAe,CAAEqB,OAAO,CAACC,KAAK,IAAIA,KAAK,CAACb,KAAK,CAAC,CAAC,CAAC;EAClD;EAMApB,yBAAyBA,CAAA,EAAS;IAChCX,GAAG,CAAC6C,MAAM,CAAC,2BAA2B,CAAC;IAEvC,IAAM;MAAEN;IAAgB,CAAC,GAAG,IAAI,CAACnC,KAAK;IACtCX,aAAa,CAAC8C,eAAe,CAAC;IAE9B,IAAMO,kBAAkB,GAAAC,aAAA,KAAQR,eAAe,CAAE;IACjD;IACAO,kBAAkB,CAACE,IAAI,GACrBT,eAAe,CAACS,IAAI,KAAK,MAAM,GAAG,WAAW,GAAG,MAAM;IACxD,IAAI,CAACC,UAAU,CAACH,kBAAkB,CAAC;EACrC;EAEAjC,gBAAgBA,CAAA,EAAS;IACvBb,GAAG,CAAC6C,MAAM,CAAC,kBAAkB,CAAC;IAE9B,IAAM;MAAEN;IAAgB,CAAC,GAAG,IAAI,CAACnC,KAAK;IACtCX,aAAa,CAAC8C,eAAe,CAAC;IAC9B,IAAMO,kBAAkB,GAAAC,aAAA,KAAQR,eAAe,CAAE;IACjD;IACAO,kBAAkB,CAACE,IAAI,GACrBT,eAAe,CAACS,IAAI,KAAK,QAAQ,GAAG,WAAW,GAAG,QAAQ;IAC5D,IAAI,CAACC,UAAU,CAACH,kBAAkB,CAAC;EACrC;;EAEA;AACF;AACA;AACA;AACA;EACQtC,qBAAqBA,CACzBF,KAAa,EACb4C,aAAsB,EACP;IAAA,IAAAC,MAAA;IAAA,OAAA1B,iBAAA;MACf,IAAM;QAAEc,eAAe,EAAEC;MAAW,CAAC,GAAGW,MAAI,CAAC/C,KAAK;MAClDX,aAAa,CAAC+C,UAAU,CAAC;MAEzBxC,GAAG,CAACoD,KAAK,CAAC,uBAAuB,EAAE9C,KAAK,EAAE4C,aAAa,EAAEV,UAAU,CAAC;MAEpE,IAAMa,aAAa,GAAG,CAAC,GAAGb,UAAU,CAACc,UAAU,CAAC;MAChDD,aAAa,CAAC/C,KAAK,CAAC,GAAG4C,aAAa;MAEpC,IAAM;QAAE9B;MAAU,CAAC,GAAG+B,MAAI,CAACjC,KAAK;MAChC,IAAM;QAAEG;MAAU,CAAC,GAAG8B,MAAI,CAACjC,KAAK;MAEhCzB,aAAa,CAAC2B,SAAS,CAAC;MACxB3B,aAAa,CAAC4B,SAAS,CAAC;MACxB,IAAI;QACF8B,MAAI,CAAClB,QAAQ,CAAC;UAAEd,SAAS,EAAE;QAAK,CAAC,CAAC;QAElC,IAAMW,CAAC,SAASqB,MAAI,CAAClC,OAAO,CAACS,GAAG,CAACN,SAAS,CAACmC,IAAI,CAAC,CAAC,EAAEC,KAAK,IACtDA,KAAK,CAACzB,KAAK,CAAC,CACd,CAAC;;QAED;QACA,IAAM0B,gBAAgB,GAAGJ,aAAa,CACnCK,KAAK,CAAC,CAAC,EAAEpD,KAAK,GAAG,CAAC,CAAC,CACnBqD,GAAG,CAAC,CAACC,SAAS,EAAEC,CAAC,KAAK;UACrB,IAAMC,eAAe,GAAGhC,CAAC,CAACiC,OAAO,CAACF,CAAC,CAAC;UACpC,OAAOV,MAAI,CAACpC,UAAU,CAACiD,oBAAoB,CACzCF,eAAe,EACfF,SACF,CAAC;QACH,CAAC,CAAC;QACJ9B,CAAC,CAACmC,WAAW,CAACR,gBAAgB,CAAC;QAC/B3B,CAAC,CAACoC,WAAW,CAAC,CAAC,EAAE,CAAC,EAAEpC,CAAC,CAACiC,OAAO,CAAC;QAC9B,IAAMI,IAAI,SAAShB,MAAI,CAAClC,OAAO,CAACS,GAAG,CAACI,CAAC,CAACsC,eAAe,CAAC,CAAC,CAAC;QACxD,IAAMC,SAA0B,GAAG;UACjC;UACA;UACA;UACAf,UAAU,EAAEjC,SAAS,CAAC0C,OAAO,CAACJ,GAAG,CAACW,MAAM,IAAIH,IAAI,CAACI,IAAI,CAAC,CAAC,CAAC,CAACC,GAAG,CAACF,MAAM,CAAC,CAAC;UACrEtB,IAAI,EAAE;QACR,CAAC;QACDlB,CAAC,CAACC,KAAK,CAAC,CAAC;QACToB,MAAI,CAACF,UAAU,CAACoB,SAAS,CAAC;MAC5B,CAAC,CAAC,OAAOlC,CAAC,EAAE;QACV,IAAI,CAACxC,YAAY,CAACyC,UAAU,CAACD,CAAC,CAAC,EAAE;UAC/BnC,GAAG,CAACyE,KAAK,CAAC,gCAAgC,EAAEtC,CAAC,CAAC;QAChD;MACF,CAAC,SAAS;QACRgB,MAAI,CAAClB,QAAQ,CAAC;UAAEd,SAAS,EAAE;QAAM,CAAC,CAAC;MACrC;IAAC;EACH;EAEA8B,UAAUA,CAACV,eAAgC,EAAQ;IACjDvC,GAAG,CAAC6C,MAAM,CAAC,YAAY,EAAEN,eAAe,CAAC;IAEzC,IAAM;MAAEmC;IAAS,CAAC,GAAG,IAAI,CAACtE,KAAK;IAC/BsE,QAAQ,CAACnC,eAAe,CAAC;EAC3B;;EAEA;AACF;AACA;AACA;AACA;EACE7B,eAAeA,CAACJ,KAAa,EAAEC,KAAc,EAAU;IACrD,IAAM;MAAEO;IAAM,CAAC,GAAG,IAAI,CAACV,KAAK;IAE5B,IAAIG,KAAK,KAAK,IAAI,EAAE;MAClB,OAAO,QAAQ;IACjB;IAEA,IAAIA,KAAK,KAAKoE,SAAS,IAAIpE,KAAK,KAAK,EAAE,EAAE;MACvC,OAAO,EAAE;IACX;IACA,IAAM+D,MAAM,GAAGxD,KAAK,CAAC8D,gBAAgB,CAACtE,KAAK,CAAC;IAC5C,IAAId,UAAU,CAACqF,UAAU,CAACP,MAAM,CAACQ,IAAI,CAAC,IAAIvE,KAAK,CAACwE,QAAQ,CAAC,CAAC,CAACC,MAAM,GAAG,CAAC,EAAE;MACrE,OAAOC,MAAM,CAACC,YAAY,CAACC,QAAQ,CAAC5E,KAAK,CAACwE,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC5D;IACA,OAAOjE,KAAK,CAACsE,aAAa,CAAC7E,KAAK,EAAE+D,MAAM,CAACQ,IAAI,EAAER,MAAM,CAACe,IAAI,CAAC;EAC7D;;EAEA;AACF;AACA;EACQnD,sBAAsBA,CAAA,EAAkB;IAAA,IAAAoD,MAAA;IAAA,OAAA7D,iBAAA;MAC5C,IAAM;QAAEX;MAAM,CAAC,GAAGwE,MAAI,CAAClF,KAAK;MAC5B,IAAM;QAAEmC,eAAe,EAAEC;MAAW,CAAC,GAAG8C,MAAI,CAAClF,KAAK;MAClD,IAAIoC,UAAU,IAAI,IAAI,EAAE;QACtB;MACF;MAEA,IAAM;QAAEnB;MAAU,CAAC,GAAGiE,MAAI,CAACpE,KAAK;MAChCzB,aAAa,CAAC4B,SAAS,CAAC;MAExB,IAAMoC,gBAAgB,GAAG,CAAC,GAAGjB,UAAU,CAACc,UAAU,CAAC,CAACK,GAAG,CAAC,CAACC,SAAS,EAAEC,CAAC,KAAK;QACxE,IAAMC,eAAe,GAAGzC,SAAS,CAAC0C,OAAO,CAACF,CAAC,CAAC;QAC5C,OAAOyB,MAAI,CAACvE,UAAU,CAACiD,oBAAoB,CAACF,eAAe,EAAEF,SAAS,CAAC;MACzE,CAAC,CAAC;MAEF,IAAMtC,eAAe,SAASiE,OAAO,CAACC,GAAG,CACvC1E,KAAK,CAAC8D,gBAAgB,CAACjB,GAAG;QAAA,IAAA8B,IAAA,GAAAhE,iBAAA,CAAC,WAAOiE,CAAC,EAAE7B,CAAC,EAAK;UACzCxC,SAAS,CAAC4C,WAAW,CAACR,gBAAgB,CAACC,KAAK,CAAC,CAAC,EAAEG,CAAC,CAAC,CAAC;UACnD,OAAOxC,SAAS,CAACsE,cAAc,CAAC7E,KAAK,CAAC8D,gBAAgB,CAAClB,KAAK,CAAC,CAAC,EAAEG,CAAC,GAAG,CAAC,CAAC,CAAC;QACzE,CAAC;QAAA,iBAAA+B,EAAA,EAAAC,GAAA;UAAA,OAAAJ,IAAA,CAAAK,KAAA,OAAAC,SAAA;QAAA;MAAA,IACH,CAAC;MAEDT,MAAI,CAACrD,QAAQ,CAAC;QAAEX;MAAgB,CAAC,CAAC;IAAC;EACrC;EAEA0E,mBAAmBA,CAAC1E,eAA2B,EAA0B;IACvE,IAAM;MAAER,KAAK;MAAEyB;IAAgB,CAAC,GAAG,IAAI,CAACnC,KAAK;IAC7CX,aAAa,CAAC8C,eAAe,CAAC;IAC9B,IAAM;MAAEe;IAAW,CAAC,GAAGf,eAAe;IACtCvC,GAAG,CAACoD,KAAK,CAAC,qBAAqB,EAAEb,eAAe,CAAC;IAEjD,IAAIe,UAAU,CAAC0B,MAAM,KAAK1D,eAAe,CAAC0D,MAAM,EAAE;MAChD,MAAM,IAAIiB,KAAK,2CAAAC,MAAA,CAC6B5E,eAAe,CAAC0D,MAAM,2BAAAkB,MAAA,CAAwB5C,UAAU,CAAC0B,MAAM,CAC3G,CAAC;IACH;;IAEA;IACA,IAAMvB,gBAAwC,GAAG,EAAE;IACnD,KAAK,IAAII,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGP,UAAU,CAAC0B,MAAM,EAAEnB,CAAC,IAAI,CAAC,EAAE;MAC7C,IAAIA,CAAC,KAAK,CAAC,EAAE;QACX;QACAJ,gBAAgB,CAAC0C,IAAI,CAAC,EAAE,CAAC;MAC3B,CAAC,MAAM;QACL,IAAMC,cAAc,GAAG3C,gBAAgB,CAACI,CAAC,GAAG,CAAC,CAAC;QAC9C,IAAMwC,iBAAiB,GAAG/C,UAAU,CAACO,CAAC,GAAG,CAAC,CAAC;QAC3C,IAAMyC,cAAc,GAAGxF,KAAK,CAAC8D,gBAAgB,CAACf,CAAC,GAAG,CAAC,CAAC;QACpD,IAAM0C,eAAe,GAAG,CACtB,GAAGH,cAAc,EACjB,IAAI,CAACrF,UAAU,CAACiD,oBAAoB,CAClCsC,cAAc,EACdD,iBACF,CAAC,CACF;QACD5C,gBAAgB,CAAC0C,IAAI,CAACI,eAAe,CAAC;MACxC;IACF;IACA,OAAO9C,gBAAgB;EACzB;EAaA+C,MAAMA,CAAA,EAAgB;IACpB,IAAM;MAAE1F,KAAK;MAAEyB;IAAgB,CAAC,GAAG,IAAI,CAACnC,KAAK;IAC7C,IAAM;MAAEe,SAAS;MAAEG;IAAgB,CAAC,GAAG,IAAI,CAACJ,KAAK;IAEjD,IAAMuF,kBAAkB,GAAG3F,KAAK,CAAC8D,gBAAgB,CAACjB,GAAG,CAAC,CAACW,MAAM,EAAEhE,KAAK,kBAClEP,KAAA;MAAqC2G,SAAS,EAAC,iBAAiB;MAAAC,QAAA,GAC7D,CAAArF,eAAe,aAAfA,eAAe,uBAAfA,eAAe,CAAGhB,KAAK,CAAC,kBACvBT,IAAA,CAACN,MAAM;QACLqH,KAAK,EAAEtC,MAAM,CAACe,IAAK;QACnBwB,aAAa,EAAC,MAAM;QACpBjE,KAAK,EAAEtB,eAAe,CAAChB,KAAK,CAAE;QAC9BwG,SAAS,EAAC,QAAQ;QAClBC,UAAU,EAAE,KAAM;QAClBC,SAAS,EAAE1F,eAAe,CAAChB,KAAK,CAAC,CAACyD,OAAO,CAACzD,KAAK,CAAC,CAAC+E,IAAK;QACtD4B,WAAW,EACT,CAAA1E,eAAe,aAAfA,eAAe,uBAAfA,eAAe,CAAES,IAAI,MAAK,WAAW,GAChCT,eAAe,CAACe,UAAU,CAAChD,KAAK,CAAC,GAClC,IACL;QACD4G,WAAW,EAAC,cAAc;QAC1BC,WAAW,EAAE7F,eAAe,CAAChB,KAAK,CAAC,CAACyD,OAAO,CAACzD,KAAK,CAAC,CAAC+E,IAAK;QACxDX,QAAQ,EAAE,IAAI,CAAC0C,uBAAuB,CAAC9G,KAAK,CAAE;QAC9C+G,UAAU,EAAElG,SAAS,IAAIoB,eAAe,IAAI;MAAK,CAClD,CACF,EACAzB,KAAK,CAAC8D,gBAAgB,CAACI,MAAM,GAAG,CAAC,KAAK1E,KAAK,iBAC1CT,IAAA,CAACZ,eAAe;QAACqI,IAAI,EAAEnI;MAAe,CAAE,CACzC;IAAA,eAAA+G,MAAA,CAtBmB5B,MAAM,CAACe,IAAI,CAuB5B,CACN,CAAC;IACF,oBACEtF,KAAA;MAAK2G,SAAS,EAAC,8BAA8B;MAAAC,QAAA,gBAC3C5G,KAAA;QAAK2G,SAAS,EAAC,wBAAwB;QAAAC,QAAA,gBACrC9G,IAAA,CAACX,MAAM;UACLqI,OAAO,EAAE,IAAI,CAAC5G,yBAA0B;UACxC6G,IAAI,EAAC,QAAQ;UACbC,OAAO,EACL3G,KAAK,CAAC4G,2BAA2B,GAC7B,oBAAoB,GACpB,iCACL;UACDJ,IAAI,EAAEjI,KAAM;UACZsI,MAAM,EAAE,CAAApF,eAAe,aAAfA,eAAe,uBAAfA,eAAe,CAAES,IAAI,MAAK,MAAO;UACzC4E,QAAQ,EAAEzG,SAAS,IAAIoB,eAAe,IAAI,IAAK;UAAAoE,QAAA,EAChD;QAED,CAAQ,CAAC,eACT9G,IAAA,CAACX,MAAM;UACLqI,OAAO,EAAE,IAAI,CAAC1G,gBAAiB;UAC/B2G,IAAI,EAAC,QAAQ;UACbC,OAAO,EAAC,yCAAyC;UACjDH,IAAI,eAAEzH,IAAA,CAACZ,eAAe;YAACqI,IAAI,EAAElI,OAAQ;YAACyI,QAAQ,EAAE;UAAG,CAAE,CAAE;UACvDF,MAAM,EAAE,CAAApF,eAAe,aAAfA,eAAe,uBAAfA,eAAe,CAAES,IAAI,MAAK,QAAS;UAC3C4E,QAAQ,EAAEzG,SAAS,IAAIoB,eAAe,IAAI,IAAK;UAAAoE,QAAA,EAE9C7F,KAAK,CAAC4G,2BAA2B,GAAG,UAAU,GAAG;QAAO,CACnD,CAAC;MAAA,CACN,CAAC,EACLjB,kBAAkB;IAAA,CAChB,CAAC;EAEV;AACF;AAEA,eAAevG,yBAAyB","ignoreList":[]}
1
+ {"version":3,"file":"IrisGridPartitionSelector.js","names":["React","Component","memoizee","FontAwesomeIcon","Button","vsChevronRight","vsMerge","vsKey","Log","Picker","TableUtils","assertNotNull","Pending","PromiseUtils","jsx","_jsx","jsxs","_jsxs","log","module","IrisGridPartitionSelector","constructor","props","_defineProperty","index","value","handlePartitionSelect","max","getDisplayValue","handlePartitionTableClick","bind","handleMergeClick","model","tableUtils","dh","pending","state","isLoading","baseTable","keysTable","partitionTables","componentDidMount","_this","_asyncToGenerator","add","partitionKeysTable","then","keyTable","t","close","partitionBaseTable","setState","updatePartitionOptions","e","isCanceled","componentDidUpdate","prevProps","prevConfig","partitionConfig","componentWillUnmount","cancel","_this$state","forEach","table","debug2","newPartitionConfig","_objectSpread","mode","sendUpdate","selectedValue","_this2","debug","newPartitions","partitions","copy","tCopy","partitionFilters","slice","map","partition","i","partitionColumn","columns","makeNullableEqFilter","applyFilter","setViewport","data","getViewportData","newConfig","column","rows","get","error","onChange","undefined","partitionColumns","isCharType","type","toString","length","String","fromCharCode","parseInt","displayString","name","_this3","Promise","all","_ref","_","selectDistinct","_x","_x2","apply","arguments","getPartitionFilters","_this$props","Error","concat","push","previousFilter","previousPartition","previousColumn","partitionFilter","render","_this$props2","_this$state2","partitionSelectors","className","children","label","labelPosition","direction","shouldFlip","keyColumn","selectedKey","placeholder","labelColumn","getCachedChangeCallback","isDisabled","icon","onClick","kind","tooltip","isPartitionAwareSourceTable","active","disabled","rotation"],"sources":["../src/IrisGridPartitionSelector.tsx"],"sourcesContent":["import React, { Component } from 'react';\nimport memoizee from 'memoizee';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Button, type ItemKey } from '@deephaven/components';\nimport { vsChevronRight, vsMerge, vsKey } from '@deephaven/icons';\nimport Log from '@deephaven/log';\nimport { Picker } from '@deephaven/jsapi-components';\nimport type { dh } from '@deephaven/jsapi-types';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport { assertNotNull, Pending, PromiseUtils } from '@deephaven/utils';\nimport './IrisGridPartitionSelector.scss';\nimport {\n type PartitionConfig,\n type PartitionedGridModel,\n} from './PartitionedGridModel';\n\nconst log = Log.module('IrisGridPartitionSelector');\n\ninterface IrisGridPartitionSelectorProps {\n model: PartitionedGridModel;\n partitionConfig?: PartitionConfig;\n onChange: (partitionConfig: PartitionConfig) => void;\n}\ninterface IrisGridPartitionSelectorState {\n isLoading: boolean;\n\n baseTable: dh.Table | null;\n\n keysTable: dh.Table | null;\n\n partitionTables: dh.Table[] | null;\n}\nclass IrisGridPartitionSelector extends Component<\n IrisGridPartitionSelectorProps,\n IrisGridPartitionSelectorState\n> {\n constructor(props: IrisGridPartitionSelectorProps) {\n super(props);\n\n this.handlePartitionTableClick = this.handlePartitionTableClick.bind(this);\n this.handleMergeClick = this.handleMergeClick.bind(this);\n this.handlePartitionSelect = this.handlePartitionSelect.bind(this);\n\n const { model } = props;\n this.tableUtils = new TableUtils(model.dh);\n this.pending = new Pending();\n\n this.state = {\n // We start be loading the partition tables, so we should be in a loading state\n isLoading: true,\n\n baseTable: null,\n keysTable: null,\n partitionTables: null,\n };\n }\n\n async componentDidMount(): Promise<void> {\n const { model } = this.props;\n\n try {\n const keysTable = await this.pending.add(\n model.partitionKeysTable().then(keyTable => keyTable),\n t => t.close()\n );\n\n const baseTable = await this.pending.add(model.partitionBaseTable(), t =>\n t.close()\n );\n\n this.setState(\n {\n keysTable,\n baseTable,\n isLoading: false,\n },\n this.updatePartitionOptions\n );\n } catch (e) {\n if (!PromiseUtils.isCanceled(e)) {\n // Just re-throw the error if it's not a cancel\n throw e;\n }\n }\n }\n\n componentDidUpdate(prevProps: IrisGridPartitionSelectorProps): void {\n const { partitionConfig: prevConfig } = prevProps;\n\n const { partitionConfig } = this.props;\n\n if (prevConfig !== partitionConfig) {\n this.updatePartitionOptions();\n }\n }\n\n componentWillUnmount(): void {\n this.pending.cancel();\n\n const { keysTable, baseTable, partitionTables } = this.state;\n baseTable?.close();\n keysTable?.close();\n partitionTables?.forEach(table => table.close());\n }\n\n pending: Pending;\n\n tableUtils: TableUtils;\n\n handlePartitionTableClick(): void {\n log.debug2('handlePartitionTableClick');\n\n const { partitionConfig } = this.props;\n assertNotNull(partitionConfig);\n\n const newPartitionConfig = { ...partitionConfig };\n // Toggle between Keys and Partition mode\n newPartitionConfig.mode =\n partitionConfig.mode === 'keys' ? 'partition' : 'keys';\n this.sendUpdate(newPartitionConfig);\n }\n\n handleMergeClick(): void {\n log.debug2('handleMergeClick');\n\n const { partitionConfig } = this.props;\n assertNotNull(partitionConfig);\n const newPartitionConfig = { ...partitionConfig };\n // Toggle between Merged and Partition mode\n newPartitionConfig.mode =\n partitionConfig.mode === 'merged' ? 'partition' : 'merged';\n this.sendUpdate(newPartitionConfig);\n }\n\n /**\n * Handles when a partition dropdown selection is changed. Will send an update with the new partition config\n * @param index Index of the partition column that was changed\n * @param selectedValue Selected value of the partition column\n */\n async handlePartitionSelect(\n index: number,\n selectedValue: unknown\n ): Promise<void> {\n const { partitionConfig: prevConfig } = this.props;\n assertNotNull(prevConfig);\n\n log.debug('handlePartitionSelect', index, selectedValue, prevConfig);\n\n const newPartitions = [...prevConfig.partitions];\n newPartitions[index] = selectedValue;\n\n const { baseTable } = this.state;\n const { keysTable } = this.state;\n\n assertNotNull(baseTable);\n assertNotNull(keysTable);\n try {\n this.setState({ isLoading: true });\n\n const t = await this.pending.add(baseTable.copy(), tCopy =>\n tCopy.close()\n );\n\n // Apply our partition filters, and just get the first value\n const partitionFilters = newPartitions\n .slice(0, index + 1)\n .map((partition, i) => {\n const partitionColumn = t.columns[i];\n return this.tableUtils.makeNullableEqFilter(\n partitionColumn,\n partition\n );\n });\n t.applyFilter(partitionFilters);\n t.setViewport(0, 0, t.columns);\n const data = await this.pending.add(t.getViewportData());\n const newConfig: PartitionConfig = {\n // Core JSAPI returns undefined for null table values,\n // coalesce with null to differentiate null from no selection in the dropdown\n // https://github.com/deephaven/deephaven-core/issues/5400\n partitions: keysTable.columns.map(column => data.rows[0].get(column)),\n mode: 'partition',\n };\n t.close();\n this.sendUpdate(newConfig);\n } catch (e) {\n if (!PromiseUtils.isCanceled(e)) {\n log.error('Unable to get partition tables', e);\n }\n } finally {\n this.setState({ isLoading: false });\n }\n }\n\n sendUpdate(partitionConfig: PartitionConfig): void {\n log.debug2('sendUpdate', partitionConfig);\n\n const { onChange } = this.props;\n onChange(partitionConfig);\n }\n\n /**\n * Calls model.displayString with a special character case\n * @param index The index of the partition column to get the display value for\n * @param value The partition value to get the display value for\n */\n getDisplayValue(index: number, value: unknown): string {\n const { model } = this.props;\n\n if (value === null) {\n return '(null)';\n }\n\n if (value === undefined || value === '') {\n return '';\n }\n const column = model.partitionColumns[index];\n if (TableUtils.isCharType(column.type) && value.toString().length > 0) {\n return String.fromCharCode(parseInt(value.toString(), 10));\n }\n return model.displayString(value, column.type, column.name);\n }\n\n /**\n * Update the options on the partition dropdown tables\n */\n async updatePartitionOptions(): Promise<void> {\n const { model } = this.props;\n const { partitionConfig: prevConfig } = this.props;\n if (prevConfig == null) {\n return;\n }\n\n const { keysTable } = this.state;\n assertNotNull(keysTable);\n\n const partitionFilters = [...prevConfig.partitions].map((partition, i) => {\n const partitionColumn = keysTable.columns[i];\n return this.tableUtils.makeNullableEqFilter(partitionColumn, partition);\n });\n\n const partitionTables = await Promise.all(\n model.partitionColumns.map(async (_, i) => {\n keysTable.applyFilter(partitionFilters.slice(0, i));\n return keysTable.selectDistinct(model.partitionColumns.slice(0, i + 1));\n })\n );\n\n this.setState({ partitionTables });\n }\n\n getPartitionFilters(partitionTables: dh.Table[]): dh.FilterCondition[][] {\n const { model, partitionConfig } = this.props;\n assertNotNull(partitionConfig);\n const { partitions } = partitionConfig;\n log.debug('getPartitionFilters', partitionConfig);\n\n if (partitions.length !== partitionTables.length) {\n throw new Error(\n `Invalid partition config set. Expected ${partitionTables.length} partitions, but got ${partitions.length}`\n );\n }\n\n // The filters are applied in order, so we need to build up the filters for each partition\n const partitionFilters: dh.FilterCondition[][] = [];\n for (let i = 0; i < partitions.length; i += 1) {\n if (i === 0) {\n // There's no reason to ever filter the first table\n partitionFilters.push([]);\n } else {\n const previousFilter = partitionFilters[i - 1];\n const previousPartition = partitions[i - 1];\n const previousColumn = model.partitionColumns[i - 1];\n const partitionFilter = [\n ...previousFilter,\n this.tableUtils.makeNullableEqFilter(\n previousColumn,\n previousPartition\n ),\n ];\n partitionFilters.push(partitionFilter);\n }\n }\n return partitionFilters;\n }\n\n getCachedChangeCallback = memoizee(\n (index: number) => (value: unknown) =>\n this.handlePartitionSelect(index, value),\n { max: 100 }\n );\n\n getCachedFormatValueCallback = memoizee(\n (index: number) => (value: unknown) => this.getDisplayValue(index, value),\n { max: 100 }\n );\n\n render(): JSX.Element {\n const { model, partitionConfig } = this.props;\n const { isLoading, partitionTables } = this.state;\n\n const partitionSelectors = model.partitionColumns.map((column, index) => (\n <div key={`selector-${column.name}`} className=\"column-selector\">\n {partitionTables?.[index] && (\n <Picker\n label={column.name}\n labelPosition=\"side\"\n table={partitionTables[index]}\n direction=\"bottom\"\n shouldFlip={false}\n keyColumn={partitionTables[index].columns[index].name}\n selectedKey={\n partitionConfig?.mode === 'partition'\n ? (partitionConfig.partitions[index] as ItemKey)\n : null\n }\n placeholder=\"Select a key\"\n labelColumn={partitionTables[index].columns[index].name}\n onChange={this.getCachedChangeCallback(index)}\n isDisabled={isLoading || partitionConfig == null}\n />\n )}\n {model.partitionColumns.length - 1 === index || (\n <FontAwesomeIcon icon={vsChevronRight} />\n )}\n </div>\n ));\n return (\n <div className=\"iris-grid-partition-selector\">\n <div className=\"partition-button-group\">\n <Button\n onClick={this.handlePartitionTableClick}\n kind=\"inline\"\n tooltip={\n model.isPartitionAwareSourceTable\n ? 'View keys as table'\n : 'View underlying partition table'\n }\n icon={vsKey}\n active={partitionConfig?.mode === 'keys'}\n disabled={isLoading || partitionConfig == null}\n >\n Partitions\n </Button>\n <Button\n onClick={this.handleMergeClick}\n kind=\"inline\"\n tooltip=\"View all partitions as one merged table\"\n icon={<FontAwesomeIcon icon={vsMerge} rotation={90} />}\n active={partitionConfig?.mode === 'merged'}\n disabled={isLoading || partitionConfig == null}\n >\n {model.isPartitionAwareSourceTable ? 'Coalesce' : 'Merge'}\n </Button>\n </div>\n {partitionSelectors}\n </div>\n );\n }\n}\n\nexport default IrisGridPartitionSelector;\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"IrisGridProxyModel.d.ts","sourceRoot":"","sources":["../src/IrisGridProxyModel.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"IrisGridProxyModel.d.ts","sourceRoot":"","sources":["../src/IrisGridProxyModel.ts"],"names":[],"mappings":"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"}
@@ -102,6 +102,15 @@ class IrisGridProxyModel extends IrisGridModel {
102
102
  return Reflect.set(target, prop, value, target);
103
103
  }
104
104
  return Reflect.set(target.model, prop, value, target.model);
105
+ },
106
+ // Mirror `get` so duck-type checks (`'prop' in model`) used by inner
107
+ // model variants (e.g. pivot) resolve against the inner model when
108
+ // the proxy itself doesn't define the property.
109
+ has(target, prop) {
110
+ if (Reflect.has(target, prop)) {
111
+ return true;
112
+ }
113
+ return Reflect.has(target.model, prop);
105
114
  }
106
115
  });
107
116
  }
@@ -116,10 +125,8 @@ class IrisGridProxyModel extends IrisGridModel {
116
125
  }
117
126
  handleModelEvent(event) {
118
127
  log.debug2('handleModelEvent', event);
119
- var {
120
- detail,
121
- type
122
- } = event;
128
+ var detail = event.detail,
129
+ type = event.type;
123
130
  this.dispatchEvent(new EventShimCustomEvent(type, {
124
131
  detail
125
132
  }));
@@ -127,9 +134,7 @@ class IrisGridProxyModel extends IrisGridModel {
127
134
  setModel(model) {
128
135
  log.debug('setModel', model);
129
136
  var oldModel = this.model;
130
- var {
131
- columns: oldColumns
132
- } = oldModel;
137
+ var oldColumns = oldModel.columns;
133
138
  if (oldModel !== this.originalModel) {
134
139
  oldModel.close();
135
140
  }
@@ -137,17 +142,25 @@ class IrisGridProxyModel extends IrisGridModel {
137
142
  if (this.listenerCount > 0) {
138
143
  this.addListeners(model);
139
144
  }
145
+ if (oldModel !== model) {
146
+ // Signal an inner-model swap so the host can reset view state owned by
147
+ // the previous model (e.g. `movedColumns`). Dispatched before
148
+ // COLUMNS_CHANGED / TABLE_CHANGED so the host resets moves first, then
149
+ // reacts to the new column set.
150
+ this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.MODEL_CHANGED, {
151
+ detail: model
152
+ }));
153
+ }
140
154
  if (oldColumns !== model.columns) {
141
155
  this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.COLUMNS_CHANGED, {
142
156
  detail: model.columns
143
157
  }));
144
158
  } else if (this.currentViewport != null) {
145
159
  // If the columns haven't changed, the current viewport should still valid, and needs to be set on the new model
146
- var {
147
- top,
148
- bottom,
149
- columns
150
- } = this.currentViewport;
160
+ var _this$currentViewport = this.currentViewport,
161
+ top = _this$currentViewport.top,
162
+ bottom = _this$currentViewport.bottom,
163
+ columns = _this$currentViewport.columns;
151
164
  model.setViewport(top, bottom, columns);
152
165
  }
153
166
  if (isIrisGridTableModelTemplate(model)) {
@@ -164,7 +177,15 @@ class IrisGridProxyModel extends IrisGridModel {
164
177
  if (this.listenerCount > 0) {
165
178
  this.removeListeners(this.model);
166
179
  }
167
- this.modelPromise = PromiseUtils.makeCancelable(modelPromise, model => model.close());
180
+ this.modelPromise = PromiseUtils.makeCancelable(modelPromise, model => {
181
+ // Don't close originalModel — it's the source-of-truth model owned
182
+ // by this proxy, not a transient transform result. Closing it would
183
+ // invalidate the underlying table for any consumer that later asks
184
+ // to swap back to it.
185
+ if (model !== this.originalModel) {
186
+ model.close();
187
+ }
188
+ });
168
189
  this.modelPromise.then(model => {
169
190
  this.modelPromise = null;
170
191
  this.setModel(model);
@@ -213,7 +234,13 @@ class IrisGridProxyModel extends IrisGridModel {
213
234
  return (this.originalModel.isRollupAvailable || this.rollup != null) && this.selectDistinct.length === 0;
214
235
  }
215
236
  get isSelectDistinctAvailable() {
216
- return (this.originalModel.isSelectDistinctAvailable || this.selectDistinct.length > 0) && this.rollup == null;
237
+ return (
238
+ // The presented model must support select distinct. Models that don't
239
+ // (e.g. pivot models) report false here even though the underlying
240
+ // source table would. This keeps the capability consistent with whatever
241
+ // is currently displayed.
242
+ this.model.isSelectDistinctAvailable && (this.originalModel.isSelectDistinctAvailable || this.selectDistinct.length > 0) && this.rollup == null
243
+ );
217
244
  }
218
245
  get originalColumns() {
219
246
  return this.originalModel.columns;