@finos/legend-application-studio 15.2.0 → 16.0.1
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/LegendStudio.d.ts.map +1 -1
- package/lib/application/LegendStudio.js +5 -2
- package/lib/application/LegendStudio.js.map +1 -1
- package/lib/application/LegendStudioPluginManager.js +2 -2
- package/lib/application/LegendStudioPluginManager.js.map +1 -1
- package/lib/components/DSLExternalFormat_LegendStudioApplicationPlugin.d.ts +4 -4
- package/lib/components/DSLExternalFormat_LegendStudioApplicationPlugin.d.ts.map +1 -1
- package/lib/components/DSLExternalFormat_LegendStudioApplicationPlugin.js +3 -3
- package/lib/components/DSLExternalFormat_LegendStudioApplicationPlugin.js.map +1 -1
- package/lib/components/EditorComponentTestUtils.d.ts +10 -2
- package/lib/components/EditorComponentTestUtils.d.ts.map +1 -1
- package/lib/components/EditorComponentTestUtils.js +24 -18
- package/lib/components/EditorComponentTestUtils.js.map +1 -1
- package/lib/components/EmbeddedQueryBuilder.d.ts +19 -0
- package/lib/components/EmbeddedQueryBuilder.d.ts.map +1 -0
- package/lib/components/EmbeddedQueryBuilder.js +80 -0
- package/lib/components/EmbeddedQueryBuilder.js.map +1 -0
- package/lib/components/LegendStudioApplication.d.ts +0 -1
- package/lib/components/LegendStudioApplication.d.ts.map +1 -1
- package/lib/components/editor/Editor.d.ts.map +1 -1
- package/lib/components/editor/Editor.js +12 -13
- package/lib/components/editor/Editor.js.map +1 -1
- package/lib/components/editor/StatusBar.d.ts +0 -1
- package/lib/components/editor/StatusBar.d.ts.map +1 -1
- package/lib/components/editor/aux-panel/AuxiliaryPanel.d.ts +0 -1
- package/lib/components/editor/aux-panel/AuxiliaryPanel.d.ts.map +1 -1
- package/lib/components/editor/aux-panel/Console.d.ts +0 -1
- package/lib/components/editor/aux-panel/Console.d.ts.map +1 -1
- package/lib/components/editor/aux-panel/DevTool.d.ts +0 -1
- package/lib/components/editor/aux-panel/DevTool.d.ts.map +1 -1
- package/lib/components/editor/command-center/ProjectSearchCommand.d.ts +0 -1
- package/lib/components/editor/command-center/ProjectSearchCommand.d.ts.map +1 -1
- package/lib/components/editor/edit-panel/FileGenerationViewer.d.ts +0 -1
- package/lib/components/editor/edit-panel/FileGenerationViewer.d.ts.map +1 -1
- package/lib/components/editor/edit-panel/FunctionEditor.d.ts +0 -1
- package/lib/components/editor/edit-panel/FunctionEditor.d.ts.map +1 -1
- package/lib/components/editor/edit-panel/GenerationSpecificationEditor.d.ts +0 -1
- package/lib/components/editor/edit-panel/GenerationSpecificationEditor.d.ts.map +1 -1
- package/lib/components/editor/edit-panel/GrammarTextEditor.d.ts.map +1 -1
- package/lib/components/editor/edit-panel/GrammarTextEditor.js +15 -3
- package/lib/components/editor/edit-panel/GrammarTextEditor.js.map +1 -1
- package/lib/components/editor/edit-panel/ModelImporter.d.ts +0 -1
- package/lib/components/editor/edit-panel/ModelImporter.d.ts.map +1 -1
- package/lib/components/editor/edit-panel/RuntimeEditor.d.ts +0 -1
- package/lib/components/editor/edit-panel/RuntimeEditor.d.ts.map +1 -1
- package/lib/components/editor/edit-panel/UnsupportedElementEditor.d.ts +0 -1
- package/lib/components/editor/edit-panel/UnsupportedElementEditor.d.ts.map +1 -1
- package/lib/components/editor/edit-panel/connection-editor/ConnectionEditor.d.ts +0 -1
- package/lib/components/editor/edit-panel/connection-editor/ConnectionEditor.d.ts.map +1 -1
- package/lib/components/editor/edit-panel/connection-editor/DatabaseBuilder.d.ts +0 -1
- package/lib/components/editor/edit-panel/connection-editor/DatabaseBuilder.d.ts.map +1 -1
- package/lib/components/editor/edit-panel/connection-editor/FlatDataConnectionEditor.d.ts +0 -1
- package/lib/components/editor/edit-panel/connection-editor/FlatDataConnectionEditor.d.ts.map +1 -1
- package/lib/components/editor/edit-panel/connection-editor/RelationalDatabaseConnectionEditor.d.ts +0 -1
- package/lib/components/editor/edit-panel/connection-editor/RelationalDatabaseConnectionEditor.d.ts.map +1 -1
- package/lib/components/editor/edit-panel/connection-editor/RelationalDatabaseConnectionEditor.js +2 -2
- package/lib/components/editor/edit-panel/connection-editor/RelationalDatabaseConnectionEditor.js.map +1 -1
- package/lib/components/editor/edit-panel/connection-editor/post-processor-editor/MapperPostProcessorEditor.d.ts +0 -1
- package/lib/components/editor/edit-panel/connection-editor/post-processor-editor/MapperPostProcessorEditor.d.ts.map +1 -1
- package/lib/components/editor/edit-panel/connection-editor/post-processor-editor/MapperPostProcessorEditor.js.map +1 -1
- package/lib/components/editor/edit-panel/data-editor/DataElementEditor.d.ts +0 -1
- package/lib/components/editor/edit-panel/data-editor/DataElementEditor.d.ts.map +1 -1
- package/lib/components/editor/edit-panel/data-editor/RelationalCSVDataEditor.d.ts +0 -1
- package/lib/components/editor/edit-panel/data-editor/RelationalCSVDataEditor.d.ts.map +1 -1
- package/lib/components/editor/edit-panel/diff-editor/EntityChangeConflictEditor.d.ts +0 -1
- package/lib/components/editor/edit-panel/diff-editor/EntityChangeConflictEditor.d.ts.map +1 -1
- package/lib/components/editor/edit-panel/diff-editor/EntityDiffView.d.ts +0 -1
- package/lib/components/editor/edit-panel/diff-editor/EntityDiffView.d.ts.map +1 -1
- package/lib/components/editor/edit-panel/element-generation-editor/ElementGenerationEditor.d.ts +0 -1
- package/lib/components/editor/edit-panel/element-generation-editor/ElementGenerationEditor.d.ts.map +1 -1
- package/lib/components/editor/edit-panel/element-generation-editor/ElementNativeView.d.ts +0 -1
- package/lib/components/editor/edit-panel/element-generation-editor/ElementNativeView.d.ts.map +1 -1
- package/lib/components/editor/edit-panel/external-format-editor/BindingElementEditor.d.ts +0 -1
- package/lib/components/editor/edit-panel/external-format-editor/BindingElementEditor.d.ts.map +1 -1
- package/lib/components/editor/edit-panel/external-format-editor/ExternalFormatConnectionEditor.d.ts +0 -1
- package/lib/components/editor/edit-panel/external-format-editor/ExternalFormatConnectionEditor.d.ts.map +1 -1
- package/lib/components/editor/edit-panel/external-format-editor/NewSchemaSetDriver.d.ts +0 -1
- package/lib/components/editor/edit-panel/external-format-editor/NewSchemaSetDriver.d.ts.map +1 -1
- package/lib/components/editor/edit-panel/external-format-editor/SchemaSetElementEditor.d.ts +0 -1
- package/lib/components/editor/edit-panel/external-format-editor/SchemaSetElementEditor.d.ts.map +1 -1
- package/lib/components/editor/edit-panel/external-format-editor/SchemaSetModelGenerationEditor.d.ts +0 -1
- package/lib/components/editor/edit-panel/external-format-editor/SchemaSetModelGenerationEditor.d.ts.map +1 -1
- package/lib/components/editor/edit-panel/mapping-editor/ClassMappingEditor.d.ts +0 -1
- package/lib/components/editor/edit-panel/mapping-editor/ClassMappingEditor.d.ts.map +1 -1
- package/lib/components/editor/edit-panel/mapping-editor/EnumerationMappingEditor.d.ts +0 -1
- package/lib/components/editor/edit-panel/mapping-editor/EnumerationMappingEditor.d.ts.map +1 -1
- package/lib/components/editor/edit-panel/mapping-editor/FlatDataPropertyMappingEditor.d.ts +0 -1
- package/lib/components/editor/edit-panel/mapping-editor/FlatDataPropertyMappingEditor.d.ts.map +1 -1
- package/lib/components/editor/edit-panel/mapping-editor/InstanceSetImplementationEditor.d.ts +0 -1
- package/lib/components/editor/edit-panel/mapping-editor/InstanceSetImplementationEditor.d.ts.map +1 -1
- package/lib/components/editor/edit-panel/mapping-editor/InstanceSetImplementationSourceSelectorModal.d.ts +0 -1
- package/lib/components/editor/edit-panel/mapping-editor/InstanceSetImplementationSourceSelectorModal.d.ts.map +1 -1
- package/lib/components/editor/edit-panel/mapping-editor/MappingExecutionBuilder.d.ts +0 -1
- package/lib/components/editor/edit-panel/mapping-editor/MappingExecutionBuilder.d.ts.map +1 -1
- package/lib/components/editor/edit-panel/mapping-editor/MappingExecutionBuilder.js +40 -8
- package/lib/components/editor/edit-panel/mapping-editor/MappingExecutionBuilder.js.map +1 -1
- package/lib/components/editor/edit-panel/mapping-editor/MappingExecutionQueryBuilder.d.ts +18 -0
- package/lib/components/editor/edit-panel/mapping-editor/MappingExecutionQueryBuilder.d.ts.map +1 -0
- package/lib/components/editor/edit-panel/mapping-editor/MappingExecutionQueryBuilder.js +38 -0
- package/lib/components/editor/edit-panel/mapping-editor/MappingExecutionQueryBuilder.js.map +1 -0
- package/lib/components/editor/edit-panel/mapping-editor/MappingTestEditor.d.ts +0 -1
- package/lib/components/editor/edit-panel/mapping-editor/MappingTestEditor.d.ts.map +1 -1
- package/lib/components/editor/edit-panel/mapping-editor/MappingTestEditor.js +40 -8
- package/lib/components/editor/edit-panel/mapping-editor/MappingTestEditor.js.map +1 -1
- package/lib/components/editor/edit-panel/mapping-editor/NewMappingElementModal.d.ts +0 -1
- package/lib/components/editor/edit-panel/mapping-editor/NewMappingElementModal.d.ts.map +1 -1
- package/lib/components/editor/edit-panel/mapping-editor/OperationSetImplementationEditor.d.ts +0 -1
- package/lib/components/editor/edit-panel/mapping-editor/OperationSetImplementationEditor.d.ts.map +1 -1
- package/lib/components/editor/edit-panel/mapping-editor/PropertyMappingsEditor.d.ts +0 -1
- package/lib/components/editor/edit-panel/mapping-editor/PropertyMappingsEditor.d.ts.map +1 -1
- package/lib/components/editor/edit-panel/mapping-editor/PurePropertyMappingEditor.d.ts +0 -1
- package/lib/components/editor/edit-panel/mapping-editor/PurePropertyMappingEditor.d.ts.map +1 -1
- package/lib/components/editor/edit-panel/mapping-editor/relational/RelationalPropertyMappingEditor.d.ts +0 -1
- package/lib/components/editor/edit-panel/mapping-editor/relational/RelationalPropertyMappingEditor.d.ts.map +1 -1
- package/lib/components/editor/edit-panel/project-configuration-editor/ProjectConfigurationEditor.d.ts +0 -1
- package/lib/components/editor/edit-panel/project-configuration-editor/ProjectConfigurationEditor.d.ts.map +1 -1
- package/lib/components/editor/edit-panel/project-configuration-editor/ProjectConfigurationEditor.js +52 -8
- package/lib/components/editor/edit-panel/project-configuration-editor/ProjectConfigurationEditor.js.map +1 -1
- package/lib/components/editor/edit-panel/service-editor/NewServiceModal.d.ts +0 -1
- package/lib/components/editor/edit-panel/service-editor/NewServiceModal.d.ts.map +1 -1
- package/lib/components/editor/edit-panel/service-editor/ServiceEditor.d.ts +0 -1
- package/lib/components/editor/edit-panel/service-editor/ServiceEditor.d.ts.map +1 -1
- package/lib/components/editor/edit-panel/service-editor/ServiceExecutionEditor.d.ts +0 -1
- package/lib/components/editor/edit-panel/service-editor/ServiceExecutionEditor.d.ts.map +1 -1
- package/lib/components/editor/edit-panel/service-editor/ServiceExecutionQueryEditor.d.ts +0 -1
- package/lib/components/editor/edit-panel/service-editor/ServiceExecutionQueryEditor.d.ts.map +1 -1
- package/lib/components/editor/edit-panel/service-editor/ServiceExecutionQueryEditor.js +58 -10
- package/lib/components/editor/edit-panel/service-editor/ServiceExecutionQueryEditor.js.map +1 -1
- package/lib/components/editor/edit-panel/service-editor/ServiceRegistrationEditor.d.ts +0 -1
- package/lib/components/editor/edit-panel/service-editor/ServiceRegistrationEditor.d.ts.map +1 -1
- package/lib/components/editor/edit-panel/service-editor/testable/ServiceTestDataEditor.d.ts +0 -1
- package/lib/components/editor/edit-panel/service-editor/testable/ServiceTestDataEditor.d.ts.map +1 -1
- package/lib/components/editor/edit-panel/service-editor/testable/ServiceTestableEditor.d.ts +0 -1
- package/lib/components/editor/edit-panel/service-editor/testable/ServiceTestableEditor.d.ts.map +1 -1
- package/lib/components/editor/edit-panel/service-editor/testable/ServiceTestsEditor.d.ts +0 -1
- package/lib/components/editor/edit-panel/service-editor/testable/ServiceTestsEditor.d.ts.map +1 -1
- package/lib/components/editor/edit-panel/testable/TestAssertionEditor.d.ts +0 -1
- package/lib/components/editor/edit-panel/testable/TestAssertionEditor.d.ts.map +1 -1
- package/lib/components/editor/edit-panel/uml-editor/AssociationEditor.d.ts +0 -1
- package/lib/components/editor/edit-panel/uml-editor/AssociationEditor.d.ts.map +1 -1
- package/lib/components/editor/edit-panel/uml-editor/ClassEditor.d.ts +0 -1
- package/lib/components/editor/edit-panel/uml-editor/ClassEditor.d.ts.map +1 -1
- package/lib/components/editor/edit-panel/uml-editor/ClassQueryBuilder.d.ts +19 -0
- package/lib/components/editor/edit-panel/uml-editor/ClassQueryBuilder.d.ts.map +1 -0
- package/lib/components/editor/edit-panel/uml-editor/ClassQueryBuilder.js +80 -0
- package/lib/components/editor/edit-panel/uml-editor/ClassQueryBuilder.js.map +1 -0
- package/lib/components/editor/edit-panel/uml-editor/EnumerationEditor.d.ts +0 -1
- package/lib/components/editor/edit-panel/uml-editor/EnumerationEditor.d.ts.map +1 -1
- package/lib/components/editor/edit-panel/uml-editor/ProfileEditor.d.ts +0 -1
- package/lib/components/editor/edit-panel/uml-editor/ProfileEditor.d.ts.map +1 -1
- package/lib/components/editor/edit-panel/uml-editor/PropertyEditor.d.ts +0 -1
- package/lib/components/editor/edit-panel/uml-editor/PropertyEditor.d.ts.map +1 -1
- package/lib/components/editor/edit-panel/uml-editor/UMLEditor.d.ts +0 -1
- package/lib/components/editor/edit-panel/uml-editor/UMLEditor.d.ts.map +1 -1
- package/lib/components/editor/side-bar/CreateNewElementModal.d.ts +0 -1
- package/lib/components/editor/side-bar/CreateNewElementModal.d.ts.map +1 -1
- package/lib/components/editor/side-bar/Explorer.d.ts +0 -1
- package/lib/components/editor/side-bar/Explorer.d.ts.map +1 -1
- package/lib/components/editor/side-bar/Explorer.js +15 -8
- package/lib/components/editor/side-bar/Explorer.js.map +1 -1
- package/lib/components/editor/side-bar/LocalChanges.d.ts +0 -1
- package/lib/components/editor/side-bar/LocalChanges.d.ts.map +1 -1
- package/lib/components/editor/side-bar/ProjectOverview.d.ts +0 -1
- package/lib/components/editor/side-bar/ProjectOverview.d.ts.map +1 -1
- package/lib/components/editor/side-bar/SideBar.d.ts +0 -1
- package/lib/components/editor/side-bar/SideBar.d.ts.map +1 -1
- package/lib/components/editor/side-bar/WorkflowManager.d.ts +0 -1
- package/lib/components/editor/side-bar/WorkflowManager.d.ts.map +1 -1
- package/lib/components/editor/side-bar/WorkspaceReview.d.ts +0 -1
- package/lib/components/editor/side-bar/WorkspaceReview.d.ts.map +1 -1
- package/lib/components/editor/side-bar/WorkspaceSyncConflictResolver.d.ts +0 -1
- package/lib/components/editor/side-bar/WorkspaceSyncConflictResolver.d.ts.map +1 -1
- package/lib/components/editor/side-bar/WorkspaceUpdateConflictResolver.d.ts +0 -1
- package/lib/components/editor/side-bar/WorkspaceUpdateConflictResolver.d.ts.map +1 -1
- package/lib/components/editor/side-bar/WorkspaceUpdater.d.ts +0 -1
- package/lib/components/editor/side-bar/WorkspaceUpdater.d.ts.map +1 -1
- package/lib/components/editor/side-bar/testable/GlobalTestRunner.d.ts +0 -1
- package/lib/components/editor/side-bar/testable/GlobalTestRunner.d.ts.map +1 -1
- package/lib/components/project-viewer/ProjectViewer.d.ts.map +1 -1
- package/lib/components/project-viewer/ProjectViewer.js +5 -6
- package/lib/components/project-viewer/ProjectViewer.js.map +1 -1
- package/lib/components/shared/DiffView.d.ts +0 -1
- package/lib/components/shared/DiffView.d.ts.map +1 -1
- package/lib/components/shared/StudioLambdaEditor.d.ts +0 -1
- package/lib/components/shared/StudioLambdaEditor.d.ts.map +1 -1
- package/lib/components/workspace-review/WorkspaceReviewPanel.d.ts +0 -1
- package/lib/components/workspace-review/WorkspaceReviewPanel.d.ts.map +1 -1
- package/lib/components/workspace-review/WorkspaceReviewSideBar.d.ts +0 -1
- package/lib/components/workspace-review/WorkspaceReviewSideBar.d.ts.map +1 -1
- package/lib/components/workspace-setup/ProjectCreateModal.d.ts +0 -1
- package/lib/components/workspace-setup/ProjectCreateModal.d.ts.map +1 -1
- package/lib/index.css +2 -2
- package/lib/index.css.map +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/package.json +5 -5
- package/lib/stores/DSLMapping_LegendStudioApplicationPlugin_Extension.d.ts +0 -18
- package/lib/stores/DSLMapping_LegendStudioApplicationPlugin_Extension.d.ts.map +1 -1
- package/lib/stores/DSLService_LegendStudioApplicationPlugin_Extension.d.ts +0 -10
- package/lib/stores/DSLService_LegendStudioApplicationPlugin_Extension.d.ts.map +1 -1
- package/lib/stores/EditorGraphState.d.ts.map +1 -1
- package/lib/stores/EditorGraphState.js +37 -9
- package/lib/stores/EditorGraphState.js.map +1 -1
- package/lib/stores/EditorStore.d.ts +2 -0
- package/lib/stores/EditorStore.d.ts.map +1 -1
- package/lib/stores/EditorStore.js +3 -0
- package/lib/stores/EditorStore.js.map +1 -1
- package/lib/stores/EmbeddedQueryBuilderState.d.ts +40 -0
- package/lib/stores/EmbeddedQueryBuilderState.d.ts.map +1 -0
- package/lib/stores/EmbeddedQueryBuilderState.js +80 -0
- package/lib/stores/EmbeddedQueryBuilderState.js.map +1 -0
- package/lib/stores/LegendStudioAppEvent.d.ts +2 -1
- package/lib/stores/LegendStudioAppEvent.d.ts.map +1 -1
- package/lib/stores/LegendStudioAppEvent.js +1 -0
- package/lib/stores/LegendStudioAppEvent.js.map +1 -1
- package/lib/stores/LegendStudioApplicationNavigationContext.d.ts +1 -0
- package/lib/stores/LegendStudioApplicationNavigationContext.d.ts.map +1 -1
- package/lib/stores/LegendStudioApplicationNavigationContext.js +1 -0
- package/lib/stores/LegendStudioApplicationNavigationContext.js.map +1 -1
- package/lib/stores/LegendStudioApplicationPlugin.d.ts +7 -7
- package/lib/stores/LegendStudioApplicationPlugin.d.ts.map +1 -1
- package/lib/stores/LegendStudioCodeSnippets.d.ts +2 -0
- package/lib/stores/LegendStudioCodeSnippets.d.ts.map +1 -1
- package/lib/stores/LegendStudioCodeSnippets.js +28 -0
- package/lib/stores/LegendStudioCodeSnippets.js.map +1 -1
- package/lib/stores/StoreRelational_LegendStudioApplicationPlugin_Extension.d.ts +13 -5
- package/lib/stores/StoreRelational_LegendStudioApplicationPlugin_Extension.d.ts.map +1 -1
- package/lib/stores/editor-state/ProjectConfigurationEditorState.d.ts +11 -1
- package/lib/stores/editor-state/ProjectConfigurationEditorState.d.ts.map +1 -1
- package/lib/stores/editor-state/ProjectConfigurationEditorState.js +66 -1
- package/lib/stores/editor-state/ProjectConfigurationEditorState.js.map +1 -1
- package/lib/stores/editor-state/element-editor-state/connection/ConnectionEditorState.js +9 -9
- package/lib/stores/editor-state/element-editor-state/connection/ConnectionEditorState.js.map +1 -1
- package/lib/stores/editor-state/element-editor-state/mapping/MappingExecutionQueryBuilderState.d.ts +29 -0
- package/lib/stores/editor-state/element-editor-state/mapping/MappingExecutionQueryBuilderState.d.ts.map +1 -0
- package/lib/stores/editor-state/element-editor-state/mapping/MappingExecutionQueryBuilderState.js +42 -0
- package/lib/stores/editor-state/element-editor-state/mapping/MappingExecutionQueryBuilderState.js.map +1 -0
- package/lib/stores/shared/DnDUtil.js +1 -1
- package/lib/stores/shared/PackageTreeUtil.js +6 -6
- package/lib/stores/shared/PackageTreeUtil.js.map +1 -1
- package/package.json +13 -13
- package/src/application/LegendStudio.tsx +8 -2
- package/src/application/LegendStudioPluginManager.ts +2 -2
- package/src/components/DSLExternalFormat_LegendStudioApplicationPlugin.tsx +5 -5
- package/src/components/EditorComponentTestUtils.tsx +29 -23
- package/src/components/EmbeddedQueryBuilder.tsx +165 -0
- package/src/components/editor/Editor.tsx +77 -79
- package/src/components/editor/edit-panel/GrammarTextEditor.tsx +24 -2
- package/src/components/editor/edit-panel/connection-editor/RelationalDatabaseConnectionEditor.tsx +2 -2
- package/src/components/editor/edit-panel/connection-editor/post-processor-editor/MapperPostProcessorEditor.tsx +1 -0
- package/src/components/editor/edit-panel/mapping-editor/MappingExecutionBuilder.tsx +88 -15
- package/src/components/editor/edit-panel/mapping-editor/MappingExecutionQueryBuilder.tsx +93 -0
- package/src/components/editor/edit-panel/mapping-editor/MappingTestEditor.tsx +81 -16
- package/src/components/editor/edit-panel/project-configuration-editor/ProjectConfigurationEditor.tsx +170 -4
- package/src/components/editor/edit-panel/service-editor/ServiceExecutionQueryEditor.tsx +115 -20
- package/src/components/editor/edit-panel/uml-editor/ClassQueryBuilder.tsx +159 -0
- package/src/components/editor/side-bar/Explorer.tsx +20 -10
- package/src/components/project-viewer/ProjectViewer.tsx +36 -38
- package/src/index.ts +1 -1
- package/src/stores/DSLMapping_LegendStudioApplicationPlugin_Extension.ts +0 -27
- package/src/stores/DSLService_LegendStudioApplicationPlugin_Extension.ts +0 -14
- package/src/stores/EditorGraphState.ts +56 -11
- package/src/stores/EditorStore.ts +3 -0
- package/src/stores/EmbeddedQueryBuilderState.ts +105 -0
- package/src/stores/LegendStudioAppEvent.ts +1 -0
- package/src/stores/LegendStudioApplicationNavigationContext.ts +1 -0
- package/src/stores/LegendStudioApplicationPlugin.ts +7 -7
- package/src/stores/LegendStudioCodeSnippets.ts +34 -0
- package/src/stores/StoreRelational_LegendStudioApplicationPlugin_Extension.ts +19 -5
- package/src/stores/editor-state/ProjectConfigurationEditorState.ts +104 -1
- package/src/stores/editor-state/element-editor-state/connection/ConnectionEditorState.ts +9 -9
- package/src/stores/editor-state/element-editor-state/mapping/MappingExecutionQueryBuilderState.ts +58 -0
- package/src/stores/shared/DnDUtil.ts +1 -1
- package/src/stores/shared/PackageTreeUtil.ts +6 -6
- package/tsconfig.json +5 -0
package/src/components/editor/edit-panel/project-configuration-editor/ProjectConfigurationEditor.tsx
CHANGED
|
@@ -25,6 +25,9 @@ import { observer } from 'mobx-react-lite';
|
|
|
25
25
|
import {
|
|
26
26
|
ProjectConfigurationEditorState,
|
|
27
27
|
CONFIGURATION_EDITOR_TAB,
|
|
28
|
+
DEPENDENCY_INFO_TYPE,
|
|
29
|
+
getDependencyTreeStringFromInfo,
|
|
30
|
+
getConflictsString,
|
|
28
31
|
} from '../../../../stores/editor-state/ProjectConfigurationEditorState.js';
|
|
29
32
|
import {
|
|
30
33
|
type SelectComponent,
|
|
@@ -36,6 +39,8 @@ import {
|
|
|
36
39
|
CheckCircleIcon,
|
|
37
40
|
ExclamationCircleIcon,
|
|
38
41
|
ExternalLinkSquareIcon,
|
|
42
|
+
ArchiveIcon,
|
|
43
|
+
Dialog,
|
|
39
44
|
} from '@finos/legend-art';
|
|
40
45
|
import { flowResult } from 'mobx';
|
|
41
46
|
import {
|
|
@@ -46,6 +51,8 @@ import { useEditorStore } from '../../EditorStoreProvider.js';
|
|
|
46
51
|
import {
|
|
47
52
|
ActionAlertActionType,
|
|
48
53
|
ActionAlertType,
|
|
54
|
+
EDITOR_LANGUAGE,
|
|
55
|
+
TextInputEditor,
|
|
49
56
|
useApplicationStore,
|
|
50
57
|
} from '@finos/legend-application';
|
|
51
58
|
import { LEGEND_STUDIO_APP_EVENT } from '../../../../stores/LegendStudioAppEvent.js';
|
|
@@ -55,7 +62,9 @@ import {
|
|
|
55
62
|
type ProjectData,
|
|
56
63
|
compareSemVerVersions,
|
|
57
64
|
generateGAVCoordinates,
|
|
65
|
+
type ProjectDependencyInfo,
|
|
58
66
|
} from '@finos/legend-server-depot';
|
|
67
|
+
import { generateViewProjectRoute } from '../../../../stores/LegendStudioRouter.js';
|
|
59
68
|
|
|
60
69
|
interface VersionOption {
|
|
61
70
|
label: string;
|
|
@@ -192,14 +201,73 @@ const formatOptionLabel = (option: ProjectOption): React.ReactNode => (
|
|
|
192
201
|
</div>
|
|
193
202
|
);
|
|
194
203
|
|
|
204
|
+
const ProjectDependencyInfoModal = observer(
|
|
205
|
+
(props: {
|
|
206
|
+
configState: ProjectConfigurationEditorState;
|
|
207
|
+
info: ProjectDependencyInfo;
|
|
208
|
+
type: DEPENDENCY_INFO_TYPE;
|
|
209
|
+
}) => {
|
|
210
|
+
const { configState, info, type } = props;
|
|
211
|
+
const closeModal = (): void =>
|
|
212
|
+
configState.setDependencyInfoModal(undefined);
|
|
213
|
+
return (
|
|
214
|
+
<Dialog
|
|
215
|
+
open={Boolean(configState.dependencyInfoModalType)}
|
|
216
|
+
onClose={closeModal}
|
|
217
|
+
classes={{
|
|
218
|
+
root: 'editor-modal__root-container',
|
|
219
|
+
container: 'editor-modal__container',
|
|
220
|
+
paper: 'editor-modal__content',
|
|
221
|
+
}}
|
|
222
|
+
>
|
|
223
|
+
<div className="modal modal--dark editor-modal">
|
|
224
|
+
<div className="modal__header">
|
|
225
|
+
<div className="modal__title">{prettyCONSTName(type)}</div>
|
|
226
|
+
</div>
|
|
227
|
+
<div className="modal__body">
|
|
228
|
+
<div className="panel__content">
|
|
229
|
+
{type === DEPENDENCY_INFO_TYPE.TREE ? (
|
|
230
|
+
<TextInputEditor
|
|
231
|
+
inputValue={getDependencyTreeStringFromInfo(info)}
|
|
232
|
+
isReadOnly={true}
|
|
233
|
+
language={EDITOR_LANGUAGE.TEXT}
|
|
234
|
+
showMiniMap={true}
|
|
235
|
+
/>
|
|
236
|
+
) : (
|
|
237
|
+
<TextInputEditor
|
|
238
|
+
inputValue={getConflictsString(info)}
|
|
239
|
+
isReadOnly={true}
|
|
240
|
+
language={EDITOR_LANGUAGE.TEXT}
|
|
241
|
+
showMiniMap={true}
|
|
242
|
+
/>
|
|
243
|
+
)}
|
|
244
|
+
</div>
|
|
245
|
+
|
|
246
|
+
<div className="modal__footer">
|
|
247
|
+
<button
|
|
248
|
+
className="btn modal__footer__close-btn"
|
|
249
|
+
onClick={closeModal}
|
|
250
|
+
>
|
|
251
|
+
Close
|
|
252
|
+
</button>
|
|
253
|
+
</div>
|
|
254
|
+
</div>
|
|
255
|
+
</div>
|
|
256
|
+
</Dialog>
|
|
257
|
+
);
|
|
258
|
+
},
|
|
259
|
+
);
|
|
260
|
+
|
|
195
261
|
const ProjectDependencyEditor = observer(
|
|
196
262
|
(props: {
|
|
197
263
|
projectDependency: ProjectDependency;
|
|
198
264
|
deleteValue: () => void;
|
|
199
265
|
isReadOnly: boolean;
|
|
266
|
+
projects: Map<string, ProjectData>;
|
|
200
267
|
}) => {
|
|
201
268
|
// init
|
|
202
|
-
const { projectDependency, deleteValue, isReadOnly } = props;
|
|
269
|
+
const { projectDependency, deleteValue, isReadOnly, projects } = props;
|
|
270
|
+
const projectDependencyData = projects.get(projectDependency.projectId);
|
|
203
271
|
const editorStore = useEditorStore();
|
|
204
272
|
const applicationStore = useApplicationStore();
|
|
205
273
|
const projectSelectorRef = useRef<SelectComponent>(null);
|
|
@@ -228,6 +296,9 @@ const ProjectDependencyEditor = observer(
|
|
|
228
296
|
projectDependency.setProjectId(val?.value.coordinates ?? '');
|
|
229
297
|
if (val) {
|
|
230
298
|
projectDependency.setVersionId(val.value.latestVersion);
|
|
299
|
+
flowResult(configState.fetchDependencyInfo()).catch(
|
|
300
|
+
applicationStore.alertUnhandledError,
|
|
301
|
+
);
|
|
231
302
|
}
|
|
232
303
|
}
|
|
233
304
|
};
|
|
@@ -258,6 +329,9 @@ const ProjectDependencyEditor = observer(
|
|
|
258
329
|
) {
|
|
259
330
|
try {
|
|
260
331
|
projectDependency.setVersionId(val?.value ?? '');
|
|
332
|
+
flowResult(configState.fetchDependencyInfo()).catch(
|
|
333
|
+
applicationStore.alertUnhandledError,
|
|
334
|
+
);
|
|
261
335
|
} catch (error) {
|
|
262
336
|
assertErrorThrown(error);
|
|
263
337
|
applicationStore.log.error(
|
|
@@ -267,7 +341,7 @@ const ProjectDependencyEditor = observer(
|
|
|
267
341
|
}
|
|
268
342
|
}
|
|
269
343
|
};
|
|
270
|
-
const
|
|
344
|
+
const openProjectinArchive = (): void => {
|
|
271
345
|
if (!projectDependency.isLegacyDependency) {
|
|
272
346
|
const projectDependencyVersionId =
|
|
273
347
|
projectDependency.versionId === MASTER_SNAPSHOT_ALIAS
|
|
@@ -284,6 +358,17 @@ const ProjectDependencyEditor = observer(
|
|
|
284
358
|
);
|
|
285
359
|
}
|
|
286
360
|
};
|
|
361
|
+
// NOTE: This assumes that the dependant project is in the same studio instance as the current project
|
|
362
|
+
// In the future, the studio instance may be part of the project data
|
|
363
|
+
const openProject = (): void => {
|
|
364
|
+
if (projectDependencyData) {
|
|
365
|
+
applicationStore.navigator.openNewWindow(
|
|
366
|
+
applicationStore.navigator.generateLocation(
|
|
367
|
+
generateViewProjectRoute(projectDependencyData.projectId),
|
|
368
|
+
),
|
|
369
|
+
);
|
|
370
|
+
}
|
|
371
|
+
};
|
|
287
372
|
const projectSelectorPlaceholder = !projectDependency.projectId.length
|
|
288
373
|
? 'Choose project'
|
|
289
374
|
: versionDisabled
|
|
@@ -326,7 +411,8 @@ const ProjectDependencyEditor = observer(
|
|
|
326
411
|
disabled={
|
|
327
412
|
projectDependency.isLegacyDependency ||
|
|
328
413
|
!selectedProject ||
|
|
329
|
-
!selectedVersionOption
|
|
414
|
+
!selectedVersionOption ||
|
|
415
|
+
!projectDependencyData
|
|
330
416
|
}
|
|
331
417
|
onClick={openProject}
|
|
332
418
|
tabIndex={-1}
|
|
@@ -334,6 +420,19 @@ const ProjectDependencyEditor = observer(
|
|
|
334
420
|
>
|
|
335
421
|
<ExternalLinkSquareIcon />
|
|
336
422
|
</button>
|
|
423
|
+
<button
|
|
424
|
+
className="project-dependency-editor__visit-btn btn--dark btn--sm"
|
|
425
|
+
disabled={
|
|
426
|
+
projectDependency.isLegacyDependency ||
|
|
427
|
+
!selectedProject ||
|
|
428
|
+
!selectedVersionOption
|
|
429
|
+
}
|
|
430
|
+
onClick={openProjectinArchive}
|
|
431
|
+
tabIndex={-1}
|
|
432
|
+
title={'Open Project in archive'}
|
|
433
|
+
>
|
|
434
|
+
<ArchiveIcon />
|
|
435
|
+
</button>
|
|
337
436
|
<button
|
|
338
437
|
className="project-dependency-editor__remove-btn btn--dark btn--caution"
|
|
339
438
|
disabled={isReadOnly}
|
|
@@ -348,6 +447,52 @@ const ProjectDependencyEditor = observer(
|
|
|
348
447
|
},
|
|
349
448
|
);
|
|
350
449
|
|
|
450
|
+
const ProjectDependencyActions = observer(
|
|
451
|
+
(props: { config: ProjectConfigurationEditorState }) => {
|
|
452
|
+
const { config } = props;
|
|
453
|
+
const hasConflicts = config.dependencyInfo?.conflicts.length;
|
|
454
|
+
const viewTree = (): void => {
|
|
455
|
+
if (config.dependencyInfo) {
|
|
456
|
+
config.setDependencyInfoModal(DEPENDENCY_INFO_TYPE.TREE);
|
|
457
|
+
}
|
|
458
|
+
};
|
|
459
|
+
const viewConflict = (): void => {
|
|
460
|
+
if (config.dependencyInfo) {
|
|
461
|
+
config.setDependencyInfoModal(DEPENDENCY_INFO_TYPE.CONFLICTS);
|
|
462
|
+
}
|
|
463
|
+
};
|
|
464
|
+
return (
|
|
465
|
+
<div className="project-dependency-editor__info">
|
|
466
|
+
<button
|
|
467
|
+
className="project-dependency-editor__tree-btn"
|
|
468
|
+
tabIndex={-1}
|
|
469
|
+
onClick={viewTree}
|
|
470
|
+
disabled={
|
|
471
|
+
!config.dependencyInfo || !config.dependencyInfo.conflicts.length
|
|
472
|
+
}
|
|
473
|
+
title={`View dependency tree`}
|
|
474
|
+
>
|
|
475
|
+
View Dependency Tree
|
|
476
|
+
</button>
|
|
477
|
+
|
|
478
|
+
{Boolean(hasConflicts) && (
|
|
479
|
+
<button
|
|
480
|
+
className="project-dependency-editor__conflicts-btn"
|
|
481
|
+
tabIndex={-1}
|
|
482
|
+
onClick={viewConflict}
|
|
483
|
+
disabled={
|
|
484
|
+
!config.dependencyInfo || !config.dependencyInfo.conflicts.length
|
|
485
|
+
}
|
|
486
|
+
title={`View any conflcits in your dependencies`}
|
|
487
|
+
>
|
|
488
|
+
View Conflicts
|
|
489
|
+
</button>
|
|
490
|
+
)}
|
|
491
|
+
</div>
|
|
492
|
+
);
|
|
493
|
+
},
|
|
494
|
+
);
|
|
495
|
+
|
|
351
496
|
export const ProjectConfigurationEditor = observer(() => {
|
|
352
497
|
const editorStore = useEditorStore();
|
|
353
498
|
const applicationStore = useApplicationStore();
|
|
@@ -376,8 +521,12 @@ export const ProjectConfigurationEditor = observer(() => {
|
|
|
376
521
|
const currentProjectConfiguration = configState.currentProjectConfiguration;
|
|
377
522
|
const deleteProjectDependency =
|
|
378
523
|
(val: ProjectDependency): (() => void) =>
|
|
379
|
-
(): void =>
|
|
524
|
+
(): void => {
|
|
380
525
|
currentProjectConfiguration.deleteProjectDependency(val);
|
|
526
|
+
flowResult(configState.fetchDependencyInfo()).catch(
|
|
527
|
+
applicationStore.alertUnhandledError,
|
|
528
|
+
);
|
|
529
|
+
};
|
|
381
530
|
const addValue = (): void => {
|
|
382
531
|
if (!isReadOnly) {
|
|
383
532
|
if (selectedTab === CONFIGURATION_EDITOR_TAB.PROJECT_DEPENDENCIES) {
|
|
@@ -389,6 +538,9 @@ export const ProjectConfigurationEditor = observer(() => {
|
|
|
389
538
|
);
|
|
390
539
|
dependencyToAdd.setVersionId(projectToAdd.latestVersion);
|
|
391
540
|
currentProjectConfiguration.addProjectDependency(dependencyToAdd);
|
|
541
|
+
flowResult(configState.fetchDependencyInfo()).catch(
|
|
542
|
+
applicationStore.alertUnhandledError,
|
|
543
|
+
);
|
|
392
544
|
} else {
|
|
393
545
|
currentProjectConfiguration.addProjectDependency(
|
|
394
546
|
new ProjectDependency(''),
|
|
@@ -441,6 +593,9 @@ export const ProjectConfigurationEditor = observer(() => {
|
|
|
441
593
|
flowResult(configState.fectchAssociatedProjectsAndVersions()).catch(
|
|
442
594
|
applicationStore.alertUnhandledError,
|
|
443
595
|
);
|
|
596
|
+
flowResult(configState.fetchDependencyInfo()).catch(
|
|
597
|
+
applicationStore.alertUnhandledError,
|
|
598
|
+
);
|
|
444
599
|
}
|
|
445
600
|
}, [applicationStore, configState, selectedTab]);
|
|
446
601
|
|
|
@@ -510,6 +665,7 @@ export const ProjectConfigurationEditor = observer(() => {
|
|
|
510
665
|
)}
|
|
511
666
|
{selectedTab === CONFIGURATION_EDITOR_TAB.PROJECT_DEPENDENCIES && (
|
|
512
667
|
<div className="panel__content__lists">
|
|
668
|
+
<ProjectDependencyActions config={configState} />
|
|
513
669
|
{currentProjectConfiguration.projectDependencies.map(
|
|
514
670
|
(projectDependency) => (
|
|
515
671
|
<ProjectDependencyEditor
|
|
@@ -517,11 +673,21 @@ export const ProjectConfigurationEditor = observer(() => {
|
|
|
517
673
|
projectDependency={projectDependency}
|
|
518
674
|
deleteValue={deleteProjectDependency(projectDependency)}
|
|
519
675
|
isReadOnly={isReadOnly}
|
|
676
|
+
projects={configState.projects}
|
|
520
677
|
/>
|
|
521
678
|
),
|
|
522
679
|
)}
|
|
523
680
|
</div>
|
|
524
681
|
)}
|
|
682
|
+
|
|
683
|
+
{configState.dependencyInfo &&
|
|
684
|
+
configState.dependencyInfoModalType && (
|
|
685
|
+
<ProjectDependencyInfoModal
|
|
686
|
+
configState={configState}
|
|
687
|
+
info={configState.dependencyInfo}
|
|
688
|
+
type={configState.dependencyInfoModalType}
|
|
689
|
+
/>
|
|
690
|
+
)}
|
|
525
691
|
</div>
|
|
526
692
|
</div>
|
|
527
693
|
</div>
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
|
-
import {
|
|
17
|
+
import { useEffect, useMemo, useRef, useState } from 'react';
|
|
18
18
|
import { observer } from 'mobx-react-lite';
|
|
19
19
|
import type {
|
|
20
20
|
ServicePureExecutionQueryState,
|
|
@@ -34,8 +34,9 @@ import {
|
|
|
34
34
|
CaretDownIcon,
|
|
35
35
|
MenuContentItem,
|
|
36
36
|
PauseCircleIcon,
|
|
37
|
+
PencilIcon,
|
|
37
38
|
} from '@finos/legend-art';
|
|
38
|
-
import { debounce } from '@finos/legend-shared';
|
|
39
|
+
import { assertErrorThrown, debounce, hashObject } from '@finos/legend-shared';
|
|
39
40
|
import { flowResult } from 'mobx';
|
|
40
41
|
import { useEditorStore } from '../../EditorStoreProvider.js';
|
|
41
42
|
import {
|
|
@@ -45,8 +46,16 @@ import {
|
|
|
45
46
|
useApplicationStore,
|
|
46
47
|
} from '@finos/legend-application';
|
|
47
48
|
import { StudioTextInputEditor } from '../../../shared/StudioTextInputEditor.js';
|
|
48
|
-
import
|
|
49
|
-
|
|
49
|
+
import {
|
|
50
|
+
type LightQuery,
|
|
51
|
+
isStubbed_PackageableElement,
|
|
52
|
+
isStubbed_RawLambda,
|
|
53
|
+
KeyedExecutionParameter,
|
|
54
|
+
} from '@finos/legend-graph';
|
|
55
|
+
import {
|
|
56
|
+
type QueryBuilderState,
|
|
57
|
+
ServiceQueryBuilderState,
|
|
58
|
+
} from '@finos/legend-query-builder';
|
|
50
59
|
|
|
51
60
|
const ServiceExecutionResultViewer = observer(
|
|
52
61
|
(props: { executionState: ServicePureExecutionState }) => {
|
|
@@ -233,22 +242,101 @@ export const ServiceExecutionQueryEditor = observer(
|
|
|
233
242
|
isReadOnly: boolean;
|
|
234
243
|
}) => {
|
|
235
244
|
const { executionState, isReadOnly } = props;
|
|
236
|
-
const queryState = executionState.queryState;
|
|
237
|
-
const editorStore = useEditorStore();
|
|
238
245
|
const applicationStore = useApplicationStore();
|
|
239
|
-
const
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
246
|
+
const editorStore = useEditorStore();
|
|
247
|
+
const queryState = executionState.queryState;
|
|
248
|
+
|
|
249
|
+
// actions
|
|
250
|
+
const editWithQueryBuilder = applicationStore.guardUnhandledError(
|
|
251
|
+
async () => {
|
|
252
|
+
const embeddedQueryBuilderState = editorStore.embeddedQueryBuilderState;
|
|
253
|
+
executionState.setOpeningQueryEditor(true);
|
|
254
|
+
const service = executionState.serviceEditorState.service;
|
|
255
|
+
const selectedExecutionState =
|
|
256
|
+
executionState.selectedExecutionContextState;
|
|
257
|
+
if (selectedExecutionState) {
|
|
258
|
+
const mapping = selectedExecutionState.executionContext.mapping.value;
|
|
259
|
+
if (!isStubbed_PackageableElement(mapping)) {
|
|
260
|
+
await flowResult(
|
|
261
|
+
embeddedQueryBuilderState.setEmbeddedQueryBuilderConfiguration({
|
|
262
|
+
setupQueryBuilderState: (): QueryBuilderState => {
|
|
263
|
+
const queryBuilderState = new ServiceQueryBuilderState(
|
|
264
|
+
embeddedQueryBuilderState.editorStore.applicationStore,
|
|
265
|
+
embeddedQueryBuilderState.editorStore.graphManagerState,
|
|
266
|
+
service,
|
|
267
|
+
selectedExecutionState.executionContext instanceof
|
|
268
|
+
KeyedExecutionParameter
|
|
269
|
+
? selectedExecutionState.executionContext.key
|
|
270
|
+
: undefined,
|
|
271
|
+
);
|
|
272
|
+
queryBuilderState.initializeWithQuery(
|
|
273
|
+
executionState.execution.func,
|
|
274
|
+
);
|
|
275
|
+
queryBuilderState.changeDetectionState.setQueryHashCode(
|
|
276
|
+
hashObject(executionState.execution.func),
|
|
277
|
+
);
|
|
278
|
+
queryBuilderState.changeDetectionState.setIsEnabled(true);
|
|
279
|
+
return queryBuilderState;
|
|
280
|
+
},
|
|
281
|
+
actionConfigs: [
|
|
282
|
+
{
|
|
283
|
+
key: 'save-query-btn',
|
|
284
|
+
renderer: (
|
|
285
|
+
queryBuilderState: QueryBuilderState,
|
|
286
|
+
): React.ReactNode => {
|
|
287
|
+
const save = applicationStore.guardUnhandledError(
|
|
288
|
+
async () => {
|
|
289
|
+
try {
|
|
290
|
+
const rawLambda = queryBuilderState.buildQuery();
|
|
291
|
+
await flowResult(
|
|
292
|
+
executionState.queryState.updateLamba(rawLambda),
|
|
293
|
+
);
|
|
294
|
+
applicationStore.notifySuccess(
|
|
295
|
+
`Service query is updated`,
|
|
296
|
+
);
|
|
297
|
+
queryBuilderState.changeDetectionState.setQueryHashCode(
|
|
298
|
+
hashObject(rawLambda),
|
|
299
|
+
);
|
|
300
|
+
embeddedQueryBuilderState.setEmbeddedQueryBuilderConfiguration(
|
|
301
|
+
undefined,
|
|
302
|
+
);
|
|
303
|
+
} catch (error) {
|
|
304
|
+
assertErrorThrown(error);
|
|
305
|
+
applicationStore.notifyError(
|
|
306
|
+
`Can't save query: ${error.message}`,
|
|
307
|
+
);
|
|
308
|
+
}
|
|
309
|
+
},
|
|
310
|
+
);
|
|
311
|
+
|
|
312
|
+
return (
|
|
313
|
+
<button
|
|
314
|
+
className="query-builder__dialog__header__custom-action"
|
|
315
|
+
tabIndex={-1}
|
|
316
|
+
disabled={isReadOnly}
|
|
317
|
+
onClick={save}
|
|
318
|
+
>
|
|
319
|
+
Save Query
|
|
320
|
+
</button>
|
|
321
|
+
);
|
|
322
|
+
},
|
|
323
|
+
},
|
|
324
|
+
],
|
|
325
|
+
disableCompile: isStubbed_RawLambda(
|
|
326
|
+
executionState.queryState.query,
|
|
327
|
+
),
|
|
328
|
+
}),
|
|
329
|
+
);
|
|
330
|
+
executionState.setOpeningQueryEditor(false);
|
|
331
|
+
return;
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
applicationStore.notifyWarning(
|
|
335
|
+
'Please specify a mapping and a runtime for the execution context to edit with query builder',
|
|
336
|
+
);
|
|
337
|
+
executionState.setOpeningQueryEditor(false);
|
|
338
|
+
},
|
|
339
|
+
);
|
|
252
340
|
const importQuery = (): void => {
|
|
253
341
|
queryState.setOpenQueryImporter(true);
|
|
254
342
|
};
|
|
@@ -284,7 +372,14 @@ export const ServiceExecutionQueryEditor = observer(
|
|
|
284
372
|
</div>
|
|
285
373
|
</div>
|
|
286
374
|
<div className="panel__header__actions">
|
|
287
|
-
|
|
375
|
+
<button
|
|
376
|
+
className="panel__header__action"
|
|
377
|
+
tabIndex={-1}
|
|
378
|
+
onClick={editWithQueryBuilder}
|
|
379
|
+
title="Edit query..."
|
|
380
|
+
>
|
|
381
|
+
<PencilIcon />
|
|
382
|
+
</button>
|
|
288
383
|
<button
|
|
289
384
|
className="panel__header__action"
|
|
290
385
|
onClick={importQuery}
|
|
@@ -0,0 +1,159 @@
|
|
|
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
|
+
type Class,
|
|
19
|
+
PackageableElementExplicitReference,
|
|
20
|
+
PureSingleExecution,
|
|
21
|
+
Service,
|
|
22
|
+
} from '@finos/legend-graph';
|
|
23
|
+
import {
|
|
24
|
+
type QueryBuilderState,
|
|
25
|
+
ClassQueryBuilderState,
|
|
26
|
+
} from '@finos/legend-query-builder';
|
|
27
|
+
import { assertErrorThrown, guaranteeNonNullable } from '@finos/legend-shared';
|
|
28
|
+
import { flowResult } from 'mobx';
|
|
29
|
+
import { observer } from 'mobx-react-lite';
|
|
30
|
+
import { useState } from 'react';
|
|
31
|
+
import type { EditorStore } from '../../../../stores/EditorStore.js';
|
|
32
|
+
import type { EmbeddedQueryBuilderState } from '../../../../stores/EmbeddedQueryBuilderState.js';
|
|
33
|
+
import {
|
|
34
|
+
service_initNewService,
|
|
35
|
+
service_setExecution,
|
|
36
|
+
} from '../../../../stores/graphModifier/DSLService_GraphModifierHelper.js';
|
|
37
|
+
import { useEditorStore } from '../../EditorStoreProvider.js';
|
|
38
|
+
import { NewServiceModal } from '../service-editor/NewServiceModal.js';
|
|
39
|
+
|
|
40
|
+
const promoteQueryToService = async (
|
|
41
|
+
packagePath: string,
|
|
42
|
+
serviceName: string,
|
|
43
|
+
embeddedQueryBuilderState: EmbeddedQueryBuilderState,
|
|
44
|
+
queryBuilderState: QueryBuilderState,
|
|
45
|
+
): Promise<void> => {
|
|
46
|
+
const editorStore = embeddedQueryBuilderState.editorStore;
|
|
47
|
+
const applicationStore = editorStore.applicationStore;
|
|
48
|
+
try {
|
|
49
|
+
const mapping = guaranteeNonNullable(
|
|
50
|
+
queryBuilderState.mapping,
|
|
51
|
+
'Mapping is required to create service execution',
|
|
52
|
+
);
|
|
53
|
+
const runtime = guaranteeNonNullable(
|
|
54
|
+
queryBuilderState.runtimeValue,
|
|
55
|
+
'Runtime is required to create service execution',
|
|
56
|
+
);
|
|
57
|
+
const query = queryBuilderState.buildQuery();
|
|
58
|
+
const service = new Service(serviceName);
|
|
59
|
+
service_initNewService(service);
|
|
60
|
+
service_setExecution(
|
|
61
|
+
service,
|
|
62
|
+
new PureSingleExecution(
|
|
63
|
+
query,
|
|
64
|
+
service,
|
|
65
|
+
PackageableElementExplicitReference.create(mapping),
|
|
66
|
+
runtime,
|
|
67
|
+
),
|
|
68
|
+
editorStore.changeDetectionState.observerContext,
|
|
69
|
+
);
|
|
70
|
+
await flowResult(editorStore.addElement(service, packagePath, true));
|
|
71
|
+
await flowResult(
|
|
72
|
+
embeddedQueryBuilderState.setEmbeddedQueryBuilderConfiguration(undefined),
|
|
73
|
+
).catch(applicationStore.alertUnhandledError);
|
|
74
|
+
applicationStore.notifySuccess(`Service '${service.name}' created`);
|
|
75
|
+
} catch (error) {
|
|
76
|
+
assertErrorThrown(error);
|
|
77
|
+
applicationStore.notifyError(error);
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
const PromoteToServiceQueryBuilderAction = observer(
|
|
82
|
+
(props: { queryBuilderState: QueryBuilderState }) => {
|
|
83
|
+
const { queryBuilderState } = props;
|
|
84
|
+
const editorStore = useEditorStore();
|
|
85
|
+
const queryBuilderExtension = editorStore.embeddedQueryBuilderState;
|
|
86
|
+
const [openNewServiceModal, setOpenNewServiceModal] = useState(false);
|
|
87
|
+
const showNewServiceModal = (): void => setOpenNewServiceModal(true);
|
|
88
|
+
const closeNewServiceModal = (): void => setOpenNewServiceModal(false);
|
|
89
|
+
const allowPromoteToService = Boolean(
|
|
90
|
+
queryBuilderState.mapping && queryBuilderState.runtimeValue,
|
|
91
|
+
);
|
|
92
|
+
const promoteToService = async (
|
|
93
|
+
packagePath: string,
|
|
94
|
+
serviceName: string,
|
|
95
|
+
): Promise<void> => {
|
|
96
|
+
if (allowPromoteToService) {
|
|
97
|
+
await promoteQueryToService(
|
|
98
|
+
packagePath,
|
|
99
|
+
serviceName,
|
|
100
|
+
queryBuilderExtension,
|
|
101
|
+
queryBuilderState,
|
|
102
|
+
);
|
|
103
|
+
}
|
|
104
|
+
};
|
|
105
|
+
return (
|
|
106
|
+
<>
|
|
107
|
+
<button
|
|
108
|
+
className="query-builder__dialog__header__custom-action"
|
|
109
|
+
tabIndex={-1}
|
|
110
|
+
onClick={showNewServiceModal}
|
|
111
|
+
disabled={!allowPromoteToService}
|
|
112
|
+
>
|
|
113
|
+
Promote to Service
|
|
114
|
+
</button>
|
|
115
|
+
{queryBuilderState.mapping && (
|
|
116
|
+
<NewServiceModal
|
|
117
|
+
mapping={queryBuilderState.mapping}
|
|
118
|
+
close={closeNewServiceModal}
|
|
119
|
+
showModal={openNewServiceModal}
|
|
120
|
+
promoteToService={promoteToService}
|
|
121
|
+
/>
|
|
122
|
+
)}
|
|
123
|
+
</>
|
|
124
|
+
);
|
|
125
|
+
},
|
|
126
|
+
);
|
|
127
|
+
|
|
128
|
+
export const queryClass = async (
|
|
129
|
+
_class: Class,
|
|
130
|
+
editorStore: EditorStore,
|
|
131
|
+
): Promise<void> => {
|
|
132
|
+
const embeddedQueryBuilderState = editorStore.embeddedQueryBuilderState;
|
|
133
|
+
await flowResult(
|
|
134
|
+
embeddedQueryBuilderState.setEmbeddedQueryBuilderConfiguration({
|
|
135
|
+
setupQueryBuilderState: () => {
|
|
136
|
+
const queryBuilderState = new ClassQueryBuilderState(
|
|
137
|
+
embeddedQueryBuilderState.editorStore.applicationStore,
|
|
138
|
+
embeddedQueryBuilderState.editorStore.graphManagerState,
|
|
139
|
+
);
|
|
140
|
+
queryBuilderState.changeClass(_class);
|
|
141
|
+
queryBuilderState.propagateClassChange(_class);
|
|
142
|
+
return queryBuilderState;
|
|
143
|
+
},
|
|
144
|
+
// TODO: when we modularize DSL service, we will create an extension
|
|
145
|
+
// mechanism for this action config
|
|
146
|
+
// See https://github.com/finos/legend-studio/issues/65
|
|
147
|
+
actionConfigs: [
|
|
148
|
+
{
|
|
149
|
+
key: 'promote-to-service-btn',
|
|
150
|
+
renderer: (queryBuilderState: QueryBuilderState): React.ReactNode => (
|
|
151
|
+
<PromoteToServiceQueryBuilderAction
|
|
152
|
+
queryBuilderState={queryBuilderState}
|
|
153
|
+
/>
|
|
154
|
+
),
|
|
155
|
+
},
|
|
156
|
+
],
|
|
157
|
+
}),
|
|
158
|
+
);
|
|
159
|
+
};
|
|
@@ -75,10 +75,12 @@ import {
|
|
|
75
75
|
isSystemElement,
|
|
76
76
|
isDependencyElement,
|
|
77
77
|
isElementReadOnly,
|
|
78
|
+
Class,
|
|
78
79
|
} from '@finos/legend-graph';
|
|
79
80
|
import { useApplicationStore } from '@finos/legend-application';
|
|
80
81
|
import { PACKAGEABLE_ELEMENT_TYPE } from '../../../stores/shared/ModelUtil.js';
|
|
81
82
|
import { useLegendStudioApplicationStore } from '../../LegendStudioBaseStoreProvider.js';
|
|
83
|
+
import { queryClass } from '../edit-panel/uml-editor/ClassQueryBuilder.js';
|
|
82
84
|
|
|
83
85
|
const ElementRenamer = observer(() => {
|
|
84
86
|
const editorStore = useEditorStore();
|
|
@@ -198,6 +200,23 @@ const ExplorerContextMenu = observer(
|
|
|
198
200
|
? node.packageableElement
|
|
199
201
|
: undefined
|
|
200
202
|
: editorStore.graphManagerState.graph.root;
|
|
203
|
+
const elementTypes = ([PACKAGEABLE_ELEMENT_TYPE.PACKAGE] as string[])
|
|
204
|
+
.concat(editorStore.getSupportedElementTypes())
|
|
205
|
+
.filter(
|
|
206
|
+
// NOTE: we can only create package in root
|
|
207
|
+
(type) =>
|
|
208
|
+
_package !== editorStore.graphManagerState.graph.root ||
|
|
209
|
+
type === PACKAGEABLE_ELEMENT_TYPE.PACKAGE,
|
|
210
|
+
);
|
|
211
|
+
|
|
212
|
+
// actions
|
|
213
|
+
const buildQuery = editorStore.applicationStore.guardUnhandledError(
|
|
214
|
+
async () => {
|
|
215
|
+
if (node?.packageableElement instanceof Class) {
|
|
216
|
+
await queryClass(node.packageableElement, editorStore);
|
|
217
|
+
}
|
|
218
|
+
},
|
|
219
|
+
);
|
|
201
220
|
const removeElement = (): void => {
|
|
202
221
|
if (node) {
|
|
203
222
|
flowResult(editorStore.deleteElement(node.packageableElement)).catch(
|
|
@@ -237,21 +256,11 @@ const ExplorerContextMenu = observer(
|
|
|
237
256
|
.catch(applicationStore.alertUnhandledError);
|
|
238
257
|
}
|
|
239
258
|
};
|
|
240
|
-
|
|
241
259
|
const createNewElement =
|
|
242
260
|
(type: string): (() => void) =>
|
|
243
261
|
(): void =>
|
|
244
262
|
editorStore.newElementState.openModal(type, _package);
|
|
245
263
|
|
|
246
|
-
const elementTypes = ([PACKAGEABLE_ELEMENT_TYPE.PACKAGE] as string[])
|
|
247
|
-
.concat(editorStore.getSupportedElementTypes())
|
|
248
|
-
.filter(
|
|
249
|
-
// NOTE: we can only create package in root
|
|
250
|
-
(type) =>
|
|
251
|
-
_package !== editorStore.graphManagerState.graph.root ||
|
|
252
|
-
type === PACKAGEABLE_ELEMENT_TYPE.PACKAGE,
|
|
253
|
-
);
|
|
254
|
-
|
|
255
264
|
if (_package && !isReadOnly) {
|
|
256
265
|
return (
|
|
257
266
|
<MenuContent data-testid={LEGEND_STUDIO_TEST_ID.EXPLORER_CONTEXT_MENU}>
|
|
@@ -281,6 +290,7 @@ const ExplorerContextMenu = observer(
|
|
|
281
290
|
|
|
282
291
|
return (
|
|
283
292
|
<MenuContent data-testid={LEGEND_STUDIO_TEST_ID.EXPLORER_CONTEXT_MENU}>
|
|
293
|
+
<MenuContentItem onClick={buildQuery}>Query...</MenuContentItem>
|
|
284
294
|
{extraExplorerContextMenuItems}
|
|
285
295
|
{!isReadOnly && node && (
|
|
286
296
|
<>
|