@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.
Files changed (233) hide show
  1. package/lib/application/LegendQueryApplicationConfig.d.ts +19 -1
  2. package/lib/application/LegendQueryApplicationConfig.d.ts.map +1 -1
  3. package/lib/application/LegendQueryApplicationConfig.js +25 -1
  4. package/lib/application/LegendQueryApplicationConfig.js.map +1 -1
  5. package/lib/components/LegendQueryApplication.d.ts.map +1 -1
  6. package/lib/components/LegendQueryApplication.js +15 -5
  7. package/lib/components/LegendQueryApplication.js.map +1 -1
  8. package/lib/components/LegendQueryBaseStoreProvider.d.ts.map +1 -1
  9. package/lib/components/LegendQueryBaseStoreProvider.js +3 -1
  10. package/lib/components/LegendQueryBaseStoreProvider.js.map +1 -1
  11. package/lib/components/QueryBuilder.d.ts.map +1 -1
  12. package/lib/components/QueryBuilder.js +3 -1
  13. package/lib/components/QueryBuilder.js.map +1 -1
  14. package/lib/components/QueryBuilderExplorerPanel.d.ts.map +1 -1
  15. package/lib/components/QueryBuilderExplorerPanel.js +7 -34
  16. package/lib/components/QueryBuilderExplorerPanel.js.map +1 -1
  17. package/lib/components/QueryBuilderFetchStructurePanel.d.ts.map +1 -1
  18. package/lib/components/QueryBuilderFetchStructurePanel.js +77 -66
  19. package/lib/components/QueryBuilderFetchStructurePanel.js.map +1 -1
  20. package/lib/components/QueryBuilderFilterPanel.d.ts.map +1 -1
  21. package/lib/components/QueryBuilderFilterPanel.js +42 -59
  22. package/lib/components/QueryBuilderFilterPanel.js.map +1 -1
  23. package/lib/components/QueryBuilderFunctionsExplorerPanel.d.ts.map +1 -1
  24. package/lib/components/QueryBuilderFunctionsExplorerPanel.js +9 -39
  25. package/lib/components/QueryBuilderFunctionsExplorerPanel.js.map +1 -1
  26. package/lib/components/QueryBuilderGraphFetchTreePanel.d.ts.map +1 -1
  27. package/lib/components/QueryBuilderGraphFetchTreePanel.js +5 -5
  28. package/lib/components/QueryBuilderGraphFetchTreePanel.js.map +1 -1
  29. package/lib/components/QueryBuilderLambdaEditor.d.ts +1 -0
  30. package/lib/components/QueryBuilderLambdaEditor.d.ts.map +1 -1
  31. package/lib/components/QueryBuilderLambdaEditor.js +2 -2
  32. package/lib/components/QueryBuilderLambdaEditor.js.map +1 -1
  33. package/lib/components/QueryBuilderMilestoneEditor.js +5 -5
  34. package/lib/components/QueryBuilderMilestoneEditor.js.map +1 -1
  35. package/lib/components/QueryBuilderPanelIssueCountBadge.d.ts +20 -0
  36. package/lib/components/QueryBuilderPanelIssueCountBadge.d.ts.map +1 -0
  37. package/lib/components/QueryBuilderPanelIssueCountBadge.js +28 -0
  38. package/lib/components/QueryBuilderPanelIssueCountBadge.js.map +1 -0
  39. package/lib/components/QueryBuilderParameterPanel.d.ts.map +1 -1
  40. package/lib/components/QueryBuilderParameterPanel.js +13 -33
  41. package/lib/components/QueryBuilderParameterPanel.js.map +1 -1
  42. package/lib/components/QueryBuilderPostFilterPanel.d.ts.map +1 -1
  43. package/lib/components/QueryBuilderPostFilterPanel.js +47 -59
  44. package/lib/components/QueryBuilderPostFilterPanel.js.map +1 -1
  45. package/lib/components/QueryBuilderProjectionPanel.d.ts.map +1 -1
  46. package/lib/components/QueryBuilderProjectionPanel.js +47 -63
  47. package/lib/components/QueryBuilderProjectionPanel.js.map +1 -1
  48. package/lib/components/QueryBuilderPropertyExpressionEditor.d.ts.map +1 -1
  49. package/lib/components/QueryBuilderPropertyExpressionEditor.js +11 -11
  50. package/lib/components/QueryBuilderPropertyExpressionEditor.js.map +1 -1
  51. package/lib/components/QueryBuilderPropertySearchPanel.d.ts.map +1 -1
  52. package/lib/components/QueryBuilderPropertySearchPanel.js +3 -6
  53. package/lib/components/QueryBuilderPropertySearchPanel.js.map +1 -1
  54. package/lib/components/QueryBuilderResultModifierPanel.d.ts.map +1 -1
  55. package/lib/components/QueryBuilderResultModifierPanel.js +3 -1
  56. package/lib/components/QueryBuilderResultModifierPanel.js.map +1 -1
  57. package/lib/components/QueryBuilderResultPanel.d.ts.map +1 -1
  58. package/lib/components/QueryBuilderResultPanel.js +28 -18
  59. package/lib/components/QueryBuilderResultPanel.js.map +1 -1
  60. package/lib/components/QueryBuilderSetupPanel.d.ts.map +1 -1
  61. package/lib/components/QueryBuilderSetupPanel.js +10 -9
  62. package/lib/components/QueryBuilderSetupPanel.js.map +1 -1
  63. package/lib/components/QueryBuilderUnsupportedQueryEditor.d.ts.map +1 -1
  64. package/lib/components/QueryBuilderUnsupportedQueryEditor.js +4 -2
  65. package/lib/components/QueryBuilderUnsupportedQueryEditor.js.map +1 -1
  66. package/lib/components/QueryEditor.d.ts.map +1 -1
  67. package/lib/components/QueryEditor.js +16 -4
  68. package/lib/components/QueryEditor.js.map +1 -1
  69. package/lib/components/QueryEditorComponentTestUtils.d.ts +2 -0
  70. package/lib/components/QueryEditorComponentTestUtils.d.ts.map +1 -1
  71. package/lib/components/QueryEditorComponentTestUtils.js +3 -2
  72. package/lib/components/QueryEditorComponentTestUtils.js.map +1 -1
  73. package/lib/components/QueryEditorStoreProvider.d.ts.map +1 -1
  74. package/lib/components/QueryEditorStoreProvider.js +7 -3
  75. package/lib/components/QueryEditorStoreProvider.js.map +1 -1
  76. package/lib/components/QuerySetupStoreProvider.d.ts.map +1 -1
  77. package/lib/components/QuerySetupStoreProvider.js +3 -1
  78. package/lib/components/QuerySetupStoreProvider.js.map +1 -1
  79. package/lib/index.css +2 -2
  80. package/lib/index.css.map +1 -1
  81. package/lib/package.json +11 -9
  82. package/lib/stores/LegendQueryBaseStore.d.ts +4 -2
  83. package/lib/stores/LegendQueryBaseStore.d.ts.map +1 -1
  84. package/lib/stores/LegendQueryBaseStore.js +5 -1
  85. package/lib/stores/LegendQueryBaseStore.js.map +1 -1
  86. package/lib/stores/QueryBuilderExplorerState.d.ts.map +1 -1
  87. package/lib/stores/QueryBuilderExplorerState.js +5 -0
  88. package/lib/stores/QueryBuilderExplorerState.js.map +1 -1
  89. package/lib/stores/QueryBuilderFetchStructureState.d.ts +8 -1
  90. package/lib/stores/QueryBuilderFetchStructureState.d.ts.map +1 -1
  91. package/lib/stores/QueryBuilderFetchStructureState.js +10 -2
  92. package/lib/stores/QueryBuilderFetchStructureState.js.map +1 -1
  93. package/lib/stores/QueryBuilderFilterState.d.ts +8 -9
  94. package/lib/stores/QueryBuilderFilterState.d.ts.map +1 -1
  95. package/lib/stores/QueryBuilderFilterState.js +34 -13
  96. package/lib/stores/QueryBuilderFilterState.js.map +1 -1
  97. package/lib/stores/QueryBuilderGraphFetchTreeState.d.ts.map +1 -1
  98. package/lib/stores/QueryBuilderGraphFetchTreeState.js +6 -3
  99. package/lib/stores/QueryBuilderGraphFetchTreeState.js.map +1 -1
  100. package/lib/stores/QueryBuilderLambdaProcessor.d.ts.map +1 -1
  101. package/lib/stores/QueryBuilderLambdaProcessor.js +2 -0
  102. package/lib/stores/QueryBuilderLambdaProcessor.js.map +1 -1
  103. package/lib/stores/QueryBuilderOperatorLoader.d.ts +47 -0
  104. package/lib/stores/QueryBuilderOperatorLoader.d.ts.map +1 -0
  105. package/lib/stores/QueryBuilderOperatorLoader.js +94 -0
  106. package/lib/stores/QueryBuilderOperatorLoader.js.map +1 -0
  107. package/lib/stores/QueryBuilderPostFilterState.d.ts +9 -6
  108. package/lib/stores/QueryBuilderPostFilterState.d.ts.map +1 -1
  109. package/lib/stores/QueryBuilderPostFilterState.js +31 -7
  110. package/lib/stores/QueryBuilderPostFilterState.js.map +1 -1
  111. package/lib/stores/QueryBuilderPreviewDataHelper.d.ts +4 -3
  112. package/lib/stores/QueryBuilderPreviewDataHelper.d.ts.map +1 -1
  113. package/lib/stores/QueryBuilderPreviewDataHelper.js +77 -97
  114. package/lib/stores/QueryBuilderPreviewDataHelper.js.map +1 -1
  115. package/lib/stores/QueryBuilderProjectionState.d.ts +4 -8
  116. package/lib/stores/QueryBuilderProjectionState.d.ts.map +1 -1
  117. package/lib/stores/QueryBuilderProjectionState.js +17 -44
  118. package/lib/stores/QueryBuilderProjectionState.js.map +1 -1
  119. package/lib/stores/QueryBuilderSetupState.js +1 -1
  120. package/lib/stores/QueryBuilderSetupState.js.map +1 -1
  121. package/lib/stores/QueryBuilderState.d.ts +7 -1
  122. package/lib/stores/QueryBuilderState.d.ts.map +1 -1
  123. package/lib/stores/QueryBuilderState.js +17 -60
  124. package/lib/stores/QueryBuilderState.js.map +1 -1
  125. package/lib/stores/QueryBuilderTestUtils.d.ts +24 -0
  126. package/lib/stores/QueryBuilderTestUtils.d.ts.map +1 -0
  127. package/lib/stores/QueryBuilderTestUtils.js +49 -0
  128. package/lib/stores/QueryBuilderTestUtils.js.map +1 -0
  129. package/lib/stores/QueryBuilderTypeaheadHelper.d.ts +24 -0
  130. package/lib/stores/QueryBuilderTypeaheadHelper.d.ts.map +1 -0
  131. package/lib/stores/QueryBuilderTypeaheadHelper.js +89 -0
  132. package/lib/stores/QueryBuilderTypeaheadHelper.js.map +1 -0
  133. package/lib/stores/QueryBuilderValueSpecificationBuilderHelper.d.ts.map +1 -1
  134. package/lib/stores/QueryBuilderValueSpecificationBuilderHelper.js +7 -7
  135. package/lib/stores/QueryBuilderValueSpecificationBuilderHelper.js.map +1 -1
  136. package/lib/stores/QueryEditorStore.d.ts +6 -4
  137. package/lib/stores/QueryEditorStore.d.ts.map +1 -1
  138. package/lib/stores/QueryEditorStore.js +23 -10
  139. package/lib/stores/QueryEditorStore.js.map +1 -1
  140. package/lib/stores/QueryEditorStoreTestUtils.d.ts.map +1 -1
  141. package/lib/stores/QueryEditorStoreTestUtils.js +1 -0
  142. package/lib/stores/QueryEditorStoreTestUtils.js.map +1 -1
  143. package/lib/stores/QueryFunctionsExplorerState.d.ts +2 -6
  144. package/lib/stores/QueryFunctionsExplorerState.d.ts.map +1 -1
  145. package/lib/stores/QueryFunctionsExplorerState.js +2 -11
  146. package/lib/stores/QueryFunctionsExplorerState.js.map +1 -1
  147. package/lib/stores/QueryParametersState.d.ts +1 -3
  148. package/lib/stores/QueryParametersState.d.ts.map +1 -1
  149. package/lib/stores/QueryParametersState.js +1 -4
  150. package/lib/stores/QueryParametersState.js.map +1 -1
  151. package/lib/stores/QuerySetupStore.d.ts +3 -1
  152. package/lib/stores/QuerySetupStore.d.ts.map +1 -1
  153. package/lib/stores/QuerySetupStore.js +3 -1
  154. package/lib/stores/QuerySetupStore.js.map +1 -1
  155. package/lib/stores/filterOperators/QueryBuilderFilterOperator_Equal.d.ts.map +1 -1
  156. package/lib/stores/filterOperators/QueryBuilderFilterOperator_Equal.js +4 -1
  157. package/lib/stores/filterOperators/QueryBuilderFilterOperator_Equal.js.map +1 -1
  158. package/lib/stores/filterOperators/QueryBuilderFilterOperator_GreaterThan.d.ts.map +1 -1
  159. package/lib/stores/filterOperators/QueryBuilderFilterOperator_GreaterThan.js +4 -1
  160. package/lib/stores/filterOperators/QueryBuilderFilterOperator_GreaterThan.js.map +1 -1
  161. package/lib/stores/filterOperators/QueryBuilderFilterOperator_GreaterThanEqual.d.ts.map +1 -1
  162. package/lib/stores/filterOperators/QueryBuilderFilterOperator_GreaterThanEqual.js +4 -1
  163. package/lib/stores/filterOperators/QueryBuilderFilterOperator_GreaterThanEqual.js.map +1 -1
  164. package/lib/stores/filterOperators/QueryBuilderFilterOperator_LessThan.d.ts.map +1 -1
  165. package/lib/stores/filterOperators/QueryBuilderFilterOperator_LessThan.js +4 -1
  166. package/lib/stores/filterOperators/QueryBuilderFilterOperator_LessThan.js.map +1 -1
  167. package/lib/stores/filterOperators/QueryBuilderFilterOperator_LessThanEqual.d.ts.map +1 -1
  168. package/lib/stores/filterOperators/QueryBuilderFilterOperator_LessThanEqual.js +4 -1
  169. package/lib/stores/filterOperators/QueryBuilderFilterOperator_LessThanEqual.js.map +1 -1
  170. package/lib/stores/postFilterOperators/QueryBuilderPostFilterOperator_Equal.d.ts.map +1 -1
  171. package/lib/stores/postFilterOperators/QueryBuilderPostFilterOperator_Equal.js +4 -1
  172. package/lib/stores/postFilterOperators/QueryBuilderPostFilterOperator_Equal.js.map +1 -1
  173. package/lib/stores/postFilterOperators/QueryBuilderPostFilterOperator_GreaterThan.d.ts.map +1 -1
  174. package/lib/stores/postFilterOperators/QueryBuilderPostFilterOperator_GreaterThan.js +4 -1
  175. package/lib/stores/postFilterOperators/QueryBuilderPostFilterOperator_GreaterThan.js.map +1 -1
  176. package/lib/stores/postFilterOperators/QueryBuilderPostFilterOperator_LessThan.d.ts.map +1 -1
  177. package/lib/stores/postFilterOperators/QueryBuilderPostFilterOperator_LessThan.js +4 -1
  178. package/lib/stores/postFilterOperators/QueryBuilderPostFilterOperator_LessThan.js.map +1 -1
  179. package/package.json +18 -16
  180. package/src/application/LegendQueryApplicationConfig.ts +41 -2
  181. package/src/components/LegendQueryApplication.tsx +27 -10
  182. package/src/components/LegendQueryBaseStoreProvider.tsx +3 -0
  183. package/src/components/QueryBuilder.tsx +13 -2
  184. package/src/components/QueryBuilderExplorerPanel.tsx +17 -56
  185. package/src/components/QueryBuilderFetchStructurePanel.tsx +93 -77
  186. package/src/components/QueryBuilderFilterPanel.tsx +205 -219
  187. package/src/components/QueryBuilderFunctionsExplorerPanel.tsx +24 -68
  188. package/src/components/QueryBuilderGraphFetchTreePanel.tsx +34 -25
  189. package/src/components/QueryBuilderLambdaEditor.tsx +3 -0
  190. package/src/components/QueryBuilderMilestoneEditor.tsx +34 -34
  191. package/src/components/QueryBuilderPanelIssueCountBadge.tsx +38 -0
  192. package/src/components/QueryBuilderParameterPanel.tsx +23 -55
  193. package/src/components/QueryBuilderPostFilterPanel.tsx +223 -230
  194. package/src/components/QueryBuilderProjectionPanel.tsx +127 -154
  195. package/src/components/QueryBuilderPropertyExpressionEditor.tsx +61 -57
  196. package/src/components/QueryBuilderPropertySearchPanel.tsx +8 -9
  197. package/src/components/QueryBuilderResultModifierPanel.tsx +4 -2
  198. package/src/components/QueryBuilderResultPanel.tsx +75 -50
  199. package/src/components/QueryBuilderSetupPanel.tsx +13 -12
  200. package/src/components/QueryBuilderUnsupportedQueryEditor.tsx +4 -2
  201. package/src/components/QueryEditor.tsx +39 -1
  202. package/src/components/QueryEditorComponentTestUtils.tsx +15 -5
  203. package/src/components/QueryEditorStoreProvider.tsx +7 -0
  204. package/src/components/QuerySetupStoreProvider.tsx +3 -0
  205. package/src/stores/LegendQueryBaseStore.ts +14 -1
  206. package/src/stores/QueryBuilderExplorerState.ts +5 -0
  207. package/src/stores/QueryBuilderFetchStructureState.ts +18 -2
  208. package/src/stores/QueryBuilderFilterState.ts +50 -12
  209. package/src/stores/QueryBuilderGraphFetchTreeState.ts +14 -8
  210. package/src/stores/QueryBuilderLambdaProcessor.ts +8 -0
  211. package/src/stores/QueryBuilderOperatorLoader.ts +133 -0
  212. package/src/stores/QueryBuilderPostFilterState.ts +47 -8
  213. package/src/stores/QueryBuilderPreviewDataHelper.ts +122 -217
  214. package/src/stores/QueryBuilderProjectionState.ts +30 -58
  215. package/src/stores/QueryBuilderSetupState.ts +1 -1
  216. package/src/stores/QueryBuilderState.ts +33 -96
  217. package/src/stores/QueryBuilderTestUtils.ts +93 -0
  218. package/src/stores/QueryBuilderTypeaheadHelper.ts +149 -0
  219. package/src/stores/QueryBuilderValueSpecificationBuilderHelper.ts +9 -7
  220. package/src/stores/QueryEditorStore.ts +29 -6
  221. package/src/stores/QueryEditorStoreTestUtils.ts +1 -0
  222. package/src/stores/QueryFunctionsExplorerState.ts +1 -11
  223. package/src/stores/QueryParametersState.ts +1 -3
  224. package/src/stores/QuerySetupStore.ts +4 -0
  225. package/src/stores/filterOperators/QueryBuilderFilterOperator_Equal.ts +8 -1
  226. package/src/stores/filterOperators/QueryBuilderFilterOperator_GreaterThan.ts +8 -1
  227. package/src/stores/filterOperators/QueryBuilderFilterOperator_GreaterThanEqual.ts +8 -1
  228. package/src/stores/filterOperators/QueryBuilderFilterOperator_LessThan.ts +8 -1
  229. package/src/stores/filterOperators/QueryBuilderFilterOperator_LessThanEqual.ts +8 -1
  230. package/src/stores/postFilterOperators/QueryBuilderPostFilterOperator_Equal.ts +8 -1
  231. package/src/stores/postFilterOperators/QueryBuilderPostFilterOperator_GreaterThan.ts +8 -1
  232. package/src/stores/postFilterOperators/QueryBuilderPostFilterOperator_LessThan.ts +8 -1
  233. package/tsconfig.json +4 -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, useDragLayer } from 'react-dnd';
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: QUERY_BUILDER_FUNCTIONS_EXPLORER_TREE_DND_TYPE.FUNCTION,
153
+ type: QUERY_BUILDER_FUNCTION_DND_TYPE,
200
154
  item: { node: node },
201
155
  }),
202
156
  [node],
203
157
  );
204
- // hide default HTML5 preview image
205
- useEffect(() => {
206
- dragPreviewConnector(getEmptyImage(), { captureDraggingState: true });
207
- }, [dragPreviewConnector]);
158
+ useDragPreviewLayer(dragPreviewConnector);
208
159
 
209
160
  return (
210
161
  <div
@@ -263,6 +214,7 @@ const QueryBuilderFunctionsExplorerTreeNodeContainer = observer(
263
214
  ) : (
264
215
  <div />
265
216
  );
217
+
266
218
  const iconPackageColor = isDependencyTreeNode(node)
267
219
  ? 'color--dependency'
268
220
  : '';
@@ -278,23 +230,19 @@ const QueryBuilderFunctionsExplorerTreeNodeContainer = observer(
278
230
  const selectNode = (): void => {
279
231
  onNodeSelect?.(node);
280
232
  };
281
- const [, dragConnector, dragPreviewConnector] = useDrag(
233
+ const [, dragConnector, dragPreviewConnector] = useDrag<{
234
+ node?: QueryBuilderFunctionsExplorerTreeNodeData;
235
+ }>(
282
236
  () => ({
283
- type:
284
- node.packageableElement instanceof ConcreteFunctionDefinition
285
- ? QUERY_BUILDER_FUNCTIONS_EXPLORER_TREE_DND_TYPE.FUNCTION
286
- : QUERY_BUILDER_FUNCTIONS_EXPLORER_TREE_DND_TYPE.PACKAGE,
287
- item: (): { node?: QueryBuilderFunctionsExplorerTreeNodeData } =>
237
+ type: QUERY_BUILDER_FUNCTION_DND_TYPE,
238
+ item: () =>
288
239
  node.packageableElement instanceof ConcreteFunctionDefinition
289
240
  ? { node }
290
241
  : {},
291
242
  }),
292
243
  [node],
293
244
  );
294
- // hide default HTML5 preview image
295
- useEffect(() => {
296
- dragPreviewConnector(getEmptyImage(), { captureDraggingState: true });
297
- }, [dragPreviewConnector]);
245
+ useDragPreviewLayer(dragPreviewConnector);
298
246
 
299
247
  return (
300
248
  <div>
@@ -522,8 +470,16 @@ export const QueryBuilderFunctionsExplorerPanel = observer(
522
470
  </div>
523
471
  </div>
524
472
  <div className="panel__content query-builder__functions-explorer__content">
525
- <QueryBuilderFunctionDragLayer
526
- queryBuilderState={queryBuilderState}
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]}
527
483
  />
528
484
  {((showDependencyFuncions &&
529
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 { type DropTargetMonitor, useDrop } from 'react-dnd';
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 [{ isPropertyDragOver }, dropConnector] = useDrop(
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): { isPropertyDragOver: boolean } => ({
240
- isPropertyDragOver: monitor.isOver({ shallow: true }),
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 dnd__overlay__container"
250
- ref={dropConnector}
255
+ className="panel__content"
251
256
  >
252
- <div className={clsx({ dnd__overlay: isPropertyDragOver })} />
253
- {(!treeData || isGraphFetchTreeDataEmpty(treeData)) && (
254
- <BlankPanelPlaceholder
255
- placeholderText="Add a graph fetch property"
256
- tooltipText="Drag and drop properties here"
257
- />
258
- )}
259
- {treeData && !isGraphFetchTreeDataEmpty(treeData) && (
260
- <QueryBuilderGraphFetchTreeExplorer
261
- graphFetchState={graphFetchState}
262
- treeData={treeData}
263
- isReadOnly={false}
264
- updateTreeData={updateTreeData}
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
- QUERY_BUILDER_PARAMETER_TREE_DND_TYPE,
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 { type DropTargetMonitor, useDrop } from 'react-dnd';
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: [QUERY_BUILDER_PARAMETER_TREE_DND_TYPE.VARIABLE],
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
- ref={dropConnector}
120
- className="query-builder__parameter-editor dnd__overlay__container"
121
- >
122
- {isMilestoningParameterValueDragOver && (
123
- <div className="query-builder__parameter-editor__node__dnd__overlay">
124
- Change Milestoning Parameter Value
125
- </div>
126
- )}
127
- <BasicValueSpecificationEditor
128
- valueSpecification={milestoningParameter}
129
- graph={queryBuilderState.graphManagerState.graph}
130
- setValueSpecification={(val: ValueSpecification): void =>
131
- stereotype === MILESTONING_STEREOTYPE.BUSINESS_TEMPORAL
132
- ? queryBuilderState.querySetupState.setBusinessDate(val)
133
- : queryBuilderState.querySetupState.setProcessingDate(val)
134
- }
135
- typeCheckOption={{
136
- expectedType:
137
- queryBuilderState.graphManagerState.graph.getPrimitiveType(
138
- PRIMITIVE_TYPE.DATE,
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
- QUERY_BUILDER_PARAMETER_TREE_DND_TYPE,
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,
@@ -46,10 +48,10 @@ import {
46
48
  variableExpression_setName,
47
49
  LambdaParameterState,
48
50
  LambdaParameterValuesEditor,
49
- getPackageableElementOptionalFormatter,
51
+ getPackageableElementOptionFormatter,
52
+ useApplicationStore,
50
53
  } from '@finos/legend-application';
51
- import { useDrag, useDragLayer } from 'react-dnd';
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,9 +196,9 @@ const VariableExpressionEditor = observer(
192
196
  options={typeOptions}
193
197
  onChange={changeType}
194
198
  value={selectedType}
195
- darkMode={true}
196
- formatOptionLabel={getPackageableElementOptionalFormatter({
197
- darkMode: true,
199
+ darkMode={!applicationStore.TEMPORARY__isLightThemeEnabled}
200
+ formatOptionLabel={getPackageableElementOptionFormatter({
201
+ darkMode: !applicationStore.TEMPORARY__isLightThemeEnabled,
198
202
  })}
199
203
  />
200
204
  </div>
@@ -242,47 +246,6 @@ const VariableExpressionEditor = observer(
242
246
  },
243
247
  );
244
248
 
245
- const QueryBuilderParameterDragLayer = observer(
246
- (props: { queryBuilderState: QueryBuilderState }) => {
247
- const { itemType, item, isDragging, currentPosition } = useDragLayer(
248
- (monitor) => ({
249
- itemType:
250
- monitor.getItemType() as QUERY_BUILDER_PARAMETER_TREE_DND_TYPE,
251
- item: monitor.getItem<QueryBuilderParameterDragSource | null>(),
252
- isDragging: monitor.isDragging(),
253
- initialOffset: monitor.getInitialSourceClientOffset(),
254
- currentPosition: monitor.getClientOffset(),
255
- }),
256
- );
257
-
258
- if (
259
- !isDragging ||
260
- !item ||
261
- !Object.values(QUERY_BUILDER_PARAMETER_TREE_DND_TYPE).includes(itemType)
262
- ) {
263
- return null;
264
- }
265
- return (
266
- <div className="query-builder__parameters__drag-preview-layer">
267
- <div
268
- className="query-builder__parameters__drag-preview"
269
- style={
270
- !currentPosition
271
- ? { display: 'none' }
272
- : {
273
- transform: `translate(${currentPosition.x + 20}px, ${
274
- currentPosition.y + 10
275
- }px)`,
276
- }
277
- }
278
- >
279
- {item.variable.variableName}
280
- </div>
281
- </div>
282
- );
283
- },
284
- );
285
-
286
249
  export const VariableExpressionViewer = observer(
287
250
  (props: {
288
251
  queryBuilderState: QueryBuilderState;
@@ -301,18 +264,23 @@ export const VariableExpressionViewer = observer(
301
264
  queryParameterState.removeParameter(variableExpressionState);
302
265
  const [, dragConnector, dragPreviewConnector] = useDrag(
303
266
  () => ({
304
- type: QUERY_BUILDER_PARAMETER_TREE_DND_TYPE.VARIABLE,
267
+ type: QUERY_BUILDER_PARAMETER_DND_TYPE,
305
268
  item: { variable: variableExpressionState },
306
269
  }),
307
270
  [variableExpressionState],
308
271
  );
309
- // hide default HTML5 preview image
310
- useEffect(() => {
311
- dragPreviewConnector(getEmptyImage(), { captureDraggingState: true });
312
- }, [dragPreviewConnector]);
272
+ useDragPreviewLayer(dragPreviewConnector);
273
+
313
274
  return (
314
275
  <div className="query-builder__parameters__parameter" ref={dragConnector}>
315
- <QueryBuilderParameterDragLayer queryBuilderState={queryBuilderState} />
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
+ />
316
284
  <div className="query-builder__parameters__parameter__content">
317
285
  <div className="query-builder__parameters__parameter__icon">
318
286
  <div className="query-builder__parameters__parameter-icon">