@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.
- package/README.md +284 -1
- package/dist/AdvancedFilterCreator.js +65 -102
- package/dist/AdvancedFilterCreator.js.map +1 -1
- package/dist/AdvancedFilterCreatorFilterItem.js +22 -37
- package/dist/AdvancedFilterCreatorFilterItem.js.map +1 -1
- package/dist/AdvancedFilterCreatorSelectValue.js +37 -63
- package/dist/AdvancedFilterCreatorSelectValue.js.map +1 -1
- package/dist/AdvancedFilterCreatorSelectValueList.js +29 -59
- package/dist/AdvancedFilterCreatorSelectValueList.js.map +1 -1
- package/dist/ColumnHeaderGroup.js +6 -8
- package/dist/ColumnHeaderGroup.js.map +1 -1
- package/dist/ColumnStatistics.js +22 -28
- package/dist/ColumnStatistics.js.map +1 -1
- package/dist/CommonTypes.d.ts +62 -2
- package/dist/CommonTypes.d.ts.map +1 -1
- package/dist/CommonTypes.js.map +1 -1
- package/dist/CrossColumnSearch.js +20 -29
- package/dist/CrossColumnSearch.js.map +1 -1
- package/dist/FilterInputField.js +19 -46
- package/dist/FilterInputField.js.map +1 -1
- package/dist/GotoRow.js +32 -29
- package/dist/GotoRow.js.map +1 -1
- package/dist/IrisGrid.d.ts +85 -2
- package/dist/IrisGrid.d.ts.map +1 -1
- package/dist/IrisGrid.js +709 -861
- package/dist/IrisGrid.js.map +1 -1
- package/dist/IrisGridBottomBar.js +10 -11
- package/dist/IrisGridBottomBar.js.map +1 -1
- package/dist/IrisGridCacheUtils.js +28 -8
- package/dist/IrisGridCacheUtils.js.map +1 -1
- package/dist/IrisGridCellOverflowModal.js +30 -13
- package/dist/IrisGridCellOverflowModal.js.map +1 -1
- package/dist/IrisGridCellRendererUtils.js +6 -12
- package/dist/IrisGridCellRendererUtils.js.map +1 -1
- package/dist/IrisGridCopyHandler.js +28 -47
- package/dist/IrisGridCopyHandler.js.map +1 -1
- package/dist/IrisGridMetricCalculator.js +28 -51
- package/dist/IrisGridMetricCalculator.js.map +1 -1
- package/dist/IrisGridModel.d.ts +30 -1
- package/dist/IrisGridModel.d.ts.map +1 -1
- package/dist/IrisGridModel.js +36 -1
- package/dist/IrisGridModel.js.map +1 -1
- package/dist/IrisGridModelUpdater.js +32 -30
- package/dist/IrisGridModelUpdater.js.map +1 -1
- package/dist/IrisGridModelWidgetProps.d.ts +26 -0
- package/dist/IrisGridModelWidgetProps.d.ts.map +1 -0
- package/dist/IrisGridModelWidgetProps.js +2 -0
- package/dist/IrisGridModelWidgetProps.js.map +1 -0
- package/dist/IrisGridPartitionSelector.js +28 -62
- package/dist/IrisGridPartitionSelector.js.map +1 -1
- package/dist/IrisGridProxyModel.d.ts.map +1 -1
- package/dist/IrisGridProxyModel.js +41 -14
- package/dist/IrisGridProxyModel.js.map +1 -1
- package/dist/IrisGridRenderer.js +162 -264
- package/dist/IrisGridRenderer.js.map +1 -1
- package/dist/IrisGridTableModel.js +23 -16
- package/dist/IrisGridTableModel.js.map +1 -1
- package/dist/IrisGridTableModelTemplate.js +49 -73
- package/dist/IrisGridTableModelTemplate.js.map +1 -1
- package/dist/IrisGridTestUtils.js +19 -19
- package/dist/IrisGridTestUtils.js.map +1 -1
- package/dist/IrisGridTextCellRenderer.d.ts.map +1 -1
- package/dist/IrisGridTextCellRenderer.js +36 -53
- package/dist/IrisGridTextCellRenderer.js.map +1 -1
- package/dist/IrisGridTheme.js +9 -1
- package/dist/IrisGridTheme.js.map +1 -1
- package/dist/IrisGridThemeProvider.js +5 -7
- package/dist/IrisGridThemeProvider.js.map +1 -1
- package/dist/IrisGridTreeTableModel.js +5 -9
- package/dist/IrisGridTreeTableModel.js.map +1 -1
- package/dist/IrisGridUtils.d.ts +25 -2
- package/dist/IrisGridUtils.d.ts.map +1 -1
- package/dist/IrisGridUtils.js +297 -294
- package/dist/IrisGridUtils.js.map +1 -1
- package/dist/LazyIrisGrid.d.ts +1 -1
- package/dist/NoPastePermissionModal.js +3 -5
- package/dist/NoPastePermissionModal.js.map +1 -1
- package/dist/PendingDataBottomBar.js +27 -16
- package/dist/PendingDataBottomBar.js.map +1 -1
- package/dist/ToastBottomBar.js +16 -8
- package/dist/ToastBottomBar.js.map +1 -1
- package/dist/format-context-menus/CustomFormatAction.js +11 -24
- package/dist/format-context-menus/CustomFormatAction.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/key-handlers/CopyCellKeyHandler.js +3 -4
- package/dist/key-handlers/CopyCellKeyHandler.js.map +1 -1
- package/dist/key-handlers/CopyKeyHandler.js +1 -3
- package/dist/key-handlers/CopyKeyHandler.js.map +1 -1
- package/dist/key-handlers/ReverseKeyHandler.js +1 -3
- package/dist/key-handlers/ReverseKeyHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.js +35 -59
- package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js +13 -29
- package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js +8 -17
- package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridContextMenuHandler.js +96 -199
- package/dist/mousehandlers/IrisGridContextMenuHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridDataSelectMouseHandler.js +2 -4
- package/dist/mousehandlers/IrisGridDataSelectMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridFilterMouseHandler.js +16 -30
- package/dist/mousehandlers/IrisGridFilterMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridPartitionedTableMouseHandler.js +5 -13
- package/dist/mousehandlers/IrisGridPartitionedTableMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridRowTreeMouseHandler.js +20 -36
- package/dist/mousehandlers/IrisGridRowTreeMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridSortMouseHandler.js +3 -5
- package/dist/mousehandlers/IrisGridSortMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridTokenMouseHandler.js +9 -18
- package/dist/mousehandlers/IrisGridTokenMouseHandler.js.map +1 -1
- package/dist/mousehandlers/PendingMouseHandler.js +10 -18
- package/dist/mousehandlers/PendingMouseHandler.js.map +1 -1
- package/dist/sidebar/AdvancedSettingsMenu.js +12 -5
- package/dist/sidebar/AdvancedSettingsMenu.js.map +1 -1
- package/dist/sidebar/ChartBuilder.js +45 -102
- package/dist/sidebar/ChartBuilder.js.map +1 -1
- package/dist/sidebar/CustomColumnBuilder.js +35 -77
- package/dist/sidebar/CustomColumnBuilder.js.map +1 -1
- package/dist/sidebar/CustomColumnInput.js +9 -11
- package/dist/sidebar/CustomColumnInput.js.map +1 -1
- package/dist/sidebar/InputEditor.js +17 -24
- package/dist/sidebar/InputEditor.js.map +1 -1
- package/dist/sidebar/IrisGridTableOptionsWidgetProps.d.ts +22 -0
- package/dist/sidebar/IrisGridTableOptionsWidgetProps.d.ts.map +1 -0
- package/dist/sidebar/IrisGridTableOptionsWidgetProps.js +2 -0
- package/dist/sidebar/IrisGridTableOptionsWidgetProps.js.map +1 -0
- package/dist/sidebar/OptionType.d.ts +8 -0
- package/dist/sidebar/OptionType.d.ts.map +1 -1
- package/dist/sidebar/OptionType.js +7 -0
- package/dist/sidebar/OptionType.js.map +1 -1
- package/dist/sidebar/PluginTableOptionsErrorBoundary.d.ts +30 -0
- package/dist/sidebar/PluginTableOptionsErrorBoundary.d.ts.map +1 -0
- package/dist/sidebar/PluginTableOptionsErrorBoundary.js +55 -0
- package/dist/sidebar/PluginTableOptionsErrorBoundary.js.map +1 -0
- package/dist/sidebar/RollupRows.js +72 -113
- package/dist/sidebar/RollupRows.js.map +1 -1
- package/dist/sidebar/SelectDistinctBuilder.js +16 -33
- package/dist/sidebar/SelectDistinctBuilder.js.map +1 -1
- package/dist/sidebar/TableCsvExporter.js +50 -74
- package/dist/sidebar/TableCsvExporter.js.map +1 -1
- package/dist/sidebar/TableSaver.js +18 -42
- package/dist/sidebar/TableSaver.js.map +1 -1
- package/dist/sidebar/aggregations/AggregationEdit.js +25 -18
- package/dist/sidebar/aggregations/AggregationEdit.js.map +1 -1
- package/dist/sidebar/aggregations/AggregationUtils.js +1 -3
- package/dist/sidebar/aggregations/AggregationUtils.js.map +1 -1
- package/dist/sidebar/aggregations/Aggregations.js +45 -34
- package/dist/sidebar/aggregations/Aggregations.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ColumnFormatEditor.js +35 -24
- package/dist/sidebar/conditional-formatting/ColumnFormatEditor.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionEditor.js +38 -21
- package/dist/sidebar/conditional-formatting/ConditionEditor.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js +27 -11
- package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js +9 -11
- package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js +48 -57
- package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js.map +1 -1
- package/dist/sidebar/conditional-formatting/RowFormatEditor.js +35 -24
- package/dist/sidebar/conditional-formatting/RowFormatEditor.js.map +1 -1
- package/dist/sidebar/conditional-formatting/StyleEditor.js +26 -11
- package/dist/sidebar/conditional-formatting/StyleEditor.js.map +1 -1
- package/dist/sidebar/index.d.ts +3 -2
- package/dist/sidebar/index.d.ts.map +1 -1
- package/dist/sidebar/index.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/SearchItem.js +5 -7
- package/dist/sidebar/visibility-ordering-builder/SearchItem.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/SearchWithModal.js +24 -18
- package/dist/sidebar/visibility-ordering-builder/SearchWithModal.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.js +166 -256
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilderUtils.js +4 -11
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilderUtils.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingGroup.js +28 -14
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingGroup.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingItem.js +16 -19
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingItem.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/PointerSensorWithInteraction.js +1 -3
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/PointerSensorWithInteraction.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.js +19 -29
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeDndContext.js +39 -52
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeDndContext.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeItem.js +18 -23
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeItem.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.js +19 -15
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/keyboardCoordinates.js +16 -30
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/keyboardCoordinates.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.js +30 -39
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.js.map +1 -1
- 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
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
reverse = false,
|
|
24
|
-
sorts,
|
|
25
|
-
customColumns,
|
|
26
|
-
movedColumns,
|
|
27
|
-
hiddenColumns,
|
|
28
|
-
alwaysFetchColumns,
|
|
29
|
-
rollupConfig =
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
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":"AAAA;AACA;AACA,SAASA,SAAS,EAAEC,OAAO,QAAQ,OAAO;AAI1C,SAASC,WAAW,EAAEC,SAAS,QAAQ,kBAAkB;AACzD,SAASC,WAAW,QAAQ,wBAAwB;AAAC,OAC9CC,aAAa;AAAA,SAUlBC,sBAAsB;AAAA,SAEfC,wBAAwB;AAEjC,IAAMC,mBAAmB,GAAG,CAAC;AA6B7B;AACA;AACA;AACA,SAASC,oBAAoBA,CAAAC,IAAA,EAyBqB;EAAA,IAxBhDC,KAAK,GAAAD,IAAA,CAALC,KAAK;IACLC,GAAG,GAAAF,IAAA,CAAHE,GAAG;IACHC,MAAM,GAAAH,IAAA,CAANG,MAAM;IACNC,IAAI,GAAAJ,IAAA,CAAJI,IAAI;IACJC,KAAK,GAAAL,IAAA,CAALK,KAAK;IACLC,MAAM,GAAAN,IAAA,CAANM,MAAM;IACNC,SAAS,GAAAP,IAAA,CAATO,SAAS;IACTC,kBAAkB,GAAAR,IAAA,CAAlBQ,kBAAkB;IAAAC,YAAA,GAAAT,IAAA,CAClBU,OAAO;IAAPA,OAAO,GAAAD,YAAA,cAAG,KAAK,GAAAA,YAAA;IACfE,KAAK,GAAAX,IAAA,CAALW,KAAK;IACLC,aAAa,GAAAZ,IAAA,CAAbY,aAAa;IACbC,YAAY,GAAAb,IAAA,CAAZa,YAAY;IACZC,aAAa,GAAAd,IAAA,CAAbc,aAAa;IACbC,kBAAkB,GAAAf,IAAA,CAAlBe,kBAAkB;IAAAC,iBAAA,GAAAhB,IAAA,CAClBiB,YAAY;IAAZA,YAAY,GAAAD,iBAAA,cAAG,IAAI,GAAAA,iBAAA;IAAAE,iBAAA,GAAAlB,IAAA,CACnBmB,YAAY;IAAZA,YAAY,GAAAD,iBAAA,cAAG,IAAI,GAAAA,iBAAA;IAAAE,qBAAA,GAAApB,IAAA,CACnBqB,qBAAqB;IAArBA,qBAAqB,GAAAD,qBAAA,cAAG5B,WAAW,GAAA4B,qBAAA;IAAAE,oBAAA,GAAAtB,IAAA,CACnCuB,eAAe;IAAfA,eAAe,GAAAD,oBAAA,cAAG,CAAC,GAAAA,oBAAA;IAAAE,mBAAA,GAAAxB,IAAA,CACnByB,cAAc;IAAdA,cAAc,GAAAD,mBAAA,cAAG/B,SAAS,GAAA+B,mBAAA;IAC1BE,aAAa,GAAA1B,IAAA,CAAb0B,aAAa;IACbC,aAAa,GAAA3B,IAAA,CAAb2B,aAAa;IACbC,kBAAkB,GAAA5B,IAAA,CAAlB4B,kBAAkB;IAClBC,eAAe,GAAA7B,IAAA,CAAf6B,eAAe;IACfC,oBAAoB,GAAA9B,IAAA,CAApB8B,oBAAoB;EAEpB,IAAQC,iBAAiB,GAAwB9B,KAAK,CAA9C8B,iBAAiB;IAAEC,iBAAiB,GAAK/B,KAAK,CAA3B+B,iBAAiB;EAC5C;EACAtC,WAAW,CAAC,MAAM;IAChB,IAAIG,wBAAwB,CAACI,KAAK,CAAC,IAAI6B,oBAAoB,IAAI,IAAI,EAAE;MACnE7B,KAAK,CAAC6B,oBAAoB,GAAGA,oBAAoB;IACnD;EACF,CAAC,EAAE,CAAC7B,KAAK,EAAE6B,oBAAoB,CAAC,CAAC;EAEjC,IAAMG,OAAO,GAAG1C,OAAO,CACrB,MACEI,aAAa,CAACuC,uBAAuB,CACnCjC,KAAK,CAACgC,OAAO,EACb7B,IAAI,EACJC,KAAK,EACLQ,YAAY,EACZC,aAAa,EACbC,kBAAkB,EAClBjB,mBACF,CAAC,EACH,CACEG,KAAK,CAACgC,OAAO,EACb7B,IAAI,EACJC,KAAK,EACLQ,YAAY,EACZC,aAAa,EACbC,kBAAkB,CAEtB,CAAC;EACDrB,WAAW,CACT,SAASyC,YAAYA,CAAA,EAAG;IACtBlC,KAAK,CAACK,MAAM,GAAGA,MAAM;EACvB,CAAC,EACD,CAACL,KAAK,EAAEK,MAAM,CAChB,CAAC;EACDZ,WAAW,CACT,SAAS0C,WAAWA,CAAA,EAAG;IACrB,IAAMC,aAAa,GAAG,CAAC,GAAG1B,KAAK,CAAC;IAChC,IAAID,OAAO,EAAE;MACX2B,aAAa,CAACC,IAAI,CAACrC,KAAK,CAACsC,EAAE,CAACC,KAAK,CAAC9B,OAAO,CAAC,CAAC,CAAC;IAC9C;IACAT,KAAK,CAACwC,IAAI,GAAGJ,aAAa;EAC5B,CAAC,EACD,CAACpC,KAAK,EAAEU,KAAK,EAAED,OAAO,CACxB,CAAC;EACDhB,WAAW,CACT,SAASgD,eAAeA,CAAA,EAAG;IACzBzC,KAAK,CAACM,SAAS,GAAGA,SAAS;EAC7B,CAAC,EACD,CAACN,KAAK,EAAEM,SAAS,CACnB,CAAC;EACDb,WAAW,CACT,SAASiD,wBAAwBA,CAAA,EAAG;IAClC1C,KAAK,CAACO,kBAAkB,GAAGA,kBAAkB;EAC/C,CAAC,EACD,CAACP,KAAK,EAAEO,kBAAkB,CAC5B,CAAC;EACDd,WAAW,CACT,SAASkD,mBAAmBA,CAAA,EAAG;IAC7B,IAAI3C,KAAK,CAAC4C,wBAAwB,EAAE;MAClC5C,KAAK,CAACW,aAAa,GAAGA,aAAa;IACrC;EACF,CAAC,EACD,CAACX,KAAK,EAAEW,aAAa,CACvB,CAAC;EACDlB,WAAW,CACT,SAASoD,mBAAmBA,CAAA,EAAG;IAC7B,IAAI7C,KAAK,CAAC8C,wBAAwB,EAAE;MAClC9C,KAAK,CAAC0B,aAAa,GAAGA,aAAa;IACrC;EACF,CAAC,EACD,CAAC1B,KAAK,EAAE0B,aAAa,CACvB,CAAC;EACDjC,WAAW,CACT,SAASsD,cAAcA,CAAA,EAAG;IACxB/C,KAAK,CAACgD,WAAW,CAAC/C,GAAG,EAAEC,MAAM,EAAE8B,OAAO,CAAC;EACzC,CAAC,EACD,CAAChC,KAAK,EAAEC,GAAG,EAAEC,MAAM,EAAE8B,OAAO,CAC9B,CAAC;EACDvC,WAAW,CACT,SAASwD,kBAAkBA,CAAA,EAAG;IAC5B,IAAIlB,iBAAiB,EAAE;MACrB/B,KAAK,CAACgB,YAAY,GAAGA,YAAY;IACnC;EACF,CAAC,EACD,CAAChB,KAAK,EAAE+B,iBAAiB,EAAEf,YAAY,CACzC,CAAC;EACDvB,WAAW,CACT,SAASyD,2BAA2BA,CAAA,EAAG;IACrC,IAAIlD,KAAK,CAACmD,yBAAyB,EAAE;MACnCnD,KAAK,CAACoB,qBAAqB,GAAGA,qBAAqB;IACrD;EACF,CAAC,EACD,CAACpB,KAAK,EAAEoB,qBAAqB,CAC/B,CAAC;EACD3B,WAAW,CACT,SAAS2D,kBAAkBA,CAAA,EAAG;IAC5B,IAAItB,iBAAiB,EAAE;MACrB9B,KAAK,CAACkB,YAAY,GAAGA,YAAY;IACnC;EACF,CAAC,EACD,CAAClB,KAAK,EAAE8B,iBAAiB,EAAEZ,YAAY,CACzC,CAAC;EACDzB,WAAW,CACT,SAAS4D,wBAAwBA,CAAA,EAAG;IAClCrD,KAAK,CAAC2B,kBAAkB,GAAGA,kBAAkB;EAC/C,CAAC,EACD,CAAC3B,KAAK,EAAE2B,kBAAkB,CAC5B,CAAC;EACDlC,WAAW,CACT,SAAS6D,qBAAqBA,CAAA,EAAG;IAC/B,IAAI1B,eAAe,IAAIjC,sBAAsB,CAACK,KAAK,CAAC,EAAE;MACpDA,KAAK,CAAC4B,eAAe,GAAGA,eAAe;IACzC;EACF,CAAC,EACD,CAAC5B,KAAK,EAAE4B,eAAe,CACzB,CAAC;EACD;EACA;EACAvC,SAAS,CACP,SAASkE,mBAAmBA,CAAA,EAAG;IAC7B,IAAI9B,aAAa,EAAE;MACjBzB,KAAK,CAACuD,mBAAmB,CAAC9B,aAAa,CAAC;IAC1C;EACF,CAAC,EACD,CAACzB,KAAK,EAAEyB,aAAa,CACvB,CAAC;EACDpC,SAAS,CACP,SAASmE,qBAAqBA,CAAA,EAAG;IAC/BxD,KAAK,CAACsB,eAAe,GAAGA,eAAe;EACzC,CAAC,EACD,CAACtB,KAAK,EAAEsB,eAAe,CACzB,CAAC;EACDjC,SAAS,CACP,SAASoE,oBAAoBA,CAAA,EAAG;IAC9BzD,KAAK,CAACwB,cAAc,GAAGA,cAAc;EACvC,CAAC,EACD,CAACxB,KAAK,EAAEwB,cAAc,CACxB,CAAC;EAED,OAAO,IAAI;AACb;AAEA1B,oBAAoB,CAAC4D,WAAW,GAAG,sBAAsB;AAEzD,eAAe5D,oBAAoB","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 @@
|
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
273
|
-
|
|
274
|
-
|
|
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":"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","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":"AACA,OAAO,EAAE,SAAS,EAAc,MAAM,wBAAwB,CAAC;AAO/D,OAAO,KAAK,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAI3D,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAE1E,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,oBAAoB,EAG1B,MAAM,wBAAwB,CAAC;AAmBhC;;;;;GAKG;AAGH,cAAM,kBAAmB,SAAQ,aAAc,YAAW,oBAAoB;IAC5E;;;;;OAKG;IAEH,KAAK,EAAE,aAAa,CAAC;IAErB,EAAE,EAAE,OAAO,MAAM,CAAC;IAElB,OAAO,CAAC,aAAa,CAAgB;IAErC,OAAO,CAAC,YAAY,CAA0C;IAE9D,OAAO,CAAC,MAAM,CAA6B;IAE3C,OAAO,CAAC,SAAS,CAAyB;IAE1C,OAAO,CAAC,cAAc,CAAe;IAErC,OAAO,CAAC,eAAe,CAAC,CAItB;gBAGA,EAAE,EAAE,OAAO,MAAM,EACjB,KAAK,EAAE,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,gBAAgB,EAChE,SAAS,YAAoB,EAC7B,UAAU,GAAE,MAAM,CAAC,UAAU,GAAG,IAAW;
|
|
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
|
-
|
|
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 =>
|
|
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 (
|
|
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;
|