@finos/legend-data-cube 0.1.16 → 0.1.18

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 (69) hide show
  1. package/lib/__lib__/DataCubeEvent.d.ts +16 -1
  2. package/lib/__lib__/DataCubeEvent.d.ts.map +1 -1
  3. package/lib/__lib__/DataCubeEvent.js +15 -0
  4. package/lib/__lib__/DataCubeEvent.js.map +1 -1
  5. package/lib/components/DataCube.d.ts.map +1 -1
  6. package/lib/components/DataCube.js +23 -7
  7. package/lib/components/DataCube.js.map +1 -1
  8. package/lib/components/DataCubeStatusBar.d.ts.map +1 -1
  9. package/lib/components/DataCubeStatusBar.js +19 -1
  10. package/lib/components/DataCubeStatusBar.js.map +1 -1
  11. package/lib/components/view/editor/DataCubeEditor.d.ts.map +1 -1
  12. package/lib/components/view/editor/DataCubeEditor.js +6 -0
  13. package/lib/components/view/editor/DataCubeEditor.js.map +1 -1
  14. package/lib/components/view/extend/DataCubeColumnEditor.d.ts.map +1 -1
  15. package/lib/components/view/extend/DataCubeColumnEditor.js +5 -0
  16. package/lib/components/view/extend/DataCubeColumnEditor.js.map +1 -1
  17. package/lib/components/view/filter/DataCubeFilterEditor.d.ts.map +1 -1
  18. package/lib/components/view/filter/DataCubeFilterEditor.js +9 -1
  19. package/lib/components/view/filter/DataCubeFilterEditor.js.map +1 -1
  20. package/lib/index.css +1 -1
  21. package/lib/index.d.ts +1 -1
  22. package/lib/index.d.ts.map +1 -1
  23. package/lib/index.js +1 -1
  24. package/lib/index.js.map +1 -1
  25. package/lib/package.json +1 -1
  26. package/lib/stores/core/DataCubeEngine.d.ts +3 -1
  27. package/lib/stores/core/DataCubeEngine.d.ts.map +1 -1
  28. package/lib/stores/core/DataCubeEngine.js.map +1 -1
  29. package/lib/stores/core/DataCubeQueryEngine.d.ts +15 -0
  30. package/lib/stores/core/DataCubeQueryEngine.d.ts.map +1 -1
  31. package/lib/stores/core/DataCubeQueryEngine.js +17 -0
  32. package/lib/stores/core/DataCubeQueryEngine.js.map +1 -1
  33. package/lib/stores/core/model/DataCubeConfiguration.d.ts +1 -0
  34. package/lib/stores/core/model/DataCubeConfiguration.d.ts.map +1 -1
  35. package/lib/stores/core/model/DataCubeConfiguration.js +31 -1
  36. package/lib/stores/core/model/DataCubeConfiguration.js.map +1 -1
  37. package/lib/stores/view/DataCubeViewState.d.ts.map +1 -1
  38. package/lib/stores/view/DataCubeViewState.js +12 -1
  39. package/lib/stores/view/DataCubeViewState.js.map +1 -1
  40. package/lib/stores/view/grid/DataCubeGridClientEngine.d.ts.map +1 -1
  41. package/lib/stores/view/grid/DataCubeGridClientEngine.js +9 -0
  42. package/lib/stores/view/grid/DataCubeGridClientEngine.js.map +1 -1
  43. package/lib/stores/view/grid/DataCubeGridMenuBuilder.d.ts.map +1 -1
  44. package/lib/stores/view/grid/DataCubeGridMenuBuilder.js +168 -46
  45. package/lib/stores/view/grid/DataCubeGridMenuBuilder.js.map +1 -1
  46. package/lib/stores/view/grid/DataCubeGridState.d.ts.map +1 -1
  47. package/lib/stores/view/grid/DataCubeGridState.js +15 -1
  48. package/lib/stores/view/grid/DataCubeGridState.js.map +1 -1
  49. package/package.json +4 -4
  50. package/src/__lib__/DataCubeEvent.ts +15 -0
  51. package/src/components/DataCube.tsx +30 -7
  52. package/src/components/DataCubeStatusBar.tsx +27 -1
  53. package/src/components/view/editor/DataCubeEditor.tsx +10 -0
  54. package/src/components/view/extend/DataCubeColumnEditor.tsx +9 -0
  55. package/src/components/view/filter/DataCubeFilterEditor.tsx +16 -1
  56. package/src/index.tsx +1 -1
  57. package/src/stores/core/DataCubeEngine.tsx +9 -0
  58. package/src/stores/core/DataCubeQueryEngine.ts +17 -0
  59. package/src/stores/core/model/DataCubeConfiguration.ts +32 -1
  60. package/src/stores/view/DataCubeViewState.ts +16 -1
  61. package/src/stores/view/grid/DataCubeGridClientEngine.ts +13 -0
  62. package/src/stores/view/grid/DataCubeGridMenuBuilder.tsx +170 -41
  63. package/src/stores/view/grid/DataCubeGridState.ts +21 -1
  64. package/tsconfig.json +0 -1
  65. package/lib/__lib__/DataCubeTelemetryHelper.d.ts +0 -57
  66. package/lib/__lib__/DataCubeTelemetryHelper.d.ts.map +0 -1
  67. package/lib/__lib__/DataCubeTelemetryHelper.js +0 -33
  68. package/lib/__lib__/DataCubeTelemetryHelper.js.map +0 -1
  69. package/src/__lib__/DataCubeTelemetryHelper.ts +0 -96
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@finos/legend-data-cube",
3
- "version": "0.1.16",
3
+ "version": "0.1.18",
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.88",
46
- "@finos/legend-code-editor": "2.0.54",
47
- "@finos/legend-graph": "32.1.12",
45
+ "@finos/legend-art": "7.1.89",
46
+ "@finos/legend-code-editor": "2.0.55",
47
+ "@finos/legend-graph": "32.1.13",
48
48
  "@finos/legend-shared": "11.0.9",
49
49
  "@types/react": "19.0.10",
50
50
  "ag-grid-community": "33.1.1",
@@ -18,4 +18,19 @@ export enum DataCubeEvent {
18
18
  SETTINGS__FAILURE__FOUND_UNREGISTERED_SETTING = 'data-cube.settings.failure.found-unregistered-setting',
19
19
  SETTINGS__FAILURE__ASSIGN_INCOMPATIBLE_VALUE = 'data-cube.settings.failure.assign-incompatible-value',
20
20
  SETTINGS__FAILURE__RETRIEVE_INCOMPATIBLE_VALUE = 'data-cube.settings.failure.retrieve-incompatible-value',
21
+ EMAIL_DATACUBE = 'data-cube.email-data-cube',
22
+ EXPORT_DATACUBE = 'data-cube.export-data-cube',
23
+ CACHING_ENABLE__SUCCESS = 'data-cube.enable-caching.success',
24
+ CACHING_DISABLE__SUCCESS = 'data-cube.disable-caching.success',
25
+ SELECT_ACTION_CACHE_LOAD_ALERT = 'data-cube.select-action-caching-load-alert',
26
+ PAGINATION_ENABLE__SUCCESS = 'data-cube.enable-pagination.success',
27
+ PAGINATION_DISABLE__SUCCESS = 'data-cube.disable-pagination.success',
28
+ SELECT_ACTION_PAGINATION_ALERT = 'data-cube.select-action-pagination-alert',
29
+ APPLY_CHANGES_PROPERTIES = 'data-cube.apply-changes-properties',
30
+ APPLY_CHANGES_FILTER = 'data-cube.apply-changes-filter',
31
+ SELECT_ITEM_TITLE_BAR = 'data-cube.select-item-title-bar',
32
+ SELECT_ITEM_GRIDMENU = 'data-cube.select-item-gridMenu',
33
+ OPEN_EDITOR_FILTER = 'data-cube.open-editor-filter',
34
+ OPEN_EDITOR_PROPERTIES = 'data-cube.open-editor-properties',
35
+ ADD_NEW_COLUMN = 'data-cube.add-new-column',
21
36
  }
@@ -25,16 +25,30 @@ import { type DataCubeOptions } from '../stores/DataCubeOptions.js';
25
25
  import { DataCubeContextProvider, useDataCube } from './DataCubeProvider.js';
26
26
  import type { DataCubeSpecification } from '../stores/core/model/DataCubeSpecification.js';
27
27
  import { DataCubeTitleBar } from './DataCubeTitleBar.js';
28
- import { DEFAULT_REPORT_NAME } from '../stores/core/DataCubeQueryEngine.js';
28
+ import {
29
+ DataCubeTitleBarMenuItems,
30
+ DEFAULT_REPORT_NAME,
31
+ } from '../stores/core/DataCubeQueryEngine.js';
29
32
  import {
30
33
  DataCubePlaceholderErrorDisplay,
31
34
  DataCubePlaceholder,
32
35
  } from './DataCubePlaceholder.js';
36
+ import { DataCubeEvent } from '../__lib__/DataCubeEvent.js';
33
37
 
34
38
  const DataCubeRoot = observer(() => {
35
39
  const dataCube = useDataCube();
36
40
  const view = dataCube.view;
37
41
 
42
+ const logMenuItem = (menuName: string) => {
43
+ view.dataCube.telemetryService.sendTelemetry(
44
+ DataCubeEvent.SELECT_ITEM_TITLE_BAR,
45
+ {
46
+ ...view.engine.getDataFromSource(view.getInitialSource()),
47
+ menuName: menuName,
48
+ },
49
+ );
50
+ };
51
+
38
52
  useEffect(() => {
39
53
  dataCube.view
40
54
  .initialize(dataCube.specification)
@@ -47,18 +61,27 @@ const DataCubeRoot = observer(() => {
47
61
  title={view.info.name}
48
62
  menuItems={[
49
63
  {
50
- label: 'Undo',
51
- action: () => dataCube.view.snapshotService.undo(),
64
+ label: DataCubeTitleBarMenuItems.UNDO,
65
+ action: () => {
66
+ dataCube.view.snapshotService.undo();
67
+ logMenuItem(DataCubeTitleBarMenuItems.UNDO);
68
+ },
52
69
  disabled: !dataCube.view.snapshotService.canUndo,
53
70
  },
54
71
  {
55
- label: 'Redo',
56
- action: () => dataCube.view.snapshotService.redo(),
72
+ label: DataCubeTitleBarMenuItems.REDO,
73
+ action: () => {
74
+ dataCube.view.snapshotService.redo();
75
+ logMenuItem(DataCubeTitleBarMenuItems.REDO);
76
+ },
57
77
  disabled: !dataCube.view.snapshotService.canRedo,
58
78
  },
59
79
  {
60
- label: 'Settings...',
61
- action: () => dataCube.settingService.display.open(),
80
+ label: DataCubeTitleBarMenuItems.SETTINGS,
81
+ action: () => {
82
+ dataCube.settingService.display.open();
83
+ logMenuItem(DataCubeTitleBarMenuItems.SETTINGS);
84
+ },
62
85
  },
63
86
  ]}
64
87
  getMenuItems={dataCube.options?.getHeaderMenuItems}
@@ -19,6 +19,8 @@ import { observer } from 'mobx-react-lite';
19
19
  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
+ import { DataCubeEvent } from '../__lib__/DataCubeEvent.js';
23
+ import { DataCubeOpenEditorSource } from '../stores/core/DataCubeQueryEngine.js';
22
24
 
23
25
  export const DataCubeStatusBar = observer(
24
26
  (props: {
@@ -28,12 +30,35 @@ export const DataCubeStatusBar = observer(
28
30
  const { view, taskManager } = props;
29
31
  const tasks = view?.taskService.tasks ?? taskManager?.tasks;
30
32
 
33
+ const logOpeningPropertiesEditor = () => {
34
+ view?.dataCube.telemetryService.sendTelemetry(
35
+ DataCubeEvent.OPEN_EDITOR_PROPERTIES,
36
+ {
37
+ ...view.engine.getDataFromSource(view.getInitialSource()),
38
+ openedFrom: DataCubeOpenEditorSource.STATUS_BAR,
39
+ },
40
+ );
41
+ };
42
+
43
+ const logOpeningFilterEditor = () => {
44
+ view?.dataCube.telemetryService.sendTelemetry(
45
+ DataCubeEvent.OPEN_EDITOR_FILTER,
46
+ {
47
+ ...view.engine.getDataFromSource(view.getInitialSource()),
48
+ openedFrom: DataCubeOpenEditorSource.STATUS_BAR,
49
+ },
50
+ );
51
+ };
52
+
31
53
  return (
32
54
  <div className="flex h-5 w-full justify-between bg-neutral-100">
33
55
  <div className="flex">
34
56
  <button
35
57
  className="flex items-center px-2 text-sky-600 hover:text-sky-700 disabled:text-neutral-400"
36
- onClick={() => view?.editor.display.open()}
58
+ onClick={() => {
59
+ view?.editor.display.open();
60
+ logOpeningPropertiesEditor();
61
+ }}
37
62
  disabled={!view}
38
63
  >
39
64
  <DataCubeIcon.Settings className="text-xl" />
@@ -44,6 +69,7 @@ export const DataCubeStatusBar = observer(
44
69
  className="flex items-center text-sky-600 hover:text-sky-700 disabled:text-neutral-400"
45
70
  onClick={() => {
46
71
  view?.filter.display.open();
72
+ logOpeningFilterEditor();
47
73
  }}
48
74
  disabled={!view}
49
75
  >
@@ -27,6 +27,7 @@ import type { DataCubeViewState } from '../../../stores/view/DataCubeViewState.j
27
27
  import { FormButton } from '../../core/DataCubeFormUtils.js';
28
28
  import { useDataCube } from '../../DataCubeProvider.js';
29
29
  import { DataCubeEditorDimensionsPanel } from './DataCubeEditorDimensionsPanel.js';
30
+ import { DataCubeEvent } from '../../../__lib__/DataCubeEvent.js';
30
31
 
31
32
  export const DataCubeEditor = observer((props: { view: DataCubeViewState }) => {
32
33
  const dataCube = useDataCube();
@@ -45,6 +46,13 @@ export const DataCubeEditor = observer((props: { view: DataCubeViewState }) => {
45
46
  DataCubeEditorTab.COLUMN_PROPERTIES,
46
47
  ];
47
48
 
49
+ const logApplyChangesFromPropertiesEditor = (): void => {
50
+ view.dataCube.telemetryService.sendTelemetry(
51
+ DataCubeEvent.APPLY_CHANGES_PROPERTIES,
52
+ view.engine.getDataFromSource(view.getInitialSource()),
53
+ );
54
+ };
55
+
48
56
  return (
49
57
  <>
50
58
  <div className="relative h-[calc(100%_-_40px)] w-full px-2 pt-8">
@@ -94,6 +102,7 @@ export const DataCubeEditor = observer((props: { view: DataCubeViewState }) => {
94
102
  className="ml-2"
95
103
  disabled={editor.finalizationState.isInProgress}
96
104
  onClick={() => {
105
+ logApplyChangesFromPropertiesEditor();
97
106
  editor
98
107
  .applyChanges()
99
108
  .catch((error) => alertService.alertUnhandledError(error));
@@ -105,6 +114,7 @@ export const DataCubeEditor = observer((props: { view: DataCubeViewState }) => {
105
114
  className="ml-2"
106
115
  disabled={editor.finalizationState.isInProgress}
107
116
  onClick={() => {
117
+ logApplyChangesFromPropertiesEditor();
108
118
  editor
109
119
  .applyChanges({ closeAfterApply: true })
110
120
  .catch((error) => alertService.alertUnhandledError(error));
@@ -37,6 +37,7 @@ import { useDataCube } from '../../DataCubeProvider.js';
37
37
  import { useMemo, useRef } from 'react';
38
38
  import { debounce } from '@finos/legend-shared';
39
39
  import { DataCubeCodeEditor } from './DataCubeCodeEditor.js';
40
+ import { DataCubeEvent } from '../../../__lib__/DataCubeEvent.js';
40
41
 
41
42
  enum DataCubeExtendedColumnKind {
42
43
  LEAF_LEVEL_MEASURE = 'Leaf Level Measure',
@@ -70,6 +71,13 @@ export const DataCubeColumnCreator = observer(
70
71
  typeDropPropsOpen,
71
72
  ] = useDropdownMenu();
72
73
 
74
+ const logAddingNewColumn = (): void => {
75
+ view.dataCube.telemetryService.sendTelemetry(
76
+ DataCubeEvent.ADD_NEW_COLUMN,
77
+ view.engine.getDataFromSource(view.getInitialSource()),
78
+ );
79
+ };
80
+
73
81
  const debouncedCheckReturnType = useMemo(
74
82
  () =>
75
83
  debounce((): void => {
@@ -262,6 +270,7 @@ export const DataCubeColumnCreator = observer(
262
270
  .catch((error) =>
263
271
  dataCube.alertService.alertUnhandledError(error),
264
272
  );
273
+ logAddingNewColumn();
265
274
  }}
266
275
  >
267
276
  OK
@@ -49,6 +49,7 @@ import { formatDate, guaranteeIsNumber, parseISO } from '@finos/legend-shared';
49
49
  import { evaluate } from 'mathjs';
50
50
  import { useDataCube } from '../../DataCubeProvider.js';
51
51
  import { _findCol } from '../../../stores/core/model/DataCubeColumn.js';
52
+ import { DataCubeEvent } from '../../../__lib__/DataCubeEvent.js';
52
53
 
53
54
  const FILTER_TREE_OFFSET = 10;
54
55
  const FILTER_TREE_INDENTATION_SPACE = 36;
@@ -818,6 +819,13 @@ export const DataCubeFilterEditor = observer(
818
819
  const { view } = props;
819
820
  const editor = view.filter;
820
821
 
822
+ const logApplyChangesFromFilterEditor = (): void => {
823
+ view.dataCube.telemetryService.sendTelemetry(
824
+ DataCubeEvent.APPLY_CHANGES_FILTER,
825
+ view.engine.getDataFromSource(view.getInitialSource()),
826
+ );
827
+ };
828
+
821
829
  useEffect(() => {
822
830
  editor.setSelectedNode(undefined);
823
831
  }, [editor]);
@@ -872,7 +880,13 @@ export const DataCubeFilterEditor = observer(
872
880
  </div>
873
881
  <div className="flex h-10 items-center justify-end px-2">
874
882
  <FormButton onClick={() => editor.display.close()}>Cancel</FormButton>
875
- <FormButton className="ml-2" onClick={() => editor.applyChanges()}>
883
+ <FormButton
884
+ className="ml-2"
885
+ onClick={() => {
886
+ editor.applyChanges();
887
+ logApplyChangesFromFilterEditor();
888
+ }}
889
+ >
876
890
  Apply
877
891
  </FormButton>
878
892
  <FormButton
@@ -880,6 +894,7 @@ export const DataCubeFilterEditor = observer(
880
894
  onClick={() => {
881
895
  editor.applyChanges();
882
896
  editor.display.close();
897
+ logApplyChangesFromFilterEditor();
883
898
  }}
884
899
  >
885
900
  OK
package/src/index.tsx CHANGED
@@ -16,7 +16,7 @@
16
16
 
17
17
  export { LEGEND_DATACUBE_TEST_ID } from './__lib__/DataCubeTesting.js';
18
18
 
19
- export * from './__lib__/DataCubeTelemetryHelper.js';
19
+ export * from './__lib__/DataCubeEvent.js';
20
20
  export * from './stores/core/model/DataCubeSpecification.js';
21
21
  export * from './stores/core/model/DataCubeSource.js';
22
22
  export { type DataCubeColumn } from './stores/core/model/DataCubeColumn.js';
@@ -83,6 +83,8 @@ import {
83
83
  type DocumentationEntry,
84
84
  type LogEvent,
85
85
  type PlainObject,
86
+ type TimingsRecord,
87
+ type StopWatch,
86
88
  } from '@finos/legend-shared';
87
89
  import type { CachedDataCubeSource } from './model/CachedDataCubeSource.js';
88
90
  import { DataCubeSpecification } from './model/DataCubeSpecification.js';
@@ -242,6 +244,13 @@ export abstract class DataCubeEngine {
242
244
 
243
245
  abstract processSource(sourceData: PlainObject): Promise<DataCubeSource>;
244
246
 
247
+ abstract getDataFromSource(source?: DataCubeSource): PlainObject;
248
+
249
+ abstract finalizeTimingRecord(
250
+ stopWatch: StopWatch,
251
+ timings?: TimingsRecord,
252
+ ): TimingsRecord | undefined;
253
+
245
254
  abstract parseValueSpecification(
246
255
  code: string,
247
256
  returnSourceInformation?: boolean | undefined,
@@ -273,6 +273,23 @@ export enum DataCubeGridMode {
273
273
  MULTIDIMENSIONAL = 'Multidimensional',
274
274
  }
275
275
 
276
+ export enum DataCubeTitleBarMenuItems {
277
+ VIEW_SOURCE = 'View Source',
278
+ RESET_TO_LATEST_SAVE = 'Reset to Latest Save',
279
+ UPDATE_INFO = 'Update Info...',
280
+ DELETE_DATACUBE = 'Delete DataCube...',
281
+ SEE_DOCUMENTATION = 'See Documentation',
282
+ ABOUT = 'About',
283
+ UNDO = 'Undo',
284
+ REDO = 'Redo',
285
+ SETTINGS = 'Settings...',
286
+ }
287
+
288
+ export enum DataCubeOpenEditorSource {
289
+ STATUS_BAR = 'Status Bar',
290
+ GRID_MENU = 'Grid Menu',
291
+ }
292
+
276
293
  export const PIVOT_COLUMN_NAME_VALUE_SEPARATOR = '__|__';
277
294
 
278
295
  export const TREE_COLUMN_VALUE_SEPARATOR = '__/__';
@@ -51,6 +51,7 @@ import {
51
51
  } from '@finos/legend-shared';
52
52
  import { createModelSchema, list, optional, primitive, raw } from 'serializr';
53
53
  import { _findCol } from './DataCubeColumn.js';
54
+ import { PRECISE_PRIMITIVE_TYPE, PRIMITIVE_TYPE } from '@finos/legend-graph';
54
55
 
55
56
  export type DataCubeConfigurationColorKey =
56
57
  | 'normal'
@@ -122,7 +123,37 @@ export class DataCubeColumnConfiguration {
122
123
 
123
124
  constructor(name: string, type: string) {
124
125
  this.name = name;
125
- this.type = type;
126
+ this.type = this._convertPreciseToPrimitiveType(type);
127
+ }
128
+
129
+ _convertPreciseToPrimitiveType(type: string) {
130
+ switch (type) {
131
+ case PRECISE_PRIMITIVE_TYPE.STRING:
132
+ return PRIMITIVE_TYPE.STRING;
133
+ case PRECISE_PRIMITIVE_TYPE.SMALL_INT:
134
+ case PRECISE_PRIMITIVE_TYPE.TINY_INT:
135
+ case PRECISE_PRIMITIVE_TYPE.U_SMALL_INT:
136
+ case PRECISE_PRIMITIVE_TYPE.U_TINY_INT:
137
+ case PRECISE_PRIMITIVE_TYPE.INT:
138
+ case PRECISE_PRIMITIVE_TYPE.U_INT:
139
+ return PRIMITIVE_TYPE.INTEGER;
140
+ case PRECISE_PRIMITIVE_TYPE.DOUBLE:
141
+ case PRECISE_PRIMITIVE_TYPE.BIG_INT:
142
+ case PRECISE_PRIMITIVE_TYPE.U_BIG_INT:
143
+ return PRIMITIVE_TYPE.NUMBER;
144
+ case PRECISE_PRIMITIVE_TYPE.FLOAT:
145
+ return PRIMITIVE_TYPE.FLOAT;
146
+ case PRECISE_PRIMITIVE_TYPE.DECIMAL:
147
+ return PRIMITIVE_TYPE.DECIMAL;
148
+ case PRECISE_PRIMITIVE_TYPE.STRICTDATE:
149
+ return PRIMITIVE_TYPE.STRICTDATE;
150
+ case PRECISE_PRIMITIVE_TYPE.DATETIME:
151
+ return PRIMITIVE_TYPE.DATETIME;
152
+ case PRECISE_PRIMITIVE_TYPE.STRICTTIME:
153
+ return PRIMITIVE_TYPE.STRICTTIME;
154
+ default:
155
+ return type;
156
+ }
126
157
  }
127
158
 
128
159
  static readonly serialization = new SerializationFactory(
@@ -46,6 +46,7 @@ import type { DataCubeSettingService } from '../services/DataCubeSettingService.
46
46
  import { CachedDataCubeSource } from '../core/model/CachedDataCubeSource.js';
47
47
  import { DataCubeSettingKey } from '../../__lib__/DataCubeSetting.js';
48
48
  import { PureClientVersion } from '@finos/legend-graph';
49
+ import { DataCubeEvent } from '../../__lib__/DataCubeEvent.js';
49
50
 
50
51
  export class DataCubeViewState {
51
52
  readonly dataCube: DataCubeState;
@@ -253,6 +254,16 @@ export class DataCubeViewState {
253
254
  this.engine,
254
255
  );
255
256
 
257
+ const logAlertAction = (cachingEnabled: boolean) => {
258
+ this.dataCube.telemetryService.sendTelemetry(
259
+ DataCubeEvent.SELECT_ACTION_CACHE_LOAD_ALERT,
260
+ {
261
+ ...this.engine.getDataFromSource(this._initialSource),
262
+ keepCachingEnabled: cachingEnabled,
263
+ },
264
+ );
265
+ };
266
+
256
267
  // auto-enable cache if specified before broadcasting the first snapshot
257
268
  // so first data-fetches will be against cache
258
269
  if (specification.options?.autoEnableCache) {
@@ -273,11 +284,14 @@ export class DataCubeViewState {
273
284
  actions: [
274
285
  {
275
286
  label: 'OK',
276
- handler: () => {},
287
+ handler: () => {
288
+ logAlertAction(true);
289
+ },
277
290
  },
278
291
  {
279
292
  label: 'Disable Caching',
280
293
  handler: () => {
294
+ logAlertAction(false);
281
295
  this.grid
282
296
  .setCachingEnabled(false, {
283
297
  suppressWarning: true,
@@ -290,6 +304,7 @@ export class DataCubeViewState {
290
304
  {
291
305
  label: 'Dismiss Warning',
292
306
  handler: () => {
307
+ logAlertAction(true);
293
308
  this.settingService.updateValue(
294
309
  this.dataCube.api,
295
310
  DataCubeSettingKey.GRID_CLIENT__SHOW_AUTO_ENABLE_CACHE_PERFORMANCE_WARNING,
@@ -56,6 +56,7 @@ import {
56
56
  } from '../../core/DataCubeEngine.js';
57
57
  import { _lambda } from '../../core/DataCubeQueryBuilderUtils.js';
58
58
  import { sum } from 'mathjs';
59
+ import { DataCubeEvent } from '../../../__lib__/DataCubeEvent.js';
59
60
 
60
61
  type DataCubeGridClientCellValue = string | number | boolean | null | undefined;
61
62
  type DataCubeGridClientRowData = {
@@ -418,6 +419,16 @@ export class DataCubeGridClientServerSideDataSource
418
419
  let result: DataCubeExecutionResult;
419
420
  let rowData: DataCubeGridClientRowData[];
420
421
 
422
+ const logAlertAction = (paginationDisabled: boolean) => {
423
+ this._view.dataCube.telemetryService.sendTelemetry(
424
+ DataCubeEvent.SELECT_ACTION_PAGINATION_ALERT,
425
+ {
426
+ ...this._view.engine.getDataFromSource(this._view.getInitialSource()),
427
+ keepPaginationDisabled: paginationDisabled,
428
+ },
429
+ );
430
+ };
431
+
421
432
  try {
422
433
  result = await this._view.engine.executeQuery(
423
434
  _lambda([], [executableQuery]),
@@ -514,6 +525,7 @@ export class DataCubeGridClientServerSideDataSource
514
525
  label: 'Enable Pagination',
515
526
  handler: () => {
516
527
  this._grid.setPaginationEnabled(true);
528
+ logAlertAction(false);
517
529
  },
518
530
  },
519
531
  {
@@ -524,6 +536,7 @@ export class DataCubeGridClientServerSideDataSource
524
536
  DataCubeSettingKey.GRID_CLIENT__SUPPRESS_LARGE_DATASET_WARNING,
525
537
  true,
526
538
  );
539
+ logAlertAction(true);
527
540
  },
528
541
  },
529
542
  ],