@finos/legend-query-builder 4.1.2 → 4.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/components/QueryBuilderPropertyExpressionEditor.d.ts.map +1 -1
- package/lib/components/QueryBuilderPropertyExpressionEditor.js +1 -1
- package/lib/components/QueryBuilderPropertyExpressionEditor.js.map +1 -1
- package/lib/components/QueryBuilderResultPanel.d.ts.map +1 -1
- package/lib/components/QueryBuilderResultPanel.js +91 -24
- package/lib/components/QueryBuilderResultPanel.js.map +1 -1
- package/lib/components/QueryBuilderTextEditor.d.ts.map +1 -1
- package/lib/components/QueryBuilderTextEditor.js +3 -1
- package/lib/components/QueryBuilderTextEditor.js.map +1 -1
- package/lib/components/execution-plan/AllocationExecutionNodeViewer.d.ts +23 -0
- package/lib/components/execution-plan/AllocationExecutionNodeViewer.d.ts.map +1 -0
- package/lib/components/execution-plan/AllocationExecutionNodeViewer.js +32 -0
- package/lib/components/execution-plan/AllocationExecutionNodeViewer.js.map +1 -0
- package/lib/components/execution-plan/ConstantExecutionNodeViewer.d.ts +23 -0
- package/lib/components/execution-plan/ConstantExecutionNodeViewer.d.ts.map +1 -0
- package/lib/components/execution-plan/ConstantExecutionNodeViewer.js +35 -0
- package/lib/components/execution-plan/ConstantExecutionNodeViewer.js.map +1 -0
- package/lib/components/execution-plan/DataTypeResultTypeViewer.d.ts +21 -0
- package/lib/components/execution-plan/DataTypeResultTypeViewer.d.ts.map +1 -0
- package/lib/components/execution-plan/DataTypeResultTypeViewer.js +31 -0
- package/lib/components/execution-plan/DataTypeResultTypeViewer.js.map +1 -0
- package/lib/components/execution-plan/ExecutionPlanViewer.d.ts +10 -4
- package/lib/components/execution-plan/ExecutionPlanViewer.d.ts.map +1 -1
- package/lib/components/execution-plan/ExecutionPlanViewer.js +74 -62
- package/lib/components/execution-plan/ExecutionPlanViewer.js.map +1 -1
- package/lib/components/execution-plan/FunctionParametersValidationNodeViewer.d.ts +25 -0
- package/lib/components/execution-plan/FunctionParametersValidationNodeViewer.d.ts.map +1 -0
- package/lib/components/execution-plan/FunctionParametersValidationNodeViewer.js +47 -0
- package/lib/components/execution-plan/FunctionParametersValidationNodeViewer.js.map +1 -0
- package/lib/components/execution-plan/RelationalTDSInstantiationExecutionNodeViewer.d.ts +23 -0
- package/lib/components/execution-plan/RelationalTDSInstantiationExecutionNodeViewer.d.ts.map +1 -0
- package/lib/components/execution-plan/RelationalTDSInstantiationExecutionNodeViewer.js +31 -0
- package/lib/components/execution-plan/RelationalTDSInstantiationExecutionNodeViewer.js.map +1 -0
- package/lib/components/execution-plan/ResultTypeViewer.d.ts +21 -0
- package/lib/components/execution-plan/ResultTypeViewer.d.ts.map +1 -0
- package/lib/components/execution-plan/ResultTypeViewer.js +33 -0
- package/lib/components/execution-plan/ResultTypeViewer.js.map +1 -0
- package/lib/components/execution-plan/SQLExecutionNodeViewer.d.ts +9 -1
- package/lib/components/execution-plan/SQLExecutionNodeViewer.d.ts.map +1 -1
- package/lib/components/execution-plan/SQLExecutionNodeViewer.js +12 -6
- package/lib/components/execution-plan/SQLExecutionNodeViewer.js.map +1 -1
- package/lib/components/execution-plan/SequenceExecutionNodeViewer.d.ts +23 -0
- package/lib/components/execution-plan/SequenceExecutionNodeViewer.d.ts.map +1 -0
- package/lib/components/execution-plan/SequenceExecutionNodeViewer.js +38 -0
- package/lib/components/execution-plan/SequenceExecutionNodeViewer.js.map +1 -0
- package/lib/components/execution-plan/TDSResultTypeViewer.d.ts +21 -0
- package/lib/components/execution-plan/TDSResultTypeViewer.d.ts.map +1 -0
- package/lib/components/execution-plan/TDSResultTypeViewer.js +25 -0
- package/lib/components/execution-plan/TDSResultTypeViewer.js.map +1 -0
- package/lib/components/explorer/QueryBuilderMilestoningEditor.d.ts.map +1 -1
- package/lib/components/explorer/QueryBuilderMilestoningEditor.js +3 -3
- package/lib/components/explorer/QueryBuilderMilestoningEditor.js.map +1 -1
- package/lib/components/fetch-structure/QueryBuilderPostFilterPanel.d.ts.map +1 -1
- package/lib/components/fetch-structure/QueryBuilderPostFilterPanel.js +25 -34
- package/lib/components/fetch-structure/QueryBuilderPostFilterPanel.js.map +1 -1
- package/lib/components/fetch-structure/QueryBuilderTDSPanel.d.ts.map +1 -1
- package/lib/components/fetch-structure/QueryBuilderTDSPanel.js +68 -22
- package/lib/components/fetch-structure/QueryBuilderTDSPanel.js.map +1 -1
- package/lib/components/fetch-structure/QueryBuilderTDSWindowPanel.d.ts.map +1 -1
- package/lib/components/fetch-structure/QueryBuilderTDSWindowPanel.js +4 -4
- package/lib/components/fetch-structure/QueryBuilderTDSWindowPanel.js.map +1 -1
- package/lib/components/filter/QueryBuilderFilterPanel.d.ts.map +1 -1
- package/lib/components/filter/QueryBuilderFilterPanel.js +21 -32
- package/lib/components/filter/QueryBuilderFilterPanel.js.map +1 -1
- package/lib/components/shared/LambdaEditor.d.ts.map +1 -1
- package/lib/components/shared/LambdaEditor.js +10 -3
- package/lib/components/shared/LambdaEditor.js.map +1 -1
- package/lib/index.css +2 -2
- package/lib/index.css.map +1 -1
- package/lib/package.json +4 -4
- package/lib/stores/QueryBuilderResultState.d.ts +0 -3
- package/lib/stores/QueryBuilderResultState.d.ts.map +1 -1
- package/lib/stores/QueryBuilderResultState.js +2 -25
- package/lib/stores/QueryBuilderResultState.js.map +1 -1
- package/lib/stores/QueryBuilderTextEditorState.d.ts +3 -1
- package/lib/stores/QueryBuilderTextEditorState.d.ts.map +1 -1
- package/lib/stores/QueryBuilderTextEditorState.js +2 -2
- package/lib/stores/QueryBuilderTextEditorState.js.map +1 -1
- package/lib/stores/QueryLoaderState.d.ts +2 -0
- package/lib/stores/QueryLoaderState.d.ts.map +1 -1
- package/lib/stores/QueryLoaderState.js +7 -3
- package/lib/stores/QueryLoaderState.js.map +1 -1
- package/lib/stores/execution-plan/ExecutionPlanState.d.ts +14 -1
- package/lib/stores/execution-plan/ExecutionPlanState.d.ts.map +1 -1
- package/lib/stores/execution-plan/ExecutionPlanState.js +86 -3
- package/lib/stores/execution-plan/ExecutionPlanState.js.map +1 -1
- package/lib/stores/fetch-structure/tds/QueryBuilderTDSState.d.ts.map +1 -1
- package/lib/stores/fetch-structure/tds/QueryBuilderTDSState.js +3 -1
- package/lib/stores/fetch-structure/tds/QueryBuilderTDSState.js.map +1 -1
- package/lib/stores/fetch-structure/tds/projection/QueryBuilderProjectionColumnState.d.ts +4 -1
- package/lib/stores/fetch-structure/tds/projection/QueryBuilderProjectionColumnState.d.ts.map +1 -1
- package/lib/stores/fetch-structure/tds/projection/QueryBuilderProjectionColumnState.js +5 -3
- package/lib/stores/fetch-structure/tds/projection/QueryBuilderProjectionColumnState.js.map +1 -1
- package/lib/stores/shared/LambdaEditorState.d.ts +7 -2
- package/lib/stores/shared/LambdaEditorState.d.ts.map +1 -1
- package/lib/stores/shared/LambdaEditorState.js +7 -2
- package/lib/stores/shared/LambdaEditorState.js.map +1 -1
- package/package.json +12 -12
- package/src/components/QueryBuilderPropertyExpressionEditor.tsx +1 -2
- package/src/components/QueryBuilderResultPanel.tsx +146 -30
- package/src/components/QueryBuilderTextEditor.tsx +3 -1
- package/src/components/execution-plan/AllocationExecutionNodeViewer.tsx +77 -0
- package/src/components/execution-plan/ConstantExecutionNodeViewer.tsx +82 -0
- package/src/components/execution-plan/DataTypeResultTypeViewer.tsx +52 -0
- package/src/components/execution-plan/ExecutionPlanViewer.tsx +205 -195
- package/src/components/execution-plan/FunctionParametersValidationNodeViewer.tsx +118 -0
- package/src/components/execution-plan/RelationalTDSInstantiationExecutionNodeViewer.tsx +68 -0
- package/src/components/execution-plan/ResultTypeViewer.tsx +37 -0
- package/src/components/execution-plan/SQLExecutionNodeViewer.tsx +50 -19
- package/src/components/execution-plan/SequenceExecutionNodeViewer.tsx +95 -0
- package/src/components/execution-plan/TDSResultTypeViewer.tsx +59 -0
- package/src/components/explorer/QueryBuilderMilestoningEditor.tsx +5 -8
- package/src/components/fetch-structure/QueryBuilderPostFilterPanel.tsx +37 -62
- package/src/components/fetch-structure/QueryBuilderTDSPanel.tsx +161 -45
- package/src/components/fetch-structure/QueryBuilderTDSWindowPanel.tsx +6 -8
- package/src/components/filter/QueryBuilderFilterPanel.tsx +49 -73
- package/src/components/shared/LambdaEditor.tsx +10 -3
- package/src/stores/QueryBuilderResultState.ts +1 -42
- package/src/stores/QueryBuilderTextEditorState.ts +4 -2
- package/src/stores/QueryLoaderState.ts +11 -1
- package/src/stores/execution-plan/ExecutionPlanState.ts +142 -4
- package/src/stores/fetch-structure/tds/QueryBuilderTDSState.ts +3 -1
- package/src/stores/fetch-structure/tds/projection/QueryBuilderProjectionColumnState.ts +8 -3
- package/src/stores/shared/LambdaEditorState.ts +12 -5
- package/tsconfig.json +8 -0
|
@@ -0,0 +1,37 @@
|
|
|
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 { observer } from 'mobx-react-lite';
|
|
18
|
+
import {
|
|
19
|
+
type ResultType,
|
|
20
|
+
TDSResultType,
|
|
21
|
+
DataTypeResultType,
|
|
22
|
+
} from '@finos/legend-graph';
|
|
23
|
+
import { DataTypeResultTypeViewer } from './DataTypeResultTypeViewer.js';
|
|
24
|
+
import { TDSResultTypeViewer } from './TDSResultTypeViewer.js';
|
|
25
|
+
|
|
26
|
+
export const ResultTypeViewer: React.FC<{
|
|
27
|
+
resultType: ResultType;
|
|
28
|
+
}> = observer((props) => {
|
|
29
|
+
const { resultType } = props;
|
|
30
|
+
if (resultType instanceof DataTypeResultType) {
|
|
31
|
+
return <DataTypeResultTypeViewer resultType={resultType} />;
|
|
32
|
+
} else if (resultType instanceof TDSResultType) {
|
|
33
|
+
return <TDSResultTypeViewer resultType={resultType} />;
|
|
34
|
+
} else {
|
|
35
|
+
return <></>;
|
|
36
|
+
}
|
|
37
|
+
});
|
|
@@ -19,7 +19,11 @@ import {
|
|
|
19
19
|
type ExecutionPlanState,
|
|
20
20
|
EXECUTION_PLAN_VIEW_MODE,
|
|
21
21
|
} from '../../stores/execution-plan/ExecutionPlanState.js';
|
|
22
|
-
import {
|
|
22
|
+
import {
|
|
23
|
+
type SQLResultColumn,
|
|
24
|
+
stringifyDataType,
|
|
25
|
+
type ResultType,
|
|
26
|
+
} from '@finos/legend-graph';
|
|
23
27
|
import {
|
|
24
28
|
PanelListItem,
|
|
25
29
|
CopyIcon,
|
|
@@ -28,6 +32,7 @@ import {
|
|
|
28
32
|
PanelContent,
|
|
29
33
|
} from '@finos/legend-art';
|
|
30
34
|
import { tryToFormatSql } from '../QueryBuilderResultPanel.js';
|
|
35
|
+
import { ResultTypeViewer } from './ResultTypeViewer.js';
|
|
31
36
|
import {
|
|
32
37
|
CodeEditor,
|
|
33
38
|
CODE_EDITOR_LANGUAGE,
|
|
@@ -40,13 +45,14 @@ import {
|
|
|
40
45
|
* @modularize
|
|
41
46
|
* See https://github.com/finos/legend-studio/issues/65
|
|
42
47
|
*/
|
|
43
|
-
|
|
48
|
+
|
|
49
|
+
export const SQLExecutionNodeViewerHelper: React.FC<{
|
|
44
50
|
query: string;
|
|
45
51
|
resultColumns: SQLResultColumn[];
|
|
52
|
+
resultType: ResultType;
|
|
46
53
|
executionPlanState: ExecutionPlanState;
|
|
47
54
|
}> = observer((props) => {
|
|
48
|
-
const { query, resultColumns, executionPlanState } = props;
|
|
49
|
-
|
|
55
|
+
const { query, resultColumns, resultType, executionPlanState } = props;
|
|
50
56
|
const applicationStore = executionPlanState.applicationStore;
|
|
51
57
|
const copyExpression = (value: string): void => {
|
|
52
58
|
applicationStore.clipboardService
|
|
@@ -60,12 +66,9 @@ export const SQLExecutionNodeViewer: React.FC<{
|
|
|
60
66
|
)
|
|
61
67
|
.catch(applicationStore.alertUnhandledError);
|
|
62
68
|
};
|
|
69
|
+
|
|
63
70
|
return (
|
|
64
|
-
|
|
65
|
-
darkMode={
|
|
66
|
-
!applicationStore.layoutService.TEMPORARY__isLightColorThemeEnabled
|
|
67
|
-
}
|
|
68
|
-
>
|
|
71
|
+
<>
|
|
69
72
|
<div className="query-builder__sql__container">
|
|
70
73
|
<PanelDivider />
|
|
71
74
|
<div key={query}>
|
|
@@ -125,17 +128,45 @@ export const SQLExecutionNodeViewer: React.FC<{
|
|
|
125
128
|
</table>
|
|
126
129
|
</div>
|
|
127
130
|
</div>
|
|
128
|
-
<
|
|
131
|
+
<ResultTypeViewer resultType={resultType} />
|
|
132
|
+
</>
|
|
133
|
+
);
|
|
134
|
+
});
|
|
129
135
|
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
136
|
+
export const SQLExecutionNodeViewer: React.FC<{
|
|
137
|
+
query: string;
|
|
138
|
+
resultColumns: SQLResultColumn[];
|
|
139
|
+
resultType: ResultType;
|
|
140
|
+
executionPlanState: ExecutionPlanState;
|
|
141
|
+
viewJson: boolean;
|
|
142
|
+
}> = observer((props) => {
|
|
143
|
+
const { query, resultColumns, resultType, executionPlanState, viewJson } =
|
|
144
|
+
props;
|
|
145
|
+
const applicationStore = executionPlanState.applicationStore;
|
|
146
|
+
|
|
147
|
+
return (
|
|
148
|
+
<PanelContent
|
|
149
|
+
darkMode={
|
|
150
|
+
!applicationStore.layoutService.TEMPORARY__isLightColorThemeEnabled
|
|
151
|
+
}
|
|
152
|
+
>
|
|
153
|
+
<SQLExecutionNodeViewerHelper
|
|
154
|
+
query={query}
|
|
155
|
+
resultColumns={resultColumns}
|
|
156
|
+
resultType={resultType}
|
|
157
|
+
executionPlanState={executionPlanState}
|
|
158
|
+
/>
|
|
159
|
+
{viewJson && (
|
|
160
|
+
<div className="query-builder__sql__container">
|
|
161
|
+
<Button
|
|
162
|
+
className="btn--dark execution-node-viewer__unsupported-view__to-text-mode__btn"
|
|
163
|
+
onClick={(): void =>
|
|
164
|
+
executionPlanState.setViewMode(EXECUTION_PLAN_VIEW_MODE.JSON)
|
|
165
|
+
}
|
|
166
|
+
text="View JSON"
|
|
167
|
+
/>
|
|
168
|
+
</div>
|
|
169
|
+
)}
|
|
139
170
|
<PanelDivider />
|
|
140
171
|
</PanelContent>
|
|
141
172
|
);
|
|
@@ -0,0 +1,95 @@
|
|
|
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 { observer } from 'mobx-react-lite';
|
|
18
|
+
import { generateExecutionNodeLabel } from './ExecutionPlanViewer.js';
|
|
19
|
+
import {
|
|
20
|
+
type ExecutionPlanState,
|
|
21
|
+
EXECUTION_PLAN_VIEW_MODE,
|
|
22
|
+
ExecutionPlanViewTreeNodeData,
|
|
23
|
+
ExecutionNodeTreeNodeData,
|
|
24
|
+
} from '../../stores/execution-plan/ExecutionPlanState.js';
|
|
25
|
+
|
|
26
|
+
import {
|
|
27
|
+
PanelListItem,
|
|
28
|
+
PanelDivider,
|
|
29
|
+
Button,
|
|
30
|
+
PanelContent,
|
|
31
|
+
} from '@finos/legend-art';
|
|
32
|
+
import type { ExecutionNode, SequenceExecutionNode } from '@finos/legend-graph';
|
|
33
|
+
import { ResultTypeViewer } from './ResultTypeViewer.js';
|
|
34
|
+
|
|
35
|
+
export const SequenceExecutionNodeViewer: React.FC<{
|
|
36
|
+
node: SequenceExecutionNode;
|
|
37
|
+
executionPlanState: ExecutionPlanState;
|
|
38
|
+
}> = observer((props) => {
|
|
39
|
+
const { node, executionPlanState } = props;
|
|
40
|
+
const resultType = node.resultType;
|
|
41
|
+
const applicationStore = executionPlanState.applicationStore;
|
|
42
|
+
const openExecutionNode = (child: ExecutionNode): void => {
|
|
43
|
+
const newNode = executionPlanState.treeData?.nodes.get(child._UUID);
|
|
44
|
+
if (newNode instanceof ExecutionPlanViewTreeNodeData) {
|
|
45
|
+
executionPlanState.transformMetadataToProtocolJson(newNode.executionPlan);
|
|
46
|
+
} else if (newNode instanceof ExecutionNodeTreeNodeData) {
|
|
47
|
+
executionPlanState.transformMetadataToProtocolJson(newNode.executionNode);
|
|
48
|
+
}
|
|
49
|
+
executionPlanState.setSelectedNode(newNode);
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
return (
|
|
53
|
+
<PanelContent
|
|
54
|
+
darkMode={
|
|
55
|
+
!applicationStore.layoutService.TEMPORARY__isLightColorThemeEnabled
|
|
56
|
+
}
|
|
57
|
+
>
|
|
58
|
+
<div className="query-builder__sequence__container">
|
|
59
|
+
<div>
|
|
60
|
+
<PanelListItem className="query-builder__sequence__container__item__label">
|
|
61
|
+
Execution Nodes
|
|
62
|
+
</PanelListItem>
|
|
63
|
+
<PanelDivider />
|
|
64
|
+
{node.executionNodes.map((child, index) => (
|
|
65
|
+
<div
|
|
66
|
+
className="query-builder__sequence__container__item"
|
|
67
|
+
key={child._UUID}
|
|
68
|
+
>
|
|
69
|
+
<button
|
|
70
|
+
className="query-builder__sequence__container__item__btn"
|
|
71
|
+
onClick={() => openExecutionNode(child)}
|
|
72
|
+
tabIndex={-1}
|
|
73
|
+
title={`Go to ${generateExecutionNodeLabel(child)}`}
|
|
74
|
+
>
|
|
75
|
+
{`${index + 1}: ${generateExecutionNodeLabel(child)}`}
|
|
76
|
+
</button>
|
|
77
|
+
</div>
|
|
78
|
+
))}
|
|
79
|
+
</div>
|
|
80
|
+
</div>
|
|
81
|
+
<PanelDivider />
|
|
82
|
+
<ResultTypeViewer resultType={resultType} />
|
|
83
|
+
<div className="query-builder__execution__container">
|
|
84
|
+
<Button
|
|
85
|
+
className="btn--dark execution-node-viewer__unsupported-view__to-text-mode__btn"
|
|
86
|
+
onClick={(): void =>
|
|
87
|
+
executionPlanState.setViewMode(EXECUTION_PLAN_VIEW_MODE.JSON)
|
|
88
|
+
}
|
|
89
|
+
text="View JSON"
|
|
90
|
+
/>
|
|
91
|
+
</div>
|
|
92
|
+
<PanelDivider />
|
|
93
|
+
</PanelContent>
|
|
94
|
+
);
|
|
95
|
+
});
|
|
@@ -0,0 +1,59 @@
|
|
|
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 { observer } from 'mobx-react-lite';
|
|
18
|
+
import { PanelListItem, PanelDivider } from '@finos/legend-art';
|
|
19
|
+
import {
|
|
20
|
+
PackageableElementImplicitReference,
|
|
21
|
+
type TDSResultType,
|
|
22
|
+
} from '@finos/legend-graph';
|
|
23
|
+
|
|
24
|
+
export const TDSResultTypeViewer: React.FC<{
|
|
25
|
+
resultType: TDSResultType;
|
|
26
|
+
}> = observer((props) => {
|
|
27
|
+
const { resultType } = props;
|
|
28
|
+
|
|
29
|
+
return (
|
|
30
|
+
<div className="query-builder__result__container">
|
|
31
|
+
<PanelListItem className="query-builder__result__container__item__tds">
|
|
32
|
+
Result type: TDS
|
|
33
|
+
</PanelListItem>
|
|
34
|
+
<PanelDivider />
|
|
35
|
+
{
|
|
36
|
+
<table className="table query-builder__result__container__table">
|
|
37
|
+
<thead>
|
|
38
|
+
<tr>
|
|
39
|
+
<th className="table__cell--left">Label</th>
|
|
40
|
+
<th className="table__cell--left">Result DataType</th>
|
|
41
|
+
</tr>
|
|
42
|
+
</thead>
|
|
43
|
+
<tbody>
|
|
44
|
+
{resultType.tdsColumns.map((column) => (
|
|
45
|
+
<tr key={column.name}>
|
|
46
|
+
<td className="table__cell--left">{column.name}</td>
|
|
47
|
+
<td className="table__cell--left">
|
|
48
|
+
{column.type instanceof PackageableElementImplicitReference &&
|
|
49
|
+
(column.type.input ?? '')}
|
|
50
|
+
</td>
|
|
51
|
+
</tr>
|
|
52
|
+
))}
|
|
53
|
+
</tbody>
|
|
54
|
+
</table>
|
|
55
|
+
}
|
|
56
|
+
<PanelDivider />
|
|
57
|
+
</div>
|
|
58
|
+
);
|
|
59
|
+
});
|
|
@@ -65,10 +65,10 @@ const MilestoningParameterEditor = observer(
|
|
|
65
65
|
},
|
|
66
66
|
[queryBuilderState, stereotype],
|
|
67
67
|
);
|
|
68
|
-
const [{
|
|
68
|
+
const [{ isDragOver }, dropConnector] = useDrop<
|
|
69
69
|
QueryBuilderVariableDragSource,
|
|
70
70
|
void,
|
|
71
|
-
{
|
|
71
|
+
{ isDragOver: boolean }
|
|
72
72
|
>(
|
|
73
73
|
() => ({
|
|
74
74
|
accept: [QUERY_BUILDER_VARIABLE_DND_TYPE],
|
|
@@ -77,10 +77,8 @@ const MilestoningParameterEditor = observer(
|
|
|
77
77
|
handleDrop(item);
|
|
78
78
|
}
|
|
79
79
|
},
|
|
80
|
-
collect: (
|
|
81
|
-
monitor
|
|
82
|
-
): { isMilestoningParameterValueDragOver: boolean } => ({
|
|
83
|
-
isMilestoningParameterValueDragOver: monitor.isOver({
|
|
80
|
+
collect: (monitor): { isDragOver: boolean } => ({
|
|
81
|
+
isDragOver: monitor.isOver({
|
|
84
82
|
shallow: true,
|
|
85
83
|
}),
|
|
86
84
|
}),
|
|
@@ -121,9 +119,8 @@ const MilestoningParameterEditor = observer(
|
|
|
121
119
|
return (
|
|
122
120
|
<div ref={dropConnector} className="query-builder__variable-editor">
|
|
123
121
|
<PanelEntryDropZonePlaceholder
|
|
124
|
-
|
|
122
|
+
isDragOver={isDragOver}
|
|
125
123
|
label="Change Milestoning Parameter Value"
|
|
126
|
-
className="query-builder__dnd__placeholder"
|
|
127
124
|
>
|
|
128
125
|
<BasicValueSpecificationEditor
|
|
129
126
|
valueSpecification={milestoningParameter}
|
|
@@ -153,9 +153,9 @@ const QueryBuilderPostFilterGroupConditionEditor = observer(
|
|
|
153
153
|
(props: {
|
|
154
154
|
node: QueryBuilderPostFilterTreeGroupNodeData;
|
|
155
155
|
isDragOver: boolean;
|
|
156
|
-
|
|
156
|
+
isDroppable: boolean;
|
|
157
157
|
}) => {
|
|
158
|
-
const { node, isDragOver,
|
|
158
|
+
const { node, isDragOver, isDroppable: isDroppable } = props;
|
|
159
159
|
const switchOperation: React.MouseEventHandler<HTMLDivElement> = (
|
|
160
160
|
event,
|
|
161
161
|
): void => {
|
|
@@ -166,19 +166,16 @@ const QueryBuilderPostFilterGroupConditionEditor = observer(
|
|
|
166
166
|
: QUERY_BUILDER_GROUP_OPERATION.AND,
|
|
167
167
|
);
|
|
168
168
|
};
|
|
169
|
+
|
|
170
|
+
const operationName =
|
|
171
|
+
node.groupOperation === QUERY_BUILDER_GROUP_OPERATION.AND ? 'AND' : 'OR';
|
|
172
|
+
|
|
169
173
|
return (
|
|
170
174
|
<div className="query-builder-post-filter-tree__node__label__content dnd__entry__container">
|
|
171
|
-
{showDroppableSuggestion && (
|
|
172
|
-
<div
|
|
173
|
-
className={clsx('dnd__entry--droppable__indicator ', {
|
|
174
|
-
'dnd__entry--droppable__indicator--dragover': isDragOver,
|
|
175
|
-
})}
|
|
176
|
-
></div>
|
|
177
|
-
)}
|
|
178
175
|
<PanelEntryDropZonePlaceholder
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
176
|
+
isDragOver={isDragOver}
|
|
177
|
+
isDroppable={isDroppable}
|
|
178
|
+
label={`Add to Logical Group '${operationName}'`}
|
|
182
179
|
>
|
|
183
180
|
<div
|
|
184
181
|
className={clsx('query-builder-post-filter-tree__group-node', {
|
|
@@ -243,9 +240,8 @@ export const QueryBuilderColumnBadge = observer(
|
|
|
243
240
|
return (
|
|
244
241
|
<div ref={dropConnector} className="query-builder-column-badge">
|
|
245
242
|
<PanelEntryDropZonePlaceholder
|
|
246
|
-
|
|
243
|
+
isDragOver={isDragOver}
|
|
247
244
|
label="Change Property"
|
|
248
|
-
className="query-builder__dnd__placeholder"
|
|
249
245
|
>
|
|
250
246
|
<div className="query-builder-column-badge__content">
|
|
251
247
|
{type && (
|
|
@@ -367,8 +363,8 @@ const QueryBuilderPostFilterConditionEditor = observer(
|
|
|
367
363
|
cleanUpReloadValues,
|
|
368
364
|
};
|
|
369
365
|
|
|
370
|
-
const {
|
|
371
|
-
|
|
366
|
+
const { isDroppable } = useDragLayer((monitor) => ({
|
|
367
|
+
isDroppable:
|
|
372
368
|
monitor.isDragging() &&
|
|
373
369
|
(monitor.getItemType() === QUERY_BUILDER_PROJECTION_COLUMN_DND_TYPE ||
|
|
374
370
|
monitor.getItemType() === QUERY_BUILDER_WINDOW_COLUMN_DND_TYPE),
|
|
@@ -376,20 +372,10 @@ const QueryBuilderPostFilterConditionEditor = observer(
|
|
|
376
372
|
|
|
377
373
|
return (
|
|
378
374
|
<div className="query-builder-post-filter-tree__node__label__content dnd__entry__container">
|
|
379
|
-
{showDroppableSuggestion && (
|
|
380
|
-
<div
|
|
381
|
-
className={clsx(
|
|
382
|
-
'dnd__entry--droppable__indicator query-builder-post-filter-tree__droppable--full',
|
|
383
|
-
{
|
|
384
|
-
'dnd__entry--droppable__indicator--dragover': isDragOver,
|
|
385
|
-
},
|
|
386
|
-
)}
|
|
387
|
-
></div>
|
|
388
|
-
)}
|
|
389
375
|
<PanelEntryDropZonePlaceholder
|
|
390
|
-
|
|
376
|
+
isDragOver={isDragOver}
|
|
377
|
+
isDroppable={isDroppable}
|
|
391
378
|
label="Add New Logical Group"
|
|
392
|
-
className="query-builder__dnd__placeholder"
|
|
393
379
|
>
|
|
394
380
|
<div className="query-builder-post-filter-tree__condition-node">
|
|
395
381
|
<div className="query-builder-post-filter-tree__condition-node__property">
|
|
@@ -433,9 +419,8 @@ const QueryBuilderPostFilterConditionEditor = observer(
|
|
|
433
419
|
className="query-builder-post-filter-tree__condition-node__value"
|
|
434
420
|
>
|
|
435
421
|
<PanelEntryDropZonePlaceholder
|
|
436
|
-
|
|
422
|
+
isDragOver={isFilterValueDragOver}
|
|
437
423
|
label="Change Filter Value"
|
|
438
|
-
className="query-builder__dnd__placeholder"
|
|
439
424
|
>
|
|
440
425
|
<BasicValueSpecificationEditor
|
|
441
426
|
valueSpecification={node.condition.value}
|
|
@@ -467,22 +452,17 @@ const QueryBuilderPostFilterBlankConditionEditor = observer(
|
|
|
467
452
|
(props: {
|
|
468
453
|
node: QueryBuilderPostFilterTreeBlankConditionNodeData;
|
|
469
454
|
isDragOver: boolean;
|
|
470
|
-
|
|
455
|
+
isDroppable: boolean;
|
|
471
456
|
}) => {
|
|
472
|
-
const { isDragOver,
|
|
457
|
+
const { isDragOver, isDroppable } = props;
|
|
473
458
|
return (
|
|
474
459
|
<div className="query-builder-post-filter-tree__node__label__content">
|
|
475
460
|
<PanelEntryDropZonePlaceholder
|
|
476
|
-
|
|
461
|
+
isDragOver={isDragOver}
|
|
462
|
+
isDroppable={isDroppable}
|
|
477
463
|
label="Create Condition"
|
|
478
|
-
className="query-builder__dnd__placeholder"
|
|
479
464
|
>
|
|
480
|
-
<div
|
|
481
|
-
className={clsx('query-builder-post-filter-tree__blank-node', {
|
|
482
|
-
'query-builder-post-filter-tree__blank-node--droppable':
|
|
483
|
-
showDroppableSuggestion,
|
|
484
|
-
})}
|
|
485
|
-
>
|
|
465
|
+
<div className="query-builder-post-filter-tree__blank-node">
|
|
486
466
|
blank
|
|
487
467
|
</div>
|
|
488
468
|
</PanelEntryDropZonePlaceholder>
|
|
@@ -646,8 +626,8 @@ const QueryBuilderPostFilterTreeNodeContainer = observer(
|
|
|
646
626
|
const onContextMenuOpen = (): void => setIsSelectedFromContextMenu(true);
|
|
647
627
|
const onContextMenuClose = (): void => setIsSelectedFromContextMenu(false);
|
|
648
628
|
|
|
649
|
-
const {
|
|
650
|
-
|
|
629
|
+
const { isDroppable } = useDragLayer((monitor) => ({
|
|
630
|
+
isDroppable:
|
|
651
631
|
monitor.isDragging() &&
|
|
652
632
|
(monitor.getItemType() === QUERY_BUILDER_PROJECTION_COLUMN_DND_TYPE ||
|
|
653
633
|
monitor.getItemType() === QUERY_BUILDER_WINDOW_COLUMN_DND_TYPE),
|
|
@@ -698,16 +678,12 @@ const QueryBuilderPostFilterTreeNodeContainer = observer(
|
|
|
698
678
|
<div
|
|
699
679
|
className={clsx(
|
|
700
680
|
'tree-view__node__label query-builder-post-filter-tree__node__label',
|
|
701
|
-
{
|
|
702
|
-
'query-builder-post-filter-tree__node__label--expandable':
|
|
703
|
-
isExpandable,
|
|
704
|
-
},
|
|
705
681
|
)}
|
|
706
682
|
>
|
|
707
683
|
{node instanceof QueryBuilderPostFilterTreeGroupNodeData && (
|
|
708
684
|
<QueryBuilderPostFilterGroupConditionEditor
|
|
709
685
|
node={node}
|
|
710
|
-
|
|
686
|
+
isDroppable={isDroppable}
|
|
711
687
|
isDragOver={isDragOver}
|
|
712
688
|
/>
|
|
713
689
|
)}
|
|
@@ -722,7 +698,7 @@ const QueryBuilderPostFilterTreeNodeContainer = observer(
|
|
|
722
698
|
<QueryBuilderPostFilterBlankConditionEditor
|
|
723
699
|
node={node}
|
|
724
700
|
isDragOver={isDragOver}
|
|
725
|
-
|
|
701
|
+
isDroppable={isDroppable}
|
|
726
702
|
/>
|
|
727
703
|
)}
|
|
728
704
|
</div>
|
|
@@ -962,8 +938,8 @@ const QueryBuilderPostFilterPanelContent = observer(
|
|
|
962
938
|
const addPostFilterRef = useRef<HTMLInputElement>(null);
|
|
963
939
|
dropTargetConnector(addPostFilterRef);
|
|
964
940
|
|
|
965
|
-
const {
|
|
966
|
-
|
|
941
|
+
const { isDroppable } = useDragLayer((monitor) => ({
|
|
942
|
+
isDroppable:
|
|
967
943
|
monitor.isDragging() &&
|
|
968
944
|
(monitor.getItemType() === QUERY_BUILDER_PROJECTION_COLUMN_DND_TYPE ||
|
|
969
945
|
monitor.getItemType() === QUERY_BUILDER_WINDOW_COLUMN_DND_TYPE),
|
|
@@ -1055,10 +1031,7 @@ const QueryBuilderPostFilterPanelContent = observer(
|
|
|
1055
1031
|
<PanelContent>
|
|
1056
1032
|
<PanelDropZone
|
|
1057
1033
|
isDragOver={isDragOver && postFilterState.isEmpty}
|
|
1058
|
-
|
|
1059
|
-
showDroppableSuggestion && postFilterState.isEmpty
|
|
1060
|
-
}
|
|
1061
|
-
className="query-builder__panel--droppable"
|
|
1034
|
+
isDroppable={isDroppable && postFilterState.isEmpty}
|
|
1062
1035
|
dropTargetConnector={dropTargetConnector}
|
|
1063
1036
|
>
|
|
1064
1037
|
{postFilterState.isEmpty && (
|
|
@@ -1078,17 +1051,19 @@ const QueryBuilderPostFilterPanelContent = observer(
|
|
|
1078
1051
|
<QueryBuilderPostFilterTree tdsState={tdsState} />
|
|
1079
1052
|
</>
|
|
1080
1053
|
)}
|
|
1081
|
-
{
|
|
1054
|
+
{isDroppable && !postFilterState.isEmpty && (
|
|
1082
1055
|
<div
|
|
1083
1056
|
ref={addPostFilterRef}
|
|
1084
|
-
className=
|
|
1085
|
-
'query-builder-post-filter-tree__blank-node--droppable--tall',
|
|
1086
|
-
{
|
|
1087
|
-
'dnd__entry--droppable__indicator--dragover': isDragOver,
|
|
1088
|
-
},
|
|
1089
|
-
)}
|
|
1057
|
+
className="query-builder-post-filter-tree__free-drop-zone__container"
|
|
1090
1058
|
>
|
|
1091
|
-
|
|
1059
|
+
<PanelEntryDropZonePlaceholder
|
|
1060
|
+
isDragOver={isDragOver}
|
|
1061
|
+
isDroppable={isDroppable}
|
|
1062
|
+
className="query-builder-post-filter-tree__free-drop-zone"
|
|
1063
|
+
label="Add post-filter to main group"
|
|
1064
|
+
>
|
|
1065
|
+
<></>{' '}
|
|
1066
|
+
</PanelEntryDropZonePlaceholder>
|
|
1092
1067
|
</div>
|
|
1093
1068
|
)}
|
|
1094
1069
|
</PanelDropZone>
|