@finos/legend-application-query 13.4.0 → 13.4.2
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/__lib__/DSL_DataSpace_LegendQueryDocumentation.d.ts +19 -0
- package/lib/__lib__/DSL_DataSpace_LegendQueryDocumentation.d.ts.map +1 -0
- package/lib/__lib__/DSL_DataSpace_LegendQueryDocumentation.js +20 -0
- package/lib/__lib__/DSL_DataSpace_LegendQueryDocumentation.js.map +1 -0
- package/lib/__lib__/DSL_DataSpace_LegendQueryNavigation.d.ts +53 -0
- package/lib/__lib__/DSL_DataSpace_LegendQueryNavigation.d.ts.map +1 -0
- package/lib/__lib__/DSL_DataSpace_LegendQueryNavigation.js +59 -0
- package/lib/__lib__/DSL_DataSpace_LegendQueryNavigation.js.map +1 -0
- package/lib/components/Core_LegendQueryApplicationPlugin.d.ts.map +1 -1
- package/lib/components/Core_LegendQueryApplicationPlugin.js +14 -1
- package/lib/components/Core_LegendQueryApplicationPlugin.js.map +1 -1
- package/lib/components/LegendQueryWebApplication.d.ts.map +1 -1
- package/lib/components/LegendQueryWebApplication.js +18 -10
- package/lib/components/LegendQueryWebApplication.js.map +1 -1
- package/lib/components/QueryEditor.d.ts.map +1 -1
- package/lib/components/QueryEditor.js +47 -18
- package/lib/components/QueryEditor.js.map +1 -1
- package/lib/components/data-space/DataSpaceQueryCreator.d.ts +19 -0
- package/lib/components/data-space/DataSpaceQueryCreator.d.ts.map +1 -0
- package/lib/components/data-space/DataSpaceQueryCreator.js +43 -0
- package/lib/components/data-space/DataSpaceQueryCreator.js.map +1 -0
- package/lib/components/data-space/DataSpaceQuerySetup.d.ts +21 -0
- package/lib/components/data-space/DataSpaceQuerySetup.d.ts.map +1 -0
- package/lib/components/data-space/DataSpaceQuerySetup.js +64 -0
- package/lib/components/data-space/DataSpaceQuerySetup.js.map +1 -0
- package/lib/components/data-space/DataSpaceTemplateQueryCreator.d.ts +19 -0
- package/lib/components/data-space/DataSpaceTemplateQueryCreator.d.ts.map +1 -0
- package/lib/components/data-space/DataSpaceTemplateQueryCreator.js +39 -0
- package/lib/components/data-space/DataSpaceTemplateQueryCreator.js.map +1 -0
- package/lib/components/data-space/QueryDataSpaceUtil.d.ts +19 -0
- package/lib/components/data-space/QueryDataSpaceUtil.d.ts.map +1 -0
- package/lib/components/data-space/QueryDataSpaceUtil.js +25 -0
- package/lib/components/data-space/QueryDataSpaceUtil.js.map +1 -0
- package/lib/index.css +1 -1
- package/lib/package.json +2 -1
- package/lib/stores/LegendQueryApplicationPlugin.d.ts +0 -16
- package/lib/stores/LegendQueryApplicationPlugin.d.ts.map +1 -1
- package/lib/stores/LegendQueryApplicationPlugin.js.map +1 -1
- package/lib/stores/QueryEditorStore.d.ts +2 -0
- package/lib/stores/QueryEditorStore.d.ts.map +1 -1
- package/lib/stores/QueryEditorStore.js +96 -11
- package/lib/stores/QueryEditorStore.js.map +1 -1
- package/lib/stores/data-space/DataSpaceQueryCreatorStore.d.ts +37 -0
- package/lib/stores/data-space/DataSpaceQueryCreatorStore.d.ts.map +1 -0
- package/lib/stores/data-space/DataSpaceQueryCreatorStore.js +132 -0
- package/lib/stores/data-space/DataSpaceQueryCreatorStore.js.map +1 -0
- package/lib/stores/data-space/DataSpaceQuerySetupState.d.ts +51 -0
- package/lib/stores/data-space/DataSpaceQuerySetupState.d.ts.map +1 -0
- package/lib/stores/data-space/DataSpaceQuerySetupState.js +107 -0
- package/lib/stores/data-space/DataSpaceQuerySetupState.js.map +1 -0
- package/lib/stores/data-space/DataSpaceTemplateQueryCreatorStore.d.ts +36 -0
- package/lib/stores/data-space/DataSpaceTemplateQueryCreatorStore.d.ts.map +1 -0
- package/lib/stores/data-space/DataSpaceTemplateQueryCreatorStore.js +104 -0
- package/lib/stores/data-space/DataSpaceTemplateQueryCreatorStore.js.map +1 -0
- package/package.json +5 -4
- package/src/__lib__/DSL_DataSpace_LegendQueryDocumentation.ts +19 -0
- package/src/__lib__/DSL_DataSpace_LegendQueryNavigation.ts +123 -0
- package/src/components/Core_LegendQueryApplicationPlugin.tsx +18 -0
- package/src/components/LegendQueryWebApplication.tsx +48 -12
- package/src/components/QueryEditor.tsx +112 -24
- package/src/components/data-space/DataSpaceQueryCreator.tsx +99 -0
- package/src/components/data-space/DataSpaceQuerySetup.tsx +165 -0
- package/src/components/data-space/DataSpaceTemplateQueryCreator.tsx +82 -0
- package/src/components/data-space/QueryDataSpaceUtil.ts +34 -0
- package/src/stores/LegendQueryApplicationPlugin.ts +0 -22
- package/src/stores/QueryEditorStore.ts +187 -12
- package/src/stores/data-space/DataSpaceQueryCreatorStore.ts +286 -0
- package/src/stores/data-space/DataSpaceQuerySetupState.ts +208 -0
- package/src/stores/data-space/DataSpaceTemplateQueryCreatorStore.ts +204 -0
- package/tsconfig.json +10 -1
@@ -0,0 +1,104 @@
|
|
1
|
+
/**
|
2
|
+
* Copyright (c) 2020-present, Goldman Sachs
|
3
|
+
*
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
* you may not use this file except in compliance with the License.
|
6
|
+
* You may obtain a copy of the License at
|
7
|
+
*
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
*
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
* See the License for the specific language governing permissions and
|
14
|
+
* limitations under the License.
|
15
|
+
*/
|
16
|
+
import { extractElementNameFromPath, } from '@finos/legend-graph';
|
17
|
+
import { StoreProjectData, } from '@finos/legend-server-depot';
|
18
|
+
import { filterByType, guaranteeNonNullable, uuid } from '@finos/legend-shared';
|
19
|
+
import { QueryEditorStore, createViewProjectHandler, createViewSDLCProjectHandler, } from '../QueryEditorStore.js';
|
20
|
+
import { DSL_DataSpace_getGraphManagerExtension, DataSpaceExecutableTemplate, getDataSpace, retrieveAnalyticsResultCache, } from '@finos/legend-extension-dsl-data-space/graph';
|
21
|
+
import { DataSpaceProjectInfo, DataSpaceQueryBuilderState, createQueryClassTaggedValue, createQueryDataSpaceTaggedValue, } from '@finos/legend-extension-dsl-data-space/application';
|
22
|
+
import { generateDataSpaceTemplateQueryCreatorRoute } from '../../__lib__/DSL_DataSpace_LegendQueryNavigation.js';
|
23
|
+
export class DataSpaceTemplateQueryCreatorStore extends QueryEditorStore {
|
24
|
+
groupId;
|
25
|
+
artifactId;
|
26
|
+
versionId;
|
27
|
+
dataSpacePath;
|
28
|
+
templateQueryId;
|
29
|
+
templateQueryTitle;
|
30
|
+
constructor(applicationStore, depotServerClient, groupId, artifactId, versionId, dataSpacePath, templateQueryId) {
|
31
|
+
super(applicationStore, depotServerClient);
|
32
|
+
this.groupId = groupId;
|
33
|
+
this.artifactId = artifactId;
|
34
|
+
this.versionId = versionId;
|
35
|
+
this.dataSpacePath = dataSpacePath;
|
36
|
+
this.templateQueryId = templateQueryId;
|
37
|
+
}
|
38
|
+
getProjectInfo() {
|
39
|
+
return {
|
40
|
+
groupId: this.groupId,
|
41
|
+
artifactId: this.artifactId,
|
42
|
+
versionId: this.versionId,
|
43
|
+
};
|
44
|
+
}
|
45
|
+
async initializeQueryBuilderState() {
|
46
|
+
const dataSpace = getDataSpace(this.dataSpacePath, this.graphManagerState.graph);
|
47
|
+
const dataSpaceExecutableTemplate = guaranteeNonNullable(dataSpace.executables
|
48
|
+
?.filter(filterByType(DataSpaceExecutableTemplate))
|
49
|
+
.find((executable) => executable.id === this.templateQueryId), `Can't find template query with id '${this.templateQueryId}'`);
|
50
|
+
const executionContext = guaranteeNonNullable(dataSpaceExecutableTemplate.executionContextKey
|
51
|
+
? dataSpace.executionContexts.filter((ec) => ec.name === dataSpaceExecutableTemplate.executionContextKey)[0]
|
52
|
+
: dataSpace.defaultExecutionContext, `Can't find execution context '${dataSpaceExecutableTemplate.executionContextKey}'`);
|
53
|
+
this.templateQueryTitle = dataSpaceExecutableTemplate.title;
|
54
|
+
let dataSpaceAnalysisResult;
|
55
|
+
try {
|
56
|
+
const project = StoreProjectData.serialization.fromJson(await this.depotServerClient.getProject(this.groupId, this.artifactId));
|
57
|
+
dataSpaceAnalysisResult = await DSL_DataSpace_getGraphManagerExtension(this.graphManagerState.graphManager).retrieveDataSpaceAnalysisFromCache(() => retrieveAnalyticsResultCache(project, this.versionId, dataSpace.path, this.depotServerClient));
|
58
|
+
}
|
59
|
+
catch {
|
60
|
+
// do nothing
|
61
|
+
}
|
62
|
+
const projectInfo = new DataSpaceProjectInfo(this.groupId, this.artifactId, this.versionId, createViewProjectHandler(this.applicationStore), createViewSDLCProjectHandler(this.applicationStore, this.depotServerClient));
|
63
|
+
const sourceInfo = {
|
64
|
+
groupId: projectInfo.groupId,
|
65
|
+
artifactId: projectInfo.artifactId,
|
66
|
+
versionId: projectInfo.versionId,
|
67
|
+
dataSpace: dataSpace.path,
|
68
|
+
};
|
69
|
+
const queryBuilderState = new DataSpaceQueryBuilderState(this.applicationStore, this.graphManagerState, this.depotServerClient, dataSpace, executionContext, (dataSpaceInfo) => {
|
70
|
+
this.applicationStore.notificationService.notifyWarning(`Can't switch data space to visit current template query`);
|
71
|
+
}, true, dataSpaceAnalysisResult, (ec) => {
|
72
|
+
this.applicationStore.navigationService.navigator.updateCurrentLocation(generateDataSpaceTemplateQueryCreatorRoute(this.groupId, this.artifactId, this.versionId, dataSpace.path, this.templateQueryId));
|
73
|
+
}, undefined, undefined, projectInfo, this.applicationStore.config.options.queryBuilderConfig, sourceInfo);
|
74
|
+
queryBuilderState.setExecutionContext(executionContext);
|
75
|
+
queryBuilderState.propagateExecutionContextChange(executionContext);
|
76
|
+
queryBuilderState.initializeWithQuery(dataSpaceExecutableTemplate.query);
|
77
|
+
return queryBuilderState;
|
78
|
+
}
|
79
|
+
getPersistConfiguration(lambda, options) {
|
80
|
+
return {
|
81
|
+
defaultName: options?.update
|
82
|
+
? `${extractElementNameFromPath(this.dataSpacePath)}`
|
83
|
+
: `New Query for ${extractElementNameFromPath(this.dataSpacePath)}[${this.templateQueryId}]`,
|
84
|
+
decorator: (query) => {
|
85
|
+
query.id = uuid();
|
86
|
+
query.groupId = this.groupId;
|
87
|
+
query.artifactId = this.artifactId;
|
88
|
+
query.versionId = this.versionId;
|
89
|
+
if (this.queryBuilderState?.class) {
|
90
|
+
query.taggedValues = [
|
91
|
+
createQueryDataSpaceTaggedValue(this.dataSpacePath),
|
92
|
+
createQueryClassTaggedValue(this.queryBuilderState.class.path),
|
93
|
+
];
|
94
|
+
}
|
95
|
+
else {
|
96
|
+
query.taggedValues = [
|
97
|
+
createQueryDataSpaceTaggedValue(this.dataSpacePath),
|
98
|
+
];
|
99
|
+
}
|
100
|
+
},
|
101
|
+
};
|
102
|
+
}
|
103
|
+
}
|
104
|
+
//# sourceMappingURL=DataSpaceTemplateQueryCreatorStore.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"DataSpaceTemplateQueryCreatorStore.js","sourceRoot":"","sources":["../../../src/stores/data-space/DataSpaceTemplateQueryCreatorStore.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@finos/legend-application-query",
|
3
|
-
"version": "13.4.
|
3
|
+
"version": "13.4.2",
|
4
4
|
"description": "Legend Query application core",
|
5
5
|
"keywords": [
|
6
6
|
"legend",
|
@@ -45,9 +45,10 @@
|
|
45
45
|
"dependencies": {
|
46
46
|
"@finos/legend-application": "15.0.74",
|
47
47
|
"@finos/legend-art": "7.1.26",
|
48
|
-
"@finos/legend-
|
49
|
-
"@finos/legend-
|
50
|
-
"@finos/legend-
|
48
|
+
"@finos/legend-extension-dsl-data-space": "10.3.1",
|
49
|
+
"@finos/legend-graph": "31.9.11",
|
50
|
+
"@finos/legend-lego": "1.2.24",
|
51
|
+
"@finos/legend-query-builder": "4.14.25",
|
51
52
|
"@finos/legend-server-depot": "6.0.39",
|
52
53
|
"@finos/legend-shared": "10.0.34",
|
53
54
|
"@finos/legend-storage": "3.0.84",
|
@@ -0,0 +1,19 @@
|
|
1
|
+
/**
|
2
|
+
* Copyright (c) 2020-present, Goldman Sachs
|
3
|
+
*
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
* you may not use this file except in compliance with the License.
|
6
|
+
* You may obtain a copy of the License at
|
7
|
+
*
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
*
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
* See the License for the specific language governing permissions and
|
14
|
+
* limitations under the License.
|
15
|
+
*/
|
16
|
+
|
17
|
+
export enum DSL_DATA_SPACE_LEGEND_QUERY_DOCUMENTATION_KEY {
|
18
|
+
CURATED_TEMPLATE_QUERY = 'dsl-dataspace.curated-template-query',
|
19
|
+
}
|
@@ -0,0 +1,123 @@
|
|
1
|
+
/**
|
2
|
+
* Copyright (c) 2020-present, Goldman Sachs
|
3
|
+
*
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
* you may not use this file except in compliance with the License.
|
6
|
+
* You may obtain a copy of the License at
|
7
|
+
*
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
*
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
* See the License for the specific language governing permissions and
|
14
|
+
* limitations under the License.
|
15
|
+
*/
|
16
|
+
|
17
|
+
import {
|
18
|
+
generateExtensionUrlPattern,
|
19
|
+
generatePath,
|
20
|
+
} from '@finos/legend-application/browser';
|
21
|
+
import {
|
22
|
+
addQueryParametersToUrl,
|
23
|
+
stringifyQueryParams,
|
24
|
+
} from '@finos/legend-shared';
|
25
|
+
import { generateGAVCoordinates } from '@finos/legend-storage';
|
26
|
+
|
27
|
+
export enum DATA_SPACE_QUERY_CREATOR_ROUTE_PATTERN_TOKEN {
|
28
|
+
GAV = 'gav',
|
29
|
+
DATA_SPACE_PATH = 'dataSpacePath',
|
30
|
+
EXECUTION_CONTEXT = 'executionContext',
|
31
|
+
RUNTIME_PATH = 'runtimePath',
|
32
|
+
}
|
33
|
+
|
34
|
+
export enum DATA_SPACE_QUERY_CREATOR_QUERY_PARAM_TOKEN {
|
35
|
+
CLASS_PATH = 'class',
|
36
|
+
}
|
37
|
+
|
38
|
+
export enum DATA_SPACE_TEMPLATE_QUERY_CREATOR_ROUTE_PATTERN_TOKEN {
|
39
|
+
GAV = 'gav',
|
40
|
+
DATA_SPACE_PATH = 'dataSpacePath',
|
41
|
+
TEMPLATE = 'template',
|
42
|
+
TEMPLATE_QUERY_ID = 'templateQueryId',
|
43
|
+
}
|
44
|
+
|
45
|
+
export type DataSpaceQueryCreatorPathParams = {
|
46
|
+
[DATA_SPACE_QUERY_CREATOR_ROUTE_PATTERN_TOKEN.GAV]: string;
|
47
|
+
[DATA_SPACE_QUERY_CREATOR_ROUTE_PATTERN_TOKEN.DATA_SPACE_PATH]: string;
|
48
|
+
[DATA_SPACE_QUERY_CREATOR_ROUTE_PATTERN_TOKEN.EXECUTION_CONTEXT]: string;
|
49
|
+
[DATA_SPACE_QUERY_CREATOR_ROUTE_PATTERN_TOKEN.RUNTIME_PATH]?: string;
|
50
|
+
};
|
51
|
+
|
52
|
+
export type DataSpaceTemplateQueryCreatorPathParams = {
|
53
|
+
[DATA_SPACE_TEMPLATE_QUERY_CREATOR_ROUTE_PATTERN_TOKEN.GAV]: string;
|
54
|
+
[DATA_SPACE_TEMPLATE_QUERY_CREATOR_ROUTE_PATTERN_TOKEN.DATA_SPACE_PATH]: string;
|
55
|
+
[DATA_SPACE_TEMPLATE_QUERY_CREATOR_ROUTE_PATTERN_TOKEN.TEMPLATE_QUERY_ID]: string;
|
56
|
+
};
|
57
|
+
|
58
|
+
export type DataSpaceQueryEditorQueryParams = {
|
59
|
+
[DATA_SPACE_QUERY_CREATOR_QUERY_PARAM_TOKEN.CLASS_PATH]?: string | undefined;
|
60
|
+
};
|
61
|
+
|
62
|
+
export const DATA_SPACE_QUERY_ROUTE_PATTERN = Object.freeze({
|
63
|
+
SETUP: `/dataspace`,
|
64
|
+
CREATE: `/dataspace/:${DATA_SPACE_QUERY_CREATOR_ROUTE_PATTERN_TOKEN.GAV}/:${DATA_SPACE_QUERY_CREATOR_ROUTE_PATTERN_TOKEN.DATA_SPACE_PATH}/:${DATA_SPACE_QUERY_CREATOR_ROUTE_PATTERN_TOKEN.EXECUTION_CONTEXT}/:${DATA_SPACE_QUERY_CREATOR_ROUTE_PATTERN_TOKEN.RUNTIME_PATH}?`,
|
65
|
+
TEMPLATE_QUERY: `/dataspace/:${DATA_SPACE_TEMPLATE_QUERY_CREATOR_ROUTE_PATTERN_TOKEN.GAV}/:${DATA_SPACE_TEMPLATE_QUERY_CREATOR_ROUTE_PATTERN_TOKEN.DATA_SPACE_PATH}/:${DATA_SPACE_TEMPLATE_QUERY_CREATOR_ROUTE_PATTERN_TOKEN.TEMPLATE}/:${DATA_SPACE_TEMPLATE_QUERY_CREATOR_ROUTE_PATTERN_TOKEN.TEMPLATE_QUERY_ID}`,
|
66
|
+
});
|
67
|
+
|
68
|
+
export const generateDataSpaceQuerySetupRoute = (): string =>
|
69
|
+
generatePath(
|
70
|
+
generateExtensionUrlPattern(DATA_SPACE_QUERY_ROUTE_PATTERN.SETUP),
|
71
|
+
{},
|
72
|
+
);
|
73
|
+
|
74
|
+
export const generateDataSpaceQueryCreatorRoute = (
|
75
|
+
groupId: string,
|
76
|
+
artifactId: string,
|
77
|
+
versionId: string,
|
78
|
+
dataSpacePath: string,
|
79
|
+
executionContextKey: string,
|
80
|
+
runtimePath?: string | undefined,
|
81
|
+
classPath?: string | undefined,
|
82
|
+
): string =>
|
83
|
+
addQueryParametersToUrl(
|
84
|
+
generatePath(
|
85
|
+
generateExtensionUrlPattern(DATA_SPACE_QUERY_ROUTE_PATTERN.CREATE),
|
86
|
+
{
|
87
|
+
[DATA_SPACE_QUERY_CREATOR_ROUTE_PATTERN_TOKEN.GAV]:
|
88
|
+
generateGAVCoordinates(groupId, artifactId, versionId),
|
89
|
+
[DATA_SPACE_QUERY_CREATOR_ROUTE_PATTERN_TOKEN.DATA_SPACE_PATH]:
|
90
|
+
dataSpacePath,
|
91
|
+
[DATA_SPACE_QUERY_CREATOR_ROUTE_PATTERN_TOKEN.EXECUTION_CONTEXT]:
|
92
|
+
executionContextKey,
|
93
|
+
[DATA_SPACE_QUERY_CREATOR_ROUTE_PATTERN_TOKEN.RUNTIME_PATH]:
|
94
|
+
runtimePath,
|
95
|
+
},
|
96
|
+
),
|
97
|
+
stringifyQueryParams({
|
98
|
+
[DATA_SPACE_QUERY_CREATOR_QUERY_PARAM_TOKEN.CLASS_PATH]: classPath
|
99
|
+
? encodeURIComponent(classPath)
|
100
|
+
: undefined,
|
101
|
+
}),
|
102
|
+
);
|
103
|
+
|
104
|
+
export const generateDataSpaceTemplateQueryCreatorRoute = (
|
105
|
+
groupId: string,
|
106
|
+
artifactId: string,
|
107
|
+
versionId: string,
|
108
|
+
dataSpacePath: string,
|
109
|
+
templateQueryId: string,
|
110
|
+
): string =>
|
111
|
+
generatePath(
|
112
|
+
generateExtensionUrlPattern(DATA_SPACE_QUERY_ROUTE_PATTERN.TEMPLATE_QUERY),
|
113
|
+
{
|
114
|
+
[DATA_SPACE_TEMPLATE_QUERY_CREATOR_ROUTE_PATTERN_TOKEN.GAV]:
|
115
|
+
generateGAVCoordinates(groupId, artifactId, versionId),
|
116
|
+
[DATA_SPACE_TEMPLATE_QUERY_CREATOR_ROUTE_PATTERN_TOKEN.DATA_SPACE_PATH]:
|
117
|
+
dataSpacePath,
|
118
|
+
[DATA_SPACE_TEMPLATE_QUERY_CREATOR_ROUTE_PATTERN_TOKEN.TEMPLATE]:
|
119
|
+
DATA_SPACE_TEMPLATE_QUERY_CREATOR_ROUTE_PATTERN_TOKEN.TEMPLATE,
|
120
|
+
[DATA_SPACE_TEMPLATE_QUERY_CREATOR_ROUTE_PATTERN_TOKEN.TEMPLATE_QUERY_ID]:
|
121
|
+
templateQueryId,
|
122
|
+
},
|
123
|
+
);
|
@@ -27,6 +27,7 @@ import {
|
|
27
27
|
ManageSearchIcon,
|
28
28
|
PlusIcon,
|
29
29
|
RobotIcon,
|
30
|
+
SquareIcon,
|
30
31
|
} from '@finos/legend-art';
|
31
32
|
import {
|
32
33
|
generateCloneServiceQuerySetupRoute,
|
@@ -49,6 +50,7 @@ import {
|
|
49
50
|
configureCodeEditorComponent,
|
50
51
|
setupPureLanguageService,
|
51
52
|
} from '@finos/legend-lego/code-editor';
|
53
|
+
import { generateDataSpaceQuerySetupRoute } from '../__lib__/DSL_DataSpace_LegendQueryNavigation.js';
|
52
54
|
|
53
55
|
export class Core_LegendQueryApplicationPlugin extends LegendQueryApplicationPlugin {
|
54
56
|
static NAME = packageJson.extensions.applicationQueryPlugin;
|
@@ -183,6 +185,22 @@ export class Core_LegendQueryApplicationPlugin extends LegendQueryApplicationPlu
|
|
183
185
|
className: 'query-setup__landing-page__action--productionize-query',
|
184
186
|
icon: <ArrowCircleUpIcon />,
|
185
187
|
},
|
188
|
+
// data space
|
189
|
+
{
|
190
|
+
key: 'create-query-from-data-space',
|
191
|
+
isAdvanced: false,
|
192
|
+
isCreateAction: true,
|
193
|
+
action: async (setupStore) => {
|
194
|
+
setupStore.applicationStore.navigationService.navigator.goToLocation(
|
195
|
+
generateDataSpaceQuerySetupRoute(),
|
196
|
+
);
|
197
|
+
},
|
198
|
+
label: 'Create query from data space',
|
199
|
+
className: 'query-setup__landing-page__action--data-space',
|
200
|
+
icon: (
|
201
|
+
<SquareIcon className="query-setup__landing-page__icon--data-space" />
|
202
|
+
),
|
203
|
+
},
|
186
204
|
];
|
187
205
|
}
|
188
206
|
}
|
@@ -39,7 +39,10 @@ import { EditExistingQuerySetup } from './EditExistingQuerySetup.js';
|
|
39
39
|
import { CreateMappingQuerySetup } from './CreateMappingQuerySetup.js';
|
40
40
|
import { useEffect } from 'react';
|
41
41
|
import { flowResult } from 'mobx';
|
42
|
-
import {
|
42
|
+
import { DATA_SPACE_QUERY_ROUTE_PATTERN } from '../__lib__/DSL_DataSpace_LegendQueryNavigation.js';
|
43
|
+
import { DataSpaceQuerySetup } from './data-space/DataSpaceQuerySetup.js';
|
44
|
+
import { DataSpaceTemplateQueryCreator } from './data-space/DataSpaceTemplateQueryCreator.js';
|
45
|
+
import { DataSpaceQueryCreator } from './data-space/DataSpaceQueryCreator.js';
|
43
46
|
|
44
47
|
const LegendQueryWebApplicationRouter = observer(() => {
|
45
48
|
const applicationStore = useLegendQueryApplicationStore();
|
@@ -49,16 +52,6 @@ const LegendQueryWebApplicationRouter = observer(() => {
|
|
49
52
|
.getApplicationPlugins()
|
50
53
|
.flatMap((plugin) => plugin.getExtraApplicationPageEntries?.() ?? []);
|
51
54
|
|
52
|
-
const setupRoot = applicationStore.pluginManager
|
53
|
-
.getApplicationPlugins()
|
54
|
-
.flatMap((plugin) => plugin.getExtraRootAppRedirectPath?.())
|
55
|
-
.filter(isNonNullable);
|
56
|
-
|
57
|
-
const rootRedirect =
|
58
|
-
setupRoot.length === 1
|
59
|
-
? generateExtensionUrlPattern(guaranteeNonNullable(setupRoot[0]))
|
60
|
-
: LEGEND_QUERY_ROUTE_PATTERN.SETUP;
|
61
|
-
|
62
55
|
useEffect(() => {
|
63
56
|
flowResult(baseStore.initialize()).catch(
|
64
57
|
applicationStore.alertUnhandledError,
|
@@ -117,6 +110,44 @@ const LegendQueryWebApplicationRouter = observer(() => {
|
|
117
110
|
MappingQueryCreator as TEMPORARY__ReactRouterComponentType
|
118
111
|
}
|
119
112
|
/>
|
113
|
+
{/* DATA SPACE */}
|
114
|
+
<Route
|
115
|
+
exact={true}
|
116
|
+
path={[
|
117
|
+
generateExtensionUrlPattern(DATA_SPACE_QUERY_ROUTE_PATTERN.SETUP),
|
118
|
+
]}
|
119
|
+
component={
|
120
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
121
|
+
DataSpaceQuerySetup as TEMPORARY__ReactRouterComponentType
|
122
|
+
}
|
123
|
+
/>
|
124
|
+
|
125
|
+
<Route
|
126
|
+
exact={true}
|
127
|
+
path={[
|
128
|
+
generateExtensionUrlPattern(
|
129
|
+
DATA_SPACE_QUERY_ROUTE_PATTERN.TEMPLATE_QUERY,
|
130
|
+
),
|
131
|
+
]}
|
132
|
+
component={
|
133
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
134
|
+
DataSpaceTemplateQueryCreator as TEMPORARY__ReactRouterComponentType
|
135
|
+
}
|
136
|
+
/>
|
137
|
+
|
138
|
+
<Route
|
139
|
+
exact={true}
|
140
|
+
path={[
|
141
|
+
generateExtensionUrlPattern(
|
142
|
+
DATA_SPACE_QUERY_ROUTE_PATTERN.CREATE,
|
143
|
+
),
|
144
|
+
]}
|
145
|
+
component={
|
146
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
147
|
+
DataSpaceQueryCreator as TEMPORARY__ReactRouterComponentType
|
148
|
+
}
|
149
|
+
/>
|
150
|
+
|
120
151
|
{extraApplicationPageEntries.map((entry) => (
|
121
152
|
<Route
|
122
153
|
key={entry.key}
|
@@ -128,7 +159,12 @@ const LegendQueryWebApplicationRouter = observer(() => {
|
|
128
159
|
}
|
129
160
|
/>
|
130
161
|
))}
|
131
|
-
|
162
|
+
{/* Redirect to data space view */}
|
163
|
+
<Redirect
|
164
|
+
to={generateExtensionUrlPattern(
|
165
|
+
DATA_SPACE_QUERY_ROUTE_PATTERN.SETUP,
|
166
|
+
)}
|
167
|
+
/>
|
132
168
|
</Switch>
|
133
169
|
)}
|
134
170
|
</div>
|
@@ -47,6 +47,7 @@ import {
|
|
47
47
|
Panel,
|
48
48
|
PanelFullContent,
|
49
49
|
CustomSelectorInput,
|
50
|
+
ArrowCircleUpIcon,
|
50
51
|
} from '@finos/legend-art';
|
51
52
|
import { observer } from 'mobx-react-lite';
|
52
53
|
import { Fragment, useEffect, useMemo, useRef, useState } from 'react';
|
@@ -86,21 +87,28 @@ import {
|
|
86
87
|
type QueryBuilderState,
|
87
88
|
} from '@finos/legend-query-builder';
|
88
89
|
import { QUERY_DOCUMENTATION_KEY } from '../application/LegendQueryDocumentation.js';
|
89
|
-
import {
|
90
|
-
debounce,
|
91
|
-
guaranteeNonNullable,
|
92
|
-
isNonNullable,
|
93
|
-
} from '@finos/legend-shared';
|
90
|
+
import { buildUrl, debounce } from '@finos/legend-shared';
|
94
91
|
import { LegendQueryTelemetryHelper } from '../__lib__/LegendQueryTelemetryHelper.js';
|
95
92
|
import { QUERY_EDITOR_TEST_ID } from '../__lib__/LegendQueryTesting.js';
|
96
93
|
import {
|
97
94
|
compareSemVerVersions,
|
98
95
|
generateGAVCoordinates,
|
96
|
+
parseProjectIdentifier,
|
99
97
|
} from '@finos/legend-storage';
|
100
98
|
import type { Query } from '@finos/legend-graph';
|
101
|
-
import {
|
99
|
+
import {
|
100
|
+
LATEST_VERSION_ALIAS,
|
101
|
+
StoreProjectData,
|
102
|
+
} from '@finos/legend-server-depot';
|
102
103
|
import { buildVersionOption, type VersionOption } from './QuerySetup.js';
|
103
104
|
import { QueryEditorExistingQueryVersionRevertModal } from './QueryEdtiorExistingQueryVersionRevertModal.js';
|
105
|
+
import {
|
106
|
+
DataSpaceQueryBuilderState,
|
107
|
+
generateDataSpaceTemplateQueryPromotionRoute,
|
108
|
+
} from '@finos/legend-extension-dsl-data-space/application';
|
109
|
+
import { getDataSpaceQueryInfo } from './data-space/QueryDataSpaceUtil.js';
|
110
|
+
import { generateDataSpaceQueryCreatorRoute } from '../__lib__/DSL_DataSpace_LegendQueryNavigation.js';
|
111
|
+
import { DataSpaceTemplateQueryCreatorStore } from '../stores/data-space/DataSpaceTemplateQueryCreatorStore.js';
|
104
112
|
|
105
113
|
const CreateQueryDialog = observer(() => {
|
106
114
|
const editorStore = useQueryEditorStore();
|
@@ -602,16 +610,22 @@ const QueryEditorHeaderContent = observer(
|
|
602
610
|
if (editorStore instanceof ExistingQueryEditorStore) {
|
603
611
|
const query = editorStore.query;
|
604
612
|
if (query) {
|
605
|
-
const
|
606
|
-
|
607
|
-
|
608
|
-
|
609
|
-
|
610
|
-
.map((callback) => callback(query, editorStore))
|
611
|
-
.filter(isNonNullable);
|
612
|
-
if (paths.length) {
|
613
|
+
const dataSpacePath = getDataSpaceQueryInfo(query);
|
614
|
+
if (
|
615
|
+
dataSpacePath &&
|
616
|
+
queryBuilderState instanceof DataSpaceQueryBuilderState
|
617
|
+
) {
|
613
618
|
editorStore.applicationStore.navigationService.navigator.goToLocation(
|
614
|
-
|
619
|
+
generateDataSpaceQueryCreatorRoute(
|
620
|
+
query.groupId,
|
621
|
+
query.artifactId,
|
622
|
+
query.versionId,
|
623
|
+
dataSpacePath,
|
624
|
+
// TODO: fix execution key once that is fixed
|
625
|
+
queryBuilderState.executionContext.name,
|
626
|
+
undefined,
|
627
|
+
undefined,
|
628
|
+
),
|
615
629
|
);
|
616
630
|
} else {
|
617
631
|
editorStore.applicationStore.navigationService.navigator.goToLocation(
|
@@ -659,17 +673,21 @@ const QueryEditorHeaderContent = observer(
|
|
659
673
|
existingEditorStore={editorStore}
|
660
674
|
/>
|
661
675
|
);
|
676
|
+
} else if (editorStore instanceof DataSpaceTemplateQueryCreatorStore) {
|
677
|
+
return (
|
678
|
+
<div className="query-editor__dataspace__header">
|
679
|
+
<div className="query-editor__header__content__main query-editor__header__content__title__text query-editor__dataspace__header__title__text">
|
680
|
+
{editorStore.templateQueryTitle}
|
681
|
+
</div>
|
682
|
+
<div className="query-editor__dataspace__header__title__tag">
|
683
|
+
template
|
684
|
+
</div>
|
685
|
+
</div>
|
686
|
+
);
|
662
687
|
}
|
663
|
-
const extensionHeader = applicationStore.pluginManager
|
664
|
-
.getApplicationPlugins()
|
665
|
-
.flatMap((plugin) => plugin.getExtraQueryHeaders?.() ?? [])
|
666
|
-
.map((renderFunc) => renderFunc(editorStore))
|
667
|
-
.find((element) => element !== undefined);
|
668
688
|
|
669
689
|
return (
|
670
|
-
|
671
|
-
<div className="query-editor__header__content__main query-editor__header__content__title" />
|
672
|
-
)
|
690
|
+
<div className="query-editor__header__content__main query-editor__header__content__title" />
|
673
691
|
);
|
674
692
|
};
|
675
693
|
|
@@ -690,6 +708,57 @@ const QueryEditorHeaderContent = observer(
|
|
690
708
|
</MenuContentItem>
|
691
709
|
));
|
692
710
|
|
711
|
+
const proceedCuratedTemplateQueryPromotion = async (): Promise<void> => {
|
712
|
+
if (
|
713
|
+
!(
|
714
|
+
editorStore instanceof ExistingQueryEditorStore &&
|
715
|
+
queryBuilderState instanceof DataSpaceQueryBuilderState
|
716
|
+
)
|
717
|
+
) {
|
718
|
+
return;
|
719
|
+
}
|
720
|
+
// fetch project data
|
721
|
+
const project = StoreProjectData.serialization.fromJson(
|
722
|
+
await editorStore.depotServerClient.getProject(
|
723
|
+
editorStore.lightQuery.groupId,
|
724
|
+
editorStore.lightQuery.artifactId,
|
725
|
+
),
|
726
|
+
);
|
727
|
+
|
728
|
+
// find the matching SDLC instance
|
729
|
+
const projectIDPrefix = parseProjectIdentifier(project.projectId).prefix;
|
730
|
+
const matchingSDLCEntry =
|
731
|
+
editorStore.applicationStore.config.studioInstances.find(
|
732
|
+
(entry) => entry.sdlcProjectIDPrefix === projectIDPrefix,
|
733
|
+
);
|
734
|
+
if (matchingSDLCEntry) {
|
735
|
+
editorStore.applicationStore.navigationService.navigator.visitAddress(
|
736
|
+
buildUrl([
|
737
|
+
editorStore.applicationStore.config.studioApplicationUrl,
|
738
|
+
generateDataSpaceTemplateQueryPromotionRoute(
|
739
|
+
editorStore.lightQuery.groupId,
|
740
|
+
editorStore.lightQuery.artifactId,
|
741
|
+
editorStore.lightQuery.versionId,
|
742
|
+
queryBuilderState.dataSpace.path,
|
743
|
+
editorStore.lightQuery.id,
|
744
|
+
),
|
745
|
+
]),
|
746
|
+
);
|
747
|
+
} else {
|
748
|
+
editorStore.applicationStore.notificationService.notifyWarning(
|
749
|
+
`Can't find the corresponding SDLC instance to productionize the query`,
|
750
|
+
);
|
751
|
+
}
|
752
|
+
};
|
753
|
+
|
754
|
+
const proceedTemplate = (): void => {
|
755
|
+
queryBuilderState.changeDetectionState.alertUnsavedChanges(() => {
|
756
|
+
proceedCuratedTemplateQueryPromotion().catch(
|
757
|
+
editorStore.applicationStore.alertUnhandledError,
|
758
|
+
);
|
759
|
+
});
|
760
|
+
};
|
761
|
+
|
693
762
|
return (
|
694
763
|
<div
|
695
764
|
className="query-editor__header__content"
|
@@ -710,7 +779,26 @@ const QueryEditorHeaderContent = observer(
|
|
710
779
|
{actionConfig.renderer(editorStore, queryBuilderState)}
|
711
780
|
</Fragment>
|
712
781
|
))}
|
713
|
-
|
782
|
+
<>
|
783
|
+
{editorStore instanceof ExistingQueryEditorStore &&
|
784
|
+
queryBuilderState instanceof DataSpaceQueryBuilderState && (
|
785
|
+
<button
|
786
|
+
className="query-editor__header__action btn--dark"
|
787
|
+
tabIndex={-1}
|
788
|
+
onClick={proceedTemplate}
|
789
|
+
title={
|
790
|
+
!(editorStore instanceof ExistingQueryEditorStore)
|
791
|
+
? 'Please save your query first before promoting'
|
792
|
+
: 'Promote Curated Template query...'
|
793
|
+
}
|
794
|
+
>
|
795
|
+
<ArrowCircleUpIcon className="query-editor__header__action__icon--productionize" />
|
796
|
+
<div className="query-editor__header__action__label">
|
797
|
+
Promote as Template Query
|
798
|
+
</div>
|
799
|
+
</button>
|
800
|
+
)}
|
801
|
+
</>
|
714
802
|
<Button
|
715
803
|
className="query-editor__header__action btn--dark"
|
716
804
|
disabled={editorStore.isPerformingBlockingAction}
|