@finos/legend-application-query 5.0.2 → 5.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/application/LegendQueryApplicationConfig.d.ts +19 -1
- package/lib/application/LegendQueryApplicationConfig.d.ts.map +1 -1
- package/lib/application/LegendQueryApplicationConfig.js +25 -1
- package/lib/application/LegendQueryApplicationConfig.js.map +1 -1
- package/lib/components/LegendQueryApplication.d.ts.map +1 -1
- package/lib/components/LegendQueryApplication.js +15 -5
- package/lib/components/LegendQueryApplication.js.map +1 -1
- package/lib/components/LegendQueryBaseStoreProvider.d.ts.map +1 -1
- package/lib/components/LegendQueryBaseStoreProvider.js +3 -1
- package/lib/components/LegendQueryBaseStoreProvider.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 +42 -59
- 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 -33
- package/lib/components/QueryBuilderParameterPanel.js.map +1 -1
- package/lib/components/QueryBuilderPostFilterPanel.d.ts.map +1 -1
- package/lib/components/QueryBuilderPostFilterPanel.js +47 -59
- package/lib/components/QueryBuilderPostFilterPanel.js.map +1 -1
- package/lib/components/QueryBuilderProjectionPanel.d.ts.map +1 -1
- package/lib/components/QueryBuilderProjectionPanel.js +47 -63
- 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 -18
- package/lib/components/QueryBuilderResultPanel.js.map +1 -1
- package/lib/components/QueryBuilderSetupPanel.d.ts.map +1 -1
- package/lib/components/QueryBuilderSetupPanel.js +10 -9
- 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/components/QueryEditorComponentTestUtils.d.ts +2 -0
- package/lib/components/QueryEditorComponentTestUtils.d.ts.map +1 -1
- package/lib/components/QueryEditorComponentTestUtils.js +3 -2
- package/lib/components/QueryEditorComponentTestUtils.js.map +1 -1
- package/lib/components/QueryEditorStoreProvider.d.ts.map +1 -1
- package/lib/components/QueryEditorStoreProvider.js +7 -3
- package/lib/components/QueryEditorStoreProvider.js.map +1 -1
- package/lib/components/QuerySetupStoreProvider.d.ts.map +1 -1
- package/lib/components/QuerySetupStoreProvider.js +3 -1
- package/lib/components/QuerySetupStoreProvider.js.map +1 -1
- package/lib/index.css +2 -2
- package/lib/index.css.map +1 -1
- package/lib/package.json +11 -9
- package/lib/stores/LegendQueryBaseStore.d.ts +4 -2
- package/lib/stores/LegendQueryBaseStore.d.ts.map +1 -1
- package/lib/stores/LegendQueryBaseStore.js +5 -1
- package/lib/stores/LegendQueryBaseStore.js.map +1 -1
- 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 +8 -1
- package/lib/stores/QueryBuilderFetchStructureState.d.ts.map +1 -1
- package/lib/stores/QueryBuilderFetchStructureState.js +10 -2
- package/lib/stores/QueryBuilderFetchStructureState.js.map +1 -1
- package/lib/stores/QueryBuilderFilterState.d.ts +8 -9
- package/lib/stores/QueryBuilderFilterState.d.ts.map +1 -1
- package/lib/stores/QueryBuilderFilterState.js +34 -13
- 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/QueryBuilderOperatorLoader.d.ts +47 -0
- package/lib/stores/QueryBuilderOperatorLoader.d.ts.map +1 -0
- package/lib/stores/QueryBuilderOperatorLoader.js +94 -0
- package/lib/stores/QueryBuilderOperatorLoader.js.map +1 -0
- package/lib/stores/QueryBuilderPostFilterState.d.ts +9 -6
- package/lib/stores/QueryBuilderPostFilterState.d.ts.map +1 -1
- package/lib/stores/QueryBuilderPostFilterState.js +31 -7
- package/lib/stores/QueryBuilderPostFilterState.js.map +1 -1
- package/lib/stores/QueryBuilderPreviewDataHelper.d.ts +4 -3
- package/lib/stores/QueryBuilderPreviewDataHelper.d.ts.map +1 -1
- package/lib/stores/QueryBuilderPreviewDataHelper.js +77 -97
- package/lib/stores/QueryBuilderPreviewDataHelper.js.map +1 -1
- package/lib/stores/QueryBuilderProjectionState.d.ts +4 -8
- package/lib/stores/QueryBuilderProjectionState.d.ts.map +1 -1
- package/lib/stores/QueryBuilderProjectionState.js +17 -44
- 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 +7 -1
- package/lib/stores/QueryBuilderState.d.ts.map +1 -1
- package/lib/stores/QueryBuilderState.js +17 -60
- package/lib/stores/QueryBuilderState.js.map +1 -1
- package/lib/stores/QueryBuilderTestUtils.d.ts +24 -0
- package/lib/stores/QueryBuilderTestUtils.d.ts.map +1 -0
- package/lib/stores/QueryBuilderTestUtils.js +49 -0
- package/lib/stores/QueryBuilderTestUtils.js.map +1 -0
- package/lib/stores/QueryBuilderTypeaheadHelper.d.ts +24 -0
- package/lib/stores/QueryBuilderTypeaheadHelper.d.ts.map +1 -0
- package/lib/stores/QueryBuilderTypeaheadHelper.js +89 -0
- package/lib/stores/QueryBuilderTypeaheadHelper.js.map +1 -0
- 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 +6 -4
- package/lib/stores/QueryEditorStore.d.ts.map +1 -1
- package/lib/stores/QueryEditorStore.js +23 -10
- package/lib/stores/QueryEditorStore.js.map +1 -1
- package/lib/stores/QueryEditorStoreTestUtils.d.ts.map +1 -1
- package/lib/stores/QueryEditorStoreTestUtils.js +1 -0
- package/lib/stores/QueryEditorStoreTestUtils.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/QuerySetupStore.d.ts +3 -1
- package/lib/stores/QuerySetupStore.d.ts.map +1 -1
- package/lib/stores/QuerySetupStore.js +3 -1
- package/lib/stores/QuerySetupStore.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 +18 -16
- package/src/application/LegendQueryApplicationConfig.ts +41 -2
- package/src/components/LegendQueryApplication.tsx +27 -10
- package/src/components/LegendQueryBaseStoreProvider.tsx +3 -0
- package/src/components/QueryBuilder.tsx +13 -2
- package/src/components/QueryBuilderExplorerPanel.tsx +17 -56
- package/src/components/QueryBuilderFetchStructurePanel.tsx +93 -77
- package/src/components/QueryBuilderFilterPanel.tsx +205 -219
- package/src/components/QueryBuilderFunctionsExplorerPanel.tsx +24 -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 +23 -55
- package/src/components/QueryBuilderPostFilterPanel.tsx +223 -230
- package/src/components/QueryBuilderProjectionPanel.tsx +127 -154
- 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 +75 -50
- package/src/components/QueryBuilderSetupPanel.tsx +13 -12
- package/src/components/QueryBuilderUnsupportedQueryEditor.tsx +4 -2
- package/src/components/QueryEditor.tsx +39 -1
- package/src/components/QueryEditorComponentTestUtils.tsx +15 -5
- package/src/components/QueryEditorStoreProvider.tsx +7 -0
- package/src/components/QuerySetupStoreProvider.tsx +3 -0
- package/src/stores/LegendQueryBaseStore.ts +14 -1
- package/src/stores/QueryBuilderExplorerState.ts +5 -0
- package/src/stores/QueryBuilderFetchStructureState.ts +18 -2
- package/src/stores/QueryBuilderFilterState.ts +50 -12
- package/src/stores/QueryBuilderGraphFetchTreeState.ts +14 -8
- package/src/stores/QueryBuilderLambdaProcessor.ts +8 -0
- package/src/stores/QueryBuilderOperatorLoader.ts +133 -0
- package/src/stores/QueryBuilderPostFilterState.ts +47 -8
- package/src/stores/QueryBuilderPreviewDataHelper.ts +122 -217
- package/src/stores/QueryBuilderProjectionState.ts +30 -58
- package/src/stores/QueryBuilderSetupState.ts +1 -1
- package/src/stores/QueryBuilderState.ts +33 -96
- package/src/stores/QueryBuilderTestUtils.ts +93 -0
- package/src/stores/QueryBuilderTypeaheadHelper.ts +149 -0
- package/src/stores/QueryBuilderValueSpecificationBuilderHelper.ts +9 -7
- package/src/stores/QueryEditorStore.ts +29 -6
- package/src/stores/QueryEditorStoreTestUtils.ts +1 -0
- package/src/stores/QueryFunctionsExplorerState.ts +1 -11
- package/src/stores/QueryParametersState.ts +1 -3
- package/src/stores/QuerySetupStore.ts +4 -0
- 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 +4 -0
@@ -28,6 +28,10 @@ import {
|
|
28
28
|
ContextMenu,
|
29
29
|
InputWithInlineValidation,
|
30
30
|
SigmaIcon,
|
31
|
+
PanelDropZone,
|
32
|
+
DragPreviewLayer,
|
33
|
+
PanelEntryDropZonePlaceholder,
|
34
|
+
useDragPreviewLayer,
|
31
35
|
} from '@finos/legend-art';
|
32
36
|
import {
|
33
37
|
type QueryBuilderExplorerTreeDragSource,
|
@@ -35,32 +39,28 @@ import {
|
|
35
39
|
buildPropertyExpressionFromExplorerTreeNodeData,
|
36
40
|
QUERY_BUILDER_EXPLORER_TREE_DND_TYPE,
|
37
41
|
} from '../stores/QueryBuilderExplorerState.js';
|
38
|
-
import {
|
39
|
-
type DropTargetMonitor,
|
40
|
-
type XYCoord,
|
41
|
-
useDragLayer,
|
42
|
-
useDrag,
|
43
|
-
useDrop,
|
44
|
-
} from 'react-dnd';
|
45
|
-
import { getEmptyImage } from 'react-dnd-html5-backend';
|
42
|
+
import { type DropTargetMonitor, useDrag, useDrop } from 'react-dnd';
|
46
43
|
import {
|
47
44
|
type QueryBuilderProjectionColumnDragSource,
|
48
45
|
type QueryBuilderProjectionColumnState,
|
49
46
|
QueryBuilderDerivationProjectionColumnState,
|
50
47
|
QueryBuilderSimpleProjectionColumnState,
|
51
|
-
|
48
|
+
QUERY_BUILDER_PROJECTION_COLUMN_DND_TYPE,
|
52
49
|
} from '../stores/QueryBuilderProjectionState.js';
|
53
50
|
import { QueryBuilderPropertyExpressionBadge } from './QueryBuilderPropertyExpressionEditor.js';
|
54
51
|
import type { QueryBuilderState } from '../stores/QueryBuilderState.js';
|
55
52
|
import { QueryResultModifierModal } from './QueryBuilderResultModifierPanel.js';
|
56
53
|
import { QUERY_BUILDER_TEST_ID } from './QueryBuilder_TestID.js';
|
57
|
-
import
|
54
|
+
import {
|
55
|
+
type QueryBuilderAggregateOperator,
|
56
|
+
QueryBuilderAggregateColumnState,
|
57
|
+
} from '../stores/QueryBuilderAggregationState.js';
|
58
58
|
import { flowResult } from 'mobx';
|
59
59
|
import { QueryBuilderLambdaEditor } from './QueryBuilderLambdaEditor.js';
|
60
60
|
import { useApplicationStore } from '@finos/legend-application';
|
61
61
|
import {
|
62
62
|
type QueryBuilderParameterDragSource,
|
63
|
-
|
63
|
+
QUERY_BUILDER_PARAMETER_DND_TYPE,
|
64
64
|
} from '../stores/QueryParametersState.js';
|
65
65
|
import {
|
66
66
|
type ConcreteFunctionDefinition,
|
@@ -70,51 +70,12 @@ import {
|
|
70
70
|
} from '@finos/legend-graph';
|
71
71
|
import {
|
72
72
|
type QueryBuilderFunctionsExplorerDragSource,
|
73
|
-
|
73
|
+
QUERY_BUILDER_FUNCTION_DND_TYPE,
|
74
74
|
} from '../stores/QueryFunctionsExplorerState.js';
|
75
75
|
import { DEFAULT_LAMBDA_VARIABLE_NAME } from '../QueryBuilder_Const.js';
|
76
76
|
import { QueryBuilderPostFilterTreeConditionNodeData } from '../stores/QueryBuilderPostFilterState.js';
|
77
77
|
import { filterByType } from '@finos/legend-shared';
|
78
78
|
|
79
|
-
const ProjectionColumnDragLayer: React.FC = () => {
|
80
|
-
const { itemType, item, isDragging, currentPosition } = useDragLayer(
|
81
|
-
(monitor) => ({
|
82
|
-
itemType: monitor.getItemType(),
|
83
|
-
item: monitor.getItem<QueryBuilderProjectionColumnDragSource | null>(),
|
84
|
-
isDragging: monitor.isDragging(),
|
85
|
-
initialOffset: monitor.getInitialSourceClientOffset(),
|
86
|
-
currentPosition: monitor.getClientOffset(),
|
87
|
-
}),
|
88
|
-
);
|
89
|
-
|
90
|
-
if (
|
91
|
-
!isDragging ||
|
92
|
-
!item ||
|
93
|
-
itemType !== QUERY_BUILDER_PROJECTION_DND_TYPE.PROJECTION_COLUMN
|
94
|
-
) {
|
95
|
-
return null;
|
96
|
-
}
|
97
|
-
return (
|
98
|
-
<div className="query-builder__projection__column__drag-preview-layer">
|
99
|
-
<div
|
100
|
-
className="query-builder__projection__column__drag-preview"
|
101
|
-
// added some offset so the mouse doesn't overlap the label too much
|
102
|
-
style={
|
103
|
-
!currentPosition
|
104
|
-
? { display: 'none' }
|
105
|
-
: {
|
106
|
-
transform: `translate(${currentPosition.x + 20}px, ${
|
107
|
-
currentPosition.y + 10
|
108
|
-
}px)`,
|
109
|
-
}
|
110
|
-
}
|
111
|
-
>
|
112
|
-
{item.columnState.columnName}
|
113
|
-
</div>
|
114
|
-
</div>
|
115
|
-
);
|
116
|
-
};
|
117
|
-
|
118
79
|
const QueryBuilderProjectionColumnContextMenu = observer(
|
119
80
|
forwardRef<
|
120
81
|
HTMLDivElement,
|
@@ -191,7 +152,7 @@ const QueryBuilderDerivationProjectionColumnEditor = observer(
|
|
191
152
|
| QueryBuilderFunctionsExplorerDragSource,
|
192
153
|
type: string,
|
193
154
|
): void => {
|
194
|
-
if (type ===
|
155
|
+
if (type === QUERY_BUILDER_PARAMETER_DND_TYPE) {
|
195
156
|
projectionColumnState.derivationLambdaEditorState.setLambdaString(
|
196
157
|
`${
|
197
158
|
projectionColumnState.derivationLambdaEditorState.lambdaString
|
@@ -199,9 +160,7 @@ const QueryBuilderDerivationProjectionColumnEditor = observer(
|
|
199
160
|
(item as QueryBuilderParameterDragSource).variable.variableName
|
200
161
|
}`,
|
201
162
|
);
|
202
|
-
} else if (
|
203
|
-
type === QUERY_BUILDER_FUNCTIONS_EXPLORER_TREE_DND_TYPE.FUNCTION
|
204
|
-
) {
|
163
|
+
} else if (type === QUERY_BUILDER_FUNCTION_DND_TYPE) {
|
205
164
|
projectionColumnState.derivationLambdaEditorState.setLambdaString(
|
206
165
|
`${
|
207
166
|
projectionColumnState.derivationLambdaEditorState.lambdaString
|
@@ -219,23 +178,21 @@ const QueryBuilderDerivationProjectionColumnEditor = observer(
|
|
219
178
|
},
|
220
179
|
[projectionColumnState],
|
221
180
|
);
|
222
|
-
const [, dropConnector] = useDrop
|
181
|
+
const [, dropConnector] = useDrop<
|
182
|
+
| QueryBuilderExplorerTreeDragSource
|
183
|
+
| QueryBuilderParameterDragSource
|
184
|
+
| QueryBuilderFunctionsExplorerDragSource
|
185
|
+
>(
|
223
186
|
() => ({
|
224
187
|
accept: [
|
225
188
|
QUERY_BUILDER_EXPLORER_TREE_DND_TYPE.ROOT,
|
226
189
|
QUERY_BUILDER_EXPLORER_TREE_DND_TYPE.CLASS_PROPERTY,
|
227
190
|
QUERY_BUILDER_EXPLORER_TREE_DND_TYPE.ENUM_PROPERTY,
|
228
191
|
QUERY_BUILDER_EXPLORER_TREE_DND_TYPE.PRIMITIVE_PROPERTY,
|
229
|
-
|
230
|
-
|
192
|
+
QUERY_BUILDER_PARAMETER_DND_TYPE,
|
193
|
+
QUERY_BUILDER_FUNCTION_DND_TYPE,
|
231
194
|
],
|
232
|
-
drop: (
|
233
|
-
item:
|
234
|
-
| QueryBuilderExplorerTreeDragSource
|
235
|
-
| QueryBuilderParameterDragSource
|
236
|
-
| QueryBuilderFunctionsExplorerDragSource,
|
237
|
-
monitor,
|
238
|
-
): void => {
|
195
|
+
drop: (item, monitor): void => {
|
239
196
|
if (!monitor.didDrop()) {
|
240
197
|
handleDrop(item, monitor.getItemType() as string);
|
241
198
|
} // prevent drop event propagation to accomondate for nested DnD
|
@@ -270,10 +227,7 @@ const QueryBuilderDerivationProjectionColumnEditor = observer(
|
|
270
227
|
);
|
271
228
|
|
272
229
|
const QueryBuilderProjectionColumnEditor = observer(
|
273
|
-
(props: {
|
274
|
-
projectionColumnState: QueryBuilderProjectionColumnState;
|
275
|
-
isRearrangingColumns: boolean;
|
276
|
-
}) => {
|
230
|
+
(props: { projectionColumnState: QueryBuilderProjectionColumnState }) => {
|
277
231
|
const ref = useRef<HTMLDivElement>(null);
|
278
232
|
|
279
233
|
const [isSelectedFromContextMenu, setIsSelectedFromContextMenu] =
|
@@ -281,18 +235,26 @@ const QueryBuilderProjectionColumnEditor = observer(
|
|
281
235
|
const onContextMenuOpen = (): void => setIsSelectedFromContextMenu(true);
|
282
236
|
const onContextMenuClose = (): void => setIsSelectedFromContextMenu(false);
|
283
237
|
|
284
|
-
const { projectionColumnState
|
238
|
+
const { projectionColumnState } = props;
|
285
239
|
const queryBuilderState =
|
286
240
|
projectionColumnState.projectionState.queryBuilderState;
|
287
241
|
const projectionState =
|
288
242
|
queryBuilderState.fetchStructureState.projectionState;
|
289
|
-
|
290
|
-
const isRemovalDisabled = Array.from(
|
243
|
+
const postFilterColumnStates = Array.from(
|
291
244
|
queryBuilderState.postFilterState.nodes.values(),
|
292
245
|
)
|
293
246
|
.filter(filterByType(QueryBuilderPostFilterTreeConditionNodeData))
|
294
|
-
.map((n) => n.condition.columnState)
|
295
|
-
|
247
|
+
.map((n) => n.condition.columnState);
|
248
|
+
|
249
|
+
const isRemovalDisabled =
|
250
|
+
postFilterColumnStates
|
251
|
+
.filter((co) => co instanceof QueryBuilderAggregateColumnState)
|
252
|
+
.map(
|
253
|
+
(co) =>
|
254
|
+
(co as QueryBuilderAggregateColumnState).projectionColumnState,
|
255
|
+
)
|
256
|
+
.includes(projectionColumnState) ||
|
257
|
+
postFilterColumnStates.includes(projectionColumnState);
|
296
258
|
|
297
259
|
const removeColumn = (): void =>
|
298
260
|
projectionState.removeColumn(projectionColumnState);
|
@@ -341,8 +303,7 @@ const QueryBuilderProjectionColumnEditor = observer(
|
|
341
303
|
((hoverBoundingReact?.bottom ?? 0) - (hoverBoundingReact?.top ?? 0)) /
|
342
304
|
2;
|
343
305
|
const dragDistance =
|
344
|
-
(monitor.getClientOffset()
|
345
|
-
(hoverBoundingReact?.top ?? 0);
|
306
|
+
(monitor.getClientOffset()?.y ?? 0) - (hoverBoundingReact?.top ?? 0);
|
346
307
|
if (dragIndex < hoverIndex && dragDistance < distanceThreshold) {
|
347
308
|
return;
|
348
309
|
}
|
@@ -353,50 +314,54 @@ const QueryBuilderProjectionColumnEditor = observer(
|
|
353
314
|
},
|
354
315
|
[projectionColumnState, projectionState],
|
355
316
|
);
|
356
|
-
const [, dropConnector] = useDrop(
|
317
|
+
const [, dropConnector] = useDrop<QueryBuilderProjectionColumnDragSource>(
|
357
318
|
() => ({
|
358
|
-
accept: [
|
359
|
-
hover: (
|
360
|
-
item: QueryBuilderProjectionColumnDragSource,
|
361
|
-
monitor: DropTargetMonitor,
|
362
|
-
): void => handleHover(item, monitor),
|
319
|
+
accept: [QUERY_BUILDER_PROJECTION_COLUMN_DND_TYPE],
|
320
|
+
hover: (item, monitor): void => handleHover(item, monitor),
|
363
321
|
}),
|
364
322
|
[handleHover],
|
365
323
|
);
|
366
|
-
const [
|
324
|
+
const [
|
325
|
+
{ projectionColumnBeingDragged },
|
326
|
+
dragConnector,
|
327
|
+
dragPreviewConnector,
|
328
|
+
] = useDrag<
|
329
|
+
QueryBuilderProjectionColumnDragSource,
|
330
|
+
void,
|
331
|
+
{
|
332
|
+
projectionColumnBeingDragged:
|
333
|
+
| QueryBuilderProjectionColumnState
|
334
|
+
| undefined;
|
335
|
+
}
|
336
|
+
>(
|
367
337
|
() => ({
|
368
|
-
type:
|
369
|
-
item: ()
|
370
|
-
projectionColumnState
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
338
|
+
type: QUERY_BUILDER_PROJECTION_COLUMN_DND_TYPE,
|
339
|
+
item: () => ({
|
340
|
+
columnState: projectionColumnState,
|
341
|
+
}),
|
342
|
+
collect: (monitor) => ({
|
343
|
+
/**
|
344
|
+
* @workaround typings - https://github.com/react-dnd/react-dnd/pull/3484
|
345
|
+
*/
|
346
|
+
projectionColumnBeingDragged:
|
347
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
|
348
|
+
(monitor.getItem() as QueryBuilderProjectionColumnDragSource | null)
|
349
|
+
?.columnState,
|
350
|
+
}),
|
375
351
|
}),
|
376
352
|
[projectionColumnState],
|
377
353
|
);
|
354
|
+
const isBeingDragged =
|
355
|
+
projectionColumnState === projectionColumnBeingDragged;
|
378
356
|
dragConnector(dropConnector(ref));
|
379
|
-
|
380
|
-
// hide default HTML5 preview image
|
381
|
-
useEffect(() => {
|
382
|
-
dragPreviewConnector(getEmptyImage(), { captureDraggingState: true });
|
383
|
-
}, [dragPreviewConnector]);
|
357
|
+
useDragPreviewLayer(dragPreviewConnector);
|
384
358
|
|
385
359
|
return (
|
386
|
-
<div
|
387
|
-
|
388
|
-
|
389
|
-
|
390
|
-
|
391
|
-
'query-builder__projection__column--no-hover': isRearrangingColumns,
|
392
|
-
})}
|
393
|
-
>
|
394
|
-
{projectionColumnState.isBeingDragged && (
|
395
|
-
<div className="query-builder__projection__column__dnd__placeholder__container">
|
396
|
-
<div className="query-builder__dnd__placeholder query-builder__projection__column__dnd__placeholder" />
|
397
|
-
</div>
|
398
|
-
)}
|
399
|
-
{!projectionColumnState.isBeingDragged && (
|
360
|
+
<div ref={ref} className="query-builder__projection__column">
|
361
|
+
<PanelEntryDropZonePlaceholder
|
362
|
+
showPlaceholder={isBeingDragged}
|
363
|
+
className="query-builder__dnd__placeholder"
|
364
|
+
>
|
400
365
|
<ContextMenu
|
401
366
|
content={
|
402
367
|
<QueryBuilderProjectionColumnContextMenu
|
@@ -417,8 +382,8 @@ const QueryBuilderProjectionColumnEditor = observer(
|
|
417
382
|
onOpen={onContextMenuOpen}
|
418
383
|
onClose={onContextMenuClose}
|
419
384
|
>
|
420
|
-
<div className="query-
|
421
|
-
<div className="query-
|
385
|
+
<div className="query-builder__projection__column__drag-handle__container">
|
386
|
+
<div className="query-builder__projection__column__drag-handle">
|
422
387
|
<VerticalDragHandleIcon />
|
423
388
|
</div>
|
424
389
|
</div>
|
@@ -526,7 +491,7 @@ const QueryBuilderProjectionColumnEditor = observer(
|
|
526
491
|
</button>
|
527
492
|
</div>
|
528
493
|
</ContextMenu>
|
529
|
-
|
494
|
+
</PanelEntryDropZonePlaceholder>
|
530
495
|
</div>
|
531
496
|
);
|
532
497
|
},
|
@@ -539,10 +504,6 @@ export const QueryBuilderProjectionPanel = observer(
|
|
539
504
|
const projectionState =
|
540
505
|
queryBuilderState.fetchStructureState.projectionState;
|
541
506
|
const projectionColumns = projectionState.columns;
|
542
|
-
// Drag and Drop
|
543
|
-
const isRearrangingColumns = projectionColumns.some(
|
544
|
-
(columnState) => columnState.isBeingDragged,
|
545
|
-
);
|
546
507
|
const handleDrop = useCallback(
|
547
508
|
(
|
548
509
|
item:
|
@@ -551,11 +512,13 @@ export const QueryBuilderProjectionPanel = observer(
|
|
551
512
|
type: string,
|
552
513
|
): void => {
|
553
514
|
switch (type) {
|
554
|
-
case
|
515
|
+
case QUERY_BUILDER_FUNCTION_DND_TYPE: {
|
555
516
|
const derivationProjectionColumn =
|
556
517
|
new QueryBuilderDerivationProjectionColumnState(
|
557
518
|
projectionState,
|
558
|
-
queryBuilderState.graphManagerState.graphManager.
|
519
|
+
queryBuilderState.graphManagerState.graphManager.createDefaultBasicRawLambda(
|
520
|
+
{ addDummyParameter: true },
|
521
|
+
),
|
559
522
|
);
|
560
523
|
derivationProjectionColumn.derivationLambdaEditorState.setLambdaString(
|
561
524
|
`${DEFAULT_LAMBDA_VARIABLE_NAME}${LAMBDA_PIPE}${generateFunctionCallString(
|
@@ -588,25 +551,26 @@ export const QueryBuilderProjectionPanel = observer(
|
|
588
551
|
},
|
589
552
|
[queryBuilderState, projectionState],
|
590
553
|
);
|
591
|
-
|
554
|
+
|
555
|
+
const [{ isDragOver }, dropTargetConnector] = useDrop<
|
556
|
+
| QueryBuilderExplorerTreeDragSource
|
557
|
+
| QueryBuilderFunctionsExplorerDragSource,
|
558
|
+
void,
|
559
|
+
{ isDragOver: boolean }
|
560
|
+
>(
|
592
561
|
() => ({
|
593
562
|
accept: [
|
594
563
|
QUERY_BUILDER_EXPLORER_TREE_DND_TYPE.ENUM_PROPERTY,
|
595
564
|
QUERY_BUILDER_EXPLORER_TREE_DND_TYPE.PRIMITIVE_PROPERTY,
|
596
|
-
|
565
|
+
QUERY_BUILDER_FUNCTION_DND_TYPE,
|
597
566
|
],
|
598
|
-
drop: (
|
599
|
-
item:
|
600
|
-
| QueryBuilderExplorerTreeDragSource
|
601
|
-
| QueryBuilderFunctionsExplorerDragSource,
|
602
|
-
monitor: DropTargetMonitor,
|
603
|
-
): void => {
|
567
|
+
drop: (item, monitor): void => {
|
604
568
|
if (!monitor.didDrop()) {
|
605
569
|
handleDrop(item, monitor.getItemType() as string);
|
606
570
|
} // prevent drop event propagation to accomondate for nested DnD
|
607
571
|
},
|
608
|
-
collect: (monitor)
|
609
|
-
|
572
|
+
collect: (monitor) => ({
|
573
|
+
isDragOver: monitor.isOver({ shallow: true }),
|
610
574
|
}),
|
611
575
|
}),
|
612
576
|
[handleDrop],
|
@@ -619,33 +583,42 @@ export const QueryBuilderProjectionPanel = observer(
|
|
619
583
|
}, [applicationStore, projectionState]);
|
620
584
|
|
621
585
|
return (
|
622
|
-
<div
|
623
|
-
|
624
|
-
|
625
|
-
|
626
|
-
|
627
|
-
|
628
|
-
|
629
|
-
|
630
|
-
|
631
|
-
|
632
|
-
|
633
|
-
|
634
|
-
|
635
|
-
|
636
|
-
|
637
|
-
|
638
|
-
|
639
|
-
|
640
|
-
|
641
|
-
|
642
|
-
|
643
|
-
|
586
|
+
<div className="panel__content">
|
587
|
+
<PanelDropZone
|
588
|
+
isDragOver={isDragOver}
|
589
|
+
dropTargetConnector={dropTargetConnector}
|
590
|
+
>
|
591
|
+
{!projectionColumns.length && (
|
592
|
+
<BlankPanelPlaceholder
|
593
|
+
text="Add a projection column"
|
594
|
+
tooltipText="Drag and drop properties here"
|
595
|
+
/>
|
596
|
+
)}
|
597
|
+
{Boolean(projectionColumns.length) && (
|
598
|
+
<div
|
599
|
+
data-testid={QUERY_BUILDER_TEST_ID.QUERY_BUILDER_PROJECTION}
|
600
|
+
className="query-builder__projection__columns"
|
601
|
+
>
|
602
|
+
<DragPreviewLayer
|
603
|
+
labelGetter={(
|
604
|
+
item: QueryBuilderProjectionColumnDragSource,
|
605
|
+
): string =>
|
606
|
+
item.columnState.columnName === ''
|
607
|
+
? '(unknown)'
|
608
|
+
: item.columnState.columnName
|
609
|
+
}
|
610
|
+
types={[QUERY_BUILDER_PROJECTION_COLUMN_DND_TYPE]}
|
644
611
|
/>
|
645
|
-
|
646
|
-
|
647
|
-
|
648
|
-
|
612
|
+
{projectionColumns.map((projectionColumnState) => (
|
613
|
+
<QueryBuilderProjectionColumnEditor
|
614
|
+
key={projectionColumnState.uuid}
|
615
|
+
projectionColumnState={projectionColumnState}
|
616
|
+
/>
|
617
|
+
))}
|
618
|
+
</div>
|
619
|
+
)}
|
620
|
+
<QueryResultModifierModal queryBuilderState={queryBuilderState} />
|
621
|
+
</PanelDropZone>
|
649
622
|
</div>
|
650
623
|
);
|
651
624
|
},
|
@@ -15,7 +15,13 @@
|
|
15
15
|
*/
|
16
16
|
|
17
17
|
import { useCallback } from 'react';
|
18
|
-
import {
|
18
|
+
import {
|
19
|
+
clsx,
|
20
|
+
Dialog,
|
21
|
+
PanelDropZone,
|
22
|
+
InfoCircleIcon,
|
23
|
+
PanelEntryDropZonePlaceholder,
|
24
|
+
} from '@finos/legend-art';
|
19
25
|
import { observer } from 'mobx-react-lite';
|
20
26
|
import {
|
21
27
|
generateMilestonedPropertyParameterValue,
|
@@ -24,7 +30,7 @@ import {
|
|
24
30
|
type QueryBuilderDerivedPropertyExpressionState,
|
25
31
|
type QueryBuilderPropertyExpressionState,
|
26
32
|
} from '../stores/QueryBuilderPropertyEditorState.js';
|
27
|
-
import {
|
33
|
+
import { useDrop } from 'react-dnd';
|
28
34
|
import {
|
29
35
|
QUERY_BUILDER_EXPLORER_TREE_DND_TYPE,
|
30
36
|
type QueryBuilderExplorerTreeDragSource,
|
@@ -34,7 +40,7 @@ import { QueryBuilderPropertyInfoTooltip } from './QueryBuilderPropertyInfoToolt
|
|
34
40
|
import { VariableExpressionViewer } from './QueryBuilderParameterPanel.js';
|
35
41
|
import {
|
36
42
|
type QueryBuilderParameterDragSource,
|
37
|
-
|
43
|
+
QUERY_BUILDER_PARAMETER_DND_TYPE,
|
38
44
|
} from '../stores/QueryParametersState.js';
|
39
45
|
import {
|
40
46
|
type ValueSpecification,
|
@@ -74,13 +80,14 @@ const DerivedPropertyParameterValueEditor = observer(
|
|
74
80
|
},
|
75
81
|
[derivedPropertyExpressionState, idx],
|
76
82
|
);
|
77
|
-
const [{ isParameterValueDragOver },
|
83
|
+
const [{ isParameterValueDragOver }, dropTargetConnector] = useDrop<
|
84
|
+
QueryBuilderParameterDragSource,
|
85
|
+
void,
|
86
|
+
{ isParameterValueDragOver: boolean }
|
87
|
+
>(
|
78
88
|
() => ({
|
79
|
-
accept: [
|
80
|
-
drop: (
|
81
|
-
item: QueryBuilderParameterDragSource,
|
82
|
-
monitor: DropTargetMonitor,
|
83
|
-
): void => {
|
89
|
+
accept: [QUERY_BUILDER_PARAMETER_DND_TYPE],
|
90
|
+
drop: (item, monitor): void => {
|
84
91
|
const itemType = item.variable.parameter.genericType?.value.rawType;
|
85
92
|
if (
|
86
93
|
!monitor.didDrop() &&
|
@@ -90,9 +97,9 @@ const DerivedPropertyParameterValueEditor = observer(
|
|
90
97
|
parameterType.name === itemType.name)
|
91
98
|
) {
|
92
99
|
handleDrop(item);
|
93
|
-
}
|
100
|
+
} // prevent drop event propagation to accomondate for nested DnD
|
94
101
|
},
|
95
|
-
collect: (monitor)
|
102
|
+
collect: (monitor) => ({
|
96
103
|
isParameterValueDragOver: monitor.isOver({
|
97
104
|
shallow: true,
|
98
105
|
}),
|
@@ -125,37 +132,34 @@ const DerivedPropertyParameterValueEditor = observer(
|
|
125
132
|
<div className="panel__content__form__section__header__prompt">{`${
|
126
133
|
variable.multiplicity.lowerBound === 0 ? 'optional' : ''
|
127
134
|
}`}</div>
|
128
|
-
<div
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
<
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
}}
|
157
|
-
resetValue={resetParameterValue}
|
158
|
-
/>
|
135
|
+
<div className="query-builder__parameter-editor">
|
136
|
+
<PanelDropZone
|
137
|
+
isDragOver={isParameterValueDragOver}
|
138
|
+
dropTargetConnector={dropTargetConnector}
|
139
|
+
>
|
140
|
+
<BasicValueSpecificationEditor
|
141
|
+
valueSpecification={guaranteeNonNullable(
|
142
|
+
derivedPropertyExpressionState.parameterValues[idx],
|
143
|
+
)}
|
144
|
+
setValueSpecification={(val: ValueSpecification): void => {
|
145
|
+
propertyExpression_setParametersValue(
|
146
|
+
derivedPropertyExpressionState.propertyExpression,
|
147
|
+
idx + 1,
|
148
|
+
val,
|
149
|
+
derivedPropertyExpressionState.queryBuilderState
|
150
|
+
.observableContext,
|
151
|
+
);
|
152
|
+
}}
|
153
|
+
graph={graph}
|
154
|
+
typeCheckOption={{
|
155
|
+
expectedType: parameterType,
|
156
|
+
match:
|
157
|
+
parameterType ===
|
158
|
+
graph.getPrimitiveType(PRIMITIVE_TYPE.DATETIME),
|
159
|
+
}}
|
160
|
+
resetValue={resetParameterValue}
|
161
|
+
/>
|
162
|
+
</PanelDropZone>
|
159
163
|
</div>
|
160
164
|
<div className="panel__content__form__section__list"></div>
|
161
165
|
</div>
|
@@ -282,22 +286,23 @@ export const QueryBuilderPropertyExpressionBadge = observer(
|
|
282
286
|
onPropertyExpressionChange(item.node),
|
283
287
|
[onPropertyExpressionChange],
|
284
288
|
);
|
285
|
-
const [{
|
289
|
+
const [{ isDragOver }, dropConnector] = useDrop<
|
290
|
+
QueryBuilderExplorerTreeDragSource,
|
291
|
+
void,
|
292
|
+
{ isDragOver: boolean }
|
293
|
+
>(
|
286
294
|
() => ({
|
287
295
|
accept: [
|
288
296
|
QUERY_BUILDER_EXPLORER_TREE_DND_TYPE.ENUM_PROPERTY,
|
289
297
|
QUERY_BUILDER_EXPLORER_TREE_DND_TYPE.PRIMITIVE_PROPERTY,
|
290
298
|
],
|
291
|
-
drop: (
|
292
|
-
item: QueryBuilderExplorerTreeDragSource,
|
293
|
-
monitor: DropTargetMonitor,
|
294
|
-
): void => {
|
299
|
+
drop: (item, monitor): void => {
|
295
300
|
if (!monitor.didDrop()) {
|
296
301
|
handleDrop(item);
|
297
302
|
} // prevent drop event propagation to accomondate for nested DnD
|
298
303
|
},
|
299
|
-
collect: (monitor)
|
300
|
-
|
304
|
+
collect: (monitor) => ({
|
305
|
+
isDragOver: monitor.isOver({ shallow: true }),
|
301
306
|
}),
|
302
307
|
}),
|
303
308
|
[handleDrop],
|
@@ -305,15 +310,14 @@ export const QueryBuilderPropertyExpressionBadge = observer(
|
|
305
310
|
|
306
311
|
return (
|
307
312
|
<div
|
308
|
-
ref={dropConnector}
|
309
313
|
className="query-builder-property-expression-badge"
|
314
|
+
ref={dropConnector}
|
310
315
|
>
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
{!isPropertyDragOver && (
|
316
|
+
<PanelEntryDropZonePlaceholder
|
317
|
+
showPlaceholder={isDragOver}
|
318
|
+
label="Change Property"
|
319
|
+
className="query-builder__dnd__placeholder"
|
320
|
+
>
|
317
321
|
<div
|
318
322
|
className={clsx(
|
319
323
|
'query-builder-property-expression-badge__content',
|
@@ -363,7 +367,7 @@ export const QueryBuilderPropertyExpressionBadge = observer(
|
|
363
367
|
</div>
|
364
368
|
</QueryBuilderPropertyInfoTooltip>
|
365
369
|
</div>
|
366
|
-
|
370
|
+
</PanelEntryDropZonePlaceholder>
|
367
371
|
</div>
|
368
372
|
);
|
369
373
|
},
|