@finos/legend-application-data-cube 0.3.4 → 0.3.6

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 (77) hide show
  1. package/lib/components/builder/LegendDataCubeCreator.d.ts.map +1 -1
  2. package/lib/components/builder/LegendDataCubeCreator.js +2 -5
  3. package/lib/components/builder/LegendDataCubeCreator.js.map +1 -1
  4. package/lib/components/builder/source/AdhocQueryDataCubeSourceBuilder.d.ts +8 -0
  5. package/lib/components/builder/source/AdhocQueryDataCubeSourceBuilder.d.ts.map +1 -1
  6. package/lib/components/builder/source/AdhocQueryDataCubeSourceBuilder.js +175 -2
  7. package/lib/components/builder/source/AdhocQueryDataCubeSourceBuilder.js.map +1 -1
  8. package/lib/components/builder/source/LegendDataCubeSourceLoader.d.ts.map +1 -1
  9. package/lib/components/builder/source/LegendDataCubeSourceLoader.js +5 -2
  10. package/lib/components/builder/source/LegendDataCubeSourceLoader.js.map +1 -1
  11. package/lib/components/builder/source/LocalFileDataCubeSourceBuilder.d.ts.map +1 -1
  12. package/lib/components/builder/source/LocalFileDataCubeSourceBuilder.js +10 -2
  13. package/lib/components/builder/source/LocalFileDataCubeSourceBuilder.js.map +1 -1
  14. package/lib/components/builder/source/LocalFileDataCubeSourceLoader.d.ts.map +1 -1
  15. package/lib/components/builder/source/LocalFileDataCubeSourceLoader.js +10 -2
  16. package/lib/components/builder/source/LocalFileDataCubeSourceLoader.js.map +1 -1
  17. package/lib/index.css +1 -1
  18. package/lib/package.json +1 -1
  19. package/lib/stores/LegendDataCubeDataCubeEngine.d.ts +9 -4
  20. package/lib/stores/LegendDataCubeDataCubeEngine.d.ts.map +1 -1
  21. package/lib/stores/LegendDataCubeDataCubeEngine.js +34 -10
  22. package/lib/stores/LegendDataCubeDataCubeEngine.js.map +1 -1
  23. package/lib/stores/builder/LegendDataCubeBuilderStore.d.ts.map +1 -1
  24. package/lib/stores/builder/LegendDataCubeBuilderStore.js +16 -0
  25. package/lib/stores/builder/LegendDataCubeBuilderStore.js.map +1 -1
  26. package/lib/stores/builder/LegendDataCubeCreatorState.d.ts.map +1 -1
  27. package/lib/stores/builder/LegendDataCubeCreatorState.js +3 -3
  28. package/lib/stores/builder/LegendDataCubeCreatorState.js.map +1 -1
  29. package/lib/stores/builder/source/AdHocCodeEditorState.d.ts +40 -0
  30. package/lib/stores/builder/source/AdHocCodeEditorState.d.ts.map +1 -0
  31. package/lib/stores/builder/source/AdHocCodeEditorState.js +147 -0
  32. package/lib/stores/builder/source/AdHocCodeEditorState.js.map +1 -0
  33. package/lib/stores/builder/source/AdhocQueryDataCubeSourceBuilderState.d.ts +38 -1
  34. package/lib/stores/builder/source/AdhocQueryDataCubeSourceBuilderState.d.ts.map +1 -1
  35. package/lib/stores/builder/source/AdhocQueryDataCubeSourceBuilderState.js +144 -4
  36. package/lib/stores/builder/source/AdhocQueryDataCubeSourceBuilderState.js.map +1 -1
  37. package/lib/stores/builder/source/LegendDataCubeSourceBuilderState.d.ts +3 -2
  38. package/lib/stores/builder/source/LegendDataCubeSourceBuilderState.d.ts.map +1 -1
  39. package/lib/stores/builder/source/LegendDataCubeSourceBuilderState.js +3 -1
  40. package/lib/stores/builder/source/LegendDataCubeSourceBuilderState.js.map +1 -1
  41. package/lib/stores/builder/source/LegendDataCubeSourceLoaderState.d.ts +0 -1
  42. package/lib/stores/builder/source/LegendDataCubeSourceLoaderState.d.ts.map +1 -1
  43. package/lib/stores/builder/source/LegendDataCubeSourceLoaderState.js.map +1 -1
  44. package/lib/stores/builder/source/LegendQueryDataCubeSourceBuilderState.d.ts +0 -1
  45. package/lib/stores/builder/source/LegendQueryDataCubeSourceBuilderState.d.ts.map +1 -1
  46. package/lib/stores/builder/source/LegendQueryDataCubeSourceBuilderState.js +1 -3
  47. package/lib/stores/builder/source/LegendQueryDataCubeSourceBuilderState.js.map +1 -1
  48. package/lib/stores/builder/source/LocalFileDataCubeSourceBuilderState.d.ts +4 -2
  49. package/lib/stores/builder/source/LocalFileDataCubeSourceBuilderState.d.ts.map +1 -1
  50. package/lib/stores/builder/source/LocalFileDataCubeSourceBuilderState.js +38 -29
  51. package/lib/stores/builder/source/LocalFileDataCubeSourceBuilderState.js.map +1 -1
  52. package/lib/stores/builder/source/LocalFileDataCubeSourceLoaderState.d.ts +2 -2
  53. package/lib/stores/builder/source/LocalFileDataCubeSourceLoaderState.d.ts.map +1 -1
  54. package/lib/stores/builder/source/LocalFileDataCubeSourceLoaderState.js +36 -35
  55. package/lib/stores/builder/source/LocalFileDataCubeSourceLoaderState.js.map +1 -1
  56. package/lib/stores/builder/source/UserDefinedFunctionDataCubeSourceBuilderState.d.ts +2 -2
  57. package/lib/stores/builder/source/UserDefinedFunctionDataCubeSourceBuilderState.d.ts.map +1 -1
  58. package/lib/stores/builder/source/UserDefinedFunctionDataCubeSourceBuilderState.js +2 -2
  59. package/lib/stores/builder/source/UserDefinedFunctionDataCubeSourceBuilderState.js.map +1 -1
  60. package/package.json +10 -10
  61. package/src/components/builder/LegendDataCubeCreator.tsx +2 -4
  62. package/src/components/builder/source/AdhocQueryDataCubeSourceBuilder.tsx +348 -4
  63. package/src/components/builder/source/LegendDataCubeSourceLoader.tsx +21 -5
  64. package/src/components/builder/source/LocalFileDataCubeSourceBuilder.tsx +23 -1
  65. package/src/components/builder/source/LocalFileDataCubeSourceLoader.tsx +23 -1
  66. package/src/stores/LegendDataCubeDataCubeEngine.ts +38 -12
  67. package/src/stores/builder/LegendDataCubeBuilderStore.tsx +15 -0
  68. package/src/stores/builder/LegendDataCubeCreatorState.tsx +4 -0
  69. package/src/stores/builder/source/AdHocCodeEditorState.tsx +189 -0
  70. package/src/stores/builder/source/AdhocQueryDataCubeSourceBuilderState.ts +221 -4
  71. package/src/stores/builder/source/LegendDataCubeSourceBuilderState.ts +7 -1
  72. package/src/stores/builder/source/LegendDataCubeSourceLoaderState.tsx +0 -2
  73. package/src/stores/builder/source/LegendQueryDataCubeSourceBuilderState.ts +1 -3
  74. package/src/stores/builder/source/LocalFileDataCubeSourceBuilderState.ts +45 -35
  75. package/src/stores/builder/source/LocalFileDataCubeSourceLoaderState.ts +46 -47
  76. package/src/stores/builder/source/UserDefinedFunctionDataCubeSourceBuilderState.ts +3 -1
  77. package/tsconfig.json +1 -0
@@ -47,7 +47,6 @@ import type {
47
47
  export class LegendQueryDataCubeSourceBuilderState extends LegendDataCubeSourceBuilderState {
48
48
  private readonly _engineServerClient: V1_EngineServerClient;
49
49
  private readonly _graphManager: V1_PureGraphManager;
50
- private readonly _alertService: DataCubeAlertService;
51
50
 
52
51
  readonly queryLoader: QueryLoaderState;
53
52
 
@@ -61,7 +60,7 @@ export class LegendQueryDataCubeSourceBuilderState extends LegendDataCubeSourceB
61
60
  graphManager: V1_PureGraphManager,
62
61
  alertService: DataCubeAlertService,
63
62
  ) {
64
- super(application, engine);
63
+ super(application, engine, alertService);
65
64
 
66
65
  makeObservable(this, {
67
66
  query: observable,
@@ -72,7 +71,6 @@ export class LegendQueryDataCubeSourceBuilderState extends LegendDataCubeSourceB
72
71
 
73
72
  this._graphManager = graphManager;
74
73
  this._engineServerClient = engineServerClient;
75
- this._alertService = alertService;
76
74
 
77
75
  this.queryLoader = new QueryLoaderState(
78
76
  this._application,
@@ -16,6 +16,7 @@
16
16
 
17
17
  import {
18
18
  ActionState,
19
+ assertErrorThrown,
19
20
  csvStringify,
20
21
  guaranteeNonNullable,
21
22
  IllegalStateError,
@@ -33,6 +34,7 @@ import {
33
34
  LocalFileDataCubeSourceFormat,
34
35
  RawLocalFileQueryDataCubeSource,
35
36
  } from '../../model/LocalFileDataCubeSource.js';
37
+ import type { DataCubeAlertService } from '@finos/legend-data-cube';
36
38
 
37
39
  export class LocalFileDataCubeSourceBuilderState extends LegendDataCubeSourceBuilderState {
38
40
  readonly processState = ActionState.create();
@@ -48,8 +50,9 @@ export class LocalFileDataCubeSourceBuilderState extends LegendDataCubeSourceBui
48
50
  constructor(
49
51
  application: LegendDataCubeApplicationStore,
50
52
  engine: LegendDataCubeDataCubeEngine,
53
+ alertService: DataCubeAlertService,
51
54
  ) {
52
- super(application, engine);
55
+ super(application, engine, alertService);
53
56
 
54
57
  makeObservable(this, {
55
58
  fileName: observable,
@@ -89,54 +92,61 @@ export class LocalFileDataCubeSourceBuilderState extends LegendDataCubeSourceBui
89
92
  this.previewText = text;
90
93
  }
91
94
 
92
- processFile(file: File | undefined) {
95
+ reset() {
93
96
  this.setFileName(undefined);
94
97
  this.setFileFormat(undefined);
95
98
  this.setFileData(undefined);
96
99
  this.setRowCount(undefined);
97
100
  this.setPreviewText(undefined);
101
+ }
98
102
 
103
+ async processFile(file: File | undefined) {
99
104
  if (!file) {
100
105
  return;
101
106
  }
102
107
 
108
+ this.reset();
103
109
  this.processState.inProgress();
104
110
 
105
- const fileName = file.name;
106
- const fileFormat = fileName.split('.').pop();
107
-
108
- switch (fileFormat?.toLowerCase()) {
109
- case LocalFileDataCubeSourceFormat.CSV.toLowerCase(): {
110
- parseCSVFile(file, {
111
- complete: (result) => {
112
- this.setFileData(
113
- csvStringify(result.data, { escapeChar: `'`, quoteChar: `'` }),
114
- );
115
- this.setFileName(fileName);
116
- this.setFileFormat(LocalFileDataCubeSourceFormat.CSV);
117
- this.setRowCount(result.data.length);
118
- this.setPreviewText(
119
- csvStringify(result.data.slice(0, 100), {
120
- escapeChar: `'`,
121
- quoteChar: `'`,
122
- }),
123
- );
124
- },
125
- header: true,
126
- dynamicTyping: false,
127
- skipEmptyLines: true,
128
- });
129
- break;
130
- }
131
- default: {
132
- this.processState.complete();
133
- throw new IllegalStateError(
134
- `Can't process file with format '${fileFormat}'`,
135
- );
111
+ try {
112
+ const fileName = file.name;
113
+ const fileFormat = fileName.split('.').pop();
114
+
115
+ switch (fileFormat?.toLowerCase()) {
116
+ case LocalFileDataCubeSourceFormat.CSV.toLowerCase(): {
117
+ parseCSVFile(file, {
118
+ complete: (result) => {
119
+ this.setFileData(
120
+ csvStringify(result.data, { escapeChar: `'`, quoteChar: `'` }),
121
+ );
122
+ this.setFileName(fileName);
123
+ this.setFileFormat(LocalFileDataCubeSourceFormat.CSV);
124
+ this.setRowCount(result.data.length);
125
+ this.setPreviewText(
126
+ csvStringify(result.data.slice(0, 100), {
127
+ escapeChar: `'`,
128
+ quoteChar: `'`,
129
+ }),
130
+ );
131
+ },
132
+ header: true,
133
+ dynamicTyping: false,
134
+ skipEmptyLines: true,
135
+ });
136
+ break;
137
+ }
138
+ default: {
139
+ throw new IllegalStateError(
140
+ `Can't process file with format '${fileFormat}'`,
141
+ );
142
+ }
136
143
  }
144
+ this.processState.complete();
145
+ } catch (error) {
146
+ assertErrorThrown(error);
147
+ this.reset();
148
+ this.processState.fail();
137
149
  }
138
-
139
- this.processState.complete();
140
150
  }
141
151
 
142
152
  override get label(): LegendDataCubeSourceBuilderType {
@@ -16,6 +16,7 @@
16
16
 
17
17
  import {
18
18
  ActionState,
19
+ assertErrorThrown,
19
20
  csvStringify,
20
21
  guaranteeNonNullable,
21
22
  IllegalStateError,
@@ -110,7 +111,7 @@ export class LocalFileDataCubeSourceLoaderState extends LegendDataCubeSourceLoad
110
111
  this.previewText = text;
111
112
  }
112
113
 
113
- override initialize(): void {
114
+ reset() {
114
115
  this.setFileName(undefined);
115
116
  this.setColumnNames(undefined);
116
117
  this.setFileFormat(undefined);
@@ -119,60 +120,58 @@ export class LocalFileDataCubeSourceLoaderState extends LegendDataCubeSourceLoad
119
120
  this.setPreviewText(undefined);
120
121
  }
121
122
 
122
- processFile(file: File | undefined) {
123
- this.setFileName(undefined);
124
- this.setColumnNames(undefined);
125
- this.setFileFormat(undefined);
126
- this.setFileData(undefined);
127
- this.setRowCount(undefined);
128
- this.setPreviewText(undefined);
129
-
123
+ async processFile(file: File | undefined) {
130
124
  if (!file) {
131
125
  return;
132
126
  }
133
127
 
128
+ this.reset();
134
129
  this.processState.inProgress();
135
130
 
136
- const fileName = file.name;
137
- const fileFormat = fileName.split('.').pop();
138
-
139
- switch (fileFormat?.toLowerCase()) {
140
- case LocalFileDataCubeSourceFormat.CSV.toLowerCase(): {
141
- parseCSVFile(file, {
142
- complete: (result) => {
143
- this.setFileData(
144
- csvStringify(result.data, { escapeChar: `'`, quoteChar: `'` }),
145
- );
146
- this.setColumnNames(
147
- Object.keys(result.data.at(0) as object).filter(
148
- (key) => key !== '',
149
- ),
150
- );
151
- this.setFileName(fileName);
152
- this.setFileFormat(LocalFileDataCubeSourceFormat.CSV);
153
- this.setRowCount(result.data.length);
154
- this.setPreviewText(
155
- csvStringify(result.data.slice(0, 100), {
156
- escapeChar: `'`,
157
- quoteChar: `'`,
158
- }),
159
- );
160
- },
161
- header: true,
162
- dynamicTyping: false,
163
- skipEmptyLines: true,
164
- });
165
- break;
166
- }
167
- default: {
168
- this.processState.complete();
169
- throw new IllegalStateError(
170
- `Can't process file with format '${fileFormat}'`,
171
- );
131
+ try {
132
+ const fileName = file.name;
133
+ const fileFormat = fileName.split('.').pop();
134
+
135
+ switch (fileFormat?.toLowerCase()) {
136
+ case LocalFileDataCubeSourceFormat.CSV.toLowerCase(): {
137
+ parseCSVFile(file, {
138
+ complete: (result) => {
139
+ this.setFileData(
140
+ csvStringify(result.data, { escapeChar: `'`, quoteChar: `'` }),
141
+ );
142
+ this.setColumnNames(
143
+ Object.keys(result.data.at(0) as object).filter(
144
+ (key) => key !== '',
145
+ ),
146
+ );
147
+ this.setFileName(fileName);
148
+ this.setFileFormat(LocalFileDataCubeSourceFormat.CSV);
149
+ this.setRowCount(result.data.length);
150
+ this.setPreviewText(
151
+ csvStringify(result.data.slice(0, 100), {
152
+ escapeChar: `'`,
153
+ quoteChar: `'`,
154
+ }),
155
+ );
156
+ },
157
+ header: true,
158
+ dynamicTyping: false,
159
+ skipEmptyLines: true,
160
+ });
161
+ break;
162
+ }
163
+ default: {
164
+ throw new IllegalStateError(
165
+ `Can't process file with format '${fileFormat}'`,
166
+ );
167
+ }
172
168
  }
169
+ this.processState.complete();
170
+ } catch (error) {
171
+ assertErrorThrown(error);
172
+ this.processState.fail();
173
+ this.reset();
173
174
  }
174
-
175
- this.processState.complete();
176
175
  }
177
176
 
178
177
  override get isValid(): boolean {
@@ -37,6 +37,7 @@ import {
37
37
  type V1_ConcreteFunctionDefinition,
38
38
  } from '@finos/legend-graph';
39
39
  import {
40
+ type DataCubeAlertService,
40
41
  type DataCubeConfiguration,
41
42
  RawUserDefinedFunctionDataCubeSource,
42
43
  } from '@finos/legend-data-cube';
@@ -57,9 +58,10 @@ export class UserDefinedFunctionDataCubeSourceBuilderState extends LegendDataCub
57
58
  constructor(
58
59
  application: LegendDataCubeApplicationStore,
59
60
  engine: LegendDataCubeDataCubeEngine,
61
+ alertService: DataCubeAlertService,
60
62
  builderStore: LegendDataCubeBuilderStore,
61
63
  ) {
62
- super(application, engine);
64
+ super(application, engine, alertService);
63
65
  this.builderStore = builderStore;
64
66
 
65
67
  makeObservable(this, {
package/tsconfig.json CHANGED
@@ -94,6 +94,7 @@
94
94
  "./src/stores/builder/LegendDataCubeBuilderStore.tsx",
95
95
  "./src/stores/builder/LegendDataCubeCreatorState.tsx",
96
96
  "./src/stores/builder/LegendDataCubeLoaderState.tsx",
97
+ "./src/stores/builder/source/AdHocCodeEditorState.tsx",
97
98
  "./src/stores/builder/source/LegendDataCubeSourceLoaderState.tsx"
98
99
  ],
99
100
  "include": [