@finos/legend-application-query 5.1.0 → 5.2.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/LegendQueryApplicationConfig.d.ts +17 -1
- package/lib/application/LegendQueryApplicationConfig.d.ts.map +1 -1
- package/lib/application/LegendQueryApplicationConfig.js +23 -1
- package/lib/application/LegendQueryApplicationConfig.js.map +1 -1
- package/lib/components/QueryBuilder.d.ts.map +1 -1
- package/lib/components/QueryBuilder.js +3 -1
- package/lib/components/QueryBuilder.js.map +1 -1
- package/lib/components/QueryBuilderExplorerPanel.d.ts.map +1 -1
- package/lib/components/QueryBuilderExplorerPanel.js +7 -34
- package/lib/components/QueryBuilderExplorerPanel.js.map +1 -1
- package/lib/components/QueryBuilderFetchStructurePanel.d.ts.map +1 -1
- package/lib/components/QueryBuilderFetchStructurePanel.js +77 -66
- package/lib/components/QueryBuilderFetchStructurePanel.js.map +1 -1
- package/lib/components/QueryBuilderFilterPanel.d.ts.map +1 -1
- package/lib/components/QueryBuilderFilterPanel.js +28 -58
- package/lib/components/QueryBuilderFilterPanel.js.map +1 -1
- package/lib/components/QueryBuilderFunctionsExplorerPanel.d.ts.map +1 -1
- package/lib/components/QueryBuilderFunctionsExplorerPanel.js +9 -39
- package/lib/components/QueryBuilderFunctionsExplorerPanel.js.map +1 -1
- package/lib/components/QueryBuilderGraphFetchTreePanel.d.ts.map +1 -1
- package/lib/components/QueryBuilderGraphFetchTreePanel.js +5 -5
- package/lib/components/QueryBuilderGraphFetchTreePanel.js.map +1 -1
- package/lib/components/QueryBuilderLambdaEditor.d.ts +1 -0
- package/lib/components/QueryBuilderLambdaEditor.d.ts.map +1 -1
- package/lib/components/QueryBuilderLambdaEditor.js +2 -2
- package/lib/components/QueryBuilderLambdaEditor.js.map +1 -1
- package/lib/components/QueryBuilderMilestoneEditor.js +5 -5
- package/lib/components/QueryBuilderMilestoneEditor.js.map +1 -1
- package/lib/components/QueryBuilderPanelIssueCountBadge.d.ts +20 -0
- package/lib/components/QueryBuilderPanelIssueCountBadge.d.ts.map +1 -0
- package/lib/components/QueryBuilderPanelIssueCountBadge.js +28 -0
- package/lib/components/QueryBuilderPanelIssueCountBadge.js.map +1 -0
- package/lib/components/QueryBuilderParameterPanel.d.ts.map +1 -1
- package/lib/components/QueryBuilderParameterPanel.js +13 -34
- package/lib/components/QueryBuilderParameterPanel.js.map +1 -1
- package/lib/components/QueryBuilderPostFilterPanel.d.ts.map +1 -1
- package/lib/components/QueryBuilderPostFilterPanel.js +33 -58
- package/lib/components/QueryBuilderPostFilterPanel.js.map +1 -1
- package/lib/components/QueryBuilderProjectionPanel.d.ts.map +1 -1
- package/lib/components/QueryBuilderProjectionPanel.js +47 -67
- package/lib/components/QueryBuilderProjectionPanel.js.map +1 -1
- package/lib/components/QueryBuilderPropertyExpressionEditor.d.ts.map +1 -1
- package/lib/components/QueryBuilderPropertyExpressionEditor.js +11 -11
- package/lib/components/QueryBuilderPropertyExpressionEditor.js.map +1 -1
- package/lib/components/QueryBuilderPropertySearchPanel.d.ts.map +1 -1
- package/lib/components/QueryBuilderPropertySearchPanel.js +3 -6
- package/lib/components/QueryBuilderPropertySearchPanel.js.map +1 -1
- package/lib/components/QueryBuilderResultModifierPanel.d.ts.map +1 -1
- package/lib/components/QueryBuilderResultModifierPanel.js +3 -1
- package/lib/components/QueryBuilderResultModifierPanel.js.map +1 -1
- package/lib/components/QueryBuilderResultPanel.d.ts.map +1 -1
- package/lib/components/QueryBuilderResultPanel.js +28 -20
- package/lib/components/QueryBuilderResultPanel.js.map +1 -1
- package/lib/components/QueryBuilderSetupPanel.d.ts.map +1 -1
- package/lib/components/QueryBuilderSetupPanel.js +10 -11
- package/lib/components/QueryBuilderSetupPanel.js.map +1 -1
- package/lib/components/QueryBuilderUnsupportedQueryEditor.d.ts.map +1 -1
- package/lib/components/QueryBuilderUnsupportedQueryEditor.js +4 -2
- package/lib/components/QueryBuilderUnsupportedQueryEditor.js.map +1 -1
- package/lib/components/QueryEditor.d.ts.map +1 -1
- package/lib/components/QueryEditor.js +16 -4
- package/lib/components/QueryEditor.js.map +1 -1
- package/lib/index.css +2 -2
- package/lib/index.css.map +1 -1
- package/lib/package.json +10 -9
- package/lib/stores/QueryBuilderExplorerState.d.ts.map +1 -1
- package/lib/stores/QueryBuilderExplorerState.js +5 -0
- package/lib/stores/QueryBuilderExplorerState.js.map +1 -1
- package/lib/stores/QueryBuilderFetchStructureState.d.ts +6 -0
- package/lib/stores/QueryBuilderFetchStructureState.d.ts.map +1 -1
- package/lib/stores/QueryBuilderFetchStructureState.js +8 -0
- package/lib/stores/QueryBuilderFetchStructureState.js.map +1 -1
- package/lib/stores/QueryBuilderFilterState.d.ts +4 -9
- package/lib/stores/QueryBuilderFilterState.d.ts.map +1 -1
- package/lib/stores/QueryBuilderFilterState.js +6 -11
- package/lib/stores/QueryBuilderFilterState.js.map +1 -1
- package/lib/stores/QueryBuilderGraphFetchTreeState.d.ts.map +1 -1
- package/lib/stores/QueryBuilderGraphFetchTreeState.js +6 -3
- package/lib/stores/QueryBuilderGraphFetchTreeState.js.map +1 -1
- package/lib/stores/QueryBuilderLambdaProcessor.d.ts.map +1 -1
- package/lib/stores/QueryBuilderLambdaProcessor.js +2 -0
- package/lib/stores/QueryBuilderLambdaProcessor.js.map +1 -1
- package/lib/stores/QueryBuilderPostFilterState.d.ts +4 -4
- package/lib/stores/QueryBuilderPostFilterState.d.ts.map +1 -1
- package/lib/stores/QueryBuilderPostFilterState.js +6 -6
- package/lib/stores/QueryBuilderPostFilterState.js.map +1 -1
- package/lib/stores/QueryBuilderProjectionState.d.ts +2 -7
- package/lib/stores/QueryBuilderProjectionState.d.ts.map +1 -1
- package/lib/stores/QueryBuilderProjectionState.js +5 -17
- package/lib/stores/QueryBuilderProjectionState.js.map +1 -1
- package/lib/stores/QueryBuilderSetupState.js +1 -1
- package/lib/stores/QueryBuilderSetupState.js.map +1 -1
- package/lib/stores/QueryBuilderState.d.ts +6 -1
- package/lib/stores/QueryBuilderState.d.ts.map +1 -1
- package/lib/stores/QueryBuilderState.js +9 -2
- package/lib/stores/QueryBuilderState.js.map +1 -1
- package/lib/stores/QueryBuilderValueSpecificationBuilderHelper.d.ts.map +1 -1
- package/lib/stores/QueryBuilderValueSpecificationBuilderHelper.js +7 -7
- package/lib/stores/QueryBuilderValueSpecificationBuilderHelper.js.map +1 -1
- package/lib/stores/QueryEditorStore.d.ts.map +1 -1
- package/lib/stores/QueryEditorStore.js +14 -3
- package/lib/stores/QueryEditorStore.js.map +1 -1
- package/lib/stores/QueryFunctionsExplorerState.d.ts +2 -6
- package/lib/stores/QueryFunctionsExplorerState.d.ts.map +1 -1
- package/lib/stores/QueryFunctionsExplorerState.js +2 -11
- package/lib/stores/QueryFunctionsExplorerState.js.map +1 -1
- package/lib/stores/QueryParametersState.d.ts +1 -3
- package/lib/stores/QueryParametersState.d.ts.map +1 -1
- package/lib/stores/QueryParametersState.js +1 -4
- package/lib/stores/QueryParametersState.js.map +1 -1
- package/lib/stores/filterOperators/QueryBuilderFilterOperator_Equal.d.ts.map +1 -1
- package/lib/stores/filterOperators/QueryBuilderFilterOperator_Equal.js +4 -1
- package/lib/stores/filterOperators/QueryBuilderFilterOperator_Equal.js.map +1 -1
- package/lib/stores/filterOperators/QueryBuilderFilterOperator_GreaterThan.d.ts.map +1 -1
- package/lib/stores/filterOperators/QueryBuilderFilterOperator_GreaterThan.js +4 -1
- package/lib/stores/filterOperators/QueryBuilderFilterOperator_GreaterThan.js.map +1 -1
- package/lib/stores/filterOperators/QueryBuilderFilterOperator_GreaterThanEqual.d.ts.map +1 -1
- package/lib/stores/filterOperators/QueryBuilderFilterOperator_GreaterThanEqual.js +4 -1
- package/lib/stores/filterOperators/QueryBuilderFilterOperator_GreaterThanEqual.js.map +1 -1
- package/lib/stores/filterOperators/QueryBuilderFilterOperator_LessThan.d.ts.map +1 -1
- package/lib/stores/filterOperators/QueryBuilderFilterOperator_LessThan.js +4 -1
- package/lib/stores/filterOperators/QueryBuilderFilterOperator_LessThan.js.map +1 -1
- package/lib/stores/filterOperators/QueryBuilderFilterOperator_LessThanEqual.d.ts.map +1 -1
- package/lib/stores/filterOperators/QueryBuilderFilterOperator_LessThanEqual.js +4 -1
- package/lib/stores/filterOperators/QueryBuilderFilterOperator_LessThanEqual.js.map +1 -1
- package/lib/stores/postFilterOperators/QueryBuilderPostFilterOperator_Equal.d.ts.map +1 -1
- package/lib/stores/postFilterOperators/QueryBuilderPostFilterOperator_Equal.js +4 -1
- package/lib/stores/postFilterOperators/QueryBuilderPostFilterOperator_Equal.js.map +1 -1
- package/lib/stores/postFilterOperators/QueryBuilderPostFilterOperator_GreaterThan.d.ts.map +1 -1
- package/lib/stores/postFilterOperators/QueryBuilderPostFilterOperator_GreaterThan.js +4 -1
- package/lib/stores/postFilterOperators/QueryBuilderPostFilterOperator_GreaterThan.js.map +1 -1
- package/lib/stores/postFilterOperators/QueryBuilderPostFilterOperator_LessThan.d.ts.map +1 -1
- package/lib/stores/postFilterOperators/QueryBuilderPostFilterOperator_LessThan.js +4 -1
- package/lib/stores/postFilterOperators/QueryBuilderPostFilterOperator_LessThan.js.map +1 -1
- package/package.json +17 -16
- package/src/application/LegendQueryApplicationConfig.ts +35 -1
- package/src/components/QueryBuilder.tsx +13 -2
- package/src/components/QueryBuilderExplorerPanel.tsx +17 -56
- package/src/components/QueryBuilderFetchStructurePanel.tsx +93 -80
- package/src/components/QueryBuilderFilterPanel.tsx +184 -225
- package/src/components/QueryBuilderFunctionsExplorerPanel.tsx +23 -68
- package/src/components/QueryBuilderGraphFetchTreePanel.tsx +34 -25
- package/src/components/QueryBuilderLambdaEditor.tsx +3 -0
- package/src/components/QueryBuilderMilestoneEditor.tsx +34 -34
- package/src/components/QueryBuilderPanelIssueCountBadge.tsx +38 -0
- package/src/components/QueryBuilderParameterPanel.tsx +21 -54
- package/src/components/QueryBuilderPostFilterPanel.tsx +202 -236
- package/src/components/QueryBuilderProjectionPanel.tsx +126 -170
- package/src/components/QueryBuilderPropertyExpressionEditor.tsx +61 -57
- package/src/components/QueryBuilderPropertySearchPanel.tsx +8 -9
- package/src/components/QueryBuilderResultModifierPanel.tsx +4 -2
- package/src/components/QueryBuilderResultPanel.tsx +71 -52
- package/src/components/QueryBuilderSetupPanel.tsx +10 -11
- package/src/components/QueryBuilderUnsupportedQueryEditor.tsx +4 -2
- package/src/components/QueryEditor.tsx +39 -1
- package/src/stores/QueryBuilderExplorerState.ts +5 -0
- package/src/stores/QueryBuilderFetchStructureState.ts +9 -0
- package/src/stores/QueryBuilderFilterState.ts +7 -12
- package/src/stores/QueryBuilderGraphFetchTreeState.ts +14 -8
- package/src/stores/QueryBuilderLambdaProcessor.ts +8 -0
- package/src/stores/QueryBuilderPostFilterState.ts +7 -7
- package/src/stores/QueryBuilderProjectionState.ts +7 -18
- package/src/stores/QueryBuilderSetupState.ts +1 -1
- package/src/stores/QueryBuilderState.ts +10 -2
- package/src/stores/QueryBuilderValueSpecificationBuilderHelper.ts +9 -7
- package/src/stores/QueryEditorStore.ts +19 -3
- package/src/stores/QueryFunctionsExplorerState.ts +1 -11
- package/src/stores/QueryParametersState.ts +1 -3
- package/src/stores/filterOperators/QueryBuilderFilterOperator_Equal.ts +8 -1
- package/src/stores/filterOperators/QueryBuilderFilterOperator_GreaterThan.ts +8 -1
- package/src/stores/filterOperators/QueryBuilderFilterOperator_GreaterThanEqual.ts +8 -1
- package/src/stores/filterOperators/QueryBuilderFilterOperator_LessThan.ts +8 -1
- package/src/stores/filterOperators/QueryBuilderFilterOperator_LessThanEqual.ts +8 -1
- package/src/stores/postFilterOperators/QueryBuilderPostFilterOperator_Equal.ts +8 -1
- package/src/stores/postFilterOperators/QueryBuilderPostFilterOperator_GreaterThan.ts +8 -1
- package/src/stores/postFilterOperators/QueryBuilderPostFilterOperator_LessThan.ts +8 -1
- package/tsconfig.json +1 -0
@@ -14,6 +14,7 @@
|
|
14
14
|
* limitations under the License.
|
15
15
|
*/
|
16
16
|
|
17
|
+
import { useState } from 'react';
|
17
18
|
import { observer } from 'mobx-react-lite';
|
18
19
|
import {
|
19
20
|
type TooltipPlacement,
|
@@ -37,15 +38,17 @@ import {
|
|
37
38
|
MenuContentItemIcon,
|
38
39
|
MenuContentItemLabel,
|
39
40
|
MoreVerticalIcon,
|
41
|
+
DragPreviewLayer,
|
42
|
+
useDragPreviewLayer,
|
40
43
|
} from '@finos/legend-art';
|
41
44
|
import {
|
42
45
|
type QueryBuilderFunctionsExplorerTreeNodeData,
|
43
46
|
type QueryBuilderFunctionsExplorerDragSource,
|
44
|
-
QUERY_BUILDER_FUNCTIONS_EXPLORER_TREE_DND_TYPE,
|
45
47
|
generateFunctionsExplorerTreeNodeData,
|
46
48
|
getFunctionsExplorerTreeNodeChildren,
|
49
|
+
QUERY_BUILDER_FUNCTION_DND_TYPE,
|
47
50
|
} from '../stores/QueryFunctionsExplorerState.js';
|
48
|
-
import { useDrag
|
51
|
+
import { useDrag } from 'react-dnd';
|
49
52
|
import {
|
50
53
|
ConcreteFunctionDefinition,
|
51
54
|
generateFunctionSignature,
|
@@ -54,8 +57,6 @@ import {
|
|
54
57
|
ROOT_PACKAGE_NAME,
|
55
58
|
getMultiplicityDescription,
|
56
59
|
} from '@finos/legend-graph';
|
57
|
-
import { getEmptyImage } from 'react-dnd-html5-backend';
|
58
|
-
import { useEffect, useState } from 'react';
|
59
60
|
import type { QueryBuilderState } from '../stores/QueryBuilderState.js';
|
60
61
|
|
61
62
|
const isDependencyTreeNode = (
|
@@ -134,53 +135,6 @@ const QueryBuilderFunctionInfoTooltip: React.FC<{
|
|
134
135
|
);
|
135
136
|
};
|
136
137
|
|
137
|
-
const QueryBuilderFunctionDragLayer = observer(
|
138
|
-
(props: { queryBuilderState: QueryBuilderState }) => {
|
139
|
-
const { itemType, item, isDragging, currentPosition } = useDragLayer(
|
140
|
-
(monitor) => ({
|
141
|
-
itemType:
|
142
|
-
monitor.getItemType() as QUERY_BUILDER_FUNCTIONS_EXPLORER_TREE_DND_TYPE,
|
143
|
-
item: monitor.getItem<QueryBuilderFunctionsExplorerDragSource | null>(),
|
144
|
-
isDragging: monitor.isDragging(),
|
145
|
-
initialOffset: monitor.getInitialSourceClientOffset(),
|
146
|
-
currentPosition: monitor.getClientOffset(),
|
147
|
-
}),
|
148
|
-
);
|
149
|
-
if (
|
150
|
-
!isDragging ||
|
151
|
-
!item ||
|
152
|
-
!Object.values(QUERY_BUILDER_FUNCTIONS_EXPLORER_TREE_DND_TYPE).includes(
|
153
|
-
itemType,
|
154
|
-
) ||
|
155
|
-
item.node.dndType ===
|
156
|
-
QUERY_BUILDER_FUNCTIONS_EXPLORER_TREE_DND_TYPE.PACKAGE
|
157
|
-
) {
|
158
|
-
return null;
|
159
|
-
}
|
160
|
-
return (
|
161
|
-
<div className="query-builder__functions-explorer__tree__drag-preview-layer">
|
162
|
-
<div
|
163
|
-
className="query-builder__functions-explorer__tree__drag-preview"
|
164
|
-
style={
|
165
|
-
!currentPosition
|
166
|
-
? { display: 'none' }
|
167
|
-
: {
|
168
|
-
transform: `translate(${currentPosition.x + 20}px, ${
|
169
|
-
currentPosition.y + 10
|
170
|
-
}px)`,
|
171
|
-
}
|
172
|
-
}
|
173
|
-
>
|
174
|
-
{generateFunctionSignature(
|
175
|
-
item.node.packageableElement as ConcreteFunctionDefinition,
|
176
|
-
true,
|
177
|
-
)}
|
178
|
-
</div>
|
179
|
-
</div>
|
180
|
-
);
|
181
|
-
},
|
182
|
-
);
|
183
|
-
|
184
138
|
const QueryBuilderFunctionsExplorerListEntry = observer(
|
185
139
|
(props: {
|
186
140
|
queryBuilderState: QueryBuilderState;
|
@@ -196,15 +150,12 @@ const QueryBuilderFunctionsExplorerListEntry = observer(
|
|
196
150
|
const functionSignature = generateFunctionSignature(element, true);
|
197
151
|
const [, dragConnector, dragPreviewConnector] = useDrag(
|
198
152
|
() => ({
|
199
|
-
type:
|
153
|
+
type: QUERY_BUILDER_FUNCTION_DND_TYPE,
|
200
154
|
item: { node: node },
|
201
155
|
}),
|
202
156
|
[node],
|
203
157
|
);
|
204
|
-
|
205
|
-
useEffect(() => {
|
206
|
-
dragPreviewConnector(getEmptyImage(), { captureDraggingState: true });
|
207
|
-
}, [dragPreviewConnector]);
|
158
|
+
useDragPreviewLayer(dragPreviewConnector);
|
208
159
|
|
209
160
|
return (
|
210
161
|
<div
|
@@ -279,23 +230,19 @@ const QueryBuilderFunctionsExplorerTreeNodeContainer = observer(
|
|
279
230
|
const selectNode = (): void => {
|
280
231
|
onNodeSelect?.(node);
|
281
232
|
};
|
282
|
-
const [, dragConnector, dragPreviewConnector] = useDrag
|
233
|
+
const [, dragConnector, dragPreviewConnector] = useDrag<{
|
234
|
+
node?: QueryBuilderFunctionsExplorerTreeNodeData;
|
235
|
+
}>(
|
283
236
|
() => ({
|
284
|
-
type:
|
285
|
-
|
286
|
-
? QUERY_BUILDER_FUNCTIONS_EXPLORER_TREE_DND_TYPE.FUNCTION
|
287
|
-
: QUERY_BUILDER_FUNCTIONS_EXPLORER_TREE_DND_TYPE.PACKAGE,
|
288
|
-
item: (): { node?: QueryBuilderFunctionsExplorerTreeNodeData } =>
|
237
|
+
type: QUERY_BUILDER_FUNCTION_DND_TYPE,
|
238
|
+
item: () =>
|
289
239
|
node.packageableElement instanceof ConcreteFunctionDefinition
|
290
240
|
? { node }
|
291
241
|
: {},
|
292
242
|
}),
|
293
243
|
[node],
|
294
244
|
);
|
295
|
-
|
296
|
-
useEffect(() => {
|
297
|
-
dragPreviewConnector(getEmptyImage(), { captureDraggingState: true });
|
298
|
-
}, [dragPreviewConnector]);
|
245
|
+
useDragPreviewLayer(dragPreviewConnector);
|
299
246
|
|
300
247
|
return (
|
301
248
|
<div>
|
@@ -523,8 +470,16 @@ export const QueryBuilderFunctionsExplorerPanel = observer(
|
|
523
470
|
</div>
|
524
471
|
</div>
|
525
472
|
<div className="panel__content query-builder__functions-explorer__content">
|
526
|
-
<
|
527
|
-
|
473
|
+
<DragPreviewLayer
|
474
|
+
labelGetter={(
|
475
|
+
item: QueryBuilderFunctionsExplorerDragSource,
|
476
|
+
): string =>
|
477
|
+
generateFunctionSignature(
|
478
|
+
item.node.packageableElement as ConcreteFunctionDefinition,
|
479
|
+
true,
|
480
|
+
)
|
481
|
+
}
|
482
|
+
types={[QUERY_BUILDER_FUNCTION_DND_TYPE]}
|
528
483
|
/>
|
529
484
|
{((showDependencyFuncions &&
|
530
485
|
(!queryFunctionsState.dependencyTreeData ||
|
@@ -16,7 +16,7 @@
|
|
16
16
|
|
17
17
|
import { useCallback } from 'react';
|
18
18
|
import { observer } from 'mobx-react-lite';
|
19
|
-
import {
|
19
|
+
import { useDrop } from 'react-dnd';
|
20
20
|
import {
|
21
21
|
type TreeNodeContainerProps,
|
22
22
|
clsx,
|
@@ -27,6 +27,8 @@ import {
|
|
27
27
|
TimesIcon,
|
28
28
|
CheckSquareIcon,
|
29
29
|
SquareIcon,
|
30
|
+
InfoCircleIcon,
|
31
|
+
PanelDropZone,
|
30
32
|
} from '@finos/legend-art';
|
31
33
|
import type { QueryBuilderState } from '../stores/QueryBuilderState.js';
|
32
34
|
import { QUERY_BUILDER_TEST_ID } from './QueryBuilder_TestID.js';
|
@@ -182,6 +184,9 @@ export const QueryBuilderGraphFetchTreeExplorer = observer(
|
|
182
184
|
<div className="panel__content__form__section__toggler__prompt">
|
183
185
|
Check graph fetch
|
184
186
|
</div>
|
187
|
+
<div className="query-builder-graph-fetch-tree__settings__hint-icon">
|
188
|
+
<InfoCircleIcon title="With this enabled, while executing, violations of constraints will reported as part of the result, rather than causing a failure" />
|
189
|
+
</div>
|
185
190
|
</div>
|
186
191
|
</div>
|
187
192
|
<div className="query-builder-graph-fetch-tree__container">
|
@@ -222,22 +227,23 @@ export const QueryBuilderGraphFetchTreePanel = observer(
|
|
222
227
|
},
|
223
228
|
[graphFetchState],
|
224
229
|
);
|
225
|
-
const [{
|
230
|
+
const [{ isDragOver }, dropTargetConnector] = useDrop<
|
231
|
+
QueryBuilderExplorerTreeDragSource,
|
232
|
+
void,
|
233
|
+
{ isDragOver: boolean }
|
234
|
+
>(
|
226
235
|
() => ({
|
227
236
|
accept: [
|
228
237
|
QUERY_BUILDER_EXPLORER_TREE_DND_TYPE.ENUM_PROPERTY,
|
229
238
|
QUERY_BUILDER_EXPLORER_TREE_DND_TYPE.PRIMITIVE_PROPERTY,
|
230
239
|
],
|
231
|
-
drop: (
|
232
|
-
item: QueryBuilderExplorerTreeDragSource,
|
233
|
-
monitor: DropTargetMonitor,
|
234
|
-
): void => {
|
240
|
+
drop: (item, monitor): void => {
|
235
241
|
if (!monitor.didDrop()) {
|
236
242
|
handleDrop(item);
|
237
243
|
} // prevent drop event propagation to accomondate for nested DnD
|
238
244
|
},
|
239
|
-
collect: (monitor)
|
240
|
-
|
245
|
+
collect: (monitor) => ({
|
246
|
+
isDragOver: monitor.isOver({ shallow: true }),
|
241
247
|
}),
|
242
248
|
}),
|
243
249
|
[handleDrop],
|
@@ -246,24 +252,27 @@ export const QueryBuilderGraphFetchTreePanel = observer(
|
|
246
252
|
return (
|
247
253
|
<div
|
248
254
|
data-testid={QUERY_BUILDER_TEST_ID.QUERY_BUILDER_GRAPH_FETCH}
|
249
|
-
className="panel__content
|
250
|
-
ref={dropConnector}
|
255
|
+
className="panel__content"
|
251
256
|
>
|
252
|
-
<
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
257
|
+
<PanelDropZone
|
258
|
+
isDragOver={isDragOver}
|
259
|
+
dropTargetConnector={dropTargetConnector}
|
260
|
+
>
|
261
|
+
{(!treeData || isGraphFetchTreeDataEmpty(treeData)) && (
|
262
|
+
<BlankPanelPlaceholder
|
263
|
+
text="Add a graph fetch property"
|
264
|
+
tooltipText="Drag and drop properties here"
|
265
|
+
/>
|
266
|
+
)}
|
267
|
+
{treeData && !isGraphFetchTreeDataEmpty(treeData) && (
|
268
|
+
<QueryBuilderGraphFetchTreeExplorer
|
269
|
+
graphFetchState={graphFetchState}
|
270
|
+
treeData={treeData}
|
271
|
+
isReadOnly={false}
|
272
|
+
updateTreeData={updateTreeData}
|
273
|
+
/>
|
274
|
+
)}
|
275
|
+
</PanelDropZone>
|
267
276
|
</div>
|
268
277
|
);
|
269
278
|
},
|
@@ -47,6 +47,7 @@ export const QueryBuilderLambdaEditor = observer(
|
|
47
47
|
disablePopUp?: boolean | undefined;
|
48
48
|
useBaseTextEditorSettings?: boolean | undefined;
|
49
49
|
hideErrorBar?: boolean | undefined;
|
50
|
+
onEditorFocusEventHandler?: (() => void) | undefined;
|
50
51
|
}) => {
|
51
52
|
const {
|
52
53
|
queryBuilderState,
|
@@ -62,6 +63,7 @@ export const QueryBuilderLambdaEditor = observer(
|
|
62
63
|
disablePopUp,
|
63
64
|
useBaseTextEditorSettings,
|
64
65
|
hideErrorBar,
|
66
|
+
onEditorFocusEventHandler,
|
65
67
|
} = props;
|
66
68
|
const applicationStore = useApplicationStore();
|
67
69
|
const backdropSetter = useCallback(
|
@@ -111,6 +113,7 @@ export const QueryBuilderLambdaEditor = observer(
|
|
111
113
|
useBaseTextEditorSettings={useBaseTextEditorSettings}
|
112
114
|
hideErrorBar={hideErrorBar}
|
113
115
|
onKeyDownEventHandlers={onKeyDownEventHandlers}
|
116
|
+
onEditorFocusEventHandler={onEditorFocusEventHandler}
|
114
117
|
/>
|
115
118
|
);
|
116
119
|
},
|
@@ -18,7 +18,7 @@ import { observer } from 'mobx-react-lite';
|
|
18
18
|
import type { QueryBuilderState } from '../stores/QueryBuilderState.js';
|
19
19
|
import {
|
20
20
|
type QueryBuilderParameterDragSource,
|
21
|
-
|
21
|
+
QUERY_BUILDER_PARAMETER_DND_TYPE,
|
22
22
|
} from '../stores/QueryParametersState.js';
|
23
23
|
import { useCallback } from 'react';
|
24
24
|
import {
|
@@ -32,9 +32,9 @@ import {
|
|
32
32
|
TYPICAL_MULTIPLICITY_TYPE,
|
33
33
|
} from '@finos/legend-graph';
|
34
34
|
import { guaranteeNonNullable } from '@finos/legend-shared';
|
35
|
-
import {
|
35
|
+
import { useDrop } from 'react-dnd';
|
36
36
|
import { VariableExpressionViewer } from './QueryBuilderParameterPanel.js';
|
37
|
-
import { Dialog } from '@finos/legend-art';
|
37
|
+
import { Dialog, PanelEntryDropZonePlaceholder } from '@finos/legend-art';
|
38
38
|
import { generateDefaultValueForPrimitiveType } from '../stores/QueryBuilderValueSpecificationBuilderHelper.js';
|
39
39
|
import { BasicValueSpecificationEditor } from '@finos/legend-application';
|
40
40
|
|
@@ -58,13 +58,14 @@ const MilestoningParameterEditor = observer(
|
|
58
58
|
},
|
59
59
|
[queryBuilderState, stereotype],
|
60
60
|
);
|
61
|
-
const [{ isMilestoningParameterValueDragOver }, dropConnector] = useDrop
|
61
|
+
const [{ isMilestoningParameterValueDragOver }, dropConnector] = useDrop<
|
62
|
+
QueryBuilderParameterDragSource,
|
63
|
+
void,
|
64
|
+
{ isMilestoningParameterValueDragOver: boolean }
|
65
|
+
>(
|
62
66
|
() => ({
|
63
|
-
accept: [
|
64
|
-
drop: (
|
65
|
-
item: QueryBuilderParameterDragSource,
|
66
|
-
monitor: DropTargetMonitor,
|
67
|
-
): void => {
|
67
|
+
accept: [QUERY_BUILDER_PARAMETER_DND_TYPE],
|
68
|
+
drop: (item, monitor): void => {
|
68
69
|
if (!monitor.didDrop()) {
|
69
70
|
handleDrop(item);
|
70
71
|
}
|
@@ -114,32 +115,31 @@ const MilestoningParameterEditor = observer(
|
|
114
115
|
queryBuilderState.querySetupState.setProcessingDate(parameter);
|
115
116
|
}
|
116
117
|
};
|
118
|
+
|
117
119
|
return (
|
118
|
-
<div
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
:
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
resetValue={resetMilestoningParameter}
|
142
|
-
/>
|
120
|
+
<div ref={dropConnector} className="query-builder__parameter-editor">
|
121
|
+
<PanelEntryDropZonePlaceholder
|
122
|
+
showPlaceholder={isMilestoningParameterValueDragOver}
|
123
|
+
label="Change Milestoning Parameter Value"
|
124
|
+
className="query-builder__dnd__placeholder"
|
125
|
+
>
|
126
|
+
<BasicValueSpecificationEditor
|
127
|
+
valueSpecification={milestoningParameter}
|
128
|
+
graph={queryBuilderState.graphManagerState.graph}
|
129
|
+
setValueSpecification={(val: ValueSpecification): void =>
|
130
|
+
stereotype === MILESTONING_STEREOTYPE.BUSINESS_TEMPORAL
|
131
|
+
? queryBuilderState.querySetupState.setBusinessDate(val)
|
132
|
+
: queryBuilderState.querySetupState.setProcessingDate(val)
|
133
|
+
}
|
134
|
+
typeCheckOption={{
|
135
|
+
expectedType:
|
136
|
+
queryBuilderState.graphManagerState.graph.getPrimitiveType(
|
137
|
+
PRIMITIVE_TYPE.DATE,
|
138
|
+
),
|
139
|
+
}}
|
140
|
+
resetValue={resetMilestoningParameter}
|
141
|
+
/>
|
142
|
+
</PanelEntryDropZonePlaceholder>
|
143
143
|
</div>
|
144
144
|
);
|
145
145
|
},
|
@@ -0,0 +1,38 @@
|
|
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 { TimesCircleIcon } from '@finos/legend-art';
|
18
|
+
|
19
|
+
export const QueryBuilderPanelIssueCountBadge: React.FC<{
|
20
|
+
issues: string[] | undefined;
|
21
|
+
}> = (props) => {
|
22
|
+
const { issues } = props;
|
23
|
+
if (!issues) {
|
24
|
+
return null;
|
25
|
+
}
|
26
|
+
const labelText = `${issues.length} issue${issues.length > 1 ? 's' : ''}`;
|
27
|
+
return (
|
28
|
+
<div
|
29
|
+
className="query-builder-panel-issue-count-badge"
|
30
|
+
title={`Found ${labelText}:\n${issues
|
31
|
+
.map((issue) => `\u2022 ${issue}`)
|
32
|
+
.join('\n')}`}
|
33
|
+
>
|
34
|
+
<TimesCircleIcon className="query-builder-panel-issue-count-badge__icon" />
|
35
|
+
{labelText}
|
36
|
+
</div>
|
37
|
+
);
|
38
|
+
};
|
@@ -14,6 +14,7 @@
|
|
14
14
|
* limitations under the License.
|
15
15
|
*/
|
16
16
|
|
17
|
+
import { useState } from 'react';
|
17
18
|
import { observer } from 'mobx-react-lite';
|
18
19
|
import type { QueryBuilderState } from '../stores/QueryBuilderState.js';
|
19
20
|
import {
|
@@ -25,12 +26,13 @@ import {
|
|
25
26
|
DollarIcon,
|
26
27
|
PlusIcon,
|
27
28
|
InputWithInlineValidation,
|
29
|
+
DragPreviewLayer,
|
30
|
+
useDragPreviewLayer,
|
28
31
|
} from '@finos/legend-art';
|
29
32
|
import {
|
30
33
|
type QueryBuilderParameterDragSource,
|
31
|
-
|
34
|
+
QUERY_BUILDER_PARAMETER_DND_TYPE,
|
32
35
|
} from '../stores/QueryParametersState.js';
|
33
|
-
import { useEffect, useState } from 'react';
|
34
36
|
import {
|
35
37
|
type Type,
|
36
38
|
MULTIPLICITY_INFINITE,
|
@@ -47,9 +49,9 @@ import {
|
|
47
49
|
LambdaParameterState,
|
48
50
|
LambdaParameterValuesEditor,
|
49
51
|
getPackageableElementOptionFormatter,
|
52
|
+
useApplicationStore,
|
50
53
|
} from '@finos/legend-application';
|
51
|
-
import { useDrag
|
52
|
-
import { getEmptyImage } from 'react-dnd-html5-backend';
|
54
|
+
import { useDrag } from 'react-dnd';
|
53
55
|
import { generateEnumerableNameFromToken } from '@finos/legend-shared';
|
54
56
|
import { DEFAULT_VARIABLE_NAME } from '../QueryBuilder_Const.js';
|
55
57
|
|
@@ -60,6 +62,7 @@ const VariableExpressionEditor = observer(
|
|
60
62
|
}) => {
|
61
63
|
// main state
|
62
64
|
const { queryBuilderState, lambdaParameterState } = props;
|
65
|
+
const applicationStore = useApplicationStore();
|
63
66
|
const queryParametersState = queryBuilderState.queryParametersState;
|
64
67
|
const isCreating =
|
65
68
|
!queryParametersState.parameterStates.includes(lambdaParameterState);
|
@@ -145,6 +148,7 @@ const VariableExpressionEditor = observer(
|
|
145
148
|
}
|
146
149
|
close();
|
147
150
|
};
|
151
|
+
|
148
152
|
return (
|
149
153
|
<Dialog
|
150
154
|
open={Boolean(lambdaParameterState)}
|
@@ -192,10 +196,9 @@ const VariableExpressionEditor = observer(
|
|
192
196
|
options={typeOptions}
|
193
197
|
onChange={changeType}
|
194
198
|
value={selectedType}
|
195
|
-
darkMode={
|
199
|
+
darkMode={!applicationStore.TEMPORARY__isLightThemeEnabled}
|
196
200
|
formatOptionLabel={getPackageableElementOptionFormatter({
|
197
|
-
darkMode:
|
198
|
-
graphManagerState: queryBuilderState.graphManagerState,
|
201
|
+
darkMode: !applicationStore.TEMPORARY__isLightThemeEnabled,
|
199
202
|
})}
|
200
203
|
/>
|
201
204
|
</div>
|
@@ -243,47 +246,6 @@ const VariableExpressionEditor = observer(
|
|
243
246
|
},
|
244
247
|
);
|
245
248
|
|
246
|
-
const QueryBuilderParameterDragLayer = observer(
|
247
|
-
(props: { queryBuilderState: QueryBuilderState }) => {
|
248
|
-
const { itemType, item, isDragging, currentPosition } = useDragLayer(
|
249
|
-
(monitor) => ({
|
250
|
-
itemType:
|
251
|
-
monitor.getItemType() as QUERY_BUILDER_PARAMETER_TREE_DND_TYPE,
|
252
|
-
item: monitor.getItem<QueryBuilderParameterDragSource | null>(),
|
253
|
-
isDragging: monitor.isDragging(),
|
254
|
-
initialOffset: monitor.getInitialSourceClientOffset(),
|
255
|
-
currentPosition: monitor.getClientOffset(),
|
256
|
-
}),
|
257
|
-
);
|
258
|
-
|
259
|
-
if (
|
260
|
-
!isDragging ||
|
261
|
-
!item ||
|
262
|
-
!Object.values(QUERY_BUILDER_PARAMETER_TREE_DND_TYPE).includes(itemType)
|
263
|
-
) {
|
264
|
-
return null;
|
265
|
-
}
|
266
|
-
return (
|
267
|
-
<div className="query-builder__parameters__drag-preview-layer">
|
268
|
-
<div
|
269
|
-
className="query-builder__parameters__drag-preview"
|
270
|
-
style={
|
271
|
-
!currentPosition
|
272
|
-
? { display: 'none' }
|
273
|
-
: {
|
274
|
-
transform: `translate(${currentPosition.x + 20}px, ${
|
275
|
-
currentPosition.y + 10
|
276
|
-
}px)`,
|
277
|
-
}
|
278
|
-
}
|
279
|
-
>
|
280
|
-
{item.variable.variableName}
|
281
|
-
</div>
|
282
|
-
</div>
|
283
|
-
);
|
284
|
-
},
|
285
|
-
);
|
286
|
-
|
287
249
|
export const VariableExpressionViewer = observer(
|
288
250
|
(props: {
|
289
251
|
queryBuilderState: QueryBuilderState;
|
@@ -302,18 +264,23 @@ export const VariableExpressionViewer = observer(
|
|
302
264
|
queryParameterState.removeParameter(variableExpressionState);
|
303
265
|
const [, dragConnector, dragPreviewConnector] = useDrag(
|
304
266
|
() => ({
|
305
|
-
type:
|
267
|
+
type: QUERY_BUILDER_PARAMETER_DND_TYPE,
|
306
268
|
item: { variable: variableExpressionState },
|
307
269
|
}),
|
308
270
|
[variableExpressionState],
|
309
271
|
);
|
310
|
-
|
311
|
-
|
312
|
-
dragPreviewConnector(getEmptyImage(), { captureDraggingState: true });
|
313
|
-
}, [dragPreviewConnector]);
|
272
|
+
useDragPreviewLayer(dragPreviewConnector);
|
273
|
+
|
314
274
|
return (
|
315
275
|
<div className="query-builder__parameters__parameter" ref={dragConnector}>
|
316
|
-
<
|
276
|
+
<DragPreviewLayer
|
277
|
+
labelGetter={(item: QueryBuilderParameterDragSource): string =>
|
278
|
+
item.variable.variableName === ''
|
279
|
+
? '(unknown)'
|
280
|
+
: item.variable.variableName
|
281
|
+
}
|
282
|
+
types={[QUERY_BUILDER_PARAMETER_DND_TYPE]}
|
283
|
+
/>
|
317
284
|
<div className="query-builder__parameters__parameter__content">
|
318
285
|
<div className="query-builder__parameters__parameter__icon">
|
319
286
|
<div className="query-builder__parameters__parameter-icon">
|