@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.
- package/lib/components/builder/LegendDataCubeCreator.d.ts.map +1 -1
- package/lib/components/builder/LegendDataCubeCreator.js +2 -5
- package/lib/components/builder/LegendDataCubeCreator.js.map +1 -1
- package/lib/components/builder/source/AdhocQueryDataCubeSourceBuilder.d.ts +8 -0
- package/lib/components/builder/source/AdhocQueryDataCubeSourceBuilder.d.ts.map +1 -1
- package/lib/components/builder/source/AdhocQueryDataCubeSourceBuilder.js +175 -2
- package/lib/components/builder/source/AdhocQueryDataCubeSourceBuilder.js.map +1 -1
- package/lib/components/builder/source/LegendDataCubeSourceLoader.d.ts.map +1 -1
- package/lib/components/builder/source/LegendDataCubeSourceLoader.js +5 -2
- package/lib/components/builder/source/LegendDataCubeSourceLoader.js.map +1 -1
- package/lib/components/builder/source/LocalFileDataCubeSourceBuilder.d.ts.map +1 -1
- package/lib/components/builder/source/LocalFileDataCubeSourceBuilder.js +10 -2
- package/lib/components/builder/source/LocalFileDataCubeSourceBuilder.js.map +1 -1
- package/lib/components/builder/source/LocalFileDataCubeSourceLoader.d.ts.map +1 -1
- package/lib/components/builder/source/LocalFileDataCubeSourceLoader.js +10 -2
- package/lib/components/builder/source/LocalFileDataCubeSourceLoader.js.map +1 -1
- package/lib/index.css +1 -1
- package/lib/package.json +1 -1
- package/lib/stores/LegendDataCubeDataCubeEngine.d.ts +9 -4
- package/lib/stores/LegendDataCubeDataCubeEngine.d.ts.map +1 -1
- package/lib/stores/LegendDataCubeDataCubeEngine.js +34 -10
- package/lib/stores/LegendDataCubeDataCubeEngine.js.map +1 -1
- package/lib/stores/builder/LegendDataCubeBuilderStore.d.ts.map +1 -1
- package/lib/stores/builder/LegendDataCubeBuilderStore.js +16 -0
- package/lib/stores/builder/LegendDataCubeBuilderStore.js.map +1 -1
- package/lib/stores/builder/LegendDataCubeCreatorState.d.ts.map +1 -1
- package/lib/stores/builder/LegendDataCubeCreatorState.js +3 -3
- package/lib/stores/builder/LegendDataCubeCreatorState.js.map +1 -1
- package/lib/stores/builder/source/AdHocCodeEditorState.d.ts +40 -0
- package/lib/stores/builder/source/AdHocCodeEditorState.d.ts.map +1 -0
- package/lib/stores/builder/source/AdHocCodeEditorState.js +147 -0
- package/lib/stores/builder/source/AdHocCodeEditorState.js.map +1 -0
- package/lib/stores/builder/source/AdhocQueryDataCubeSourceBuilderState.d.ts +38 -1
- package/lib/stores/builder/source/AdhocQueryDataCubeSourceBuilderState.d.ts.map +1 -1
- package/lib/stores/builder/source/AdhocQueryDataCubeSourceBuilderState.js +144 -4
- package/lib/stores/builder/source/AdhocQueryDataCubeSourceBuilderState.js.map +1 -1
- package/lib/stores/builder/source/LegendDataCubeSourceBuilderState.d.ts +3 -2
- package/lib/stores/builder/source/LegendDataCubeSourceBuilderState.d.ts.map +1 -1
- package/lib/stores/builder/source/LegendDataCubeSourceBuilderState.js +3 -1
- package/lib/stores/builder/source/LegendDataCubeSourceBuilderState.js.map +1 -1
- package/lib/stores/builder/source/LegendDataCubeSourceLoaderState.d.ts +0 -1
- package/lib/stores/builder/source/LegendDataCubeSourceLoaderState.d.ts.map +1 -1
- package/lib/stores/builder/source/LegendDataCubeSourceLoaderState.js.map +1 -1
- package/lib/stores/builder/source/LegendQueryDataCubeSourceBuilderState.d.ts +0 -1
- package/lib/stores/builder/source/LegendQueryDataCubeSourceBuilderState.d.ts.map +1 -1
- package/lib/stores/builder/source/LegendQueryDataCubeSourceBuilderState.js +1 -3
- package/lib/stores/builder/source/LegendQueryDataCubeSourceBuilderState.js.map +1 -1
- package/lib/stores/builder/source/LocalFileDataCubeSourceBuilderState.d.ts +4 -2
- package/lib/stores/builder/source/LocalFileDataCubeSourceBuilderState.d.ts.map +1 -1
- package/lib/stores/builder/source/LocalFileDataCubeSourceBuilderState.js +38 -29
- package/lib/stores/builder/source/LocalFileDataCubeSourceBuilderState.js.map +1 -1
- package/lib/stores/builder/source/LocalFileDataCubeSourceLoaderState.d.ts +2 -2
- package/lib/stores/builder/source/LocalFileDataCubeSourceLoaderState.d.ts.map +1 -1
- package/lib/stores/builder/source/LocalFileDataCubeSourceLoaderState.js +36 -35
- package/lib/stores/builder/source/LocalFileDataCubeSourceLoaderState.js.map +1 -1
- package/lib/stores/builder/source/UserDefinedFunctionDataCubeSourceBuilderState.d.ts +2 -2
- package/lib/stores/builder/source/UserDefinedFunctionDataCubeSourceBuilderState.d.ts.map +1 -1
- package/lib/stores/builder/source/UserDefinedFunctionDataCubeSourceBuilderState.js +2 -2
- package/lib/stores/builder/source/UserDefinedFunctionDataCubeSourceBuilderState.js.map +1 -1
- package/package.json +10 -10
- package/src/components/builder/LegendDataCubeCreator.tsx +2 -4
- package/src/components/builder/source/AdhocQueryDataCubeSourceBuilder.tsx +348 -4
- package/src/components/builder/source/LegendDataCubeSourceLoader.tsx +21 -5
- package/src/components/builder/source/LocalFileDataCubeSourceBuilder.tsx +23 -1
- package/src/components/builder/source/LocalFileDataCubeSourceLoader.tsx +23 -1
- package/src/stores/LegendDataCubeDataCubeEngine.ts +38 -12
- package/src/stores/builder/LegendDataCubeBuilderStore.tsx +15 -0
- package/src/stores/builder/LegendDataCubeCreatorState.tsx +4 -0
- package/src/stores/builder/source/AdHocCodeEditorState.tsx +189 -0
- package/src/stores/builder/source/AdhocQueryDataCubeSourceBuilderState.ts +221 -4
- package/src/stores/builder/source/LegendDataCubeSourceBuilderState.ts +7 -1
- package/src/stores/builder/source/LegendDataCubeSourceLoaderState.tsx +0 -2
- package/src/stores/builder/source/LegendQueryDataCubeSourceBuilderState.ts +1 -3
- package/src/stores/builder/source/LocalFileDataCubeSourceBuilderState.ts +45 -35
- package/src/stores/builder/source/LocalFileDataCubeSourceLoaderState.ts +46 -47
- package/src/stores/builder/source/UserDefinedFunctionDataCubeSourceBuilderState.ts +3 -1
- package/tsconfig.json +1 -0
|
@@ -20,7 +20,7 @@ import type { LegendDataCubeBuilderStore } from '../LegendDataCubeBuilderStore.j
|
|
|
20
20
|
import type { LegendDataCubeDataCubeEngine } from '../../LegendDataCubeDataCubeEngine.js';
|
|
21
21
|
import type { LegendDataCubeApplicationStore } from '../../LegendDataCubeBaseStore.js';
|
|
22
22
|
import { type V1_PackageableRuntime, type V1_ConcreteFunctionDefinition } from '@finos/legend-graph';
|
|
23
|
-
import { type DataCubeConfiguration } from '@finos/legend-data-cube';
|
|
23
|
+
import { type DataCubeAlertService, type DataCubeConfiguration } from '@finos/legend-data-cube';
|
|
24
24
|
export declare class UserDefinedFunctionDataCubeSourceBuilderState extends LegendDataCubeSourceBuilderState {
|
|
25
25
|
projects: StoreProjectData[];
|
|
26
26
|
currentProject?: StoreProjectData | undefined;
|
|
@@ -32,7 +32,7 @@ export declare class UserDefinedFunctionDataCubeSourceBuilderState extends Legen
|
|
|
32
32
|
currentRuntime?: V1_PackageableRuntime | undefined;
|
|
33
33
|
runtimes?: V1_PackageableRuntime[] | undefined;
|
|
34
34
|
readonly loadProjectsState: ActionState;
|
|
35
|
-
constructor(application: LegendDataCubeApplicationStore, engine: LegendDataCubeDataCubeEngine, builderStore: LegendDataCubeBuilderStore);
|
|
35
|
+
constructor(application: LegendDataCubeApplicationStore, engine: LegendDataCubeDataCubeEngine, alertService: DataCubeAlertService, builderStore: LegendDataCubeBuilderStore);
|
|
36
36
|
setCurrentProject(val: StoreProjectData | undefined): void;
|
|
37
37
|
setCurrentProjectVersions(val: string[] | undefined): void;
|
|
38
38
|
setCurrentVersionId(val: string | undefined): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UserDefinedFunctionDataCubeSourceBuilderState.d.ts","sourceRoot":"","sources":["../../../../src/stores/builder/source/UserDefinedFunctionDataCubeSourceBuilderState.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EACL,WAAW,EAGX,KAAK,WAAW,EACjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,gCAAgC,EAChC,+BAA+B,EAChC,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,kCAAkC,CAAC;AACnF,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,uCAAuC,CAAC;AAC1F,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,kCAAkC,CAAC;AAEvF,OAAO,EAEL,KAAK,qBAAqB,EAG1B,KAAK,6BAA6B,EACnC,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,KAAK,qBAAqB,EAE3B,MAAM,yBAAyB,CAAC;AAEjC,qBAAa,6CAA8C,SAAQ,gCAAgC;IACjG,QAAQ,EAAE,gBAAgB,EAAE,CAAM;IAClC,cAAc,CAAC,EAAE,gBAAgB,GAAG,SAAS,CAAC;IAC9C,sBAAsB,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAC9C,gBAAgB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,YAAY,EAAE,0BAA0B,CAAC;IACzC,SAAS,EAAE,6BAA6B,EAAE,GAAG,SAAS,CAAC;IACvD,eAAe,CAAC,EAAE,6BAA6B,GAAG,SAAS,CAAC;IAC5D,cAAc,CAAC,EAAE,qBAAqB,GAAG,SAAS,CAAC;IACnD,QAAQ,CAAC,EAAE,qBAAqB,EAAE,GAAG,SAAS,CAAC;IAE/C,QAAQ,CAAC,iBAAiB,cAAwB;gBAGhD,WAAW,EAAE,8BAA8B,EAC3C,MAAM,EAAE,4BAA4B,EACpC,YAAY,EAAE,0BAA0B;IAoB1C,iBAAiB,CAAC,GAAG,EAAE,gBAAgB,GAAG,SAAS,GAAG,IAAI;IAI1D,yBAAyB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,SAAS,GAAG,IAAI;IAI1D,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAIlD,WAAW,IAAI,gBAAgB,EAAE;IAIjC,YAAY,CAAC,GAAG,EAAE,6BAA6B,EAAE,GAAG,SAAS,GAAG,IAAI;IAIpE,kBAAkB,CAAC,GAAG,EAAE,6BAA6B,GAAG,SAAS,GAAG,IAAI;IAMxE,iBAAiB,CAAC,GAAG,EAAE,qBAAqB,GAAG,SAAS,GAAG,IAAI;IAI/D,WAAW,CAAC,GAAG,EAAE,qBAAqB,EAAE,GAAG,SAAS,GAAG,IAAI;IAI1D,YAAY;IAcb,IAAa,KAAK,IAAI,+BAA+B,CAEpD;IAED,IAAa,OAAO,IAAI,OAAO,CAO9B;IAEc,kBAAkB,IAAI,OAAO,CAAC,WAAW,CAAC;IA8BhD,qBAAqB,CAAC,aAAa,EAAE,qBAAqB;CAKpE"}
|
|
1
|
+
{"version":3,"file":"UserDefinedFunctionDataCubeSourceBuilderState.d.ts","sourceRoot":"","sources":["../../../../src/stores/builder/source/UserDefinedFunctionDataCubeSourceBuilderState.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EACL,WAAW,EAGX,KAAK,WAAW,EACjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,gCAAgC,EAChC,+BAA+B,EAChC,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,kCAAkC,CAAC;AACnF,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,uCAAuC,CAAC;AAC1F,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,kCAAkC,CAAC;AAEvF,OAAO,EAEL,KAAK,qBAAqB,EAG1B,KAAK,6BAA6B,EACnC,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,EAE3B,MAAM,yBAAyB,CAAC;AAEjC,qBAAa,6CAA8C,SAAQ,gCAAgC;IACjG,QAAQ,EAAE,gBAAgB,EAAE,CAAM;IAClC,cAAc,CAAC,EAAE,gBAAgB,GAAG,SAAS,CAAC;IAC9C,sBAAsB,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAC9C,gBAAgB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,YAAY,EAAE,0BAA0B,CAAC;IACzC,SAAS,EAAE,6BAA6B,EAAE,GAAG,SAAS,CAAC;IACvD,eAAe,CAAC,EAAE,6BAA6B,GAAG,SAAS,CAAC;IAC5D,cAAc,CAAC,EAAE,qBAAqB,GAAG,SAAS,CAAC;IACnD,QAAQ,CAAC,EAAE,qBAAqB,EAAE,GAAG,SAAS,CAAC;IAE/C,QAAQ,CAAC,iBAAiB,cAAwB;gBAGhD,WAAW,EAAE,8BAA8B,EAC3C,MAAM,EAAE,4BAA4B,EACpC,YAAY,EAAE,oBAAoB,EAClC,YAAY,EAAE,0BAA0B;IAoB1C,iBAAiB,CAAC,GAAG,EAAE,gBAAgB,GAAG,SAAS,GAAG,IAAI;IAI1D,yBAAyB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,SAAS,GAAG,IAAI;IAI1D,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAIlD,WAAW,IAAI,gBAAgB,EAAE;IAIjC,YAAY,CAAC,GAAG,EAAE,6BAA6B,EAAE,GAAG,SAAS,GAAG,IAAI;IAIpE,kBAAkB,CAAC,GAAG,EAAE,6BAA6B,GAAG,SAAS,GAAG,IAAI;IAMxE,iBAAiB,CAAC,GAAG,EAAE,qBAAqB,GAAG,SAAS,GAAG,IAAI;IAI/D,WAAW,CAAC,GAAG,EAAE,qBAAqB,EAAE,GAAG,SAAS,GAAG,IAAI;IAI1D,YAAY;IAcb,IAAa,KAAK,IAAI,+BAA+B,CAEpD;IAED,IAAa,OAAO,IAAI,OAAO,CAO9B;IAEc,kBAAkB,IAAI,OAAO,CAAC,WAAW,CAAC;IA8BhD,qBAAqB,CAAC,aAAa,EAAE,qBAAqB;CAKpE"}
|
|
@@ -30,8 +30,8 @@ export class UserDefinedFunctionDataCubeSourceBuilderState extends LegendDataCub
|
|
|
30
30
|
currentRuntime;
|
|
31
31
|
runtimes;
|
|
32
32
|
loadProjectsState = ActionState.create();
|
|
33
|
-
constructor(application, engine, builderStore) {
|
|
34
|
-
super(application, engine);
|
|
33
|
+
constructor(application, engine, alertService, builderStore) {
|
|
34
|
+
super(application, engine, alertService);
|
|
35
35
|
this.builderStore = builderStore;
|
|
36
36
|
makeObservable(this, {
|
|
37
37
|
loadProjects: flow,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UserDefinedFunctionDataCubeSourceBuilderState.js","sourceRoot":"","sources":["../../../../src/stores/builder/source/UserDefinedFunctionDataCubeSourceBuilderState.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,iBAAiB,GAElB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,gCAAgC,EAChC,+BAA+B,GAChC,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAI9D,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,MAAM,CAAC;AAC7E,OAAO,EACL,aAAa,EAEb,0BAA0B,EAC1B,4BAA4B,GAE7B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,
|
|
1
|
+
{"version":3,"file":"UserDefinedFunctionDataCubeSourceBuilderState.js","sourceRoot":"","sources":["../../../../src/stores/builder/source/UserDefinedFunctionDataCubeSourceBuilderState.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@finos/legend-application-data-cube",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.6",
|
|
4
4
|
"description": "Legend DataCube application core",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"legend",
|
|
@@ -43,15 +43,15 @@
|
|
|
43
43
|
},
|
|
44
44
|
"dependencies": {
|
|
45
45
|
"@duckdb/duckdb-wasm": "1.29.0",
|
|
46
|
-
"@finos/legend-application": "16.0.
|
|
47
|
-
"@finos/legend-art": "7.1.
|
|
48
|
-
"@finos/legend-code-editor": "2.0.
|
|
49
|
-
"@finos/legend-data-cube": "0.1.
|
|
50
|
-
"@finos/legend-graph": "32.1.
|
|
51
|
-
"@finos/legend-query-builder": "4.16.
|
|
52
|
-
"@finos/legend-server-depot": "6.0.
|
|
53
|
-
"@finos/legend-shared": "11.0.
|
|
54
|
-
"@finos/legend-storage": "3.0.
|
|
46
|
+
"@finos/legend-application": "16.0.30",
|
|
47
|
+
"@finos/legend-art": "7.1.87",
|
|
48
|
+
"@finos/legend-code-editor": "2.0.53",
|
|
49
|
+
"@finos/legend-data-cube": "0.1.13",
|
|
50
|
+
"@finos/legend-graph": "32.1.11",
|
|
51
|
+
"@finos/legend-query-builder": "4.16.13",
|
|
52
|
+
"@finos/legend-server-depot": "6.0.86",
|
|
53
|
+
"@finos/legend-shared": "11.0.9",
|
|
54
|
+
"@finos/legend-storage": "3.0.128",
|
|
55
55
|
"@types/react": "19.0.10",
|
|
56
56
|
"@types/react-dom": "19.0.4",
|
|
57
57
|
"apache-arrow": "19.0.1",
|
|
@@ -39,10 +39,7 @@ export const LegendDataCubeCreator = observer(() => {
|
|
|
39
39
|
const state = store.creator;
|
|
40
40
|
const sourceBuilder = state.sourceBuilder;
|
|
41
41
|
const selectedSourceType = sourceBuilder.label;
|
|
42
|
-
const WIPSourceTypes = [
|
|
43
|
-
LegendDataCubeSourceBuilderType.ADHOC_QUERY,
|
|
44
|
-
LegendDataCubeSourceBuilderType.LOCAL_FILE,
|
|
45
|
-
];
|
|
42
|
+
const WIPSourceTypes = [LegendDataCubeSourceBuilderType.LOCAL_FILE];
|
|
46
43
|
const [
|
|
47
44
|
openSourceTypeDropdown,
|
|
48
45
|
closeSourceTypeDropdown,
|
|
@@ -104,6 +101,7 @@ export const LegendDataCubeCreator = observer(() => {
|
|
|
104
101
|
AdhocQueryDataCubeSourceBuilderState && (
|
|
105
102
|
<AdhocQueryDataCubeSourceBuilder
|
|
106
103
|
sourceBuilder={sourceBuilder}
|
|
104
|
+
store={store}
|
|
107
105
|
/>
|
|
108
106
|
)}
|
|
109
107
|
{sourceBuilder instanceof LocalFileDataCubeSourceBuilderState && (
|
|
@@ -15,14 +15,358 @@
|
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
17
|
import { observer } from 'mobx-react-lite';
|
|
18
|
+
import { CustomSelectorInput, WarningIcon } from '@finos/legend-art';
|
|
19
|
+
import { useEffect, useState } from 'react';
|
|
20
|
+
import { flowResult } from 'mobx';
|
|
21
|
+
import { type LegendDataCubeBuilderStore } from '../../../stores/builder/LegendDataCubeBuilderStore.js';
|
|
22
|
+
import { LATEST_VERSION_ALIAS } from '@finos/legend-server-depot';
|
|
23
|
+
import {
|
|
24
|
+
ActionState,
|
|
25
|
+
assertErrorThrown,
|
|
26
|
+
compareSemVerVersions,
|
|
27
|
+
guaranteeNonNullable,
|
|
28
|
+
} from '@finos/legend-shared';
|
|
29
|
+
import {
|
|
30
|
+
CORE_PURE_PATH,
|
|
31
|
+
V1_Mapping,
|
|
32
|
+
V1_PackageableRuntime,
|
|
33
|
+
V1_deserializePackageableElement,
|
|
34
|
+
} from '@finos/legend-graph';
|
|
35
|
+
import type { Entity } from '@finos/legend-storage';
|
|
18
36
|
import type { AdhocQueryDataCubeSourceBuilderState } from '../../../stores/builder/source/AdhocQueryDataCubeSourceBuilderState.js';
|
|
37
|
+
import {
|
|
38
|
+
buildProjectOption,
|
|
39
|
+
buildRuntimeOption,
|
|
40
|
+
buildVersionOption,
|
|
41
|
+
type ProjectOption,
|
|
42
|
+
type RuntimeOption,
|
|
43
|
+
type VersionOption,
|
|
44
|
+
} from './UserDefinedFunctionDataCubeSourceBuilder.js';
|
|
45
|
+
import { DataCubeCodeEditor } from '@finos/legend-data-cube';
|
|
46
|
+
|
|
47
|
+
export type MappingOption = {
|
|
48
|
+
label: string;
|
|
49
|
+
value: V1_Mapping;
|
|
50
|
+
};
|
|
51
|
+
export const buildMappingOption = (mapping: V1_Mapping): MappingOption => ({
|
|
52
|
+
label: mapping.name,
|
|
53
|
+
value: mapping,
|
|
54
|
+
});
|
|
19
55
|
|
|
20
56
|
export const AdhocQueryDataCubeSourceBuilder = observer(
|
|
21
|
-
(props: {
|
|
57
|
+
(props: {
|
|
58
|
+
sourceBuilder: AdhocQueryDataCubeSourceBuilderState;
|
|
59
|
+
store: LegendDataCubeBuilderStore;
|
|
60
|
+
}) => {
|
|
61
|
+
const { sourceBuilder, store } = props;
|
|
62
|
+
const [fetchSelectedProjectVersionsStatus] = useState(ActionState.create());
|
|
63
|
+
const [fetchSelectedVersionRuntimesStatus] = useState(ActionState.create());
|
|
64
|
+
const [fetchSelectedVersionMappingsStatus] = useState(ActionState.create());
|
|
65
|
+
|
|
66
|
+
//projects
|
|
67
|
+
const projectOptions = sourceBuilder.projects.map(buildProjectOption);
|
|
68
|
+
const selectedProjectOption = sourceBuilder.currentProject
|
|
69
|
+
? buildProjectOption(sourceBuilder.currentProject)
|
|
70
|
+
: null;
|
|
71
|
+
const projectSelectorPlaceholder = sourceBuilder.loadProjectsState
|
|
72
|
+
.isInProgress
|
|
73
|
+
? 'Loading projects'
|
|
74
|
+
: sourceBuilder.loadProjectsState.hasFailed
|
|
75
|
+
? 'Error fetching projects'
|
|
76
|
+
: sourceBuilder.projects.length
|
|
77
|
+
? 'Choose a project'
|
|
78
|
+
: 'No Projects available from depot';
|
|
79
|
+
const onProjectOptionChange = async (
|
|
80
|
+
option: ProjectOption | null,
|
|
81
|
+
): Promise<void> => {
|
|
82
|
+
if (option?.value !== sourceBuilder.currentProject) {
|
|
83
|
+
sourceBuilder.setCurrentProject(option?.value);
|
|
84
|
+
|
|
85
|
+
// cascade
|
|
86
|
+
sourceBuilder.setCurrentVersionId(undefined);
|
|
87
|
+
sourceBuilder.setCurrentProjectVersions([]);
|
|
88
|
+
sourceBuilder.setCurrentRuntime(undefined);
|
|
89
|
+
sourceBuilder.setRuntimes([]);
|
|
90
|
+
sourceBuilder.setModelPointer(undefined);
|
|
91
|
+
sourceBuilder.setMappings([]);
|
|
92
|
+
sourceBuilder.setCurrentMapping(undefined);
|
|
93
|
+
sourceBuilder.codeEditorState.clearQuery();
|
|
94
|
+
|
|
95
|
+
try {
|
|
96
|
+
fetchSelectedProjectVersionsStatus.inProgress();
|
|
97
|
+
const versions = await store.depotServerClient.getVersions(
|
|
98
|
+
guaranteeNonNullable(option?.value.groupId),
|
|
99
|
+
guaranteeNonNullable(option?.value.artifactId),
|
|
100
|
+
true,
|
|
101
|
+
);
|
|
102
|
+
sourceBuilder.setCurrentProjectVersions(versions);
|
|
103
|
+
} catch (error) {
|
|
104
|
+
assertErrorThrown(error);
|
|
105
|
+
store.application.notificationService.notifyError(error);
|
|
106
|
+
} finally {
|
|
107
|
+
fetchSelectedProjectVersionsStatus.reset();
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
//versions
|
|
113
|
+
const versionOptions = [
|
|
114
|
+
LATEST_VERSION_ALIAS,
|
|
115
|
+
...(sourceBuilder.currentProjectVersions ?? []),
|
|
116
|
+
]
|
|
117
|
+
.toSorted((v1, v2) => compareSemVerVersions(v2, v1))
|
|
118
|
+
.map(buildVersionOption);
|
|
119
|
+
const selectedVersionOption = sourceBuilder.currentVersionId
|
|
120
|
+
? buildVersionOption(sourceBuilder.currentVersionId)
|
|
121
|
+
: null;
|
|
122
|
+
const versionSelectorPlaceholder = !sourceBuilder.currentProject
|
|
123
|
+
? 'No project selected'
|
|
124
|
+
: 'Choose a version';
|
|
125
|
+
const onVersionChange = async (
|
|
126
|
+
option: VersionOption | null,
|
|
127
|
+
): Promise<void> => {
|
|
128
|
+
if (option?.value !== sourceBuilder.currentVersionId) {
|
|
129
|
+
sourceBuilder.setCurrentVersionId(option?.value);
|
|
130
|
+
|
|
131
|
+
//cascade
|
|
132
|
+
sourceBuilder.setCurrentRuntime(undefined);
|
|
133
|
+
sourceBuilder.setRuntimes([]);
|
|
134
|
+
sourceBuilder.setCurrentMapping(undefined);
|
|
135
|
+
sourceBuilder.setMappings([]);
|
|
136
|
+
sourceBuilder.codeEditorState.clearQuery();
|
|
137
|
+
|
|
138
|
+
//by this point, we should have all the necessary info to build the model context pointer
|
|
139
|
+
sourceBuilder.setModelPointer(
|
|
140
|
+
sourceBuilder.buildPureModelContextPointer(),
|
|
141
|
+
);
|
|
142
|
+
|
|
143
|
+
try {
|
|
144
|
+
const plugins =
|
|
145
|
+
store.application.pluginManager.getPureProtocolProcessorPlugins();
|
|
146
|
+
|
|
147
|
+
//runtimes
|
|
148
|
+
fetchSelectedVersionRuntimesStatus.inProgress();
|
|
149
|
+
const allFetchedRuntimes =
|
|
150
|
+
await store.depotServerClient.getVersionEntities(
|
|
151
|
+
guaranteeNonNullable(sourceBuilder.currentProject?.groupId),
|
|
152
|
+
guaranteeNonNullable(sourceBuilder.currentProject?.artifactId),
|
|
153
|
+
guaranteeNonNullable(option?.value),
|
|
154
|
+
CORE_PURE_PATH.RUNTIME,
|
|
155
|
+
);
|
|
156
|
+
const fetchedRuntimeOptions: V1_PackageableRuntime[] = [];
|
|
157
|
+
allFetchedRuntimes.forEach((runtime) => {
|
|
158
|
+
const runtimeEntity = runtime.entity as Entity;
|
|
159
|
+
const currentRuntimeElement = V1_deserializePackageableElement(
|
|
160
|
+
runtimeEntity.content,
|
|
161
|
+
plugins,
|
|
162
|
+
);
|
|
163
|
+
if (currentRuntimeElement instanceof V1_PackageableRuntime) {
|
|
164
|
+
fetchedRuntimeOptions.push(currentRuntimeElement);
|
|
165
|
+
}
|
|
166
|
+
});
|
|
167
|
+
sourceBuilder.setRuntimes(fetchedRuntimeOptions);
|
|
168
|
+
fetchSelectedVersionRuntimesStatus.reset();
|
|
169
|
+
|
|
170
|
+
//mappings
|
|
171
|
+
fetchSelectedVersionMappingsStatus.inProgress();
|
|
172
|
+
const allFetchedMappings =
|
|
173
|
+
await store.depotServerClient.getVersionEntities(
|
|
174
|
+
guaranteeNonNullable(sourceBuilder.currentProject?.groupId),
|
|
175
|
+
guaranteeNonNullable(sourceBuilder.currentProject?.artifactId),
|
|
176
|
+
guaranteeNonNullable(option?.value),
|
|
177
|
+
CORE_PURE_PATH.MAPPING,
|
|
178
|
+
);
|
|
179
|
+
const fetchedMappingOptions: V1_Mapping[] = [];
|
|
180
|
+
allFetchedMappings.forEach((mapping) => {
|
|
181
|
+
const mappingEntity = mapping.entity as Entity;
|
|
182
|
+
const currentMappingElement = V1_deserializePackageableElement(
|
|
183
|
+
mappingEntity.content,
|
|
184
|
+
plugins,
|
|
185
|
+
);
|
|
186
|
+
if (currentMappingElement instanceof V1_Mapping) {
|
|
187
|
+
fetchedMappingOptions.push(currentMappingElement);
|
|
188
|
+
}
|
|
189
|
+
});
|
|
190
|
+
sourceBuilder.setMappings(fetchedMappingOptions);
|
|
191
|
+
fetchSelectedVersionMappingsStatus.reset();
|
|
192
|
+
} catch (error) {
|
|
193
|
+
assertErrorThrown(error);
|
|
194
|
+
store.application.notificationService.notifyError(error);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
};
|
|
198
|
+
|
|
199
|
+
//runtimes
|
|
200
|
+
const runtimeOptions = sourceBuilder.runtimes?.map(buildRuntimeOption);
|
|
201
|
+
const selectedRuntimeOption = sourceBuilder.currentRuntime
|
|
202
|
+
? buildRuntimeOption(sourceBuilder.currentRuntime)
|
|
203
|
+
: null;
|
|
204
|
+
const runtimeSelectorPlaceholder = !sourceBuilder.currentVersionId
|
|
205
|
+
? 'No version selected'
|
|
206
|
+
: 'Choose a runtime';
|
|
207
|
+
const onRuntimeChange = (option: RuntimeOption | null) => {
|
|
208
|
+
if (option === null) {
|
|
209
|
+
sourceBuilder.codeEditorState.clearQuery();
|
|
210
|
+
}
|
|
211
|
+
if (option?.value !== sourceBuilder.currentRuntime) {
|
|
212
|
+
sourceBuilder.setCurrentRuntime(option?.value);
|
|
213
|
+
}
|
|
214
|
+
};
|
|
215
|
+
|
|
216
|
+
//mappings
|
|
217
|
+
const mappingOptions = sourceBuilder.mappings?.map(buildMappingOption);
|
|
218
|
+
const selectedMappingOption = sourceBuilder.currentMapping
|
|
219
|
+
? buildMappingOption(sourceBuilder.currentMapping)
|
|
220
|
+
: null;
|
|
221
|
+
const mappingSelectorPlaceholder = !sourceBuilder.currentVersionId
|
|
222
|
+
? 'No version selected'
|
|
223
|
+
: 'Choose a mapping';
|
|
224
|
+
const onMappingChange = (option: MappingOption | null) => {
|
|
225
|
+
if (option?.value !== sourceBuilder.currentMapping) {
|
|
226
|
+
sourceBuilder.setCurrentMapping(option?.value);
|
|
227
|
+
}
|
|
228
|
+
};
|
|
229
|
+
|
|
230
|
+
const allowQueryEditing = (): boolean => {
|
|
231
|
+
return Boolean(
|
|
232
|
+
sourceBuilder.currentProject &&
|
|
233
|
+
sourceBuilder.currentVersionId &&
|
|
234
|
+
sourceBuilder.currentRuntime,
|
|
235
|
+
);
|
|
236
|
+
};
|
|
237
|
+
|
|
238
|
+
useEffect(() => {
|
|
239
|
+
flowResult(sourceBuilder.loadProjects()).catch(
|
|
240
|
+
store.application.alertUnhandledError,
|
|
241
|
+
);
|
|
242
|
+
}, [sourceBuilder, store.application]);
|
|
243
|
+
|
|
22
244
|
return (
|
|
23
|
-
<div className="flex h-full w-full
|
|
24
|
-
<div className="flex
|
|
25
|
-
|
|
245
|
+
<div className="flex h-full w-full">
|
|
246
|
+
<div className="m-3 flex w-full flex-col items-stretch gap-2 text-neutral-500">
|
|
247
|
+
<div className="query-setup__wizard__group">
|
|
248
|
+
<div className="query-setup__wizard__group__title">Project</div>
|
|
249
|
+
<CustomSelectorInput
|
|
250
|
+
className="query-setup__wizard__selector"
|
|
251
|
+
options={projectOptions}
|
|
252
|
+
disabled={
|
|
253
|
+
sourceBuilder.loadProjectsState.isInProgress ||
|
|
254
|
+
!projectOptions.length
|
|
255
|
+
}
|
|
256
|
+
isLoading={sourceBuilder.loadProjectsState.isInProgress}
|
|
257
|
+
onChange={(option: ProjectOption | null) => {
|
|
258
|
+
onProjectOptionChange(option).catch(
|
|
259
|
+
store.application.alertUnhandledError,
|
|
260
|
+
);
|
|
261
|
+
}}
|
|
262
|
+
value={selectedProjectOption}
|
|
263
|
+
placeholder={projectSelectorPlaceholder}
|
|
264
|
+
isClearable={true}
|
|
265
|
+
escapeClearsValue={true}
|
|
266
|
+
/>
|
|
267
|
+
</div>
|
|
268
|
+
|
|
269
|
+
<div className="query-setup__wizard__group">
|
|
270
|
+
<div className="query-setup__wizard__group__title">Version</div>
|
|
271
|
+
<CustomSelectorInput
|
|
272
|
+
className="query-setup__wizard__selector"
|
|
273
|
+
options={versionOptions}
|
|
274
|
+
disabled={
|
|
275
|
+
!sourceBuilder.currentProject ||
|
|
276
|
+
fetchSelectedProjectVersionsStatus.isInProgress ||
|
|
277
|
+
!versionOptions.length
|
|
278
|
+
}
|
|
279
|
+
isLoading={fetchSelectedProjectVersionsStatus.isInProgress}
|
|
280
|
+
onChange={(option: VersionOption | null) => {
|
|
281
|
+
onVersionChange(option).catch(
|
|
282
|
+
store.application.alertUnhandledError,
|
|
283
|
+
);
|
|
284
|
+
}}
|
|
285
|
+
value={selectedVersionOption}
|
|
286
|
+
placeholder={versionSelectorPlaceholder}
|
|
287
|
+
isClearable={true}
|
|
288
|
+
escapeClearsValue={true}
|
|
289
|
+
/>
|
|
290
|
+
</div>
|
|
291
|
+
|
|
292
|
+
<div className="query-setup__wizard__group">
|
|
293
|
+
<div className="query-setup__wizard__group__title">Runtime</div>
|
|
294
|
+
<CustomSelectorInput
|
|
295
|
+
className="query-setup__wizard__selector"
|
|
296
|
+
options={runtimeOptions}
|
|
297
|
+
disabled={
|
|
298
|
+
!sourceBuilder.currentVersionId ||
|
|
299
|
+
fetchSelectedVersionRuntimesStatus.isInProgress ||
|
|
300
|
+
!versionOptions.length
|
|
301
|
+
}
|
|
302
|
+
isLoading={fetchSelectedVersionRuntimesStatus.isInProgress}
|
|
303
|
+
onChange={(option: RuntimeOption | null) => {
|
|
304
|
+
onRuntimeChange(option);
|
|
305
|
+
}}
|
|
306
|
+
value={selectedRuntimeOption}
|
|
307
|
+
placeholder={runtimeSelectorPlaceholder}
|
|
308
|
+
isClearable={true}
|
|
309
|
+
escapeClearsValue={true}
|
|
310
|
+
/>
|
|
311
|
+
</div>
|
|
312
|
+
|
|
313
|
+
<div className="query-setup__wizard__group">
|
|
314
|
+
<div className="query-setup__wizard__group__title">
|
|
315
|
+
Mapping (optional)
|
|
316
|
+
</div>
|
|
317
|
+
<CustomSelectorInput
|
|
318
|
+
className="query-setup__wizard__selector"
|
|
319
|
+
options={mappingOptions}
|
|
320
|
+
disabled={
|
|
321
|
+
!sourceBuilder.currentVersionId ||
|
|
322
|
+
fetchSelectedVersionMappingsStatus.isInProgress ||
|
|
323
|
+
!versionOptions.length
|
|
324
|
+
}
|
|
325
|
+
isLoading={fetchSelectedVersionMappingsStatus.isInProgress}
|
|
326
|
+
onChange={(option: MappingOption | null) => {
|
|
327
|
+
onMappingChange(option);
|
|
328
|
+
}}
|
|
329
|
+
value={selectedMappingOption}
|
|
330
|
+
placeholder={mappingSelectorPlaceholder}
|
|
331
|
+
isClearable={true}
|
|
332
|
+
escapeClearsValue={true}
|
|
333
|
+
/>
|
|
334
|
+
</div>
|
|
335
|
+
|
|
336
|
+
<div className="query-setup__wizard__group">
|
|
337
|
+
<div className="query-setup__wizard__group__title">Query</div>
|
|
338
|
+
|
|
339
|
+
<div
|
|
340
|
+
className="mt-2 h-40 w-full"
|
|
341
|
+
style={{
|
|
342
|
+
border: '2px solid #e5e7eb',
|
|
343
|
+
padding: '5px',
|
|
344
|
+
borderRadius: '5px',
|
|
345
|
+
position: 'relative',
|
|
346
|
+
backgroundColor: allowQueryEditing() ? '#ffffff' : '#f2f2f2',
|
|
347
|
+
}}
|
|
348
|
+
>
|
|
349
|
+
{allowQueryEditing() ? (
|
|
350
|
+
<DataCubeCodeEditor state={sourceBuilder.codeEditorState} />
|
|
351
|
+
) : (
|
|
352
|
+
<div>No runtime selected </div>
|
|
353
|
+
)}
|
|
354
|
+
</div>
|
|
355
|
+
{sourceBuilder.codeEditorState.compilationError ? (
|
|
356
|
+
<div
|
|
357
|
+
className="flex h-full w-full flex-shrink-0 text-sm"
|
|
358
|
+
style={{ color: 'red' }}
|
|
359
|
+
>
|
|
360
|
+
<WarningIcon />
|
|
361
|
+
Compilation Error: Ensure TDS is returned and all class names
|
|
362
|
+
are correct
|
|
363
|
+
</div>
|
|
364
|
+
) : sourceBuilder.queryCompileState.isInProgress ? (
|
|
365
|
+
<div className="flex h-full w-full flex-shrink-0 text-sm">
|
|
366
|
+
Compiling query...
|
|
367
|
+
</div>
|
|
368
|
+
) : null}
|
|
369
|
+
</div>
|
|
26
370
|
</div>
|
|
27
371
|
</div>
|
|
28
372
|
);
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
17
|
import { observer } from 'mobx-react-lite';
|
|
18
|
-
import { FormButton } from '@finos/legend-data-cube';
|
|
18
|
+
import { FormButton, FormDropdownMenuTrigger } from '@finos/legend-data-cube';
|
|
19
19
|
import { useLegendDataCubeBuilderStore } from '../LegendDataCubeBuilderStoreProvider.js';
|
|
20
20
|
import { LocalFileDataCubeSourceLoaderState } from '../../../stores/builder/source/LocalFileDataCubeSourceLoaderState.js';
|
|
21
21
|
import { LocalFileDataCubePartialSourceLoader } from './LocalFileDataCubeSourceLoader.js';
|
|
@@ -64,13 +64,22 @@ export const LegendDataCubeSourceLoader = observer(
|
|
|
64
64
|
</div>
|
|
65
65
|
</div>
|
|
66
66
|
</div>
|
|
67
|
-
<div className="
|
|
67
|
+
<div className="mt-2 h-[1px] w-full bg-neutral-200" />
|
|
68
|
+
<div className="flex h-10 w-full items-center py-2">
|
|
68
69
|
<div className="flex h-full w-32 flex-shrink-0 items-center text-sm">
|
|
69
70
|
Source Type:
|
|
70
|
-
<div className="pl-3">{state.label}</div>
|
|
71
71
|
</div>
|
|
72
|
+
<FormDropdownMenuTrigger
|
|
73
|
+
className="w-80"
|
|
74
|
+
onClick={() => {}}
|
|
75
|
+
open={false}
|
|
76
|
+
disabled={true}
|
|
77
|
+
>
|
|
78
|
+
<div className="flex items-center">{state.label}</div>
|
|
79
|
+
</FormDropdownMenuTrigger>
|
|
72
80
|
</div>
|
|
73
|
-
<div className="h-[
|
|
81
|
+
<div className="mb-2 h-[1px] w-full bg-neutral-200" />
|
|
82
|
+
<div className="h-[calc(100%_-_98px)] w-full overflow-auto">
|
|
74
83
|
{state instanceof LocalFileDataCubeSourceLoaderState && (
|
|
75
84
|
<LocalFileDataCubePartialSourceLoader
|
|
76
85
|
partialSourceLoader={state}
|
|
@@ -81,7 +90,14 @@ export const LegendDataCubeSourceLoader = observer(
|
|
|
81
90
|
</div>
|
|
82
91
|
</div>
|
|
83
92
|
<div className="flex h-10 items-center justify-end px-2">
|
|
84
|
-
<FormButton
|
|
93
|
+
<FormButton
|
|
94
|
+
onClick={() => {
|
|
95
|
+
state.display.onClose?.();
|
|
96
|
+
state.display.close();
|
|
97
|
+
}}
|
|
98
|
+
>
|
|
99
|
+
Cancel
|
|
100
|
+
</FormButton>
|
|
85
101
|
<FormButton
|
|
86
102
|
className="ml-2"
|
|
87
103
|
disabled={!state.isValid || state.finalizeState.isInProgress}
|
|
@@ -18,10 +18,17 @@ import { observer } from 'mobx-react-lite';
|
|
|
18
18
|
import type { LocalFileDataCubeSourceBuilderState } from '../../../stores/builder/source/LocalFileDataCubeSourceBuilderState.js';
|
|
19
19
|
import { AlertType, FormAlert, FormCodeEditor } from '@finos/legend-data-cube';
|
|
20
20
|
import { CODE_EDITOR_LANGUAGE } from '@finos/legend-code-editor';
|
|
21
|
+
import { useLegendDataCubeBuilderStore } from '../LegendDataCubeBuilderStoreProvider.js';
|
|
22
|
+
import { useEffect } from 'react';
|
|
21
23
|
|
|
22
24
|
export const LocalFileDataCubeSourceBuilder = observer(
|
|
23
25
|
(props: { sourceBuilder: LocalFileDataCubeSourceBuilderState }) => {
|
|
24
26
|
const { sourceBuilder } = props;
|
|
27
|
+
const store = useLegendDataCubeBuilderStore();
|
|
28
|
+
|
|
29
|
+
useEffect(() => {
|
|
30
|
+
sourceBuilder.reset();
|
|
31
|
+
}, [sourceBuilder]);
|
|
25
32
|
|
|
26
33
|
return (
|
|
27
34
|
<div className="h-full w-full p-2">
|
|
@@ -36,11 +43,26 @@ export const LocalFileDataCubeSourceBuilder = observer(
|
|
|
36
43
|
<input
|
|
37
44
|
type="file"
|
|
38
45
|
onChange={(event) => {
|
|
39
|
-
sourceBuilder
|
|
46
|
+
sourceBuilder
|
|
47
|
+
.processFile(event.target.files?.[0])
|
|
48
|
+
.catch((error) =>
|
|
49
|
+
store.alertService.alertUnhandledError(error),
|
|
50
|
+
);
|
|
40
51
|
}}
|
|
41
52
|
className="w-full"
|
|
42
53
|
/>
|
|
43
54
|
</div>
|
|
55
|
+
{sourceBuilder.processState.hasFailed && (
|
|
56
|
+
<div className="mt-2 h-40">
|
|
57
|
+
<FormCodeEditor
|
|
58
|
+
value={`ERR: Failed to process file.`}
|
|
59
|
+
language={CODE_EDITOR_LANGUAGE.TEXT}
|
|
60
|
+
isReadOnly={true}
|
|
61
|
+
hidePadding={true}
|
|
62
|
+
hideActionBar={true}
|
|
63
|
+
/>
|
|
64
|
+
</div>
|
|
65
|
+
)}
|
|
44
66
|
{sourceBuilder.previewText !== undefined && (
|
|
45
67
|
<div className="mt-2 h-40">
|
|
46
68
|
<FormCodeEditor
|
|
@@ -18,10 +18,17 @@ import { observer } from 'mobx-react-lite';
|
|
|
18
18
|
import { AlertType, FormAlert, FormCodeEditor } from '@finos/legend-data-cube';
|
|
19
19
|
import { CODE_EDITOR_LANGUAGE } from '@finos/legend-code-editor';
|
|
20
20
|
import type { LocalFileDataCubeSourceLoaderState } from '../../../stores/builder/source/LocalFileDataCubeSourceLoaderState.js';
|
|
21
|
+
import { useLegendDataCubeBuilderStore } from '../LegendDataCubeBuilderStoreProvider.js';
|
|
22
|
+
import { useEffect } from 'react';
|
|
21
23
|
|
|
22
24
|
export const LocalFileDataCubePartialSourceLoader = observer(
|
|
23
25
|
(props: { partialSourceLoader: LocalFileDataCubeSourceLoaderState }) => {
|
|
24
26
|
const { partialSourceLoader } = props;
|
|
27
|
+
const store = useLegendDataCubeBuilderStore();
|
|
28
|
+
|
|
29
|
+
useEffect(() => {
|
|
30
|
+
partialSourceLoader.reset();
|
|
31
|
+
}, [partialSourceLoader]);
|
|
25
32
|
|
|
26
33
|
return (
|
|
27
34
|
<div className="h-full w-full">
|
|
@@ -36,11 +43,26 @@ export const LocalFileDataCubePartialSourceLoader = observer(
|
|
|
36
43
|
<input
|
|
37
44
|
type="file"
|
|
38
45
|
onChange={(event) => {
|
|
39
|
-
partialSourceLoader
|
|
46
|
+
partialSourceLoader
|
|
47
|
+
.processFile(event.target.files?.[0])
|
|
48
|
+
.catch((error) =>
|
|
49
|
+
store.alertService.alertUnhandledError(error),
|
|
50
|
+
);
|
|
40
51
|
}}
|
|
41
52
|
className="w-full"
|
|
42
53
|
/>
|
|
43
54
|
</div>
|
|
55
|
+
{partialSourceLoader.processState.hasFailed && (
|
|
56
|
+
<div className="mt-2 h-40">
|
|
57
|
+
<FormCodeEditor
|
|
58
|
+
value={`ERR: Failed to process file.`}
|
|
59
|
+
language={CODE_EDITOR_LANGUAGE.TEXT}
|
|
60
|
+
isReadOnly={true}
|
|
61
|
+
hidePadding={true}
|
|
62
|
+
hideActionBar={true}
|
|
63
|
+
/>
|
|
64
|
+
</div>
|
|
65
|
+
)}
|
|
44
66
|
{partialSourceLoader.previewText !== undefined && (
|
|
45
67
|
<div className="mt-2 h-40">
|
|
46
68
|
<FormCodeEditor
|