@finos/legend-application-query 13.7.4 → 13.7.5
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/application/LegendQueryApplicationConfig.d.ts +1 -0
- package/lib/application/LegendQueryApplicationConfig.d.ts.map +1 -1
- package/lib/application/LegendQueryApplicationConfig.js +2 -0
- package/lib/application/LegendQueryApplicationConfig.js.map +1 -1
- package/lib/components/Core_LegendQueryApplicationPlugin.d.ts +3 -2
- package/lib/components/Core_LegendQueryApplicationPlugin.d.ts.map +1 -1
- package/lib/components/Core_LegendQueryApplicationPlugin.js +157 -4
- package/lib/components/Core_LegendQueryApplicationPlugin.js.map +1 -1
- package/lib/components/QueryEditor.d.ts.map +1 -1
- package/lib/components/QueryEditor.js +9 -2
- package/lib/components/QueryEditor.js.map +1 -1
- package/lib/components/__test-utils__/QueryEditorComponentTestUtils.d.ts +3 -3
- package/lib/components/__test-utils__/QueryEditorComponentTestUtils.d.ts.map +1 -1
- package/lib/components/__test-utils__/QueryEditorComponentTestUtils.js +39 -10
- package/lib/components/__test-utils__/QueryEditorComponentTestUtils.js.map +1 -1
- package/lib/index.css +1 -1
- package/lib/package.json +1 -1
- package/lib/stores/LegendQueryApplicationPlugin.d.ts +4 -3
- package/lib/stores/LegendQueryApplicationPlugin.d.ts.map +1 -1
- package/lib/stores/LegendQueryApplicationPlugin.js +0 -1
- package/lib/stores/LegendQueryApplicationPlugin.js.map +1 -1
- package/lib/stores/QueryEditorStore.d.ts +13 -2
- package/lib/stores/QueryEditorStore.d.ts.map +1 -1
- package/lib/stores/QueryEditorStore.js +135 -30
- package/lib/stores/QueryEditorStore.js.map +1 -1
- package/lib/stores/data-space/DataSpaceQueryCreatorStore.d.ts +2 -1
- package/lib/stores/data-space/DataSpaceQueryCreatorStore.d.ts.map +1 -1
- package/lib/stores/data-space/DataSpaceQueryCreatorStore.js +8 -12
- package/lib/stores/data-space/DataSpaceQueryCreatorStore.js.map +1 -1
- package/lib/stores/data-space/DataSpaceQuerySetupState.d.ts +1 -0
- package/lib/stores/data-space/DataSpaceQuerySetupState.d.ts.map +1 -1
- package/lib/stores/data-space/DataSpaceQuerySetupState.js +1 -0
- package/lib/stores/data-space/DataSpaceQuerySetupState.js.map +1 -1
- package/lib/stores/data-space/DataSpaceTemplateQueryCreatorStore.d.ts +3 -1
- package/lib/stores/data-space/DataSpaceTemplateQueryCreatorStore.d.ts.map +1 -1
- package/lib/stores/data-space/DataSpaceTemplateQueryCreatorStore.js +41 -24
- package/lib/stores/data-space/DataSpaceTemplateQueryCreatorStore.js.map +1 -1
- package/package.json +9 -9
- package/src/application/LegendQueryApplicationConfig.ts +3 -0
- package/src/components/Core_LegendQueryApplicationPlugin.tsx +281 -7
- package/src/components/QueryEditor.tsx +25 -1
- package/src/components/__test-utils__/QueryEditorComponentTestUtils.tsx +72 -25
- package/src/stores/LegendQueryApplicationPlugin.tsx +6 -5
- package/src/stores/QueryEditorStore.ts +247 -53
- package/src/stores/data-space/DataSpaceQueryCreatorStore.ts +17 -28
- package/src/stores/data-space/DataSpaceQuerySetupState.ts +1 -0
- package/src/stores/data-space/DataSpaceTemplateQueryCreatorStore.ts +73 -51
@@ -15,9 +15,9 @@
|
|
15
15
|
*/
|
16
16
|
|
17
17
|
import {
|
18
|
+
type QuerySetupActionConfiguration,
|
18
19
|
LegendQueryApplicationPlugin,
|
19
20
|
QuerySetupActionTag,
|
20
|
-
type QuerySetupActionConfiguration,
|
21
21
|
} from '../stores/LegendQueryApplicationPlugin.js';
|
22
22
|
import packageJson from '../../package.json' with { type: 'json' };
|
23
23
|
import type { QuerySetupLandingPageStore } from '../stores/QuerySetupStore.js';
|
@@ -50,10 +50,10 @@ import {
|
|
50
50
|
LEGEND_QUERY_ROUTE_PATTERN,
|
51
51
|
} from '../__lib__/LegendQueryNavigation.js';
|
52
52
|
import {
|
53
|
-
ActionAlertActionType,
|
54
|
-
ActionAlertType,
|
55
53
|
type ApplicationPageEntry,
|
56
54
|
type LegendApplicationSetup,
|
55
|
+
ActionAlertActionType,
|
56
|
+
ActionAlertType,
|
57
57
|
} from '@finos/legend-application';
|
58
58
|
import { CloneQueryServiceSetup } from './CloneQueryServiceSetup.js';
|
59
59
|
import { QueryProductionizerSetup } from './QueryProductionizerSetup.js';
|
@@ -65,9 +65,11 @@ import {
|
|
65
65
|
generateDataSpaceQuerySetupRoute,
|
66
66
|
} from '../__lib__/DSL_DataSpace_LegendQueryNavigation.js';
|
67
67
|
import {
|
68
|
-
|
68
|
+
type QueryBuilderState,
|
69
69
|
type QueryBuilderHeaderActionConfiguration,
|
70
70
|
type QueryBuilderMenuActionConfiguration,
|
71
|
+
type QueryBuilderPropagateExecutionContextChangeHelper,
|
72
|
+
QUERY_BUILDER_SUPPORTED_GET_ALL_FUNCTIONS,
|
71
73
|
} from '@finos/legend-query-builder';
|
72
74
|
import {
|
73
75
|
ExistingQueryEditorStore,
|
@@ -75,18 +77,48 @@ import {
|
|
75
77
|
} from '../stores/QueryEditorStore.js';
|
76
78
|
import {
|
77
79
|
DataSpaceQueryBuilderState,
|
80
|
+
DataSpacesDepotRepository,
|
78
81
|
generateDataSpaceTemplateQueryPromotionRoute,
|
79
82
|
} from '@finos/legend-extension-dsl-data-space/application';
|
80
|
-
import {
|
83
|
+
import {
|
84
|
+
createGraphBuilderReport,
|
85
|
+
GRAPH_MANAGER_EVENT,
|
86
|
+
LegendSDLC,
|
87
|
+
PackageableElementPointerType,
|
88
|
+
resolvePackagePathAndElementName,
|
89
|
+
RuntimePointer,
|
90
|
+
V1_EngineRuntime,
|
91
|
+
V1_Mapping,
|
92
|
+
V1_PackageableElementPointer,
|
93
|
+
V1_PackageableRuntime,
|
94
|
+
V1_PureGraphManager,
|
95
|
+
} from '@finos/legend-graph';
|
81
96
|
import { LegendQueryTelemetryHelper } from '../__lib__/LegendQueryTelemetryHelper.js';
|
82
|
-
import { StoreProjectData } from '@finos/legend-server-depot';
|
83
|
-
import {
|
97
|
+
import { resolveVersion, StoreProjectData } from '@finos/legend-server-depot';
|
98
|
+
import {
|
99
|
+
ActionState,
|
100
|
+
assertErrorThrown,
|
101
|
+
buildUrl,
|
102
|
+
getNullableFirstEntry,
|
103
|
+
guaranteeNonNullable,
|
104
|
+
guaranteeType,
|
105
|
+
LogEvent,
|
106
|
+
StopWatch,
|
107
|
+
uniq,
|
108
|
+
} from '@finos/legend-shared';
|
84
109
|
import { parseProjectIdentifier } from '@finos/legend-storage';
|
85
110
|
import { QueryEditorExistingQueryHeader } from './QueryEditor.js';
|
86
111
|
import { DataSpaceTemplateQueryCreatorStore } from '../stores/data-space/DataSpaceTemplateQueryCreatorStore.js';
|
87
112
|
import { createViewSDLCProjectHandler } from '../stores/data-space/DataSpaceQueryBuilderHelper.js';
|
88
113
|
import { DataSpaceQueryCreatorStore } from '../stores/data-space/DataSpaceQueryCreatorStore.js';
|
89
114
|
import { configureCodeEditorComponent } from '@finos/legend-lego/code-editor';
|
115
|
+
import {
|
116
|
+
resolveUsableDataSpaceClasses,
|
117
|
+
V1_DataSpace,
|
118
|
+
V1_DataSpaceExecutionContext,
|
119
|
+
} from '@finos/legend-extension-dsl-data-space/graph';
|
120
|
+
import { flowResult } from 'mobx';
|
121
|
+
import { LEGEND_QUERY_APP_EVENT } from '../__lib__/LegendQueryEvent.js';
|
90
122
|
|
91
123
|
export class Core_LegendQueryApplicationPlugin extends LegendQueryApplicationPlugin {
|
92
124
|
static NAME = packageJson.extensions.applicationQueryPlugin;
|
@@ -725,4 +757,246 @@ export class Core_LegendQueryApplicationPlugin extends LegendQueryApplicationPlu
|
|
725
757
|
},
|
726
758
|
};
|
727
759
|
}
|
760
|
+
|
761
|
+
getExtraQueryBuilderPropagateExecutionContextChangeHelper?(): QueryBuilderPropagateExecutionContextChangeHelper[] {
|
762
|
+
return [
|
763
|
+
(
|
764
|
+
queryBuilderState: QueryBuilderState,
|
765
|
+
isGraphBuildingNotRequired?: boolean,
|
766
|
+
): (() => Promise<void>) | undefined => {
|
767
|
+
/**
|
768
|
+
* Propagation after changing the execution context:
|
769
|
+
* - The mapping will be updated to the mapping of the execution context
|
770
|
+
* - The runtime will be updated to the default runtime of the execution context
|
771
|
+
* - If no class is chosen, try to choose a compatible class
|
772
|
+
* - If the chosen class is compatible with the new selected execution context mapping, do nothing, otherwise, try to choose a compatible class
|
773
|
+
*/
|
774
|
+
const propagateExecutionContextChange = async (): Promise<void> => {
|
775
|
+
const dataSpaceQueryBuilderState = guaranteeType(
|
776
|
+
queryBuilderState,
|
777
|
+
DataSpaceQueryBuilderState,
|
778
|
+
);
|
779
|
+
const mapping =
|
780
|
+
dataSpaceQueryBuilderState.executionContext.mapping.value;
|
781
|
+
const mappingModelCoverageAnalysisResult =
|
782
|
+
dataSpaceQueryBuilderState.dataSpaceAnalysisResult?.mappingToMappingCoverageResult?.get(
|
783
|
+
mapping.path,
|
784
|
+
);
|
785
|
+
const editorStore = (
|
786
|
+
queryBuilderState.workflowState
|
787
|
+
.actionConfig as QueryBuilderActionConfig_QueryApplication
|
788
|
+
).editorStore;
|
789
|
+
if (
|
790
|
+
dataSpaceQueryBuilderState.dataSpaceAnalysisResult &&
|
791
|
+
mappingModelCoverageAnalysisResult
|
792
|
+
) {
|
793
|
+
if (
|
794
|
+
!isGraphBuildingNotRequired &&
|
795
|
+
dataSpaceQueryBuilderState.isLightGraphEnabled
|
796
|
+
) {
|
797
|
+
const supportBuildMinimalGraph =
|
798
|
+
editorStore.applicationStore.config.options
|
799
|
+
.TEMPORARY__enableMinimalGraph;
|
800
|
+
if (
|
801
|
+
editorStore.enableMinialGraphForDataSpaceLoadingPerformance &&
|
802
|
+
supportBuildMinimalGraph
|
803
|
+
) {
|
804
|
+
try {
|
805
|
+
const stopWatch = new StopWatch();
|
806
|
+
const graph =
|
807
|
+
dataSpaceQueryBuilderState.graphManagerState.createNewGraph();
|
808
|
+
const graph_buildReport = createGraphBuilderReport();
|
809
|
+
const graphManager = guaranteeType(
|
810
|
+
dataSpaceQueryBuilderState.graphManagerState.graphManager,
|
811
|
+
V1_PureGraphManager,
|
812
|
+
);
|
813
|
+
// Create dummy mappings and runtimes
|
814
|
+
// TODO?: these stubbed mappings and runtimes are not really useful that useful, so either we should
|
815
|
+
// simplify the model here or potentially refactor the backend analytics endpoint to return these as model
|
816
|
+
const mappingModels = uniq(
|
817
|
+
Array.from(
|
818
|
+
dataSpaceQueryBuilderState.dataSpaceAnalysisResult.executionContextsIndex.values(),
|
819
|
+
).map((context) => context.mapping),
|
820
|
+
).map((m) => {
|
821
|
+
const _mapping = new V1_Mapping();
|
822
|
+
const [packagePath, name] =
|
823
|
+
resolvePackagePathAndElementName(m.path);
|
824
|
+
_mapping.package = packagePath;
|
825
|
+
_mapping.name = name;
|
826
|
+
return graphManager.elementProtocolToEntity(_mapping);
|
827
|
+
});
|
828
|
+
const runtimeModels = uniq(
|
829
|
+
Array.from(
|
830
|
+
dataSpaceQueryBuilderState.dataSpaceAnalysisResult.executionContextsIndex.values(),
|
831
|
+
)
|
832
|
+
.map((context) => context.defaultRuntime)
|
833
|
+
.concat(
|
834
|
+
Array.from(
|
835
|
+
dataSpaceQueryBuilderState.dataSpaceAnalysisResult.executionContextsIndex.values(),
|
836
|
+
).flatMap((val) => val.compatibleRuntimes),
|
837
|
+
),
|
838
|
+
).map((r) => {
|
839
|
+
const runtime = new V1_PackageableRuntime();
|
840
|
+
const [packagePath, name] =
|
841
|
+
resolvePackagePathAndElementName(r.path);
|
842
|
+
runtime.package = packagePath;
|
843
|
+
runtime.name = name;
|
844
|
+
runtime.runtimeValue = new V1_EngineRuntime();
|
845
|
+
return graphManager.elementProtocolToEntity(runtime);
|
846
|
+
});
|
847
|
+
// The DataSpace entity is excluded from AnalyticsResult.Json to reduce the JSON size
|
848
|
+
// because all its information can be found in V1_DataSpaceAnalysisResult.
|
849
|
+
// Therefore, we are building a simple v1_DataSpace entity based on V1_DataSpaceAnalysisResult.
|
850
|
+
const dataspaceProtocol = new V1_DataSpace();
|
851
|
+
dataspaceProtocol.name =
|
852
|
+
dataSpaceQueryBuilderState.dataSpaceAnalysisResult.name;
|
853
|
+
dataspaceProtocol.package =
|
854
|
+
dataSpaceQueryBuilderState.dataSpaceAnalysisResult.package;
|
855
|
+
dataspaceProtocol.supportInfo =
|
856
|
+
dataSpaceQueryBuilderState.dataSpaceAnalysisResult.supportInfo;
|
857
|
+
dataspaceProtocol.executionContexts = Array.from(
|
858
|
+
dataSpaceQueryBuilderState.dataSpaceAnalysisResult
|
859
|
+
.executionContextsIndex,
|
860
|
+
).map(([key, execContext]) => {
|
861
|
+
const contextProtocol = new V1_DataSpaceExecutionContext();
|
862
|
+
contextProtocol.name = execContext.name;
|
863
|
+
contextProtocol.title = execContext.title;
|
864
|
+
contextProtocol.description = execContext.description;
|
865
|
+
contextProtocol.mapping = new V1_PackageableElementPointer(
|
866
|
+
PackageableElementPointerType.MAPPING,
|
867
|
+
execContext.mapping.path,
|
868
|
+
);
|
869
|
+
contextProtocol.defaultRuntime =
|
870
|
+
new V1_PackageableElementPointer(
|
871
|
+
PackageableElementPointerType.RUNTIME,
|
872
|
+
execContext.defaultRuntime.path,
|
873
|
+
);
|
874
|
+
return contextProtocol;
|
875
|
+
});
|
876
|
+
dataspaceProtocol.defaultExecutionContext =
|
877
|
+
dataSpaceQueryBuilderState.dataSpaceAnalysisResult.defaultExecutionContext.name;
|
878
|
+
dataspaceProtocol.title =
|
879
|
+
dataSpaceQueryBuilderState.dataSpaceAnalysisResult.title;
|
880
|
+
dataspaceProtocol.description =
|
881
|
+
dataSpaceQueryBuilderState.dataSpaceAnalysisResult.description;
|
882
|
+
const dataspaceEntity =
|
883
|
+
graphManager.elementProtocolToEntity(dataspaceProtocol);
|
884
|
+
|
885
|
+
const graphEntities = guaranteeNonNullable(
|
886
|
+
mappingModelCoverageAnalysisResult.entities,
|
887
|
+
)
|
888
|
+
.concat(mappingModels)
|
889
|
+
.concat(runtimeModels)
|
890
|
+
.concat(dataspaceEntity)
|
891
|
+
// NOTE: if an element could be found in the graph already it means it comes from system
|
892
|
+
// so we could rid of it
|
893
|
+
.filter(
|
894
|
+
(el) =>
|
895
|
+
!graph.getNullableElement(el.path, false) &&
|
896
|
+
!el.path.startsWith('meta::'),
|
897
|
+
);
|
898
|
+
let option;
|
899
|
+
if (
|
900
|
+
dataSpaceQueryBuilderState.dataSpaceRepo instanceof
|
901
|
+
DataSpacesDepotRepository
|
902
|
+
) {
|
903
|
+
option = new LegendSDLC(
|
904
|
+
dataSpaceQueryBuilderState.dataSpaceRepo.project.groupId,
|
905
|
+
dataSpaceQueryBuilderState.dataSpaceRepo.project.artifactId,
|
906
|
+
resolveVersion(
|
907
|
+
dataSpaceQueryBuilderState.dataSpaceRepo.project
|
908
|
+
.versionId,
|
909
|
+
),
|
910
|
+
);
|
911
|
+
}
|
912
|
+
await dataSpaceQueryBuilderState.graphManagerState.graphManager.buildGraph(
|
913
|
+
graph,
|
914
|
+
graphEntities,
|
915
|
+
ActionState.create(),
|
916
|
+
option
|
917
|
+
? {
|
918
|
+
origin: option,
|
919
|
+
}
|
920
|
+
: {},
|
921
|
+
graph_buildReport,
|
922
|
+
);
|
923
|
+
dataSpaceQueryBuilderState.graphManagerState.graph = graph;
|
924
|
+
const dependency_buildReport = createGraphBuilderReport();
|
925
|
+
// report
|
926
|
+
stopWatch.record(
|
927
|
+
GRAPH_MANAGER_EVENT.INITIALIZE_GRAPH__SUCCESS,
|
928
|
+
);
|
929
|
+
const graphBuilderReportData = {
|
930
|
+
timings:
|
931
|
+
dataSpaceQueryBuilderState.applicationStore.timeService.finalizeTimingsRecord(
|
932
|
+
stopWatch,
|
933
|
+
),
|
934
|
+
dependencies: dependency_buildReport,
|
935
|
+
dependenciesCount:
|
936
|
+
dataSpaceQueryBuilderState.graphManagerState.graph
|
937
|
+
.dependencyManager.numberOfDependencies,
|
938
|
+
graph: graph_buildReport,
|
939
|
+
};
|
940
|
+
editorStore.logBuildGraphMetrics(graphBuilderReportData);
|
941
|
+
dataSpaceQueryBuilderState.applicationStore.logService.info(
|
942
|
+
LogEvent.create(
|
943
|
+
GRAPH_MANAGER_EVENT.INITIALIZE_GRAPH__SUCCESS,
|
944
|
+
),
|
945
|
+
graphBuilderReportData,
|
946
|
+
);
|
947
|
+
} catch (error) {
|
948
|
+
assertErrorThrown(error);
|
949
|
+
editorStore.applicationStore.logService.error(
|
950
|
+
LogEvent.create(LEGEND_QUERY_APP_EVENT.GENERIC_FAILURE),
|
951
|
+
error,
|
952
|
+
);
|
953
|
+
editorStore.graphManagerState.graph =
|
954
|
+
editorStore.graphManagerState.createNewGraph();
|
955
|
+
await flowResult(editorStore.buildFullGraph());
|
956
|
+
}
|
957
|
+
} else {
|
958
|
+
editorStore.graphManagerState.graph =
|
959
|
+
editorStore.graphManagerState.createNewGraph();
|
960
|
+
await flowResult(editorStore.buildFullGraph());
|
961
|
+
}
|
962
|
+
}
|
963
|
+
dataSpaceQueryBuilderState.explorerState.mappingModelCoverageAnalysisResult =
|
964
|
+
mappingModelCoverageAnalysisResult;
|
965
|
+
}
|
966
|
+
const compatibleClasses = resolveUsableDataSpaceClasses(
|
967
|
+
dataSpaceQueryBuilderState.dataSpace,
|
968
|
+
mapping,
|
969
|
+
dataSpaceQueryBuilderState.graphManagerState,
|
970
|
+
dataSpaceQueryBuilderState,
|
971
|
+
);
|
972
|
+
dataSpaceQueryBuilderState.changeMapping(mapping);
|
973
|
+
dataSpaceQueryBuilderState.changeRuntime(
|
974
|
+
new RuntimePointer(
|
975
|
+
dataSpaceQueryBuilderState.executionContext.defaultRuntime,
|
976
|
+
),
|
977
|
+
);
|
978
|
+
// if there is no chosen class or the chosen one is not compatible
|
979
|
+
// with the mapping then pick a compatible class if possible
|
980
|
+
if (
|
981
|
+
!dataSpaceQueryBuilderState.class ||
|
982
|
+
!compatibleClasses.includes(dataSpaceQueryBuilderState.class)
|
983
|
+
) {
|
984
|
+
const possibleNewClass = getNullableFirstEntry(compatibleClasses);
|
985
|
+
if (possibleNewClass) {
|
986
|
+
dataSpaceQueryBuilderState.changeClass(possibleNewClass);
|
987
|
+
}
|
988
|
+
}
|
989
|
+
dataSpaceQueryBuilderState.explorerState.refreshTreeData();
|
990
|
+
};
|
991
|
+
if (
|
992
|
+
queryBuilderState instanceof DataSpaceQueryBuilderState &&
|
993
|
+
queryBuilderState.workflowState.actionConfig instanceof
|
994
|
+
QueryBuilderActionConfig_QueryApplication
|
995
|
+
) {
|
996
|
+
return propagateExecutionContextChange;
|
997
|
+
}
|
998
|
+
return undefined;
|
999
|
+
},
|
1000
|
+
];
|
1001
|
+
}
|
728
1002
|
}
|
@@ -605,6 +605,12 @@ export const QueryEditor = observer(() => {
|
|
605
605
|
!engineConfig.useClientRequestPayloadCompression,
|
606
606
|
);
|
607
607
|
|
608
|
+
const toggleEnableMinialGraphForDataSpaceLoadingPerformance = (): void => {
|
609
|
+
editorStore.setEnableMinialGraphForDataSpaceLoadingPerformance(
|
610
|
+
!editorStore.enableMinialGraphForDataSpaceLoadingPerformance,
|
611
|
+
);
|
612
|
+
};
|
613
|
+
|
608
614
|
const TEMPORARY__toggleLightDarkMode = (): void => {
|
609
615
|
applicationStore.layoutService.setColorTheme(
|
610
616
|
applicationStore.layoutService.TEMPORARY__isLightColorThemeEnabled
|
@@ -629,7 +635,11 @@ export const QueryEditor = observer(() => {
|
|
629
635
|
applicationStore.alertUnhandledError,
|
630
636
|
);
|
631
637
|
applicationStore.releaseNotesService.updateViewedVersion();
|
632
|
-
}, [
|
638
|
+
}, [
|
639
|
+
editorStore,
|
640
|
+
applicationStore,
|
641
|
+
editorStore.enableMinialGraphForDataSpaceLoadingPerformance,
|
642
|
+
]);
|
633
643
|
|
634
644
|
return (
|
635
645
|
<div className="query-editor">
|
@@ -676,6 +686,20 @@ export const QueryEditor = observer(() => {
|
|
676
686
|
Compress request payload
|
677
687
|
</MenuContentItemLabel>
|
678
688
|
</MenuContentItem>
|
689
|
+
<MenuContentItem
|
690
|
+
onClick={
|
691
|
+
toggleEnableMinialGraphForDataSpaceLoadingPerformance
|
692
|
+
}
|
693
|
+
>
|
694
|
+
<MenuContentItemIcon>
|
695
|
+
{editorStore.enableMinialGraphForDataSpaceLoadingPerformance ? (
|
696
|
+
<CheckIcon />
|
697
|
+
) : null}
|
698
|
+
</MenuContentItemIcon>
|
699
|
+
<MenuContentItemLabel>
|
700
|
+
Enable minimal graph
|
701
|
+
</MenuContentItemLabel>
|
702
|
+
</MenuContentItem>
|
679
703
|
</MenuContent>
|
680
704
|
}
|
681
705
|
>
|
@@ -25,12 +25,15 @@ import { createMock, createSpy } from '@finos/legend-shared/test';
|
|
25
25
|
import {
|
26
26
|
type GraphManagerState,
|
27
27
|
type RawMappingModelCoverageAnalysisResult,
|
28
|
+
type QueryInfo,
|
28
29
|
Query,
|
29
30
|
LightQuery,
|
30
31
|
RawLambda,
|
31
|
-
PackageableElementExplicitReference,
|
32
32
|
QueryExplicitExecutionContext,
|
33
33
|
QueryDataSpaceExecutionContext,
|
34
|
+
PackageableElementExplicitReference,
|
35
|
+
QueryDataSpaceExecutionContextInfo,
|
36
|
+
QueryExplicitExecutionContextInfo,
|
34
37
|
} from '@finos/legend-graph';
|
35
38
|
import { DepotServerClient } from '@finos/legend-server-depot';
|
36
39
|
import {
|
@@ -40,7 +43,11 @@ import {
|
|
40
43
|
import { TEST__getTestLegendQueryApplicationConfig } from '../../stores/__test-utils__/LegendQueryApplicationTestUtils.js';
|
41
44
|
import { LegendQueryPluginManager } from '../../application/LegendQueryPluginManager.js';
|
42
45
|
import { ExistingQueryEditor } from '../QueryEditor.js';
|
43
|
-
import type {
|
46
|
+
import type {
|
47
|
+
EntitiesWithOrigin,
|
48
|
+
Entity,
|
49
|
+
StoredFileGeneration,
|
50
|
+
} from '@finos/legend-storage';
|
44
51
|
import { ExistingQueryEditorStore } from '../../stores/QueryEditorStore.js';
|
45
52
|
import type { LegendQueryApplicationStore } from '../../stores/LegendQueryBaseStore.js';
|
46
53
|
import {
|
@@ -104,7 +111,7 @@ export const TEST__provideMockedQueryEditorStore = (customization?: {
|
|
104
111
|
|
105
112
|
export const TEST__setUpQueryEditor = async (
|
106
113
|
MOCK__editorStore: ExistingQueryEditorStore,
|
107
|
-
entities: Entity[],
|
114
|
+
entities: PlainObject<Entity>[],
|
108
115
|
lambda: RawLambda,
|
109
116
|
mappingPath: string,
|
110
117
|
runtimePath: string,
|
@@ -142,7 +149,7 @@ export const TEST__setUpQueryEditor = async (
|
|
142
149
|
await graphManagerState.initializeSystem();
|
143
150
|
await graphManagerState.graphManager.buildGraph(
|
144
151
|
graphManagerState.graph,
|
145
|
-
entities,
|
152
|
+
entities as unknown as Entity[],
|
146
153
|
graphManagerState.graphBuildState,
|
147
154
|
);
|
148
155
|
|
@@ -162,13 +169,36 @@ export const TEST__setUpQueryEditor = async (
|
|
162
169
|
);
|
163
170
|
query.executionContext = execContext;
|
164
171
|
query.content = 'some content';
|
172
|
+
|
173
|
+
const execContextInfo = new QueryExplicitExecutionContextInfo();
|
174
|
+
execContextInfo.mapping = mappingPath;
|
175
|
+
execContextInfo.runtime = runtimePath;
|
176
|
+
|
177
|
+
const queryInfo: QueryInfo = {
|
178
|
+
name: TEST_QUERY_NAME,
|
179
|
+
id: TEST_QUERY_ID,
|
180
|
+
versionId: '0.0.0',
|
181
|
+
groupId: 'test.group',
|
182
|
+
artifactId: 'test-artifact',
|
183
|
+
executionContext: execContextInfo,
|
184
|
+
content: 'some content',
|
185
|
+
isCurrentUserQuery: true,
|
186
|
+
};
|
187
|
+
|
165
188
|
createSpy(
|
166
189
|
MOCK__editorStore.depotServerClient,
|
167
190
|
'getProject',
|
168
191
|
).mockResolvedValue(projectData);
|
192
|
+
createSpy(
|
193
|
+
MOCK__editorStore.depotServerClient,
|
194
|
+
'getEntities',
|
195
|
+
).mockResolvedValue(entities);
|
169
196
|
createSpy(graphManagerState.graphManager, 'getLightQuery').mockResolvedValue(
|
170
197
|
lightQuery,
|
171
198
|
);
|
199
|
+
createSpy(graphManagerState.graphManager, 'getQueryInfo').mockResolvedValue(
|
200
|
+
queryInfo,
|
201
|
+
);
|
172
202
|
createSpy(
|
173
203
|
graphManagerState.graphManager,
|
174
204
|
'pureCodeToLambda',
|
@@ -222,16 +252,23 @@ export const TEST__setUpQueryEditor = async (
|
|
222
252
|
|
223
253
|
export const TEST__setUpDataSpaceExistingQueryEditor = async (
|
224
254
|
MOCK__editorStore: ExistingQueryEditorStore,
|
225
|
-
|
255
|
+
V1_dataspaceAnalyticsResult: PlainObject<V1_DataSpaceAnalysisResult>,
|
226
256
|
dataSpacePath: string,
|
227
257
|
executionContext: string,
|
228
258
|
lambda: RawLambda,
|
229
259
|
mappingPath: string,
|
230
|
-
entities: Entity[],
|
260
|
+
entities: PlainObject<Entity>[],
|
261
|
+
buildWithMinimalGraph = false,
|
262
|
+
V1_dataspaceArtifacts: PlainObject<StoredFileGeneration>[] = [],
|
231
263
|
): Promise<{
|
232
264
|
renderResult: RenderResult;
|
233
265
|
queryBuilderState: QueryBuilderState;
|
234
266
|
}> => {
|
267
|
+
if (buildWithMinimalGraph) {
|
268
|
+
MOCK__editorStore.applicationStore.config.options.TEMPORARY__enableMinimalGraph =
|
269
|
+
true;
|
270
|
+
}
|
271
|
+
|
235
272
|
const projectData = {
|
236
273
|
id: 'test-id',
|
237
274
|
groupId: 'test.group',
|
@@ -259,11 +296,6 @@ export const TEST__setUpDataSpaceExistingQueryEditor = async (
|
|
259
296
|
});
|
260
297
|
|
261
298
|
await graphManagerState.initializeSystem();
|
262
|
-
await graphManagerState.graphManager.buildGraph(
|
263
|
-
graphManagerState.graph,
|
264
|
-
entities,
|
265
|
-
graphManagerState.graphBuildState,
|
266
|
-
);
|
267
299
|
|
268
300
|
const query = new Query();
|
269
301
|
query.name = lightQuery.name;
|
@@ -278,6 +310,22 @@ export const TEST__setUpDataSpaceExistingQueryEditor = async (
|
|
278
310
|
execContext.executionKey = executionContext;
|
279
311
|
query.executionContext = execContext;
|
280
312
|
query.content = 'some content';
|
313
|
+
|
314
|
+
const execContextInfo = new QueryDataSpaceExecutionContextInfo();
|
315
|
+
execContextInfo.dataSpacePath = dataSpacePath;
|
316
|
+
execContextInfo.executionKey = executionContext;
|
317
|
+
|
318
|
+
const queryInfo: QueryInfo = {
|
319
|
+
name: TEST_QUERY_NAME,
|
320
|
+
id: TEST_QUERY_ID,
|
321
|
+
versionId: '0.0.0',
|
322
|
+
groupId: 'test.group',
|
323
|
+
artifactId: 'test-artifact',
|
324
|
+
executionContext: execContextInfo,
|
325
|
+
content: 'some content',
|
326
|
+
isCurrentUserQuery: true,
|
327
|
+
};
|
328
|
+
|
281
329
|
createSpy(
|
282
330
|
MOCK__editorStore.depotServerClient,
|
283
331
|
'getProject',
|
@@ -285,7 +333,7 @@ export const TEST__setUpDataSpaceExistingQueryEditor = async (
|
|
285
333
|
createSpy(
|
286
334
|
MOCK__editorStore.depotServerClient,
|
287
335
|
'getEntities',
|
288
|
-
).mockResolvedValue([]);
|
336
|
+
).mockResolvedValue(buildWithMinimalGraph ? [] : entities);
|
289
337
|
createSpy(
|
290
338
|
MOCK__editorStore.depotServerClient,
|
291
339
|
'getIndexedDependencyEntities',
|
@@ -294,6 +342,14 @@ export const TEST__setUpDataSpaceExistingQueryEditor = async (
|
|
294
342
|
MOCK__editorStore.depotServerClient,
|
295
343
|
'getEntitiesByClassifier',
|
296
344
|
).mockResolvedValue([]);
|
345
|
+
createSpy(
|
346
|
+
MOCK__editorStore.depotServerClient,
|
347
|
+
'getGenerationContentByPath',
|
348
|
+
).mockResolvedValue(JSON.stringify(V1_dataspaceAnalyticsResult));
|
349
|
+
createSpy(
|
350
|
+
MOCK__editorStore.depotServerClient,
|
351
|
+
'getGenerationFilesByType',
|
352
|
+
).mockResolvedValue(V1_dataspaceArtifacts);
|
297
353
|
createSpy(graphManagerState.graphManager, 'getLightQuery').mockResolvedValue(
|
298
354
|
lightQuery,
|
299
355
|
);
|
@@ -308,10 +364,9 @@ export const TEST__setUpDataSpaceExistingQueryEditor = async (
|
|
308
364
|
createSpy(graphManagerState.graphManager, 'getQuery').mockResolvedValue(
|
309
365
|
query,
|
310
366
|
);
|
311
|
-
createSpy(
|
312
|
-
|
313
|
-
|
314
|
-
).mockResolvedValue('');
|
367
|
+
createSpy(graphManagerState.graphManager, 'getQueryInfo').mockResolvedValue(
|
368
|
+
queryInfo,
|
369
|
+
);
|
315
370
|
createSpy(graphManagerState.graphManager, 'surveyDatasets').mockResolvedValue(
|
316
371
|
[],
|
317
372
|
);
|
@@ -325,20 +380,12 @@ export const TEST__setUpDataSpaceExistingQueryEditor = async (
|
|
325
380
|
);
|
326
381
|
const dataspaceAnalyticsResult =
|
327
382
|
await graphManagerExtension.buildDataSpaceAnalytics(
|
328
|
-
|
383
|
+
V1_dataspaceAnalyticsResult,
|
329
384
|
graphManagerState.graphManager.pluginManager.getPureProtocolProcessorPlugins(),
|
330
385
|
);
|
331
386
|
createSpy(graphManagerExtension, 'analyzeDataSpace').mockResolvedValue(
|
332
387
|
dataspaceAnalyticsResult,
|
333
388
|
);
|
334
|
-
const mappingAnalyticsResult =
|
335
|
-
dataspaceAnalyticsResult.mappingToMappingCoverageResult?.get(mappingPath);
|
336
|
-
if (mappingAnalyticsResult) {
|
337
|
-
createSpy(
|
338
|
-
graphManagerState.graphManager,
|
339
|
-
'analyzeMappingModelCoverage',
|
340
|
-
).mockResolvedValue(mappingAnalyticsResult);
|
341
|
-
}
|
342
389
|
|
343
390
|
MOCK__editorStore.buildGraph = createMock();
|
344
391
|
graphManagerState.graphManager.initialize = createMock();
|
@@ -15,17 +15,18 @@
|
|
15
15
|
*/
|
16
16
|
|
17
17
|
import { LegendApplicationPlugin } from '@finos/legend-application';
|
18
|
-
import type { Query } from '@finos/legend-graph';
|
19
18
|
import type {
|
20
|
-
QueryBuilderState,
|
21
19
|
QueryBuilder_LegendApplicationPlugin_Extension,
|
20
|
+
QueryBuilderState,
|
22
21
|
} from '@finos/legend-query-builder';
|
22
|
+
import type React from 'react';
|
23
23
|
import type { LegendQueryPluginManager } from '../application/LegendQueryPluginManager.js';
|
24
|
-
import {
|
25
|
-
|
26
|
-
|
24
|
+
import type {
|
25
|
+
ExistingQueryEditorStore,
|
26
|
+
QueryEditorStore,
|
27
27
|
} from './QueryEditorStore.js';
|
28
28
|
import type { QuerySetupLandingPageStore } from './QuerySetupStore.js';
|
29
|
+
import type { Query } from '@finos/legend-graph';
|
29
30
|
|
30
31
|
export enum QuerySetupActionTag {
|
31
32
|
PRODUCTIONIZATION = 'Productionization',
|