@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
@@ -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":"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"}
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.4",
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.29",
47
- "@finos/legend-art": "7.1.86",
48
- "@finos/legend-code-editor": "2.0.51",
49
- "@finos/legend-data-cube": "0.1.11",
50
- "@finos/legend-graph": "32.1.9",
51
- "@finos/legend-query-builder": "4.16.11",
52
- "@finos/legend-server-depot": "6.0.85",
53
- "@finos/legend-shared": "11.0.8",
54
- "@finos/legend-storage": "3.0.127",
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: { sourceBuilder: AdhocQueryDataCubeSourceBuilderState }) => {
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 p-2">
24
- <div className="flex h-6 items-center text-neutral-500">
25
- This is a work-in-progress.
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="flex h-10 w-full items-center">
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-[calc(100%_-_41px)] w-full overflow-auto">
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 onClick={state.display.onClose}>Cancel</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.processFile(event.target.files?.[0]);
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.processFile(event.target.files?.[0]);
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