@finos/legend-application-repl 0.0.58 → 0.0.60
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/lib/components/dataCube/editor/DataCubeEditorColumnPropertiesPanel.d.ts.map +1 -1
- package/lib/components/dataCube/editor/DataCubeEditorColumnPropertiesPanel.js +3 -19
- package/lib/components/dataCube/editor/DataCubeEditorColumnPropertiesPanel.js.map +1 -1
- package/lib/components/dataCube/editor/DataCubeEditorColumnsPanel.d.ts.map +1 -1
- package/lib/components/dataCube/editor/DataCubeEditorColumnsPanel.js +5 -7
- package/lib/components/dataCube/editor/DataCubeEditorColumnsPanel.js.map +1 -1
- package/lib/components/dataCube/editor/DataCubeEditorColumnsSelector.d.ts.map +1 -1
- package/lib/components/dataCube/editor/DataCubeEditorColumnsSelector.js +22 -12
- package/lib/components/dataCube/editor/DataCubeEditorColumnsSelector.js.map +1 -1
- package/lib/components/dataCube/editor/DataCubeEditorGeneralPropertiesPanel.d.ts.map +1 -1
- package/lib/components/dataCube/editor/DataCubeEditorGeneralPropertiesPanel.js +1 -1
- package/lib/components/dataCube/editor/DataCubeEditorGeneralPropertiesPanel.js.map +1 -1
- package/lib/components/dataCube/editor/DataCubeEditorSortsPanel.d.ts.map +1 -1
- package/lib/components/dataCube/editor/DataCubeEditorSortsPanel.js +6 -2
- package/lib/components/dataCube/editor/DataCubeEditorSortsPanel.js.map +1 -1
- package/lib/components/repl/Form.d.ts.map +1 -1
- package/lib/components/repl/Form.js +3 -2
- package/lib/components/repl/Form.js.map +1 -1
- package/lib/components/repl/PureCodeEditor.js +1 -1
- package/lib/components/repl/PureCodeEditor.js.map +1 -1
- package/lib/components/repl/SettingsPanel.d.ts.map +1 -1
- package/lib/components/repl/SettingsPanel.js +11 -8
- package/lib/components/repl/SettingsPanel.js.map +1 -1
- package/lib/index.css +2 -2
- package/lib/index.css.map +1 -1
- package/lib/package.json +1 -1
- package/lib/stores/dataCube/DataCubeEngine.d.ts +11 -8
- package/lib/stores/dataCube/DataCubeEngine.d.ts.map +1 -1
- package/lib/stores/dataCube/DataCubeEngine.js +24 -17
- package/lib/stores/dataCube/DataCubeEngine.js.map +1 -1
- package/lib/stores/dataCube/core/DataCubeConfiguration.d.ts +12 -1
- package/lib/stores/dataCube/core/DataCubeConfiguration.d.ts.map +1 -1
- package/lib/stores/dataCube/core/DataCubeConfiguration.js +13 -1
- package/lib/stores/dataCube/core/DataCubeConfiguration.js.map +1 -1
- package/lib/stores/dataCube/core/DataCubeQueryBuilder.d.ts.map +1 -1
- package/lib/stores/dataCube/core/DataCubeQueryBuilder.js +3 -6
- package/lib/stores/dataCube/core/DataCubeQueryBuilder.js.map +1 -1
- package/lib/stores/dataCube/core/DataCubeQueryBuilderUtils.d.ts +3 -1
- package/lib/stores/dataCube/core/DataCubeQueryBuilderUtils.d.ts.map +1 -1
- package/lib/stores/dataCube/core/DataCubeQueryBuilderUtils.js +25 -7
- package/lib/stores/dataCube/core/DataCubeQueryBuilderUtils.js.map +1 -1
- package/lib/stores/dataCube/core/DataCubeQueryEngine.d.ts +2 -0
- package/lib/stores/dataCube/core/DataCubeQueryEngine.d.ts.map +1 -1
- package/lib/stores/dataCube/core/DataCubeQueryEngine.js +12 -1
- package/lib/stores/dataCube/core/DataCubeQueryEngine.js.map +1 -1
- package/lib/stores/dataCube/core/DataCubeQuerySnapshot.d.ts +5 -8
- package/lib/stores/dataCube/core/DataCubeQuerySnapshot.d.ts.map +1 -1
- package/lib/stores/dataCube/core/DataCubeQuerySnapshot.js +3 -32
- package/lib/stores/dataCube/core/DataCubeQuerySnapshot.js.map +1 -1
- package/lib/stores/dataCube/core/DataCubeQuerySnapshotBuilder.d.ts.map +1 -1
- package/lib/stores/dataCube/core/DataCubeQuerySnapshotBuilder.js +8 -10
- package/lib/stores/dataCube/core/DataCubeQuerySnapshotBuilder.js.map +1 -1
- package/lib/stores/dataCube/editor/DataCubeEditorColumnPropertiesPanelState.d.ts +1 -3
- package/lib/stores/dataCube/editor/DataCubeEditorColumnPropertiesPanelState.d.ts.map +1 -1
- package/lib/stores/dataCube/editor/DataCubeEditorColumnPropertiesPanelState.js +5 -32
- package/lib/stores/dataCube/editor/DataCubeEditorColumnPropertiesPanelState.js.map +1 -1
- package/lib/stores/dataCube/editor/DataCubeEditorColumnsPanelState.d.ts +8 -19
- package/lib/stores/dataCube/editor/DataCubeEditorColumnsPanelState.d.ts.map +1 -1
- package/lib/stores/dataCube/editor/DataCubeEditorColumnsPanelState.js +44 -105
- package/lib/stores/dataCube/editor/DataCubeEditorColumnsPanelState.js.map +1 -1
- package/lib/stores/dataCube/editor/DataCubeEditorGeneralPropertiesPanelState.js +2 -2
- package/lib/stores/dataCube/editor/DataCubeEditorGeneralPropertiesPanelState.js.map +1 -1
- package/lib/stores/dataCube/editor/DataCubeEditorHorizontalPivotsPanelState.d.ts +4 -1
- package/lib/stores/dataCube/editor/DataCubeEditorHorizontalPivotsPanelState.d.ts.map +1 -1
- package/lib/stores/dataCube/editor/DataCubeEditorHorizontalPivotsPanelState.js +19 -22
- package/lib/stores/dataCube/editor/DataCubeEditorHorizontalPivotsPanelState.js.map +1 -1
- package/lib/stores/dataCube/editor/DataCubeEditorMutableConfiguration.d.ts +2 -1
- package/lib/stores/dataCube/editor/DataCubeEditorMutableConfiguration.d.ts.map +1 -1
- package/lib/stores/dataCube/editor/DataCubeEditorMutableConfiguration.js +9 -4
- package/lib/stores/dataCube/editor/DataCubeEditorMutableConfiguration.js.map +1 -1
- package/lib/stores/dataCube/editor/DataCubeEditorSortsPanelState.d.ts.map +1 -1
- package/lib/stores/dataCube/editor/DataCubeEditorSortsPanelState.js +9 -5
- package/lib/stores/dataCube/editor/DataCubeEditorSortsPanelState.js.map +1 -1
- package/lib/stores/dataCube/editor/DataCubeEditorState.d.ts +5 -2
- package/lib/stores/dataCube/editor/DataCubeEditorState.d.ts.map +1 -1
- package/lib/stores/dataCube/editor/DataCubeEditorState.js +60 -56
- package/lib/stores/dataCube/editor/DataCubeEditorState.js.map +1 -1
- package/lib/stores/dataCube/editor/DataCubeEditorVerticalPivotsPanelState.d.ts.map +1 -1
- package/lib/stores/dataCube/editor/DataCubeEditorVerticalPivotsPanelState.js +9 -11
- package/lib/stores/dataCube/editor/DataCubeEditorVerticalPivotsPanelState.js.map +1 -1
- package/lib/stores/dataCube/extend/DataCubeExtendManagerState.d.ts +2 -1
- package/lib/stores/dataCube/extend/DataCubeExtendManagerState.d.ts.map +1 -1
- package/lib/stores/dataCube/extend/DataCubeExtendManagerState.js +7 -9
- package/lib/stores/dataCube/extend/DataCubeExtendManagerState.js.map +1 -1
- package/lib/stores/dataCube/grid/DataCubeGridClientEngine.d.ts.map +1 -1
- package/lib/stores/dataCube/grid/DataCubeGridClientEngine.js +20 -2
- package/lib/stores/dataCube/grid/DataCubeGridClientEngine.js.map +1 -1
- package/lib/stores/dataCube/grid/DataCubeGridConfigurationBuilder.d.ts +13 -13
- package/lib/stores/dataCube/grid/DataCubeGridConfigurationBuilder.d.ts.map +1 -1
- package/lib/stores/dataCube/grid/DataCubeGridConfigurationBuilder.js +78 -67
- package/lib/stores/dataCube/grid/DataCubeGridConfigurationBuilder.js.map +1 -1
- package/lib/stores/dataCube/grid/DataCubeGridControllerState.d.ts +16 -14
- package/lib/stores/dataCube/grid/DataCubeGridControllerState.d.ts.map +1 -1
- package/lib/stores/dataCube/grid/DataCubeGridControllerState.js +78 -49
- package/lib/stores/dataCube/grid/DataCubeGridControllerState.js.map +1 -1
- package/lib/stores/dataCube/grid/DataCubeGridMenuBuilder.d.ts.map +1 -1
- package/lib/stores/dataCube/grid/DataCubeGridMenuBuilder.js +65 -18
- package/lib/stores/dataCube/grid/DataCubeGridMenuBuilder.js.map +1 -1
- package/lib/stores/dataCube/grid/DataCubeGridQueryBuilder.d.ts.map +1 -1
- package/lib/stores/dataCube/grid/DataCubeGridQueryBuilder.js +2 -8
- package/lib/stores/dataCube/grid/DataCubeGridQueryBuilder.js.map +1 -1
- package/lib/stores/dataCube/grid/DataCubeGridQuerySnapshotBuilder.d.ts +2 -0
- package/lib/stores/dataCube/grid/DataCubeGridQuerySnapshotBuilder.d.ts.map +1 -1
- package/lib/stores/dataCube/grid/DataCubeGridQuerySnapshotBuilder.js +12 -5
- package/lib/stores/dataCube/grid/DataCubeGridQuerySnapshotBuilder.js.map +1 -1
- package/package.json +4 -4
- package/src/components/dataCube/editor/DataCubeEditorColumnPropertiesPanel.tsx +10 -32
- package/src/components/dataCube/editor/DataCubeEditorColumnsPanel.tsx +9 -11
- package/src/components/dataCube/editor/DataCubeEditorColumnsSelector.tsx +22 -12
- package/src/components/dataCube/editor/DataCubeEditorGeneralPropertiesPanel.tsx +1 -3
- package/src/components/dataCube/editor/DataCubeEditorSortsPanel.tsx +20 -1
- package/src/components/repl/Form.tsx +3 -2
- package/src/components/repl/PureCodeEditor.tsx +1 -1
- package/src/components/repl/SettingsPanel.tsx +37 -12
- package/src/stores/dataCube/DataCubeEngine.ts +28 -17
- package/src/stores/dataCube/core/DataCubeConfiguration.ts +13 -1
- package/src/stores/dataCube/core/DataCubeQueryBuilder.ts +3 -8
- package/src/stores/dataCube/core/DataCubeQueryBuilderUtils.ts +34 -8
- package/src/stores/dataCube/core/DataCubeQueryEngine.ts +17 -1
- package/src/stores/dataCube/core/DataCubeQuerySnapshot.ts +6 -49
- package/src/stores/dataCube/core/DataCubeQuerySnapshotBuilder.ts +8 -9
- package/src/stores/dataCube/editor/DataCubeEditorColumnPropertiesPanelState.ts +8 -46
- package/src/stores/dataCube/editor/DataCubeEditorColumnsPanelState.ts +60 -141
- package/src/stores/dataCube/editor/DataCubeEditorGeneralPropertiesPanelState.ts +2 -2
- package/src/stores/dataCube/editor/DataCubeEditorHorizontalPivotsPanelState.ts +34 -35
- package/src/stores/dataCube/editor/DataCubeEditorMutableConfiguration.ts +11 -4
- package/src/stores/dataCube/editor/DataCubeEditorSortsPanelState.ts +18 -13
- package/src/stores/dataCube/editor/DataCubeEditorState.tsx +88 -79
- package/src/stores/dataCube/editor/DataCubeEditorVerticalPivotsPanelState.ts +16 -12
- package/src/stores/dataCube/extend/DataCubeExtendManagerState.tsx +17 -19
- package/src/stores/dataCube/grid/DataCubeGridClientEngine.ts +22 -2
- package/src/stores/dataCube/grid/DataCubeGridConfigurationBuilder.tsx +113 -76
- package/src/stores/dataCube/grid/DataCubeGridControllerState.ts +134 -95
- package/src/stores/dataCube/grid/DataCubeGridMenuBuilder.tsx +80 -24
- package/src/stores/dataCube/grid/DataCubeGridQueryBuilder.ts +2 -7
- package/src/stores/dataCube/grid/DataCubeGridQuerySnapshotBuilder.ts +30 -5
|
@@ -55,11 +55,11 @@ import {
|
|
|
55
55
|
INTERNAL__GRID_CLIENT_DATA_FETCH_MANUAL_TRIGGER_COLUMN_ID,
|
|
56
56
|
INTERNAL__GRID_CLIENT_PIVOT_COLUMN_GROUP_COLOR_ROTATION_SIZE,
|
|
57
57
|
} from './DataCubeGridClientEngine.js';
|
|
58
|
-
import { PRIMITIVE_TYPE } from '@finos/legend-graph';
|
|
59
58
|
import {
|
|
60
59
|
getNonNullableEntry,
|
|
61
60
|
getQueryParameters,
|
|
62
61
|
getQueryParameterValue,
|
|
62
|
+
guaranteeNonNullable,
|
|
63
63
|
isNonNullable,
|
|
64
64
|
isNullable,
|
|
65
65
|
isNumber,
|
|
@@ -80,6 +80,7 @@ import {
|
|
|
80
80
|
DataCubeColumnKind,
|
|
81
81
|
DEFAULT_MISSING_VALUE_DISPLAY_TEXT,
|
|
82
82
|
PIVOT_COLUMN_NAME_VALUE_SEPARATOR,
|
|
83
|
+
isPivotResultColumnName,
|
|
83
84
|
} from '../core/DataCubeQueryEngine.js';
|
|
84
85
|
import type { CustomLoadingCellRendererProps } from '@ag-grid-community/react';
|
|
85
86
|
import { DataCubeIcon } from '@finos/legend-art';
|
|
@@ -87,24 +88,6 @@ import type { DataCubeState } from '../DataCubeState.js';
|
|
|
87
88
|
|
|
88
89
|
// --------------------------------- UTILITIES ---------------------------------
|
|
89
90
|
|
|
90
|
-
// See https://www.ag-grid.com/react-data-grid/cell-data-types/
|
|
91
|
-
function _cellDataType(column: DataCubeQuerySnapshotColumn) {
|
|
92
|
-
switch (column.type) {
|
|
93
|
-
case PRIMITIVE_TYPE.NUMBER:
|
|
94
|
-
case PRIMITIVE_TYPE.DECIMAL:
|
|
95
|
-
case PRIMITIVE_TYPE.INTEGER:
|
|
96
|
-
case PRIMITIVE_TYPE.FLOAT:
|
|
97
|
-
return 'number';
|
|
98
|
-
case PRIMITIVE_TYPE.DATE:
|
|
99
|
-
case PRIMITIVE_TYPE.DATETIME:
|
|
100
|
-
case PRIMITIVE_TYPE.STRICTDATE:
|
|
101
|
-
return 'dateString';
|
|
102
|
-
case PRIMITIVE_TYPE.STRING:
|
|
103
|
-
default:
|
|
104
|
-
return 'text';
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
|
|
108
91
|
function scaleNumber(
|
|
109
92
|
value: number,
|
|
110
93
|
type: DataCubeNumberScale | undefined,
|
|
@@ -157,6 +140,7 @@ function DataCubeGridLoadingCellRenderer(
|
|
|
157
140
|
// --------------------------------- BUILDING BLOCKS ---------------------------------
|
|
158
141
|
|
|
159
142
|
type ColumnData = {
|
|
143
|
+
name: string;
|
|
160
144
|
snapshot: DataCubeQuerySnapshot;
|
|
161
145
|
column: DataCubeColumnConfiguration;
|
|
162
146
|
configuration: DataCubeConfiguration;
|
|
@@ -192,7 +176,7 @@ function getCellRenderer(columnData: ColumnData) {
|
|
|
192
176
|
}
|
|
193
177
|
|
|
194
178
|
function _displaySpec(columnData: ColumnData) {
|
|
195
|
-
const { column, configuration } = columnData;
|
|
179
|
+
const { name, snapshot, column, configuration } = columnData;
|
|
196
180
|
const dataType = getDataType(column.type);
|
|
197
181
|
const fontFamily = column.fontFamily ?? configuration.fontFamily;
|
|
198
182
|
const fontSize = column.fontSize ?? configuration.fontSize;
|
|
@@ -221,10 +205,18 @@ function _displaySpec(columnData: ColumnData) {
|
|
|
221
205
|
column.errorBackgroundColor ?? configuration.errorBackgroundColor;
|
|
222
206
|
const cellRenderer = getCellRenderer(columnData);
|
|
223
207
|
return {
|
|
224
|
-
//
|
|
225
|
-
//
|
|
226
|
-
cellDataType:
|
|
227
|
-
hide:
|
|
208
|
+
// disabling cell data type inference can grid performance
|
|
209
|
+
// especially when this information is only necessary for cell value editor
|
|
210
|
+
cellDataType: false,
|
|
211
|
+
hide:
|
|
212
|
+
column.hideFromView ||
|
|
213
|
+
!column.isSelected ||
|
|
214
|
+
(snapshot.data.pivot &&
|
|
215
|
+
!snapshot.data.pivot.castColumns.find((col) => col.name === name)),
|
|
216
|
+
lockVisible:
|
|
217
|
+
!column.isSelected ||
|
|
218
|
+
(snapshot.data.pivot &&
|
|
219
|
+
!snapshot.data.pivot.castColumns.find((col) => col.name === name)),
|
|
228
220
|
valueFormatter:
|
|
229
221
|
dataType === DataCubeColumnDataType.NUMBER
|
|
230
222
|
? (params) => {
|
|
@@ -271,6 +263,9 @@ function _displaySpec(columnData: ColumnData) {
|
|
|
271
263
|
DEFAULT_MISSING_VALUE_DISPLAY_TEXT)
|
|
272
264
|
: params.value,
|
|
273
265
|
loadingCellRenderer: DataCubeGridLoadingCellRenderer,
|
|
266
|
+
headerClass: isPivotResultColumnName(name)
|
|
267
|
+
? 'pl-1 border border-neutral-300'
|
|
268
|
+
: 'pl-1 border border-neutral-200',
|
|
274
269
|
cellClassRules: {
|
|
275
270
|
[generateFontFamilyUtilityClassName(fontFamily)]: () => true,
|
|
276
271
|
[generateFontSizeUtilityClassName(fontSize)]: () => true,
|
|
@@ -365,9 +360,9 @@ function _sizeSpec(columnData: ColumnData) {
|
|
|
365
360
|
}
|
|
366
361
|
|
|
367
362
|
function _sortSpec(columnData: ColumnData) {
|
|
368
|
-
const {
|
|
363
|
+
const { name, snapshot } = columnData;
|
|
369
364
|
const sortColumns = snapshot.data.sortColumns;
|
|
370
|
-
const sortCol = _findCol(sortColumns,
|
|
365
|
+
const sortCol = _findCol(sortColumns, name);
|
|
371
366
|
return {
|
|
372
367
|
sortable: true, // if this is pivot column, no sorting is supported yet
|
|
373
368
|
sort: sortCol
|
|
@@ -380,18 +375,15 @@ function _sortSpec(columnData: ColumnData) {
|
|
|
380
375
|
}
|
|
381
376
|
|
|
382
377
|
function _aggSpec(columnData: ColumnData) {
|
|
383
|
-
const { snapshot, column } = columnData;
|
|
378
|
+
const { name, snapshot, column } = columnData;
|
|
384
379
|
const data = snapshot.data;
|
|
385
|
-
const groupByCol = _findCol(data.groupBy?.columns,
|
|
386
|
-
const pivotCol = _findCol(data.pivot?.columns, column.name);
|
|
380
|
+
const groupByCol = _findCol(data.groupBy?.columns, name);
|
|
387
381
|
const isGroupExtendedColumn = Boolean(
|
|
388
|
-
_findCol(data.groupExtendedColumns,
|
|
382
|
+
_findCol(data.groupExtendedColumns, name),
|
|
389
383
|
);
|
|
390
384
|
return {
|
|
391
385
|
enableRowGroup:
|
|
392
386
|
!isGroupExtendedColumn && column.kind === DataCubeColumnKind.DIMENSION,
|
|
393
|
-
enablePivot:
|
|
394
|
-
!isGroupExtendedColumn && column.kind === DataCubeColumnKind.DIMENSION,
|
|
395
387
|
rowGroup: !isGroupExtendedColumn && Boolean(groupByCol),
|
|
396
388
|
rowGroupIndex:
|
|
397
389
|
!isGroupExtendedColumn && groupByCol
|
|
@@ -405,11 +397,6 @@ function _aggSpec(columnData: ColumnData) {
|
|
|
405
397
|
aggFunc: !isGroupExtendedColumn ? column.aggregateOperator : null,
|
|
406
398
|
enableValue: false, // disable GUI interactions to modify this column's aggregate function
|
|
407
399
|
allowedAggFuncs: [], // disable GUI for options of the agg functions
|
|
408
|
-
pivot: !isGroupExtendedColumn && Boolean(pivotCol),
|
|
409
|
-
pivotIndex:
|
|
410
|
-
!isGroupExtendedColumn && groupByCol
|
|
411
|
-
? (data.groupBy?.columns.indexOf(groupByCol) ?? null)
|
|
412
|
-
: null,
|
|
413
400
|
} satisfies ColDef;
|
|
414
401
|
}
|
|
415
402
|
|
|
@@ -446,7 +433,6 @@ export function generateBaseGridOptions(dataCube: DataCubeState): GridOptions {
|
|
|
446
433
|
// -------------------------------------- DISPLAY --------------------------------------
|
|
447
434
|
rowHeight: INTERNAL__GRID_CLIENT_ROW_HEIGHT,
|
|
448
435
|
headerHeight: INTERNAL__GRID_CLIENT_HEADER_HEIGHT,
|
|
449
|
-
suppressBrowserResizeObserver: true,
|
|
450
436
|
noRowsOverlayComponent: () => (
|
|
451
437
|
<div className="flex items-center border-[1.5px] border-neutral-300 p-2 font-medium text-neutral-400">
|
|
452
438
|
<div>
|
|
@@ -480,7 +466,7 @@ export function generateBaseGridOptions(dataCube: DataCubeState): GridOptions {
|
|
|
480
466
|
},
|
|
481
467
|
onBodyScrollEnd: () => grid.setScrollHintText(undefined),
|
|
482
468
|
scrollbarWidth: 10,
|
|
483
|
-
alwaysShowVerticalScroll: true, // this is needed to ensure
|
|
469
|
+
alwaysShowVerticalScroll: true, // this is needed to ensure column resize calculation is accurate
|
|
484
470
|
// -------------------------------------- CONTEXT MENU --------------------------------------
|
|
485
471
|
preventDefaultOnContextMenu: true, // prevent showing the browser's context menu
|
|
486
472
|
columnMenu: 'new', // ensure context menu works on header
|
|
@@ -525,7 +511,9 @@ export function generateBaseGridOptions(dataCube: DataCubeState): GridOptions {
|
|
|
525
511
|
suppressScrollOnNewData: true,
|
|
526
512
|
suppressServerSideFullWidthLoadingRow: true, // make sure each column has its own loading indicator instead of the whole row
|
|
527
513
|
// -------------------------------------- SELECTION --------------------------------------
|
|
528
|
-
|
|
514
|
+
selection: {
|
|
515
|
+
mode: 'cell',
|
|
516
|
+
},
|
|
529
517
|
// -------------------------------------- SIDEBAR --------------------------------------
|
|
530
518
|
sideBar: {
|
|
531
519
|
toolPanels: [
|
|
@@ -553,6 +541,38 @@ export function generateBaseGridOptions(dataCube: DataCubeState): GridOptions {
|
|
|
553
541
|
};
|
|
554
542
|
}
|
|
555
543
|
|
|
544
|
+
function generatePivotResultColumnHeaderTooltip(
|
|
545
|
+
id: string,
|
|
546
|
+
snapshot: DataCubeQuerySnapshot,
|
|
547
|
+
configuration: DataCubeConfiguration,
|
|
548
|
+
) {
|
|
549
|
+
const values = id.split(PIVOT_COLUMN_NAME_VALUE_SEPARATOR);
|
|
550
|
+
if (
|
|
551
|
+
!snapshot.data.pivot ||
|
|
552
|
+
values.length > snapshot.data.pivot.columns.length + 1
|
|
553
|
+
) {
|
|
554
|
+
return values.join(' / ');
|
|
555
|
+
}
|
|
556
|
+
if (values.length === snapshot.data.pivot.columns.length + 1) {
|
|
557
|
+
const baseColumnName = guaranteeNonNullable(values[values.length - 1]);
|
|
558
|
+
const columnConfiguration = _findCol(configuration.columns, baseColumnName);
|
|
559
|
+
return `Column = ${
|
|
560
|
+
columnConfiguration
|
|
561
|
+
? columnConfiguration.displayName
|
|
562
|
+
? `${columnConfiguration.displayName} (${columnConfiguration.name})`
|
|
563
|
+
: columnConfiguration.name
|
|
564
|
+
: baseColumnName
|
|
565
|
+
} ~ [ ${snapshot.data.pivot.columns.map((col, i) => `${_findCol(configuration.columns, col.name)?.displayName ?? col.name} = ${values[i]}`).join(', ')} ]`;
|
|
566
|
+
}
|
|
567
|
+
return `[ ${snapshot.data.pivot.columns
|
|
568
|
+
.slice(0, values.length)
|
|
569
|
+
.map(
|
|
570
|
+
(col, i) =>
|
|
571
|
+
`${_findCol(configuration.columns, col.name)?.displayName ?? col.name} = ${values[i]}`,
|
|
572
|
+
)
|
|
573
|
+
.join(', ')} ]`;
|
|
574
|
+
}
|
|
575
|
+
|
|
556
576
|
function generateDefinitionForPivotResultColumns(
|
|
557
577
|
pivotResultColumns: DataCubeQuerySnapshotColumn[],
|
|
558
578
|
snapshot: DataCubeQuerySnapshot,
|
|
@@ -570,7 +590,7 @@ function generateDefinitionForPivotResultColumns(
|
|
|
570
590
|
|
|
571
591
|
columns.forEach((col) => {
|
|
572
592
|
const groups: ColGroupDef[] = [];
|
|
573
|
-
let leaf
|
|
593
|
+
let leaf: ColDef | undefined = undefined;
|
|
574
594
|
let id = '';
|
|
575
595
|
for (let i = 0; i < col.values.length; i++) {
|
|
576
596
|
const value = getNonNullableEntry(col.values, i);
|
|
@@ -585,11 +605,17 @@ function generateDefinitionForPivotResultColumns(
|
|
|
585
605
|
children: [],
|
|
586
606
|
suppressColumnsToolPanel: true,
|
|
587
607
|
headerName: value,
|
|
608
|
+
headerTooltip: generatePivotResultColumnHeaderTooltip(
|
|
609
|
+
id,
|
|
610
|
+
snapshot,
|
|
611
|
+
configuration,
|
|
612
|
+
),
|
|
588
613
|
} satisfies ColGroupDef);
|
|
589
614
|
} else {
|
|
590
615
|
const column = _findCol(configuration.columns, value);
|
|
591
616
|
if (column) {
|
|
592
617
|
const columnData = {
|
|
618
|
+
name: col.name,
|
|
593
619
|
snapshot,
|
|
594
620
|
column,
|
|
595
621
|
configuration,
|
|
@@ -608,20 +634,11 @@ function generateDefinitionForPivotResultColumns(
|
|
|
608
634
|
lockPinned: true,
|
|
609
635
|
lockPosition: true,
|
|
610
636
|
suppressColumnsToolPanel: true, // hide from column tool panel
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
leaf = {
|
|
617
|
-
headerName: value,
|
|
618
|
-
colId: col.name,
|
|
619
|
-
field: col.name,
|
|
620
|
-
|
|
621
|
-
// NOTE: hide columns which do not have a corresponding base column configuration
|
|
622
|
-
// these could be internal columns (such as count)
|
|
623
|
-
hide: true,
|
|
624
|
-
suppressColumnsToolPanel: true, // hide from column tool panel
|
|
637
|
+
headerTooltip: generatePivotResultColumnHeaderTooltip(
|
|
638
|
+
id,
|
|
639
|
+
snapshot,
|
|
640
|
+
configuration,
|
|
641
|
+
),
|
|
625
642
|
} satisfies ColDef;
|
|
626
643
|
}
|
|
627
644
|
}
|
|
@@ -644,10 +661,11 @@ function generateDefinitionForPivotResultColumns(
|
|
|
644
661
|
currentCollection = newGroup.children;
|
|
645
662
|
}
|
|
646
663
|
});
|
|
647
|
-
currentCollection.push(leaf);
|
|
648
|
-
});
|
|
649
664
|
|
|
650
|
-
|
|
665
|
+
if (leaf) {
|
|
666
|
+
currentCollection.push(leaf);
|
|
667
|
+
}
|
|
668
|
+
});
|
|
651
669
|
|
|
652
670
|
return columnDefs;
|
|
653
671
|
}
|
|
@@ -657,21 +675,36 @@ export function generateColumnDefs(
|
|
|
657
675
|
configuration: DataCubeConfiguration,
|
|
658
676
|
dataCube: DataCubeState,
|
|
659
677
|
) {
|
|
678
|
+
// NOTE: only show columns which are fetched in select() as we
|
|
679
|
+
// can't solely rely on column selection because of certain restrictions
|
|
680
|
+
// from ag-grid, e.g. in the case of row grouping tree column: the columns
|
|
681
|
+
// which are grouped must be present in the column definitions, so even
|
|
682
|
+
// when some of these might not be selected explicitly by the users, they
|
|
683
|
+
// must still be included in the column definitions, and made hidden instead.
|
|
684
|
+
let columns = configuration.columns.filter((col) =>
|
|
685
|
+
snapshot.data.selectColumns.find((column) => column.name === col.name),
|
|
686
|
+
);
|
|
660
687
|
let pivotResultColumns: DataCubeQuerySnapshotColumn[] = [];
|
|
661
|
-
|
|
688
|
+
|
|
662
689
|
if (snapshot.data.pivot) {
|
|
663
690
|
const castColumns = snapshot.data.pivot.castColumns;
|
|
664
|
-
pivotResultColumns = castColumns.filter((
|
|
665
|
-
|
|
666
|
-
);
|
|
667
|
-
columnsToDisplay = configuration.columns.filter(
|
|
668
|
-
(column) =>
|
|
669
|
-
castColumns.find((col) => col.name === column.name) ??
|
|
670
|
-
snapshot.data.groupExtendedColumns.find(
|
|
671
|
-
(col) => col.name === column.name,
|
|
672
|
-
),
|
|
691
|
+
pivotResultColumns = castColumns.filter((col) =>
|
|
692
|
+
isPivotResultColumnName(col.name),
|
|
673
693
|
);
|
|
694
|
+
// Since fetching cast columns is an expensive operation, we often do this asynchronously
|
|
695
|
+
// so sometimes, the grid column definitions might be generated with incorrect casting
|
|
696
|
+
// information. In order to account for those cases, we include all select() columns
|
|
697
|
+
// to make sure pivoting information is properly propagated to server-side row model datasource.
|
|
698
|
+
columns = [
|
|
699
|
+
...columns.filter((col) =>
|
|
700
|
+
castColumns.find((column) => column.name === col.name),
|
|
701
|
+
),
|
|
702
|
+
...columns.filter(
|
|
703
|
+
(col) => !castColumns.find((column) => column.name === col.name),
|
|
704
|
+
),
|
|
705
|
+
];
|
|
674
706
|
}
|
|
707
|
+
|
|
675
708
|
return [
|
|
676
709
|
{
|
|
677
710
|
headerName: '',
|
|
@@ -694,13 +727,11 @@ export function generateColumnDefs(
|
|
|
694
727
|
lockPinned: true,
|
|
695
728
|
lockPosition: true,
|
|
696
729
|
pinned: GridClientPinnedAlignement.LEFT,
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
cellDataType: 'text',
|
|
703
|
-
flex: 1,
|
|
730
|
+
suppressSpanHeaderHeight: true,
|
|
731
|
+
cellDataType: false,
|
|
732
|
+
minWidth: 200,
|
|
733
|
+
suppressAutoSize: true,
|
|
734
|
+
suppressSizeToFit: true,
|
|
704
735
|
loadingCellRenderer: DataCubeGridLoadingCellRenderer,
|
|
705
736
|
// TODO: we can support this in the configuration (support sorting by tree-column?)
|
|
706
737
|
sortable: true,
|
|
@@ -722,14 +753,20 @@ export function generateColumnDefs(
|
|
|
722
753
|
configuration,
|
|
723
754
|
dataCube,
|
|
724
755
|
),
|
|
725
|
-
...
|
|
756
|
+
...columns.map((column) => {
|
|
726
757
|
const columnData = {
|
|
758
|
+
name: column.name,
|
|
727
759
|
snapshot,
|
|
728
760
|
column,
|
|
729
761
|
configuration,
|
|
730
762
|
};
|
|
731
763
|
return {
|
|
732
764
|
headerName: column.displayName ?? column.name,
|
|
765
|
+
headerTooltip: `Column = ${
|
|
766
|
+
column.displayName
|
|
767
|
+
? `${column.displayName} (${column.name})`
|
|
768
|
+
: column.name
|
|
769
|
+
}`,
|
|
733
770
|
suppressSpanHeaderHeight: true,
|
|
734
771
|
colId: column.name,
|
|
735
772
|
field: column.name,
|