@finos/legend-data-cube 0.1.31 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/lib/components/DataCubeStatusBar.d.ts.map +1 -1
  2. package/lib/components/DataCubeStatusBar.js +4 -2
  3. package/lib/components/DataCubeStatusBar.js.map +1 -1
  4. package/lib/components/view/editor/DataCubeEditor.d.ts.map +1 -1
  5. package/lib/components/view/editor/DataCubeEditor.js +5 -1
  6. package/lib/components/view/editor/DataCubeEditor.js.map +1 -1
  7. package/lib/components/view/grid/DataCubeMultidimensionalGrid.d.ts.map +1 -1
  8. package/lib/components/view/grid/DataCubeMultidimensionalGrid.js +40 -2
  9. package/lib/components/view/grid/DataCubeMultidimensionalGrid.js.map +1 -1
  10. package/lib/index.css +1 -1
  11. package/lib/package.json +1 -1
  12. package/lib/stores/DataCubeAPI.d.ts +6 -0
  13. package/lib/stores/DataCubeAPI.d.ts.map +1 -1
  14. package/lib/stores/DataCubeAPI.js +4 -0
  15. package/lib/stores/DataCubeAPI.js.map +1 -1
  16. package/lib/stores/core/DataCubeQueryBuilder.d.ts +12 -0
  17. package/lib/stores/core/DataCubeQueryBuilder.d.ts.map +1 -1
  18. package/lib/stores/core/DataCubeQueryBuilder.js +141 -4
  19. package/lib/stores/core/DataCubeQueryBuilder.js.map +1 -1
  20. package/lib/stores/core/DataCubeQueryBuilderUtils.d.ts +2 -0
  21. package/lib/stores/core/DataCubeQueryBuilderUtils.d.ts.map +1 -1
  22. package/lib/stores/core/DataCubeQueryBuilderUtils.js +18 -1
  23. package/lib/stores/core/DataCubeQueryBuilderUtils.js.map +1 -1
  24. package/lib/stores/core/DataCubeQueryEngine.d.ts +5 -0
  25. package/lib/stores/core/DataCubeQueryEngine.d.ts.map +1 -1
  26. package/lib/stores/core/DataCubeQueryEngine.js +8 -0
  27. package/lib/stores/core/DataCubeQueryEngine.js.map +1 -1
  28. package/lib/stores/core/DataCubeSnapshot.d.ts +2 -0
  29. package/lib/stores/core/DataCubeSnapshot.d.ts.map +1 -1
  30. package/lib/stores/core/DataCubeSnapshot.js.map +1 -1
  31. package/lib/stores/core/DataCubeSnapshotBuilder.d.ts.map +1 -1
  32. package/lib/stores/core/DataCubeSnapshotBuilder.js +2 -2
  33. package/lib/stores/core/DataCubeSnapshotBuilder.js.map +1 -1
  34. package/lib/stores/core/DataCubeSnapshotBuilderUtils.d.ts +2 -1
  35. package/lib/stores/core/DataCubeSnapshotBuilderUtils.d.ts.map +1 -1
  36. package/lib/stores/core/DataCubeSnapshotBuilderUtils.js +3 -3
  37. package/lib/stores/core/DataCubeSnapshotBuilderUtils.js.map +1 -1
  38. package/lib/stores/view/editor/DataCubeEditorDimensionsPanelState.d.ts.map +1 -1
  39. package/lib/stores/view/editor/DataCubeEditorDimensionsPanelState.js +7 -4
  40. package/lib/stores/view/editor/DataCubeEditorDimensionsPanelState.js.map +1 -1
  41. package/lib/stores/view/grid/DataCubeGridClientEngine.d.ts +163 -1
  42. package/lib/stores/view/grid/DataCubeGridClientEngine.d.ts.map +1 -1
  43. package/lib/stores/view/grid/DataCubeGridClientEngine.js +134 -2
  44. package/lib/stores/view/grid/DataCubeGridClientEngine.js.map +1 -1
  45. package/lib/stores/view/grid/DataCubeGridConfigurationBuilder.d.ts +155 -1
  46. package/lib/stores/view/grid/DataCubeGridConfigurationBuilder.d.ts.map +1 -1
  47. package/lib/stores/view/grid/DataCubeGridConfigurationBuilder.js +170 -2
  48. package/lib/stores/view/grid/DataCubeGridConfigurationBuilder.js.map +1 -1
  49. package/lib/stores/view/grid/DataCubeGridControllerState.d.ts.map +1 -1
  50. package/lib/stores/view/grid/DataCubeGridControllerState.js +5 -3
  51. package/lib/stores/view/grid/DataCubeGridControllerState.js.map +1 -1
  52. package/lib/stores/view/grid/DataCubeGridDimensionalTree.d.ts +48 -0
  53. package/lib/stores/view/grid/DataCubeGridDimensionalTree.d.ts.map +1 -0
  54. package/lib/stores/view/grid/DataCubeGridDimensionalTree.js +168 -0
  55. package/lib/stores/view/grid/DataCubeGridDimensionalTree.js.map +1 -0
  56. package/lib/stores/view/grid/DataCubeGridMenuBuilder.d.ts +1 -0
  57. package/lib/stores/view/grid/DataCubeGridMenuBuilder.d.ts.map +1 -1
  58. package/lib/stores/view/grid/DataCubeGridMenuBuilder.js +197 -0
  59. package/lib/stores/view/grid/DataCubeGridMenuBuilder.js.map +1 -1
  60. package/lib/stores/view/grid/DataCubeGridQueryBuilder.d.ts +2 -0
  61. package/lib/stores/view/grid/DataCubeGridQueryBuilder.d.ts.map +1 -1
  62. package/lib/stores/view/grid/DataCubeGridQueryBuilder.js +7 -1
  63. package/lib/stores/view/grid/DataCubeGridQueryBuilder.js.map +1 -1
  64. package/lib/stores/view/grid/DataCubeGridState.d.ts +4 -1
  65. package/lib/stores/view/grid/DataCubeGridState.d.ts.map +1 -1
  66. package/lib/stores/view/grid/DataCubeGridState.js +24 -2
  67. package/lib/stores/view/grid/DataCubeGridState.js.map +1 -1
  68. package/package.json +4 -4
  69. package/src/components/DataCubeStatusBar.tsx +9 -2
  70. package/src/components/view/editor/DataCubeEditor.tsx +8 -1
  71. package/src/components/view/grid/DataCubeMultidimensionalGrid.tsx +63 -1
  72. package/src/stores/DataCubeAPI.ts +10 -0
  73. package/src/stores/core/DataCubeQueryBuilder.ts +256 -2
  74. package/src/stores/core/DataCubeQueryBuilderUtils.ts +22 -0
  75. package/src/stores/core/DataCubeQueryEngine.ts +9 -0
  76. package/src/stores/core/DataCubeSnapshot.ts +2 -0
  77. package/src/stores/core/DataCubeSnapshotBuilder.ts +2 -0
  78. package/src/stores/core/DataCubeSnapshotBuilderUtils.ts +6 -2
  79. package/src/stores/view/editor/DataCubeEditorDimensionsPanelState.ts +8 -7
  80. package/src/stores/view/grid/DataCubeGridClientEngine.ts +252 -5
  81. package/src/stores/view/grid/DataCubeGridConfigurationBuilder.tsx +244 -3
  82. package/src/stores/view/grid/DataCubeGridControllerState.ts +10 -2
  83. package/src/stores/view/grid/DataCubeGridDimensionalTree.ts +268 -0
  84. package/src/stores/view/grid/DataCubeGridMenuBuilder.tsx +240 -0
  85. package/src/stores/view/grid/DataCubeGridQueryBuilder.ts +22 -1
  86. package/src/stores/view/grid/DataCubeGridState.ts +52 -2
  87. package/tsconfig.json +1 -0
@@ -15,7 +15,7 @@
15
15
  */
16
16
  import { debounce, guaranteeNonNullable, StopWatch, } from '@finos/legend-shared';
17
17
  import { action, makeObservable, observable, runInAction } from 'mobx';
18
- import { DataCubeGridClientServerSideDataSource, INTERNAL__GRID_CLIENT_DEFAULT_CACHE_BLOCK_SIZE, INTERNAL__GRID_CLIENT_DATA_FETCH_MANUAL_TRIGGER_COLUMN_ID, INTERNAL__GRID_CLIENT_MAX_CACHE_BLOCK_SIZE, INTERNAL__GRID_CLIENT_DEFAULT_ENABLE_PAGINATION, computeHashCodeForDataFetchManualTrigger, INTERNAL__GRID_CLIENT_DEFAULT_ENABLE_CACHING, } from './DataCubeGridClientEngine.js';
18
+ import { DataCubeGridClientServerSideDataSource, INTERNAL__GRID_CLIENT_DEFAULT_CACHE_BLOCK_SIZE, INTERNAL__GRID_CLIENT_DATA_FETCH_MANUAL_TRIGGER_COLUMN_ID, INTERNAL__GRID_CLIENT_MAX_CACHE_BLOCK_SIZE, INTERNAL__GRID_CLIENT_DEFAULT_ENABLE_PAGINATION, computeHashCodeForDataFetchManualTrigger, INTERNAL__GRID_CLIENT_DEFAULT_ENABLE_CACHING, fetchDimensionalQueryRows, } from './DataCubeGridClientEngine.js';
19
19
  import { DataCubeSnapshotController } from '../../services/DataCubeSnapshotService.js';
20
20
  import { generateGridOptionsFromSnapshot } from './DataCubeGridConfigurationBuilder.js';
21
21
  import { DataCubeConfiguration } from '../../core/model/DataCubeConfiguration.js';
@@ -24,8 +24,9 @@ import { DataCubeGridClientExportEngine } from './DataCubeGridClientExportEngine
24
24
  import { DataCubeSettingKey } from '../../../__lib__/DataCubeSetting.js';
25
25
  import { DEFAULT_ALERT_WINDOW_CONFIG } from '../../services/DataCubeLayoutService.js';
26
26
  import { AlertType } from '../../services/DataCubeAlertService.js';
27
- import { DataCubeGridMode } from '../../core/DataCubeQueryEngine.js';
27
+ import { DataCubeClientModelOption, DataCubeGridMode, } from '../../core/DataCubeQueryEngine.js';
28
28
  import { DataCubeEvent } from '../../../__lib__/DataCubeEvent.js';
29
+ import { hydrateDataCubeDimensionalTree } from './DataCubeGridDimensionalTree.js';
29
30
  /**
30
31
  * This query editor state is responsible for syncing the internal state of ag-grid
31
32
  * server-side row model data source with the data cube query state. When new snapshot
@@ -188,6 +189,27 @@ export class DataCubeGridState extends DataCubeSnapshotController {
188
189
  await this.applySnapshot(latestSnapshot, undefined);
189
190
  }
190
191
  }
192
+ async configureDimensionGridClient(val) {
193
+ this._client = val;
194
+ this.debouncedAutoResizeColumns = debounce(() => val?.autoSizeAllColumns(), 100);
195
+ const latestSnapshot = this.getLatestSnapshot();
196
+ if (latestSnapshot) {
197
+ latestSnapshot.data.tree = hydrateDataCubeDimensionalTree(DataCubeConfiguration.serialization.fromJson(latestSnapshot.data.configuration));
198
+ await this._applyDimensionalSnapshot(latestSnapshot);
199
+ }
200
+ }
201
+ async retrieveDrilldownData(data) {
202
+ const latestSnapshot = guaranteeNonNullable(this.getLatestSnapshot());
203
+ latestSnapshot.data.tree = hydrateDataCubeDimensionalTree(DataCubeConfiguration.serialization.fromJson(latestSnapshot.data.configuration), data, latestSnapshot.data.tree);
204
+ await this._applyDimensionalSnapshot(latestSnapshot);
205
+ }
206
+ async _applyDimensionalSnapshot(snapshot) {
207
+ //TODO: only trigger when there is an actual change in tree
208
+ const result = await fetchDimensionalQueryRows(snapshot, this._view);
209
+ this._client?.setGridOption(DataCubeClientModelOption.ROW_DATA, result.rowData);
210
+ this._client?.setGridOption(DataCubeClientModelOption.COLUMN_DEFS, result.columnDefs);
211
+ this.publishSnapshot(snapshot);
212
+ }
191
213
  getSnapshotSubscriberName() {
192
214
  return 'grid';
193
215
  }
@@ -1 +1 @@
1
- {"version":3,"file":"DataCubeGridState.js","sourceRoot":"","sources":["../../../../src/stores/view/grid/DataCubeGridState.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DataCubeGridState.js","sourceRoot":"","sources":["../../../../src/stores/view/grid/DataCubeGridState.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@finos/legend-data-cube",
3
- "version": "0.1.31",
3
+ "version": "0.2.0",
4
4
  "description": "Legend DataCube",
5
5
  "keywords": [
6
6
  "legend",
@@ -42,9 +42,9 @@
42
42
  "test:watch": "jest --watch"
43
43
  },
44
44
  "dependencies": {
45
- "@finos/legend-art": "7.1.95",
46
- "@finos/legend-code-editor": "2.0.68",
47
- "@finos/legend-graph": "32.1.26",
45
+ "@finos/legend-art": "7.1.96",
46
+ "@finos/legend-code-editor": "2.0.69",
47
+ "@finos/legend-graph": "32.1.27",
48
48
  "@finos/legend-shared": "11.0.11",
49
49
  "@types/react": "19.0.10",
50
50
  "ag-grid-community": "33.1.1",
@@ -20,7 +20,10 @@ import type { DataCubeViewState } from '../stores/view/DataCubeViewState.js';
20
20
  import type { TaskManager } from '../stores/services/DataCubeTaskService.js';
21
21
  import { at } from '@finos/legend-shared';
22
22
  import { DataCubeEvent } from '../__lib__/DataCubeEvent.js';
23
- import { DataCubeOpenEditorSource } from '../stores/core/DataCubeQueryEngine.js';
23
+ import {
24
+ DataCubeOpenEditorSource,
25
+ isDimensionalGridMode,
26
+ } from '../stores/core/DataCubeQueryEngine.js';
24
27
 
25
28
  export const DataCubeStatusBar = observer(
26
29
  (props: {
@@ -71,7 +74,11 @@ export const DataCubeStatusBar = observer(
71
74
  view?.filter.display.open();
72
75
  logOpeningFilterEditor();
73
76
  }}
74
- disabled={!view}
77
+ disabled={
78
+ !view ||
79
+ // TODO: add support for filtering in dimensional grid mode
80
+ isDimensionalGridMode(view.info.configuration.gridMode)
81
+ }
75
82
  >
76
83
  <DataCubeIcon.TableFilter className="text-lg" />
77
84
  <div className="pl-0.5 underline">Filter</div>
@@ -28,6 +28,7 @@ import { FormButton } from '../../core/DataCubeFormUtils.js';
28
28
  import { useDataCube } from '../../DataCubeProvider.js';
29
29
  import { DataCubeEditorDimensionsPanel } from './DataCubeEditorDimensionsPanel.js';
30
30
  import { DataCubeEvent } from '../../../__lib__/DataCubeEvent.js';
31
+ import { isDimensionalGridMode } from '../../../stores/core/DataCubeQueryEngine.js';
31
32
 
32
33
  export const DataCubeEditor = observer((props: { view: DataCubeViewState }) => {
33
34
  const dataCube = useDataCube();
@@ -45,6 +46,8 @@ export const DataCubeEditor = observer((props: { view: DataCubeViewState }) => {
45
46
  DataCubeEditorTab.GENERAL_PROPERTIES,
46
47
  DataCubeEditorTab.COLUMN_PROPERTIES,
47
48
  ];
49
+ //TODO: Add support to make changes to other tabs for dimensional grid mode
50
+ const dimensionTabs = [DataCubeEditorTab.DIMENSIONS];
48
51
 
49
52
  const logApplyChangesFromPropertiesEditor = (): void => {
50
53
  view.dataCube.telemetryService.sendTelemetry(
@@ -61,8 +64,12 @@ export const DataCubeEditor = observer((props: { view: DataCubeViewState }) => {
61
64
  <button
62
65
  key={tab}
63
66
  onClick={() => editor.setCurrentTab(tab)}
67
+ disabled={
68
+ isDimensionalGridMode(view.info.configuration.gridMode) &&
69
+ !dimensionTabs.includes(tab)
70
+ }
64
71
  className={cn(
65
- 'relative flex h-6 items-center justify-center whitespace-nowrap border border-b-0 border-l-0 border-neutral-300 px-2 first:border-l focus:z-10',
72
+ 'relative flex h-6 items-center justify-center whitespace-nowrap border border-b-0 border-l-0 border-neutral-300 px-2 first:border-l focus:z-10 disabled:text-neutral-400',
66
73
  {
67
74
  '-top-0.5 h-[27px] border-b-0 bg-white': tab === selectedTab,
68
75
  },
@@ -16,11 +16,73 @@
16
16
 
17
17
  import { observer } from 'mobx-react-lite';
18
18
  import type { DataCubeViewState } from '../../../stores/view/DataCubeViewState.js';
19
+ import { DataCubeGridStyleController } from './DataCubeGrid.js';
20
+ import { AgGridReact } from 'ag-grid-react';
21
+ import { generateDimensionalBaseGridOptions } from '../../../stores/view/grid/DataCubeGridConfigurationBuilder.js';
22
+ import { AllCommunityModule } from 'ag-grid-community';
23
+ import { AllEnterpriseModule } from 'ag-grid-enterprise';
24
+
25
+ const __INTERNAL__original_console_error = console.error; // eslint-disable-line no-console
26
+
27
+ const DataCubeMultidimensionalGridClient = observer(
28
+ (props: { view: DataCubeViewState }) => {
29
+ const { view } = props;
30
+ const grid = view.grid;
31
+
32
+ // eslint-disable-next-line no-process-env
33
+ if (process.env.NODE_ENV !== 'production' && !grid.isClientConfigured) {
34
+ // eslint-disable-next-line no-console
35
+ console.error = (message?: unknown) => {
36
+ console.debug(`%c ${message}`, 'color: silver'); // eslint-disable-line no-console
37
+ };
38
+ }
39
+
40
+ // We use the client row model to showcase multi-dimensionality;
41
+ // Tree Data cannot be used in this case as the aggregation works on multiple columns
42
+ // https://www.ag-grid.com/javascript-data-grid/row-models/#client-side
43
+ return (
44
+ <div className="relative h-[calc(100%_-_20px)] w-full">
45
+ <AgGridReact
46
+ theme="legacy"
47
+ className="data-cube-grid ag-theme-quartz"
48
+ context={{
49
+ view,
50
+ }}
51
+ columnDefs={[]}
52
+ rowData={[]}
53
+ onCellDoubleClicked={(event) => {
54
+ grid
55
+ .retrieveDrilldownData(event)
56
+ .catch((error) => view.alertService.alertUnhandledError(error));
57
+ }}
58
+ onGridReady={(params) => {
59
+ grid
60
+ .configureDimensionGridClient(params.api)
61
+ .catch((error) => view.alertService.alertUnhandledError(error));
62
+ // eslint-disable-next-line no-process-env
63
+ if (process.env.NODE_ENV !== 'production') {
64
+ // restore original error logging
65
+ console.error = __INTERNAL__original_console_error; // eslint-disable-line no-console
66
+ }
67
+ }}
68
+ modules={[AllCommunityModule, AllEnterpriseModule]}
69
+ {...generateDimensionalBaseGridOptions(view)}
70
+ />
71
+ </div>
72
+ );
73
+ },
74
+ );
19
75
 
20
76
  export const DataCubeMultidimensionalGrid = observer(
21
77
  (props: { view: DataCubeViewState }) => {
78
+ const view = props.view;
79
+ const configuration = props.view.grid.configuration;
80
+
22
81
  return (
23
- <div className="border-t-1 border-b-1 h-[calc(100%_-_48px)] w-full border border-neutral-200 bg-neutral-50" />
82
+ <div className="h-[calc(100%_-_48px)] w-full">
83
+ <DataCubeGridStyleController configuration={configuration} />
84
+ <DataCubeMultidimensionalGridClient view={view} />
85
+ </div>
24
86
  );
25
87
  },
26
88
  );
@@ -18,6 +18,7 @@ import type { DataCubeSpecification } from './core/model/DataCubeSpecification.j
18
18
  import type { DataCubeSource } from './core/model/DataCubeSource.js';
19
19
  import type { DataCubeState } from './DataCubeState.js';
20
20
  import type { DataCubeViewState } from './view/DataCubeViewState.js';
21
+ import type { DataCubeGridMode } from './core/DataCubeQueryEngine.js';
21
22
 
22
23
  /**
23
24
  * This is the API exposed externally by DataCube to restrict access to certain
@@ -58,6 +59,10 @@ export interface DataCubeAPI {
58
59
  * Get the caching enabled state of the underlying grid.
59
60
  */
60
61
  isCachingEnabled(): boolean;
62
+ /**
63
+ * Get mode for grid
64
+ */
65
+ getGridMode(): DataCubeGridMode;
61
66
  }
62
67
 
63
68
  /**
@@ -112,4 +117,9 @@ export class INTERNAL__DataCubeAPI implements DataCubeAPI {
112
117
  isCachingEnabled() {
113
118
  return this._dataCube.view.grid.isCachingEnabled;
114
119
  }
120
+
121
+ // TODO: remove this method once saving is enabled for dimensional mode
122
+ getGridMode() {
123
+ return this._dataCube.view.info.configuration.gridMode;
124
+ }
115
125
  }
@@ -23,13 +23,21 @@
23
23
 
24
24
  import {
25
25
  PRIMITIVE_TYPE,
26
+ V1_AppliedProperty,
27
+ V1_CString,
26
28
  V1_Lambda,
29
+ V1_Variable,
27
30
  type V1_AppliedFunction,
28
31
  } from '@finos/legend-graph';
29
- import { type DataCubeSnapshot } from './DataCubeSnapshot.js';
32
+ import {
33
+ type DataCubeSnapshot,
34
+ type DataCubeSnapshotExtendedColumn,
35
+ type DataCubeSnapshotGroupBy,
36
+ } from './DataCubeSnapshot.js';
30
37
  import { at, guaranteeType } from '@finos/legend-shared';
31
38
  import {
32
39
  DataCubeFunction,
40
+ DataCubeQueryFilterGroupOperator,
33
41
  DataCubeQuerySortDirection,
34
42
  type DataCubeQueryFunctionMap,
35
43
  } from './DataCubeQueryEngine.js';
@@ -49,10 +57,15 @@ import {
49
57
  _var,
50
58
  _functionCompositionProcessor,
51
59
  _extendRootAggregation,
60
+ _flattenFilterSnapshot,
52
61
  } from './DataCubeQueryBuilderUtils.js';
53
62
  import type { DataCubeSource } from './model/DataCubeSource.js';
54
- import { _findCol } from './model/DataCubeColumn.js';
63
+ import { _findCol, _toCol } from './model/DataCubeColumn.js';
55
64
  import type { DataCubeEngine } from './DataCubeEngine.js';
65
+ import {
66
+ DIMENSIONAL_L0_COLUMN,
67
+ type DataCubeDimensionalNode,
68
+ } from '../view/grid/DataCubeGridDimensionalTree.js';
56
69
 
57
70
  export function buildExecutableQuery(
58
71
  snapshot: DataCubeSnapshot,
@@ -312,3 +325,244 @@ export function buildExecutableQuery(
312
325
  }
313
326
  return at(sequence, sequence.length - 1);
314
327
  }
328
+
329
+ export function buildDimensionalExecutableQuery(
330
+ snapshot: DataCubeSnapshot,
331
+ source: DataCubeSource,
332
+ engine: DataCubeEngine,
333
+ nodes: DataCubeDimensionalNode[],
334
+ options?: {
335
+ postProcessor?: (
336
+ snapshot: DataCubeSnapshot,
337
+ sequence: V1_AppliedFunction[],
338
+ funcMap: DataCubeQueryFunctionMap,
339
+ configuration: DataCubeConfiguration,
340
+ engine: DataCubeEngine,
341
+ ) => void;
342
+ rootAggregation?:
343
+ | {
344
+ columnName: string;
345
+ }
346
+ | undefined;
347
+ pagination?:
348
+ | {
349
+ start: number;
350
+ end: number;
351
+ }
352
+ | undefined;
353
+ skipExecutionContext?: boolean;
354
+ },
355
+ ) {
356
+ const data = snapshot.data;
357
+ const configuration = DataCubeConfiguration.serialization.fromJson(
358
+ data.configuration,
359
+ );
360
+ const sequence: V1_AppliedFunction[] = [];
361
+ const funcMap: DataCubeQueryFunctionMap = {};
362
+ const _process = _functionCompositionProcessor(sequence, funcMap);
363
+
364
+ // ------------------------------ DIMENSIONS -------------------------------------
365
+
366
+ if (data.tree && nodes.length > 0) {
367
+ const dimensionColNames = configuration.dimensions.dimensions.flatMap(
368
+ (col) => col.columns,
369
+ );
370
+
371
+ // removing columns which have been added to represent diimensions
372
+ configuration.columns = configuration.columns.map((col) => {
373
+ if (dimensionColNames.includes(col.name)) {
374
+ col.isSelected = false;
375
+ }
376
+ return col;
377
+ });
378
+
379
+ // Adding dimensions to the extended column
380
+ nodes.forEach((node) => {
381
+ const lambda = new V1_Lambda();
382
+ const parameter = new V1_Variable();
383
+ parameter.name = 'temp';
384
+ if (node.column === DIMENSIONAL_L0_COLUMN) {
385
+ const defaultValue = new V1_CString();
386
+ defaultValue.value = node.column;
387
+ lambda.body = [defaultValue];
388
+ } else {
389
+ const defaultValue = new V1_AppliedProperty();
390
+ defaultValue.parameters = [parameter];
391
+ defaultValue.property = node.column;
392
+ lambda.body = [defaultValue];
393
+ }
394
+ lambda.parameters = [parameter];
395
+ data.leafExtendedColumns.unshift({
396
+ name: node.dimension,
397
+ type: PRIMITIVE_TYPE.STRING,
398
+ mapFn: engine.serializeValueSpecification(lambda),
399
+ } satisfies DataCubeSnapshotExtendedColumn);
400
+ });
401
+
402
+ // Adding dimensions to selected list
403
+ data.selectColumns = data.selectColumns.filter(
404
+ (col) => !dimensionColNames.includes(col.name),
405
+ );
406
+
407
+ const dimensionCols = nodes.map((col) =>
408
+ _toCol({ name: col.dimension, type: PRIMITIVE_TYPE.STRING }),
409
+ );
410
+ data.selectColumns.unshift(...dimensionCols);
411
+
412
+ // Adding filter based on group by nodes
413
+ const groupByNodes = nodes.flatMap((x) => x.groupByNodes);
414
+ if (groupByNodes.length > 0) {
415
+ const filter = [
416
+ _flattenFilterSnapshot(nodes.flatMap((x) => x.groupByNodes)),
417
+ ];
418
+ if (data.filter) {
419
+ filter.push(data.filter);
420
+ data.filter = {
421
+ groupOperator: DataCubeQueryFilterGroupOperator.AND,
422
+ conditions: filter,
423
+ };
424
+ } else {
425
+ data.filter = filter.at(0);
426
+ }
427
+ }
428
+
429
+ // Adding dimensions to groupby
430
+ if (data.groupBy) {
431
+ data.groupBy.columns.unshift(...dimensionCols);
432
+ } else {
433
+ data.groupBy = {
434
+ columns: dimensionCols,
435
+ } satisfies DataCubeSnapshotGroupBy;
436
+ }
437
+ }
438
+
439
+ // --------------------------------- LEAF-LEVEL EXTEND ---------------------------------
440
+
441
+ if (data.leafExtendedColumns.length) {
442
+ _process(
443
+ 'leafExtend',
444
+ data.leafExtendedColumns.map((col) =>
445
+ _function(DataCubeFunction.EXTEND, [
446
+ _cols([
447
+ _colSpec(
448
+ col.name,
449
+ guaranteeType(
450
+ engine.deserializeValueSpecification(col.mapFn),
451
+ V1_Lambda,
452
+ ),
453
+ col.reduceFn
454
+ ? guaranteeType(
455
+ engine.deserializeValueSpecification(col.reduceFn),
456
+ V1_Lambda,
457
+ )
458
+ : undefined,
459
+ ),
460
+ ]),
461
+ ]),
462
+ ),
463
+ );
464
+ }
465
+
466
+ // --------------------------------- FILTER ---------------------------------
467
+
468
+ if (data.filter) {
469
+ _process(
470
+ 'filter',
471
+ _function(DataCubeFunction.FILTER, [
472
+ _lambda([_var()], [_filter(data.filter, engine.filterOperations)]),
473
+ ]),
474
+ );
475
+ }
476
+
477
+ // --------------------------------- SELECT ---------------------------------
478
+
479
+ if (data.selectColumns.length) {
480
+ _process(
481
+ 'select',
482
+ _function(DataCubeFunction.SELECT, [
483
+ _cols(data.selectColumns.map((col) => _colSpec(col.name))),
484
+ ]),
485
+ );
486
+ }
487
+
488
+ // --------------------------------- PIVOT ---------------------------------
489
+
490
+ // TODO: rethink pivots for dimensional grid mode
491
+
492
+ // --------------------------------- GROUP BY ---------------------------------
493
+
494
+ if (data.groupBy) {
495
+ const groupBy = data.groupBy;
496
+ if (configuration.showRootAggregation && options?.rootAggregation) {
497
+ sequence.push(_extendRootAggregation(options.rootAggregation.columnName));
498
+ }
499
+ _process(
500
+ 'groupBy',
501
+ _function(DataCubeFunction.GROUP_BY, [
502
+ _cols(groupBy.columns.map((col) => _colSpec(col.name))),
503
+ _cols(
504
+ _groupByAggCols(
505
+ groupBy.columns,
506
+ snapshot,
507
+ configuration,
508
+ engine.aggregateOperations,
509
+ ),
510
+ ),
511
+ ]),
512
+ );
513
+ _process(
514
+ 'groupBySort',
515
+ _function(DataCubeFunction.SORT, [
516
+ _collection(
517
+ groupBy.columns.map((col) =>
518
+ _function(
519
+ configuration.treeColumnSortDirection ===
520
+ DataCubeQuerySortDirection.ASCENDING
521
+ ? DataCubeFunction.ASCENDING
522
+ : DataCubeFunction.DESCENDING,
523
+ [_col(col.name)],
524
+ ),
525
+ ),
526
+ ),
527
+ ]),
528
+ );
529
+ }
530
+
531
+ // --------------------------------- GROUP-LEVEL EXTEND ---------------------------------
532
+
533
+ // TODO: implement group level extends for dimensional grid mode
534
+
535
+ // --------------------------------- SORT ---------------------------------
536
+
537
+ // TODO: implement sort for dimensional grid mode
538
+
539
+ // --------------------------------- LIMIT ---------------------------------
540
+
541
+ // TODO: rethink limits for dimensional grid mode
542
+
543
+ // --------------------------------- SLICE ---------------------------------
544
+
545
+ // TODO: rethink slice for dimensional grid mode
546
+ // slice can lead to incorrect view of data for dimensionality
547
+
548
+ // --------------------------------- FINALIZE ---------------------------------
549
+
550
+ if (!options?.skipExecutionContext) {
551
+ const executionContext = engine.buildExecutionContext(source);
552
+ if (executionContext) {
553
+ sequence.push(executionContext);
554
+ }
555
+ }
556
+
557
+ options?.postProcessor?.(snapshot, sequence, funcMap, configuration, engine);
558
+
559
+ if (sequence.length === 0) {
560
+ return source.query;
561
+ }
562
+ for (let i = 0; i < sequence.length; i++) {
563
+ at(sequence, i).parameters.unshift(
564
+ i === 0 ? source.query : at(sequence, i - 1),
565
+ );
566
+ }
567
+ return at(sequence, sequence.length - 1);
568
+ }
@@ -81,6 +81,7 @@ import {
81
81
  isPivotResultColumnName,
82
82
  getPivotResultColumnBaseColumnName,
83
83
  DEFAULT_ROOT_AGGREGATION_COLUMN_VALUE,
84
+ DataCubeQueryFilterOperator,
84
85
  } from './DataCubeQueryEngine.js';
85
86
  import type { DataCubeQueryFilterOperation } from './filter/DataCubeQueryFilterOperation.js';
86
87
  import type { DataCubeQueryAggregateOperation } from './aggregation/DataCubeQueryAggregateOperation.js';
@@ -88,6 +89,7 @@ import {
88
89
  DataCubeColumnConfiguration,
89
90
  type DataCubeConfiguration,
90
91
  } from './model/DataCubeConfiguration.js';
92
+ import type { DataCubeDimensionalGroupByNode } from '../view/grid/DataCubeGridDimensionalTree.js';
91
93
 
92
94
  // --------------------------------- UTILITIES ---------------------------------
93
95
 
@@ -645,3 +647,23 @@ export function _filter(
645
647
  return filterCondition.not ? _not(condition) : condition;
646
648
  }
647
649
  }
650
+
651
+ export function _flattenFilterSnapshot(
652
+ groupByNodes: DataCubeDimensionalGroupByNode[],
653
+ ): DataCubeSnapshotFilter {
654
+ const filterConditions = groupByNodes.map((node) => {
655
+ return {
656
+ name: node.column,
657
+ type: 'String', // Assuming all filters are strings — update if needed
658
+ operator: DataCubeQueryFilterOperator.EQUAL,
659
+ value: {
660
+ type: 'String',
661
+ value: node.filter,
662
+ } satisfies DataCubeOperationValue,
663
+ } satisfies DataCubeSnapshotFilterCondition;
664
+ });
665
+ return {
666
+ groupOperator: DataCubeQueryFilterGroupOperator.AND,
667
+ conditions: filterConditions,
668
+ } satisfies DataCubeSnapshotFilter;
669
+ }
@@ -273,6 +273,11 @@ export enum DataCubeGridMode {
273
273
  MULTIDIMENSIONAL = 'Multidimensional',
274
274
  }
275
275
 
276
+ export enum DataCubeClientModelOption {
277
+ ROW_DATA = 'rowData',
278
+ COLUMN_DEFS = 'columnDefs',
279
+ }
280
+
276
281
  export enum DataCubeTitleBarMenuItems {
277
282
  VIEW_SOURCE = 'View Source',
278
283
  RESET_TO_LATEST_SAVE = 'Reset to Latest Save',
@@ -409,6 +414,10 @@ export function ofDataType(
409
414
  return dataTypes.includes(getDataType(type));
410
415
  }
411
416
 
417
+ export function isDimensionalGridMode(gridMode: DataCubeGridMode) {
418
+ return gridMode === DataCubeGridMode.MULTIDIMENSIONAL;
419
+ }
420
+
412
421
  export function isPrimitiveType(type: string) {
413
422
  return (
414
423
  [
@@ -29,6 +29,7 @@ import type {
29
29
  DataCubeQuerySortDirection,
30
30
  } from './DataCubeQueryEngine.js';
31
31
  import type { DataCubeColumn } from './model/DataCubeColumn.js';
32
+ import type { DataCubeDimensionalTree } from '../view/grid/DataCubeGridDimensionalTree.js';
32
33
 
33
34
  export type DataCubeSnapshotFilterCondition = DataCubeColumn & {
34
35
  value: DataCubeOperationValue;
@@ -85,6 +86,7 @@ export type DataCubeSnapshotData = {
85
86
  groupExtendedColumns: DataCubeSnapshotExtendedColumn[];
86
87
  sortColumns: DataCubeSnapshotSortColumn[];
87
88
  limit: number | undefined;
89
+ tree?: DataCubeDimensionalTree | undefined;
88
90
  };
89
91
 
90
92
  export class DataCubeSnapshot {
@@ -415,6 +415,7 @@ export async function validateAndBuildSnapshot(
415
415
  funcMap.leafExtend,
416
416
  Array.from(colsMap.values()),
417
417
  engine,
418
+ source,
418
419
  );
419
420
 
420
421
  // validate
@@ -548,6 +549,7 @@ export async function validateAndBuildSnapshot(
548
549
  funcMap.groupExtend,
549
550
  Array.from(colsMap.values()),
550
551
  engine,
552
+ source,
551
553
  );
552
554
 
553
555
  // validate
@@ -81,7 +81,10 @@ import {
81
81
  _lambda,
82
82
  _synthesizeMinimalSourceQuery,
83
83
  } from './DataCubeQueryBuilderUtils.js';
84
- import { INTERNAL__DataCubeSource } from './model/DataCubeSource.js';
84
+ import {
85
+ INTERNAL__DataCubeSource,
86
+ type DataCubeSource,
87
+ } from './model/DataCubeSource.js';
85
88
  import type { DataCubeQueryAggregateOperation } from './aggregation/DataCubeQueryAggregateOperation.js';
86
89
 
87
90
  // --------------------------------- UTILITIES ---------------------------------
@@ -305,6 +308,7 @@ export async function _extractExtendedColumns(
305
308
  funcs: V1_AppliedFunction[],
306
309
  currentColumns: DataCubeColumn[],
307
310
  engine: DataCubeEngine,
311
+ source?: DataCubeSource,
308
312
  ) {
309
313
  const colSpecs = funcs.map((extendFunc) => {
310
314
  // TODO: support extend() with window (OLAP), this assertion will no longer work
@@ -343,7 +347,7 @@ export async function _extractExtendedColumns(
343
347
  columns = (
344
348
  await engine.getQueryRelationReturnType(
345
349
  _lambda([], [query]),
346
- new INTERNAL__DataCubeSource(),
350
+ source ? source : new INTERNAL__DataCubeSource(),
347
351
  )
348
352
  ).columns;
349
353
  } catch (error) {